我想形成一个PCI地址。如何用汇编语言将 16 位写入 EAX(而不是 AX)?示例:写入 0b1000000000000001
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
谢谢!
我想形成一个PCI地址。如何用汇编语言将 16 位写入 EAX(而不是 AX)?示例:写入 0b1000000000000001
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
谢谢!
有很多方法可以做到,这里有一些。
使用堆栈,不修改任何标志:
推入 mov [esp+2],word 0b1000000000000001 ; 一些汇编程序想要单词 ptr 流行音乐
向左或向右旋转,不需要堆栈,但修改标志:
角色 eax,16 ; 滚/滚 移动斧头,0b1000000000000001 角色 eax,16 ; 滚/滚
对于硬编码值(如问题中所示),您还可以使用and
with or
/ xor
/ add
。对于非硬编码值,您需要将值移到其他寄存器或内存中才能使用此方法:
和 eax,0x0000ffff 或 eax,0x80010000 ;或/异或/加
无法访问更高的 16 位,但您可以使用一个小技巧:
push ax
mov ax, 1000000000000001b
shl eax, 16
pop ax
这会将高 16 位设置为您想要的任何值,而不会破坏低 16 位。