Hri*_*ali 4 x86 assembly opcodes
我正在查看说明及其相应的操作码.诸如"je"和"jz"之类的指令具有相同的操作码:
je,jz - 0x74 (8 bit)
je,jz - 0x0f84 (16/32 bit).
Run Code Online (Sandbox Code Playgroud)
为什么我们有这样的冗余指令?
是因为它使汇编编码更容易吗?也就是说,在某些情况下更容易理解"跳跃如果相等",而在其他情况下则更容易理解"跳跃于零".但是这些天我们并没有真正编写汇编代码,它有帮助吗?
我们在学校所有的计算机体系结构书中的旧引用是什么?"x86没有任何问题,只是很多它没有意义."
回答你的问题:可能因为"跳零"和"跳等于"都是根据前一条指令的结果跳转到目标地址.也就是说,前一指令的结果将零标志(ZF)设置为1.JZ可以用于"数学"而JE可以用于"比较".因此从程序员的角度来看,有两个助记符是有道理的.也许早期的汇编作者试图模仿另一种流行的汇编语言.
看一下Jcc的英特尔x86手册(条件跳转指令集),我们可以看到JZ和JE本质上都意味着"如果相等则跳转接近(ZF = 1)".然后文档实际上提到这对于某些跳转指令集是常见的.
因为状态标志的特定状态有时可以用两种方式解释,所以为某些操作码定义了两个助记符.例如,JA(如果上面的跳转)指令和JNBE(如果不低于或等于跳转)指令是操作码77H的备用助记符.
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |