文档介绍:第2章指令系统及汇编语言程序设计
8088/8086的寻址方式
8088/8086的指令系统
、
、
汇编语言
本次课内容
2. 条件转移指令
根据指定的条件确定程序是否发生转移。其通用格式为:
Jcc label ;cc条件满足, 转移IP←IP+8位位移量
;否则,顺序执行
label是一个标号、一个8位位移量,指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移
label只支持短程转移(当前代码段内± 127范围)
的分类
Jcc指令不影响标志,但要利用标志
根据利用的标志位不同,分成三种情况:
⑴判断单个标志位状态—单个OF、SF、ZF、PF、CF
⑵比较无符号数高低—组合CF、ZF
⑶比较有符号数大小—组合OF、SF、ZF
Jcc指令实际虽然只有16条,但却有30个助记符
条件转移指令的含义
采用多个助记符,目的是为了方便记忆和使用
OF
11
15 12
DF
10
IF
9
TF
8
SF
7
ZF
6
5
AF
4
3
PF
2
1
CF
0
状态标志寄存器 PSW
条件转移指令的含义
JZ/JE Jump on Zero/Equal
JNZ/JNE Jump on Not Zero/Equal
JS Jump on Sign
JNS Jump on Not Sign
JP/JPE Jump on Parity/Parity Even
JNP/JPO Jump on Not Parity/Parity Odd
JO Jump on Overflow
JNO Jump on Not Overflow
JC/JB/JNAE Jump on Carry/Below/Not Above or Equal
JNC/JNB/JAE Jump on Not Carry/Not Below/Above or Equal
JBE/JNA Jump on Below or Equal/Not Above
JNBE/JA Jump on Not Below or Equal/Above
JL/JNGE Jump on Less/Not Greater or Equal
JNL/JGE Jump on Not Less/Greater or Equal
JLE/JNG Jump on Less or Equal/Not Greater
JNLE/JG Jump on Not Less or Equal/Greater
(1) 判断单个标志位状态
⑴ JZ/JE和JNZ/JNE
利用零标志ZF,判断结果是否为零(或相等)
⑵ JS和JNS
利用符号标志SF,判断结果是正是负
⑶ JO和JNO
利用溢出标志OF,判断结果是否产生溢出
⑷ JP/JPE和JNP/JPO
利用奇偶标志PF,判断结果中“1”的个数是偶是奇
⑸ JC/JB/JNAE和JNC/JNB/JAE
利用进位标志CF,判断结果是否进位或借位
判断是否为字母Y;寄存器AL中是字母Y(含大小写),则令AH=0,否则令AH=-1
cmp al,’y’ ;比较AL与小写字母y
jz next ;相等,转移
cmp al,’Y’;不相等,继续比较AL与大写字母Y
jz next ;相等,转移
mov ah,-1 ;不相等,令AH=-1
jmp done ;无条件转移指令
next: mov ah,0 ;相等的处理:令AH=0
done: ……
(2)比较无符号数高低-- ZF、CF
两无符号数A、B的大小用高(Above)、低(Below)表示,需要利用CF确定高低(高于AB CF=0 ; 低于 AB CF= 1 )、利用ZF标志确定相等(相等 A=B ZF=1 )
两数的高低分成4种关系,对应4条指令
JBE / JNA:目的操作数低于等于(不高于)源操作数
A≤ B CF=ZF=1
JNBE / JA:目的操作数不低于等于(高于)源操作数
AB CF=ZF=0
JB /JNAE:目的操作数低于(不高于等于)源操作数A< B
JNB / JAE:目的操作数不低于(高于等于)源操作数A≥ B
(3) 比较有符号数大小----OF、SF、ZF
组合OF、SF标志判断有符号数的大(Greater大于:SF⊕OF=0 SF、OF同为1或0)小(Less),利用ZF标志确定相等与否(相等:ZF=1 )
两数的大小分成4种关系,分别对应4条指令
JL(JNGE):目的操作数小于(不大于等于)源操作数
JNL(