汇编语言寄存器取值问题求解:基于给定变量的指令执行结果
x86汇编指令执行结果解析
变量定义
Section .data var1 DB -4,-2,3,1 ; DB:字节类型(8位),每个元素占1字节 var2 DW 1000h,2000h,3000h,4000h ; DW:字类型(16位),每个元素占2字节 var3 DW -16,-42 var4 DW 1,2,3,4,5 ; 5个16位字元素,按顺序存储在内存中
各指令执行结果分析
a.
Mov edx, var4var4是DW类型变量,变量名指向第一个元素的内存地址。该指令将var4的第一个16位元素值1(0001h)零扩展到32位寄存器edx,最终edx = 00000001h。b.
Movzx edx, var2movzx为零扩展传送指令,会将源操作数的无符号值高位补0后填充到目标寄存器。var2的第一个16位元素是1000h,零扩展到32位后,edx = 00001000h。c.
Mov edx, [var4+4]var4的每个DW元素占2字节,var4+4指向var4起始地址偏移4字节的内存位置。该指令将此处的16位值零扩展到32位寄存器edx,最终edx = 00000002h。d.
Movsx edx, var1movsx为符号扩展传送指令,会根据源操作数的符号位(最高位)填充目标寄存器的高位。var1的第一个元素是字节类型的-4,其8位补码为0FCh(最高位为1),符号扩展到32位时所有高位填充1,最终edx = FFFFFFFCh。
内容的提问来源于stack exchange,提问作者loctp
相关产品推荐
相关产品推荐

