当前位置:文档之家› 程序控制指令

程序控制指令


2020/4/22
3
续表(3)
类别
指令名称
指令格式
条件转移
小于或等于/不大于转
(有符号数 OF/SF/ZF)

溢出转移
JLE/JNG 目标标号 JO 目标标号
不溢出转移
JNO 目标标号
条件转移 (OF/PF/SF)
奇偶位为0/奇偶性为 奇转移
奇偶位为1/奇偶性为 偶转移
符号标志位为0转移
JNP/JPO 目标标号 JP/JPE 目标标号
(3)LOOPNZ (LOOPNE) 类比 串前缀REPNZ/NE
格式:LOOPNZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
2020/456个内存单元均减去1, 若发现某个单元减为0则立即退出循环,其后的 单元不再减1。程序段如下:(逻辑地址为 1A00:0H)
高于/不低于也不等于转移 JA/JNBE 目标标号 高于或等于/不低于转移 JAE/JNB 目标标号 低于/不高于也不等于转移 JB/JNAE 目标标号 低于或等于/不高于转移 JBE/JNA 目标标号
2020/4/22
2
类别
条件转移 (CF/ZF)
条件转移 (有符号数) (OF/SF/ZF)
续表(2)
;小于或等于则转移(dist≤src)
转移条件为: (SF⊕OF=1)∨ZF=1
2020/4/22
21
③根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。
2020/4/22
22
条件转移指令举例:以十六进制数形式显示BX中的内容。
MOV BX, 1234H MOV CH, 4 ROT: MOV CL, 4 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 7 DISP: MOV DL, AL MOV AH, 2 INT 21H DEC CH JNZ ROT MOV DL, 48H MOV AH, 2 INT 2020/4/22 21H
在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI]
表示所取得的目标地址是一个字。
2020/4/22
12
③段间直接转移 在指令中直接给出要转移到的目的段地
址和偏移地址。 例:JMP 2000H:1000H ;远距离
执行时,(IP)←1000H,(CS)←2000H
注意:直接地址为符号地址时,段间直接转 移指令中的符号地址前应加操作符FAR PTR。
指令名称
指令格式
进位位为1转移
JC 目标标号
进位位为0转移
JNC 目标标号
等于/结果为0转移
JE/JZ 目标标号
不等于/结果不为0转移 JNE/JNZ 目标标号
大于/不小于也不等于转移 JG/JNLE 目标标号
大于或等于/不小于转移 JGE/JNL 目标标号
小于/不大于也不等于转移 JL/JNGE 目标标号
① 段内直接转移: JMP disp
指令中给出的8/16位的位移量加到IP, CS保持不变。
② 段内间接转移: JMP reg / mem
reg/mem中的16位偏移地址送IP, CS保持不变。
③ 段间直接转移 JMP segment : offset
指令中给出的16位的段和16位的偏移地址送到CS和IP。
JMP BX




JMP WORD PTR[BX] CS : IP 指令码
2020/4/22
IP BX=1200

XXH

XXH



11
例2:JMP [BX+DI] 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H
; 最后显示’H’
23
2.循环控制指令
• 用在循环程序中以确定是否要继续循环。 • 循环次数通常置于CX中。 • 转移的目标应在距离本指令-128~+127的
范围之内(短跳转)。 • 循环控制指令不影响标志位。
2020/4/22
24
(1) LOOP
格式:LOOP label 类比 串前缀REP 操作:(CX)-1→CX;
3.3.5 程序控制指令
控制转移指令分为: –转移指令 –循环控制指令 –调用和返回指令 –中断指令
2020/4/22
1
表4-6 控制转移类指令
类别
指令名称
指令格式
无条件转移
无条件转移
JMP目标标号
调用/返回
过程调用
CALL 过程名
调用/返回
过程返回
RET 弹出值
条件转移 (无符号数)
(CF/ZF)
2020/4/22
20
判断有符号数的大小
JG
;大于则转移(dist>src)
转移条件为: (SF⊕OF=0)∧ZF=0
JGE
;大于或等于则转移(dist≥src)
转移条件为: (SF⊕OF=0)∨ZF=1
JL
;小于则转移(dist<src)
转移条件为: (SF⊕OF=1)∧ZF=0
JLE
4000 DS
+) 1212 SI
41212
41212 41213 41214 41215
11111111 11101100
00 10 00 4A
DS:[SI]
1000 IP 4A00 CS
段间间接转移操作示意图
2020/4/22
17
(2)条件转移指令 - JXX
• 条件转移指令可实现程序的条件分支。 • 条件转移指令根据标志位的状态来决定是
MOV AX, 1A00H
MOV DS, AX
; 1A00H段
MOV DI, -1
MOV CX, 256
GOON: INC DI
DEC BYTE PTR[DI]
LOOPNZ GOON
HLT
2020/4/22
27
例2:在8000H开始的长度为1000字节的字符串中查找 ’S’,若找到,把其偏移地址记录在ADDR中,否则 ADDR单元置为0FFFFH。
中断 溢出时中断
INT 中断类型 INTO
中断返回
IRET 5
1.转移指令
➢转移指令的实质: 改变IP(或者CS和IP)的内容。
➢对标志位flags的影响: 所有转移指令不会影响标志位flags。
➢分类: 分为无条件转移和条件转移两种。
2020/4/22
6
(1) 无条件转移指令 - JMP
本指令无条件转移到指定的目标地址, 以执行 从该地址开始的程序段。根据设置CS、IP的方法 ,JMP指令可实现短\近\远距离跳转, 指令分成4 种情况。
; CH做循环计数器 ; CL做移位计数器 ; 将最高4位移到低4位
; 取出低4位 ; 转换为ASCII码 ; 与 ’9’ 比较 ; 若(AL)≤‘9’, 则转显示 ; 若(AL)>’9’, 再加7转为‘A’-‘F’ ; (DL)←字符
; 显示输出 ; 4个十六进制数显示完否? ; 没有, 循环
; ‘H’
例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。
2020/4/22
13
无条件段间转移
• 直接转移:
JMP FAR PTR Lable
IP
远地址标号
CS

JMP

XXH

XXH
段 1
XXH
XXH
2020/4/22


CS : IP= Label



2
14
④段间间接转移
转移的目的地址(段和偏移)在两个相 邻的字存储单元中。例如:
JMP DWORD PTR[SI] ; 远距离 设指令执行前:(DS)=4000H,(SI)=1212H,
(41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。
否进行分支转移。 • 格式:JXX label;xx为条件名称缩写 • 指令的转移范围为-128~+127字节(短跳转)。 • 主要的条件转移指令参见p142表3-7。
2020/4/22
18
① 根据单个标志位设置的条件转移指令
JB/JC
;低于,或CF=1,
则转移
JNB/JNC/JAE ;不低于,或CF=0,高于或等于, 则转移
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
注:LOOP指令与下面的指令段等价:
DEC CX JNZ label
2020/4/22
25
(2)LOOPZ (LOOPE) 类比 串前缀REPZ/E
格式:LOOPZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
JP/JPE JNP/JPO
;奇偶标志PF=1(偶), ;奇偶标志PF=0(奇),
则转移 则转移
JZ/JE JNZ/JNE
;结果为零(ZF=1), ;结果不为零(ZF=0),
则转移 则转移
JS
;SF=1,
JNS
;SF=0,
则转移 则转移
相关主题