![]() |
1
18
如果比较两个寄存器,使用哪种操作码并不重要。唯一的区别是当比较寄存器和内存操作数时,因为使用的操作码决定从中减去哪个。
至于存在的原因:x86指令格式使用modr/m字节来表示内存地址或寄存器。每条指令只能有一个modr/m值,这意味着它只能访问一个内存地址(不包括像movsb这样的特殊指令)。所以这意味着不可能有一个将军
|
![]() |
2
3
它是 redundancy of x86 . 像这样的案例多得多。编译器/汇编程序可以自由使用任何有效的操作码 一些汇编程序允许您选择要发出的操作码。例如,在gas上可以附加“.s”以使用其他指令编码
|
![]() |
3
2
cmp-ecx,eax是ecx-eax,cmp-eax,ecx是eax-ecx。根据与哪个操作数进行比较,标志的设置有所不同。当然,如果不是因为x86指令的mod/r-m结构,您可能只需要使用其中一个就可以了。 |
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 2 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 2 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 2 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 2 年前 |