汇编语言中,cmp指令怎么用比如cmp ax,bx ax大于bx怎么跳转,小于又怎么跳,等于呢

汇编语言中,cmp指令怎么用比如cmp ax,bx ax大于bx怎么跳转,小于又怎么跳,等于呢,第1张

CMP OPR1 , OPR2指令只是对操作数OPR1 , OPR2之间运算比较,不保存结果。指令本身不进行跳转,只是根据结果设置相关的条件标志位(SF、ZF、CF、OF),CMP指令后往往跟着条件转移指令,实现根据比较的结果产生不同的程序分支的功能。

格式:CMP OPR1 , OPR2

执行操作:(OPR1)-(OPR2)

功能:该指令与SUB指令一样执行减法的操作,但它并不保存运算结果,只是根据结果设置相关的条件标志位(SF、ZF、CF、OF)。CMP指令后往往跟着条件转移指令,实现根据比较的结果产生不同的程序分支的功能。

扩展资料:

跳转相关的条件跳转指令:

1、JA/JNBE DEST指令:转移条件是CF=0 AND ZF=0,含义是无符号数A>B,英文表示是JMP above (not below or equal)。

2、JAE/JNB DEST指令:转移条件是CF=0,含义是无符号数A≥B,英文表示是JMP above or equal (not below )。

3、JB/JNAE DEST指令:转移条件是CF=1,含义是无符号数A<B,英文表示是JMP blow (not above or equal)。

4、JBE/JNA DEST指令:转移条件是CF=1 OR ZF=1,含义是无符号数A≤B,英文表示是JMP blow or equal (not above)。

参考资料来源:百度百科-CMP指令

参考资料来源:百度百科-条件转移指令

CMP R0,#0:比较R0是否为0

CMPNE R1,#1 :若R0不为0,则比较R1是否为1;如果R0=0则跳过下面这两句;

ADDEQ R2,R0,R1:若R0不为0且R1为1,则执行 R2 = R0+R1;否则继续往下执行

CMP是比较指令。这个就是十进制常数2010与寄存器D10中的数据进行比较。

当K2010大于D10时,M10为ON

当K2010等于D10时,M11为ON

当K2010小于D10时,M12为ON

望采纳。。。。。。

CMP是比较指令,用于16位数据比较,比较的数据范围是-32768到+32767,比较数据类型可以是常熟K,H等,可以是数据寄存器D,也可以是计数器C,可以是时间继电器T,还可以是连续的位址(如K1X0,K2Y0,K3M0,K2S0等)。

指令用法如下:

CMP D0 D2 M0

该指令为比较指令,将比较的结果<,=,>三种结果分别告知给M0,M1,M2。

如果D0>D2,M0=1

如果D0=D2,M1=1

如果D0<D2,M2=1

所以使用这个指令会连续占用以M0为首的三个连续的位地址。

另外,若比较数据范围大于65535,请使用DCMP,这个是双字比较指令,用法和CMP一样,只不过比较的数据都是双字32位数据,所以使用时不要出现

DCMP D0 D1 M0

(转自百度知道)

格式:CMP OPRT1,OPRT2

功能:OPRT1-OPRT2

说明:OPRT1和OPRT2可以是寄存器或存储器,但不能同时为存储器,OPRT2还可以为立即数。

举例:CMP AL,BL

CMP AL,[2000H]

CMP AL,12H

三菱plc的CMP指令意思就是单芯片多处理器指令,可以将对称多处理器集成到同一芯片内,各个处理器并行执行不同的进程。

CMP指令下的结构被设计拥有多个处理器核,每个核都比较简单,有利于优化设计,因此在一定程度上更具发展前途。

据了解,IBM的Power4芯片和Sun的MAJC5200芯片都采用了CMP指令,从而会在处理器内部共享缓存,提高缓存利用率,同时简化其中设计的复杂度。

扩展资料

CMP指令的相关流程

1、打开三菱plc的主界面,需要在左母线右侧梯形图输入LD X0。

2、下一步,继续在X0的触点后梯形图输入CMP D0 D1 Y0。

3、这个时候如果没问题,就分别按转换按钮编译和按模拟按钮仿真。

4、这样一来会得到图示的结果,即可使用CMP指令了。

参考资料来源:百度百科-三菱plc

参考资料来源:百度百科-CMP指令

cmp是比较指令, cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

比如:mov ax,8

mov bx,3

cmp ax,bx

执行后:ax=8,ZF=0,PF=1,SF=0,CF=0,OF=0

通过cmp指令执行后,相关标志位的值就可以看出比较的结果。

cmp ax,bx的逻辑含义是比较ax,bx中的值。如果执行后:

ZF=1则AX=BX

ZF=0则AX!=BX

CF=1则AX<BX

CF=0则AX>=BX

CF=0并ZF=0则AX>BX

CF=1或ZF=1则AX<=BX

CPU在执行cmp指令的时候,也包含两种含义:进行无符号运算和进行有符号数运算。

cmp ah,bh

如果ah=bh则ah-bh=0所以ZF=1

如果ah≠bh则ah-bh≠0所以ZF=0

所以我们根据cmp指令执行后ZF的值,就可以知道两个数据是否相等。如果ah<bh则可能发生什么情况呢?

对于有符号数运算,在ah<bh情况下,ah-bh显然可能引起SF=1既结果为负比如:

ah=1,bh=2则ah-bh=0FFH,0FFH为-1的补码,因为结果为负,所以SF=1。

ah=0FEH,bx=OFFH;则ax-bx=-2-(-1)=OFFH,因为结果为负,所以SF=1。

再看两个例子:

ah=22H,bh=OAOH则ah-bh=34-(-96)=82H,82H是-126的补码。

所以SF=1。这里虽然SF=1,但是并不能说明ah<bh因为显然34>-96

两个有符号数A和B相减,得到的是负数,那么可以肯定A<B这个思路没有错误,关键在于我们根据什么来断定得到的是一个负数,CPU将cmp指令得到的结果记录在flag的相关标志位中,我们可以根据指令执行后,相关标志位的值来判断比较的结果。单纯的考察SF的值不可能知道结果的正负。因为SF记录的只是可以在计算机中存放的相应位数的正负,cmpah,bh执行后,SF记录的是ah-bh所得到的8位结果数据的正负,虽然这个结果没有在我们能够使用的寄存器或内存单元中保存,但是在指令执行的过程中,它暂存在cpu内存的暂存器中。

所得到的相应结果的正负,并不能说明,运算所应该得到的结果的正负。这是因为在运算的过程中可能发生溢出。如果这样的情况发生,那么SF的值就不能说明任何问题。比如

mov ah,22H

mov bh,0A0H

subah,bh

结果SF=1运算实际得到的结果是ah=82H,但是在逻辑上,运算所应该得到的结果是34-(-96)=130就是因为130这个结果作为一个有符号Y数超出了-128~127这个范围,在ah中不能表示,而ah中的结果被CPU当作有符号数解释为-126。而SF被用来记录这个实际结果的正负所以SF=1

又比如

mov ah,0A0H

mov bh,0CBH

cmp ah,bh

结果SF=1,运算ah-bh实际得到的结果是D5H但是在逻辑上,运算所应该得到的结果是160- -53=213,(隐身人注:对于有符号数,方位是-128--127。所以这里正确是:(-96)-(-53)=-43,得到值为:0D5H,这里SF标志位指示并没错)SF记录实际结果的正负,所以SF=1。但SF=1不能说明在逻辑上运算所得到的正确结果。

但是逻辑上的结果的正负才是cmp指令所求的真正结果,因为我们就是要靠它得到两个操作对象的比较信息。所以cmp所做的比较结果,不是仅仅靠SF就能记录的,因为它只能记录实际结果的正负。

我们考虑下,两种结果之间的关系,实际结果的正负,和逻辑上真正结果的正负,它们之间有多大的距离呢?总上面的分析中我们知道,实际结果的正负,之所以不能说明逻辑上真正结果的正负,关键的原因在于发生了溢出。如果没有溢出发生的话,那么,实际结果的正负和逻辑上真正结果的正负就一致了。

所以我们应该在考察SF的同时考察OF就可以得知逻辑上真正结果的正负同时就可以知道斤毫秒度的结果。

下面我们以cmpah,bh为例总结一下CPU执行cmp指令后SF和PF的值的如何来说明比较的结果的:

1)如果SF=1而OF=0说明没有溢出逻辑上真正结果的正负=实际结果的正负,因实际结果为负所以逻辑上真正的结果为负则ah<bh

2)如果SF=1而OF=1说明实际结果为负并且有溢出,则实际结果和真正结果不等,因SF=1实际结果为负。则:如果因为溢出导致了实际结果为负。那么逻辑上真正的结果必然为正。ah<bh

3)如果SF=0而OF=1说明实际结果为正并且有溢出,则实际结果和真正结果不等,因SF=0,实际结果非负。则:如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负。这样说明ah<bh

4)如果SF=0而OF=0说明没有溢出,逻辑上真正结果的正负=实际结果的正负,因SF=0实际结果非负,所以逻辑上真正的结果非负,所以ah>=bh

以上就是关于汇编语言中,cmp指令怎么用比如cmp ax,bx ax大于bx怎么跳转,小于又怎么跳,等于呢全部的内容,包括:汇编语言中,cmp指令怎么用比如cmp ax,bx ax大于bx怎么跳转,小于又怎么跳,等于呢、谁能告诉我下面的指令是什么意思 CMP R0,#0 CMPNE R1,#1 ADDEQ R2,R0,R1、plc指令CMP k2010 d10 m10是啥意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:聚客百科

原文地址: http://juke.outofmemory.cn/life/3830427.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存