为什么使用两个内存操作数的mov/cmp代替cmp? [英] Why mov/cmp instead of cmp with two memory operands?

查看:0
本文介绍了为什么使用两个内存操作数的mov/cmp代替cmp?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在查看二进制搜索程序代码时遇到了以下语句

l1: mov si,low_
    cmp si,high_

为什么需要存储Low_In Si,然后与HIGH_进行比较? 我们不能直接将cmp low_,High_

推荐答案

您不能写入cmp low_, high_

对于此类问题,请始终参考官方说明,例如https://www.felixcloutier.com/x86/cmp。请注意,cmp具有形式cmp r/m16, r16,对于cmp r/m16, r16,第一个操作数可以是寄存器或内存,第二个操作数必须是寄存器;cmp r16, r/m16则相反。但没有像cmp r/m16, r/m16cmp m16, m16这样的东西。因此cmp low_, high_将尝试汇编不存在的指令,您的汇编程序将拒绝该指令。

这是大多数x86算术指令的情况:其中一个操作数可以是内存引用,但不能同时是两个。要对内存中的两个值进行操作,必须先将其中一个值加载到寄存器中,如下面的代码所示。

这篇关于为什么使用两个内存操作数的mov/cmp代替cmp?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆