PCI 주소를 구성하고 싶습니다. 어셈블리 언어로 EAX (AX가 아님)에 16 비트를 어떻게 쓸 수 있습니까 ?? 예 : 0b1000000000000001최고 16 비트 EAX
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
감사 쓰기!
PCI 주소를 구성하고 싶습니다. 어셈블리 언어로 EAX (AX가 아님)에 16 비트를 어떻게 쓸 수 있습니까 ?? 예 : 0b1000000000000001최고 16 비트 EAX
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
감사 쓰기!
그것은 높은 16 비트에 액세스 할 수 없습니다,하지만 당신은 약간의 트릭을 사용할 수 있습니다 : 이것은 당신이 하위 16 개 비트를 파괴하지 않고 원하는 값으로 상위 16 개 비트를 설정
push ax
mov ax, 1000000000000001b
shl eax, 16
pop ax
합니다.
여기에는 여러 가지 방법이 있습니다. 로 (하드 코딩 된 값을
rol eax,16 ; rol/ror mov ax,0b1000000000000001 rol eax,16 ; rol/ror
: 좌우로 회전
push eax mov [esp+2],word 0b1000000000000001 ; some assemblers want word ptr pop eax
은, 스택이 필요하지만,하지 않는 것이 플래그를 수정 : 스택을 사용하여
는, 플래그를 수정하지 않습니다 질문에서) or
/xor
/add
과 함께 and
을 사용할 수도 있습니다. 하드 코드되지 않은 값의 경우이 메서드를 사용하려면 다른 레지스터 나 메모리에서 값을 이동해야합니다.
and eax,0x0000ffff or eax,0x80010000 ; or/xor/add
EAX는 전체 32 비트로만 액세스 할 수 있으므로 값. –
마스크 된 값 ('10000000000000010000000000000000'과 같은 것)으로 'OR'하는 것은 어떻습니까? – Linuxios
'OR '은 결정의 하나이지만, 스택에 대해서는 무엇을 사용합니까? – Vanzef