adc sbb cmp与条件转移

1.adc和sbb是带进(借)位加减法,理论上可以实现任意长度数据加减法
下面是示例:
assume cs:code,ds:data
data segment
dw    1122h,3344h,5566h,7788h
dw    1020h,3040h,5060h,7080h
data ends
code segment
start:
mov ax,data
mov ds,ax
xor si,si
mov di,8
mov cx,4

sub ax,ax        ;CF清零
s:    mov ax,[di]
adc [si],ax
inc si            ;不能用add,add会影响CF,而inc与loop不会
inc si
inc di
inc di
loop s

mov ax,4c00h
int 21h
code ends
end start
2.cmp ax,bx    相当于sub ax,bx 只是仅根据结果改变标志位,并不真正运算写入
3.无符号数条件转移:
je
jne
jb
jnb
ja         zf=0并且cf=0
jna         zf=1或cf=1
4.有符号数条件转移:
JG∶——(有符号数比较)大于转移(等价JNLE)。SF和OF同号,且ZF=0 时转移。(段内直接短转移)

JGE∶ ——(有符号数比较)大于或等于转移(等价于JNL)。 当SF和OF同号,或ZF=1, 则转移(段内直接短转移)。

JL∶ ——(有符号数比较)小于转移(等价于JNGE)。当SF和OF异号,且ZF=0 时转移(段内直接短转移)。

JLE∶——(有符号数比较)小于或等于转移(等价于JNG)。当SF和OF异号或ZF=1时转移(段内直接短转移)。

JNG∶——(有符号数比较)不大于转移(等价于JLE)。当SF和OF异号或ZF=1时转移(段内直接短转移)。

JNGE∶——(有符号数比较)不大于且不等于转移(等价于JL)。当SF和OF异号,且ZF=0 时转移(段内直接短转移)。

JNL∶——(有符号数比较)不小于时转移(等价于JGE)。 当SF和OF同号,或ZF=1, 则转移(段内直接短转移)。

JNLE∶——(有符号数比较)不小于且不等于转移(等价JG)。SF和OF同号,且ZF=0 时转移。
简记口诀:(zf=0时)sf和of:同号>,异号<
5.*溢出时SF位的值和真实结果的符号相反。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>