首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么nasm和yasm为mov r16,word [r64 - 3]指令生成67个操作码?

为什么nasm和yasm为mov r16,word [r64 - 3]指令生成67个操作码?
EN

Stack Overflow用户
提问于 2018-03-25 14:28:06
回答 1查看 159关注 0票数 0

x86-64程序集中,我有以下说明

代码语言:javascript
复制
mov        dx, word [esi-5]

Nasm 2.13.03生成:

代码语言:javascript
复制
66 67 8B 56 FB 

yasm 1.3.0生成:

代码语言:javascript
复制
67 66 8B 56 FB 

66 67操作码是修饰符,因此8B 56 FB本身是:

代码语言:javascript
复制
 mov        edx, dword [rsi-5]

我注意到:

代码语言:javascript
复制
66 8B 56 FB 

还评价如下:

代码语言:javascript
复制
mov        dx, word [rsi-5]

我有两个问题:

1)为什么nasm & yasm会发出这个67操作码字节填充?(67本身还不足以将edx简化为dx,它需要包含66 )

( 2)在nasm / yasm中是否有一种不需要 67的较短的4字节指令67

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-25 15:01:39

这一问题使假设66 8B 56 FB

代码语言:javascript
复制
mov        dx, word [rsi-5] 

等于

代码语言:javascript
复制
`66 67 8B 56 FB` or `67 66 8B 56 FB` 

mov        dx, word [esi-5] 

66edx还原为dx

67[rsi-5]还原为[esi-5]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49476930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档