【发布时间】:2020-04-12 17:46:44
【问题描述】:
我是 NASM 和 x86_64 程序集的新手。我对 cmp 指令的 wiki document 感到困惑。根据文档操作数可以是以下任一。
cmp 减数,减数
减分
AL/AX/EAX(仅当减数为立即数时)
注册
记忆减数
注册
立即
记忆
当我尝试编译下面的代码 sn-p.
var_1 dd 100
var_2 dd 200
cmp dword[var_1], dword[var_2]
它抛出一个错误:操作码和操作数的组合无效
但是在我将 cmp 指令更改为下面的指令后,它编译得很好。
var_1 dd 100
var_2 dd 200
mov eax, [var_1]
cmp eax, dword[var_2]
但是根据 wiki 文档,两个操作数都可以是内存,如果是这样,那么应该编译第一个代码 sn-p。如果有人清楚地向我解释这种语法,那将非常有帮助。
【问题讨论】:
-
文档的意思是 either 操作数可以是内存。这并不意味着两者,但这并不清楚。