我想形成一个PCI地址。如何用汇编语言将16位写入EAX(而不是AX)? 示例:写入0b1000000000000001
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
谢谢!
答案 0 :(得分:3)
不可能访问更高的16位,但你可以使用一个小技巧:
push ax
mov ax, 1000000000000001b
shl eax, 16
pop ax
这会将高16位设置为您想要的任何值,而不会破坏低16位。
答案 1 :(得分:3)
有很多方法可以做到,这里有一些。
使用堆栈,不会修改任何标志:
push eax mov [esp+2],word 0b1000000000000001 ; some assemblers want word ptr pop eax
向左或向右旋转,不需要堆叠,但修改标志:
rol eax,16 ; rol / ror mov ax,0b1000000000000001 rol eax,16 ; rol / ror
对于硬编码值(如问题所示),您还可以and
/ or
/ xor
使用add
。对于非硬编码值,您需要将值移到其他寄存器或内存中以使用此方法:
and eax,0x0000ffff or eax,0x80010000 ; or / xor / add