汇编语言中如何比较两个寄存器或变量的值?
x86汇编中比较两个内存变量的正确方式
x86架构的cmp指令不支持两个内存操作数直接对比,所以你尝试的cmp [num], [num1]或cmp [eax], [ebx]这类写法会编译失败——这是x86指令集的硬件设计限制,绝大多数算术/逻辑指令(包括cmp)都只允许最多一个操作数来自内存,另一个必须是寄存器或立即数。
可行的解决方法
双寄存器中转比较(你代码中已采用的方式)
先把两个内存变量的值分别加载到寄存器,再对寄存器进行比较:mov eax, [num] mov ebx, [num1] cmp eax, ebx因为你的变量是1字节大小(
resb 1),用8位寄存器(如al、bl)会更高效,避免冗余的高位操作:mov al, [num] mov bl, [num1] cmp al, bl单寄存器中转比较
只加载其中一个变量到寄存器,直接和另一个内存变量对比,减少一条指令:mov al, [num] cmp al, [num1]
补充说明
你代码里的逻辑是正确的,当前的写法已经能完成两个变量的比较需求。如果想优化指令数量,可以选择第二种方法。
内容的提问来源于stack exchange,提问作者Noelle472
相关产品推荐
相关产品推荐

