能力值:
( LV4,RANK:50 )
|
-
-
2 楼
cmp指令参照sub指令
eflags是一样的
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
分为有符号 和无符号,谁给我详细说下啊。最好有个例子。,
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
比效指令 CMP(compare)
CMP OPRD1,OPRD2
指令功能:
对两数进行相减,进行比较
指令说明:
1. OPRD1为任意通用寄存器或存储器操作数
OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.
2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,
而只是比较.因而不改变OPRD1和OPRD2的内容,该指令用于改变标志位
3. 示例: CMP AL,20
CMP DX,CX
CMP AX,DATA1[BX]
CMP BATE[DI],BX
4. 以CMP DX,CX为例,对标志位的影响如下:
(1) (DX)=(CX)时,则ZF=1; ZeroFlag = 1
(2) 两个无符号数比较:
若(DX)>=(CX)时,则CF=0,即无借位
例如 10 - 8 = 2 不用借位
1010B - 1000B = 10B
若(DX)<(CX)时,则CF=1
例如 8 - 10 = 14 需要借位
1000B - 1010B = 1110B [由于需要向高位借位,所以CF=1]
(3) 两个带符号数比较
对带符号数判断大小可通过溢出标志OF及符号标志SF共同判断
SF = 0/1,这个知道吧, 0表示位正数,1表示负数
当 OF=0,即无溢出时,
若SF=0,则(DX)>(CX)
7 - 4 = 3
0111B - 0100B = 0011B
若SF=1,则(DX)<(CX)
4 - 7 = -3
0100B -0111B = 1011B
当 OF=1,即有溢出时,
若SF=1,则(DX)>(CX)
-5 - (-7) = 2
1101B - 1111B = 1110B
若SF=0,则(DX)<(CX)
-7 - (-5) = -2
1111B - 1101B = 0010B
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
学习了新内容,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这个很容易
.
|
能力值:
( LV8,RANK:120 )
|
-
-
7 楼
我把答案簡化如下,方便閱讀和理解:
CMP A,B 實際上是去做A-B的運算,所以會影響到三個 Flag => ZF CF SF
分下列兩種情況:
1. A,B 為 unsigned integer (例如以短整數來說其範圍是 0 to 65,535)
若A=B 則ZF=1 CF=0
若A>B 則ZF=0 CF=0
若A<B 則ZF=0 因為結果為負數,所以CF=1
2. A,B 為 signed integer (例如以短整數來說其範圍是 -32,768 to +32,767)
若A=B 則ZF=1 CF=0 SF=0
若A>B 則ZF=0 CF=SF
若A<B 則ZF=0 CF<>SF
這樣看起來是不是容易閱讀些
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
感谢各位同学 细心指导。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
学习了 谢谢各位的热心回复
|