测试平台为x86-32bit
。
我知道在movsbl
上,我们有两个操作码movzbl
和%eax = 0x12345678
%edx = 0xAAAABBBB
MOVB %dh, %al %eax = 0x123456BB
MOVSBL %dh, %eax %eax = 0xFFFFFFBB
MOVZBL %dh, %eax %eax = 0x000000BB
,它们具有以下语义:
mov %dl, 0x2c(%esp)
以上示例来自here。
然后我对以下指令的语义感到困惑:
mov
上述movsbl
的确切含义是什么,是否等于movzbl
?或等于{{1}}?或者都不是?
答案 0 :(得分:1)
如果没有明确提供操作数大小,大多数汇编程序将根据操作数大小计算操作类型。因此,在这种情况下,movb %dl, 0x2c(%esp)
相当于b
,一个简单的1字节移动,从单字节寄存器dl
中推导出access_token
后缀。
32位寄存器的原因:它存储存储单元的地址;操作数大小结果不匹配(因为内存位置可以解释为任何大小)。