微机原理第3章4共59页
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在8086中,所有段内直接转移都是相对转移;所 有段内间接转移都是绝对转移。
8086提供了四种程序控制指令
转移指令 循环控制指令 中断指令 过程调用指令
1. 无条件转移指令
JMP(Jump):无条件转移到 目标地址target去执行程序。
(1) 段内直接转移
①JMP SHORT LABEL 段内直接短转移,8位,-128~+127
②JMP NEAR LABEL 段内直接近转移,16位,-32768 ~+32767 LABEL:标号,称为符号地址,表示转移的目的地。 功能:当前IP的值+地址位移量→(IP)
CS保持不变。
举例
JMP 7CH;段内直接短转移 JMP 6700H;段内直接近转移
(2) 段内间接转移
格式:JMP OPRD OPRD是16位的寄存器或者存储器地址 若OPRD是存储器操作数,则要加上类型指
举例
例1:统计以BUFFER为起始地址的100 个单元中负数的个数,并将统计出来的 负数个数送NUM单元。
XOR AL,AL MOV PLUS,AL MOV MINUS,AL MOV ZERO,AL LEA SI,TABLE MOV CX,100 CLD
Байду номын сангаас
AGAIN:LODSB CMP AL,0 JZ X1 JG X2 INC MINUS JMP NEXT
X1: INC ZERO JMP NEXT
X2: INC PLUS NEXT:DEC CX
程序是指令的集合 指令在内存中顺序存放 CS和IP两寄存器的内容决
定了程序的流程,改变CS 和IP寄存器的值,就改变 了程序执行的流程。
BB 指令1 00
01 指令2 B1
20 指令3 90
… 指令n …
… 指令n+1 …
… 指令n+2 …
1.为使程序转移到一个新的地方去执行,可以改变IP 的值,称为段内转移(近转移,NEAR);也可以改 变CS、IP,称为段间转移(远转移,FAR)。
的偏移地址。 例:JMP 8000H:6000H 则(CS)=8000H,(IP)=6000H
(4) 段间间接转移
格式:JMP OPRD 操作:OPRD是一个32位的存储器地址,将
指定的连续4个内存单元的内容送入IP和 CS,低字的内容送IP,高字的内容送CS。
举例
JMP DWORD PTR [BX] 设(BX)=1000H,(DS)=2000H
JNZ AGAIN HLT
3. 循环控制指令
在循环程序中用来控制循环,其控制转向 的目标地址是以当前IP内容为中心的-128~ +127。 循环次数预先放入CX中,每循环一次, CX内容减1,若(CX) 0,则继续循环,否 则退出循环。
(1)LOOP指令
格式:LOOP LABEL 执行操作:(CX)←(CX)-1,
② 以CX的值为0作为转移条件
助 记 符 转 移 条 件 J C X ZC X = 0
③ 以两个无符号数比较的结果作为转移 条件
助记符 JA/JNBE JAE/JNB/JNC JB/JNAE/JC JBE/JNA
高于/不低于等于 高于等于/不低于/无进位 低于/不高于等于/有进位
低于等于/不高于
21000H 12H 34H 56H 78H
2. 条件转移指令
① 以单个状态标志位作为转移条件
助 记 符 转 移 条 件 J Z Z F = 1 J S S F = 1 J O O F = 1 J P P F = 1 J C C F = 1
助 记 符转 移 条 件 J N Z Z F = 0 J N S S F = 0 J N O O F = 0 J N P P F = 0 J N C C F = 0
格式:LOOPE/LOOPZ LABEL 执行操作: (CX)←(CX)-1,
CX 0且ZF=1,继续循环 CX=0 或ZF=0,退出循环
(3) LOOPNE/LOOPNZ 指令
格式:LOOPNE/LOOPNZ LABEL 执行操作: (CX)←(CX)-1,
CX 0且ZF=0,继续循环 CX=0 或ZF=1,退出循环
2.无论是段内还是段间转移,都有间接转移和直接转 移之分。
直接转移:指令中直接给出转移地址。
间接转移:转移地址间接存储于寄存器或存储单元中。
计算段内转移地址有两种方法
一种是把当前IP值增加或减少某一个值,也就是 以当前指令为中心往前或往后转移,称相对转移。
另一种是以新的值完全代替当前IP值,称绝对转 移。
高于:Above 低于:Below
④ 以两个带符号数比较的结果作为转移 条件
助记符 JG/JNLE JGE/JNL JL/JNGE JLE/JNG
大于:Great
大于/不小于等于 大于等于/不小于 小于/不大于等于 小于等于/不大于
小于:Less
例题
在以TABEL为首地址的内存数据段中,存 放有100个8位带符号数,试统计其中正数、 负数和零的个数,并分别将个数存入 PLUS、MINUS和ZERO 3个单元中。 (见P136 例3-43)
示符WORD PTR CS保持不变
举例
①JMP AX (IP)←(AX),段内间接转移 ②JMP WORD PTR[SI] 设(SI)=2600H,(DS)=7000H, (72600H)=12H,(72601H)=34H 则执行完指令后,(IP)=3412H
(3) 段间直接转移
格式:JMP FAR label 指令中直接提供要转移的16位段地址和16位
CX0,继续循环 CX=0,退出循环 LOOP指令相当于以下两条指令的组合 DEC CX JNZ NEXT
MOV CX,100 ;指定循环100次
START∶ ……
;循环体入口
……
;循环体
LOOP START ;CX←CX-1,
……
;CX0时,转移到START
;CX=0时,从这里继续
见P147 3.15
试编写程序,统计BUFFER为起始地址的连续200 个单元中0的个数。
解: LEA SI,BUFFER MOV CX,200 XOR BX,BX
AGAIN:MOV AL,[SI] CMP AL,0
JNE GOON INC BX GOON: INC SI LOOP AGAIN HLT
(2) LOOPE/LOOPZ 指令
8086提供了四种程序控制指令
转移指令 循环控制指令 中断指令 过程调用指令
1. 无条件转移指令
JMP(Jump):无条件转移到 目标地址target去执行程序。
(1) 段内直接转移
①JMP SHORT LABEL 段内直接短转移,8位,-128~+127
②JMP NEAR LABEL 段内直接近转移,16位,-32768 ~+32767 LABEL:标号,称为符号地址,表示转移的目的地。 功能:当前IP的值+地址位移量→(IP)
CS保持不变。
举例
JMP 7CH;段内直接短转移 JMP 6700H;段内直接近转移
(2) 段内间接转移
格式:JMP OPRD OPRD是16位的寄存器或者存储器地址 若OPRD是存储器操作数,则要加上类型指
举例
例1:统计以BUFFER为起始地址的100 个单元中负数的个数,并将统计出来的 负数个数送NUM单元。
XOR AL,AL MOV PLUS,AL MOV MINUS,AL MOV ZERO,AL LEA SI,TABLE MOV CX,100 CLD
Байду номын сангаас
AGAIN:LODSB CMP AL,0 JZ X1 JG X2 INC MINUS JMP NEXT
X1: INC ZERO JMP NEXT
X2: INC PLUS NEXT:DEC CX
程序是指令的集合 指令在内存中顺序存放 CS和IP两寄存器的内容决
定了程序的流程,改变CS 和IP寄存器的值,就改变 了程序执行的流程。
BB 指令1 00
01 指令2 B1
20 指令3 90
… 指令n …
… 指令n+1 …
… 指令n+2 …
1.为使程序转移到一个新的地方去执行,可以改变IP 的值,称为段内转移(近转移,NEAR);也可以改 变CS、IP,称为段间转移(远转移,FAR)。
的偏移地址。 例:JMP 8000H:6000H 则(CS)=8000H,(IP)=6000H
(4) 段间间接转移
格式:JMP OPRD 操作:OPRD是一个32位的存储器地址,将
指定的连续4个内存单元的内容送入IP和 CS,低字的内容送IP,高字的内容送CS。
举例
JMP DWORD PTR [BX] 设(BX)=1000H,(DS)=2000H
JNZ AGAIN HLT
3. 循环控制指令
在循环程序中用来控制循环,其控制转向 的目标地址是以当前IP内容为中心的-128~ +127。 循环次数预先放入CX中,每循环一次, CX内容减1,若(CX) 0,则继续循环,否 则退出循环。
(1)LOOP指令
格式:LOOP LABEL 执行操作:(CX)←(CX)-1,
② 以CX的值为0作为转移条件
助 记 符 转 移 条 件 J C X ZC X = 0
③ 以两个无符号数比较的结果作为转移 条件
助记符 JA/JNBE JAE/JNB/JNC JB/JNAE/JC JBE/JNA
高于/不低于等于 高于等于/不低于/无进位 低于/不高于等于/有进位
低于等于/不高于
21000H 12H 34H 56H 78H
2. 条件转移指令
① 以单个状态标志位作为转移条件
助 记 符 转 移 条 件 J Z Z F = 1 J S S F = 1 J O O F = 1 J P P F = 1 J C C F = 1
助 记 符转 移 条 件 J N Z Z F = 0 J N S S F = 0 J N O O F = 0 J N P P F = 0 J N C C F = 0
格式:LOOPE/LOOPZ LABEL 执行操作: (CX)←(CX)-1,
CX 0且ZF=1,继续循环 CX=0 或ZF=0,退出循环
(3) LOOPNE/LOOPNZ 指令
格式:LOOPNE/LOOPNZ LABEL 执行操作: (CX)←(CX)-1,
CX 0且ZF=0,继续循环 CX=0 或ZF=1,退出循环
2.无论是段内还是段间转移,都有间接转移和直接转 移之分。
直接转移:指令中直接给出转移地址。
间接转移:转移地址间接存储于寄存器或存储单元中。
计算段内转移地址有两种方法
一种是把当前IP值增加或减少某一个值,也就是 以当前指令为中心往前或往后转移,称相对转移。
另一种是以新的值完全代替当前IP值,称绝对转 移。
高于:Above 低于:Below
④ 以两个带符号数比较的结果作为转移 条件
助记符 JG/JNLE JGE/JNL JL/JNGE JLE/JNG
大于:Great
大于/不小于等于 大于等于/不小于 小于/不大于等于 小于等于/不大于
小于:Less
例题
在以TABEL为首地址的内存数据段中,存 放有100个8位带符号数,试统计其中正数、 负数和零的个数,并分别将个数存入 PLUS、MINUS和ZERO 3个单元中。 (见P136 例3-43)
示符WORD PTR CS保持不变
举例
①JMP AX (IP)←(AX),段内间接转移 ②JMP WORD PTR[SI] 设(SI)=2600H,(DS)=7000H, (72600H)=12H,(72601H)=34H 则执行完指令后,(IP)=3412H
(3) 段间直接转移
格式:JMP FAR label 指令中直接提供要转移的16位段地址和16位
CX0,继续循环 CX=0,退出循环 LOOP指令相当于以下两条指令的组合 DEC CX JNZ NEXT
MOV CX,100 ;指定循环100次
START∶ ……
;循环体入口
……
;循环体
LOOP START ;CX←CX-1,
……
;CX0时,转移到START
;CX=0时,从这里继续
见P147 3.15
试编写程序,统计BUFFER为起始地址的连续200 个单元中0的个数。
解: LEA SI,BUFFER MOV CX,200 XOR BX,BX
AGAIN:MOV AL,[SI] CMP AL,0
JNE GOON INC BX GOON: INC SI LOOP AGAIN HLT
(2) LOOPE/LOOPZ 指令