Assembly 64位操作码
我的问题是: 指令MOV RBX,RCX由YASM+链接编译并链接为: 48小时89小时CBh 但在其他程序中,如notepad.exe(64位),相同的MOV RBX,RCX显示为:48h 8Bh D9h 两个操作码都对吗?那边有什么错误吗?或者发生了什么? 谢谢你的阅读。谢谢你的回答。两者都是正确的Assembly 64位操作码,assembly,x86-64,opcode,Assembly,X86 64,Opcode,我的问题是: 指令MOV RBX,RCX由YASM+链接编译并链接为: 48小时89小时CBh 但在其他程序中,如notepad.exe(64位),相同的MOV RBX,RCX显示为:48h 8Bh D9h 两个操作码都对吗?那边有什么错误吗?或者发生了什么? 谢谢你的阅读。谢谢你的回答。两者都是正确的 48h 89h CBh对应于REX.W+89/r,即MOV r/m64,r64 48h 8Bh D9h对应于REX.W+8B/r,即MOV r64,r/m64 由于RBX和RCX是(64位)寄存
48h 89h CBh
对应于REX.W+89/r
,即MOV r/m64,r64
48h 8Bh D9h
对应于REX.W+8B/r
,即MOV r64,r/m64
由于RBX
和RCX
是(64位)寄存器,因此它们与r64
和r/m64
都匹配。所以这两种编码都可以使用
表示设置了REX.W
位(64位操作数大小覆盖)的REX前缀。REX前缀从40h开始,W
位是第3位,因此是40h+8==48hW
- 89h/8Bh是操作码
是您必须在英特尔手册中名为“表2-1.16位ModR/M字节寻址格式”的表格中查找的内容。顶部是/r
-操作数,左侧是r
-操作数。因此,如果我们使用r/m
,我们会看到D9h
应该是r64
(表中没有列出RBX
,但您有一个64位操作数大小覆盖),而RBX
应该是r/m64
RCX