的指令系统控制转移指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ending: mov ah, 4ch int 21h
code ends end start
LOOPE/LOOPZ指令工作流程
循环体
CXCX-1
CX=0?
Y
N
N
ZF=0?
Y
LOOPNE/LOOPNZ指令工作流程
循环体
CXCX-1
CX=0?
Y
N
N
ZF=1?
▪ 指令格式:
LOOP 目标
指令功能:
自动进行循环次数的计数(即CXCX-1)后, 如计数寄存器CX≠0,则转相移当到于目这标两单条元指,令否:则顺序
执行。
DEC CX
说明:
JNZ/JNE 目标
此指令隐含使用CX作为循环计数器;
因此应注意先设置好CX的初始值。
LOOP指令工作流程
循环体
CXCX-1
区,其各单元内容任意。然后统计该区 中有多少个存储单元的内容小于或等于5 (按无符号数比较)。将统计结果放在 DL中。
参考答案:
data segment dat db 100 dup(?)
data ends code segment
assume cs:code, ds:data start: mov ax, data
2、条件转移指令
• 这18条指令又可分为三大类:
▪ 简单条件转移指令 ▪ 无符号数条件转移指令 ▪ 带符号数条件转移指令
表一 简单条件转移指令
标志位 CF ZF SF OF PF
指令
JC JNC JE / JZ JNE / JNZ JS JNS
JO JNO JP / JPE JNP / JPO
转移条件
三、循环指令
1.循环程序结构
初始化部分
循环控制部分
处理部分
修改计数器及指针 N
循环结束? Y
结束处理部分
2.为何需要循环?
• 简化程序的编制 • 简少程序对内存的占用。
3.如何实现循环?
• 使用条件转移指令:Jxx 目标 • 使用循环控制指令:LOOP 目标 等
循环指令
指令名称
测试条件
LOOP LOOPZ 或 LOOPE
1、无条件转移指令
• 格式:
JMP 目标
• 说明:
▪ 目标通常用标号来表达,根据转移的远 / 近、直接 / 间
接不同,可有以下几种格式:
• JMP 标号
;段内直接转移
• JMP CX
;段内间接转移
• JMP WORD PTR [BX]
;段内间接转移
• JMP FAR PTR 标号
;段间直接转移
• JMP DWORD PTR [BX][SI] ;段间间接转移
N
CX=0?
Y
例:计算:1+2+3+...+20。结果 存入AX寄存器。
CODE SEGMENT
ASSUME CS:CODE
START:MOV CX,0014H MOV AX,0
初始化部分
A: ADD AX,CX
处理部分
LOOP A
循环控制部分
CODE ENDS
END START
举例
• 在数据段定义一段长度为100字节的数据
Biblioteka Baidu
含意 A>B AB
JB / JNAE CF=1 AND ZF=0
A<B
JBE / JNA CF = 1 OR ZF = 1
AB
表三 有符号数条件转移指令
指令 JG / JNLE
转移条件 SF=OF 且 ZF=0
含意 A>B
JGE / JNL SF=OF 或 ZF=1
AB
JL / JNGE SF OF 且 ZF=0
mov ds, ax
参考答案(续):
mov si, offset dat mov dl, 0 mov cx, 100 next: cmp byte ptr [si], 5 jbe count inc si loop next jmp ending
count: inc dl inc si loop next
CF=1 CF=0 ZF=1 ZF=0 SF=1 SF=0
SF=1 SF=0 SP F=1 SF=0
含意
有进/借位 无进/借位
相等/等于0 不相等/不等于0
是负数
是正数
有溢出 无溢出
有偶数个‘1’ 有奇数个‘1’
表二 无符号数条件转移指令
指令 JA / JNBE JAE / JNB
转移条件 CF=0 且 ZF=0 CF=0 或 ZF=1
2、条件转移指令
• 基本格式:
JXX 目标
• 说明:
▪ 字母“J”后面的“XX”是指“条件”,如果条件成立,
则转移至“目标”处执行,否则顺序执行。
▪ 条件转移指令共18条,它们均以F寄存器中状态标志
位作为判断条件,但执行后均不影响各标志位。
▪ 此类指令都只能在以当前IP内容为中心的 -128 至
+127字节范围内转移(短转移)。超过要修改程序。
A<B
JLE / JNG SF OF 或 ZF = 1
AB
• 例子:已知三个带符号数存放在AX、BX、
CX寄存器中,编程求这三个数的最大值, 并存放在AX寄存器中。
CMP AX,BX
CMP AX,BX
JG CMPAXCX
JG CMPAXCX
MOV AX,BX
MOV AX,BX
CMPAXCX :
CMPAXCX:
(CX)≠0 ZF=1且(CX)≠0
LOOPNZ 或 ZF=0且(CX)≠0 LOOPNE
功能 Loop Loop while zero, or equal
Loop while not zero or not equal
8086/8088循环控制指令共有四条,下面介 绍其中一条最常用指令:
• LOOP指令:
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX MOV AL,DA1 MOV BL,DA2
CMP AL,BL JA ABIG MOV DX, OFFSET B_MESSAGE MOV AH,9 INT 21H JMP FINISH ABIG: MOV DX, OFFSET A_MESSAGE MOV AH,9 INT 21H FINISH:MOV AH,4CH INT 21H CODE ENDS END START
CMP AX,CX
CMP AX,CX
JG EXIT
JL NEXT
MOV AX,CX
JMP EXIT
EXIT:
NEXT:MOV AX,CX
END
EXIT: END
举例
• 例:判断两无符号数的大小
解: DATA SEGMENT DA1 DB ? DA2 DB ? A_MESSAGE DB ‘A>B’,'$' B_MESSAGE DB ‘ BA’,'$'
相关文档
最新文档