微机原理与接口技术-第3章6 控制转移指令

合集下载

(微机原理与接口技术知识)chapter06程序控制指令

(微机原理与接口技术知识)chapter06程序控制指令

控制程序执行的优化技巧
1 合理使用条件和循环指令
2 优化无条件跳转指令的使用
根据实际需求,灵活运用条件和循环指令, 提高程序的效率和可读性。
减少无条件跳转指令的使用,尽可能通过 条件指令控制程序流程,减少不必要的跳 转。
3 合理划分和设序模块化,合理划分和设计子程序, 提高程序的可维护性和可扩展性。
解决复杂算法问题
通过巧妙运用程序控制指令, 解决复杂的算法问题,如排序、 搜索等。
总结
通过学习程序控制指令,我们能够更好地掌控计算机的执行流程,提高程序 的效率和灵活性。合理运用优化技巧和编写的技巧,能够写出高效、可读性 强的程序。
继续深入研究和实践,不断提升自己在微机原理与接口技术领域的能力。
避免过长的代码块
将过长的代码块分割成多个函数或子程序, 提高代码的可维护性。
注释清晰明了
在关键的代码行或代码块处添加注释,解释 代码的功能和实现思路。
有趣的程序控制指令实例
模拟猜数字游戏
使用程序控制指令创建一个简 单的猜数字游戏,让玩家猜测 正确的数字并给予反馈。
绘制彩色图形
使用程序控制指令生成绚丽的 彩色图形,展示计算机在图像 处理方面的强大能力。
(微机原理与接口技术知 识)chapter06程序控制指 令
探索微机原理与接口技术的第六章内容:程序控制指令。了解指令的概述、 条件和循环指令、无条件跳转指令、子程序调用和返回指令、中断指令、输 入输出指令以及指令的编写和优化技巧。
什么是程序控制指令?
程序控制指令是用于控制计算机执行特定任务和决策的指令。它们可以根据条件改变执行路径或循环执行 任务。
合理配置和使用中断指令,提高程序的响 应速度和系统的可靠性。

微机原理2007年-第三章-指令系统第五节控制转移

微机原理2007年-第三章-指令系统第五节控制转移

③ 段间直接转移 段间直接转移
指令中给出的16位的段和 位的偏移地址送到CS和IP。 指令中给出的16位的段和16位的偏移地址送到CS和IP。 位的段和16位的偏移地址送到
④ 段间间接转移 段间间接转移
MEM中给出的 位的段和 位的偏移地址送到CS和IP。 MEM中给出的16位的段和16位的偏移地址送到CS和IP。 中给出的16位的段和16位的偏移地址送到
6
例:代码段内有一条无条件转移指令
JMP SHORT NEXT 指令本身占有两个字节 操作码占一个字节; 位位移量占有一个字节 操作码占一个字节;8位位移量占有一个字节
内存
... 源程序 : 条件转移指令: 条件转移指令:JMP SHORT next qqq: ... ... next: MOV AL,03H
5
① 段内直接转移 转移的目标地址由指令直接给出。 段内转移,故转移后CS内容保持不变, 段内转移,故转移后CS内容保持不变,只改 变IP的值。 IP的值。
汇编语言中格式 JMP SHORT OPRD JMP NEAR PTR OPRD 位移量 转移范围 8位 -128~+127 128~ 16位 16位 -32768~+32767 32768~
13
JMP DWORD PTR [SI]的机器码 11111111 11101100 DS:[SI]
4000 DS +) 1212 SI 41212 41212 41213 41214 41215
00 10 00 4A
1000 4A00
IP CS
段间间接转移操作示意图
14
(2)条件转移指令 (2)条件转移指令 - JXX 条件转移指令可实现程序的条件分支。 条件转移指令根据标志位的状态来决定是 否进行分支转移。(判位转移) 格式: JXX label xx为条件名称缩写 ;xx为条件名称缩写 指令的转移范围为-128~+127字节。 指令的转移范围为-128~+127字节。

微机原理与接口技术第3章(指令部分)

微机原理与接口技术第3章(指令部分)
第 3 章 指令系统及汇编语言程序设计
例:编程计算 0+1+2+3+4+ -----10 编程计算
MOV AL,0 , MOV BL,1 , MOV CL,10 NEXT:ADD AL,BL , INC BL DEC CL JNZ NEXT ;CL≠0 转 ≠ HLT
1
3.1 概述 一、指令包含的基本内容
12
(3)相对寻址
例: MOV AX, [SI+100H]
;结果 : 结果 AX (DS×16+SI+100H) ×
例:MOV AL,[BP+DATA] MOV AL, DATA[BP] ; DATA是符号表示的位移量。 表示的位移量 是符号表示的位移量。
结果 : AL (SS×16+BP+DATA) ×
11
(2)间接寻址 例:MOV AX,[BX] , •结果 : AX 结果 (DS×16+BX) ×
...
3000H:0000H : • EA= BX /SI /DI , 物理地址=DS*16+EA 物理地址 • EA= BP 物理地址=SS*16+EA 物理地址 :1234H :50H :1235H :30H
1. 做什么操作? 做什么操作? MOV ,ADD, OR,CMP等助记符 等助记符
2. 操作的数据是什么? ①CPU内的寄存器; 操作的数据是什么? 内的寄存器 内的寄存器; 内存的某一个或几个单元 单元; ②内存的某一个或几个单元; 结果放在那里? 3. 结果放在那里? 立即数。 ③立即数。 端口; 端口 ④I/O端口; 下一条指令在哪里? 4. 下一条指令在哪里? IP←IP+1

微机原理第3章-指令系统

微机原理第3章-指令系统

▲按给出偏移地址方式的不同,分为以下5种: 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器 相对基址加变址寄存器 MOV AL, [ BX ] MOV AL, [ BX + 10H ] MOV AL, [ BX + SI ] MOV AL, [ BX + SI + 10H ]
(1)寄存器间接寻址
寄存器寻址方式的操作数是寄存器的值,指令中直接 使用寄存器名,包括8位或16位通用寄存器和段寄存器。可 使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、 BP;其中:AX、BX、CX、DX可分成两8位使用。
例: MOV AX,CX
;(AX)
(CX)
INC CX
;(CX)
(CX)+1
3.直接寻址(Direct Addressing)
0002
AH
AL
默认段寄存器的关系: ① 使用BX、SI、DI,默认段寄存器为DS
(BX)
PA = ( DS )×10H + (SI) (DI)
② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP )
使用BX、SI、DI的寄存器寻址,默认段寄存器为DS
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
运 算 器
控制总线CB


PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
例: MOV AX , [ BX + SI ]
若 ( DS ) = 4000H
( BX ) = 2000H ( SI ) = 100H 则内存操作数的物理地址为:

微机原理 3-3指令系统Ⅴ控制转移

微机原理 3-3指令系统Ⅴ控制转移
← SEG
Lable。 Lable。
微机原理与接口技术 ⑤、JMP MEM32:段间间接转移 MEM32:
第3章 指令系统 Ⅴ
MEM32为双字单元的存储器地址,不能够用Reg替代。 MEM32为双字单元的存储器地址,不能够用Reg替代。转移 Reg替代 为双字单元的存储器地址 范围可达1MB 范围可达1MB。 1MB。 执行:IP←(MEM低16,前2字节),CS←(MEM高16,后2 ),CS 执行:IP← MEM低16, 字节),CS← MEM高16, 字节)。 字节)。
微机原理与接口技术 (9)JP/JPE—偶性转移指令 JP/JPE— 形式:JP/JPE 标号 形式:
第3章 指令系统 Ⅴ
功能:若结果的低8位有偶数个“1”(PF=1) 有偶数个“ PF=1) 功能:若结果的低 转移到标号处执行,否则顺序执行。 转移到标号处执行,否则顺序执行。 (10)JNP/JPO—奇性转移指令 10)JNP/JPO— 形式:JNP/JPO 标号 形式: 功能:若结果的低8位有奇数个“1”(PF=0) 有奇数个“ PF=0) 功能:若结果的低 转移到标号处执行,否则顺序执行。 转移到标号处执行,否则顺序执行。 该组指令需要检测单个位 常与TEST 该组指令需要检测单个位,常与TEST连用 单个位, TEST连用
②、JMP NEAR PTR Lable;段内直接转移 Lable;
NEAR PTR为近距离属性运算符,标号是近标号16bit。范围 PTR为近距离属性运算符 标号是近标号16bit。 为近距离属性运算符, 16bit 不超过-32768~+32767。 不超过-32768~+32767。 执行:IP←OFFSET 标号Lable,CS不变。 标号Lable CS不变 Lable, 不变。 执行:IP←

微机原理与接口技术第三章传送类指令

微机原理与接口技术第三章传送类指令

• 例:XLAT CS:table
注意
• 指令执行时采用隐含约定的寻址方 式来查找数据; • 指令中隐含使用了寄存器DS、BX、 AL,如使用其它某个段寄存器,则不 能缺省,必须指明。
4.栈操作指令
• (1)进栈指令 • 功能:SP内容减2后将src压入栈区 中SS和SP指定位置 • 格式:PUSH src
(2)存储标志寄存器指令
• 功能:把寄存器中第7、6、4、2、 0的内容分别送入标志寄存器的SF、 ZF、AF、PF、CF各标志位 • 格式;SAHF
(3)标志寄存器进栈指令
• 功能:首先把堆栈指针SP减2,然 后将16位标志寄存器FR的全部内容 压入SP指向的栈顶字单元中 • 格式:PUSHF
(2)装入地址指令
• 格式:LDS dest,src • 功能:把src指定内存中连续4个字 节单元内容的低16位数据存入dest 指定的通用寄存器中,高16位存入 DS中
格式:LES dest,src
• 功能:把src指定内存中连续4个字 节单元内容的低16位数据存入dest 指定的通用寄存器中,高16位存入 ES中
数据传送类指令
1. 2. 3. 4. 5. 6. 7. 传送指令 交换指令 换码指令 栈操作指令 标志传送指令 地址传送指令 输入/输出指令
1.传送指令
• 功能:将数据从源操作数传送到目的操作数, 具有“复制”性质; • 格式:MOV dest,src
立即数 通用寄存器 AX BX CX DX SP BP SI DI 段寄存器 DS ES SS
• 例XCHG AL,[BP] XCHG DL,BH
注意
• 可在通用寄存器之间,或通用寄存器与 存储器之间交换;
• 不允许存储器之间,立即数与存储器或 寄存器之间,段寄存器间进行交换, CS,IP,出表中AL指明位置的数据,并 赋给AL • 格式:XLAT

微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统

微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统

4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址

微机原理6_控制转移类指令

微机原理6_控制转移类指令

还可用SAR、ROR和RCR指令
;将AX的最低位D0移进CF
jnc even
;标志CF=0,即D0=0:AX内是偶数,程序转移
add ax,1
;标志CF=1,即D0=1:AX内的奇数,加1
even: shr ax,1
;AX←AX÷2
第2章:例题2.22解答3 用JNS指令实现
mov bx,ax
ror bx,1
done: ……
第2章:例2.24 偶校验
;对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志
2:将最低位用移位指令移至进位标志,判断进位标志是0, AX就是偶数;否则,为奇数
3:将最低位用移位指令移至最高位(符号位),判断符号 标志是0,AX就是偶数;否则,为奇数
第2章:例题2.22解答1 用JZ指令实现
test ax,01h
;测试AX的最低位D0(不用AND指令,以免改变AX)
jz even
第2章:无条件转移指令JMP(jump)
JMP label
;段内转移、相对寻址
;IP←IP+位移量
演示
JMP r16/m16
;段内转移、间接寻址
;IP←r16/m16
演示 演示
JMP far ptr label ;段间转移、直接寻址
;IP←偏移地址,CS←段地址
演示
JMP far ptr mem ;段间转移,间接寻址
第2章:例题2.22
题目:将AX中存放的无符号数除以2,如果是奇 数则加1后除以2 问题:如何判断AX中的数据是奇数还是偶数? 解答:判断AX最低位是“0”(偶数),还是“1” (奇数)。可以用位操作类指令
1:用逻辑与指令将除最低位外的其他位变成0,保留最低位 不变。判断这个数据是0,AX就是偶数;否则,为奇数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MOV CX,N …… …… …… DEC CX JNZ AGAIN
3 循环指令:
LOOP OPR LOOPZ / LOOPE OPR LOOPNZ / LOOPNE OPR
执行步骤: (1) (CX) ← (CX) - 1 (2) 检查是否满足测试条件, 如满足则(IP) ← (IP) + 8位位移量,实行循环; 不满足则 IP 不变,退出循环。
即: 当满足条件时: (IP)←(IP)+符号扩展到16位后的位移量D8 如不满足测试条件: 则(IP)不变。
另外, 所有的条件转移指令都不影响条件标志位。
(1) 根据单个条件标志的设置情况转移
格式
测试条件
JZ(JE) OPR
JNZ(JNE) OPR
JS
OPR
JNS
OPR
JO
OPR
JNO
OPR
JP
循环指令
注意: * CX 中存放循环次数 *只能使用段内直接寻址的8 位位移量 * 不影响条件标志位
循环指令:
循环指令:LOOP OPR 测试条件:(CX) 0
为零或相等时循环指令:LOOPZ(LOOPE) OPR 测试条件:ZF=1 且 (CX) 0
不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR 测试条件:ZF=0 且 (CX) 0
( (SP)+1,(SP) ) ← (CS) (SP) ← (SP) - 2 ( (SP)+1,(SP) ) ← (IP) (IP) ← 偏移地址 (CS) ← 段地址
(4)段间间接远调用:CALL DST 执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS) (SP) ← (SP) - 2 ( (SP)+1,(SP) ) ← (IP) (IP) ← (EA) (CS) ← (EA+2)
2、RET 返回指令
(1)段内近返回:RET 执行操作: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(2)段内带立即数近返回:RET EXP 执行的操作:(IP)←((SP)+1,(SP))
(SP)←(SP)+2 (SP)←(SP)+D16
2、RET 返回指令
(3)段间远返回:RET 执行操作: (IP) ← ( (SP)+1,(SP) )
子程序调用和返回指令:
code segment main proc far
…… call subp …… ret main endp
subp proc near …… ret
subp endp code ends
段内调用和返回
code1 segment main proc far
…… call far ptr subp …… ret main endp code1 ends
OPR
JNP
OPR
JC
OPR
JNC
OPR
ZF = 1 ZF = 0 SF = 1 SF = 0 OF = 1 OF = 0 PF = 1 PF = 0 CF = 1 CF = 0
(2) 比较两个无符号数,并根据比较结果转移*
格式 < JB (JNAE,JC) OPR
≥ JNB (JAE,JNC) OPR
≤ JBE (JNA)
OPR
> JNBE (JA)
OPR
测试条件 CF = 1 CF = 0 CF∨ZF = 1 CF∨ZF = 0
* 适用于地址或双精度数低位字的比较
(3) 比较两个带符号数,并根据比较结果转移
格式 < JL (JNGE) OPR
测试条件 SFOF = 1
≥ JNL (JGE) OPR
当CPU响应一次中断时,也要和调用子程序时类似地把(IP)和 (CS)保存入栈。除此之外,为了能全面地保存现场信息,以便 在中断处理结束时返回现场,还需要把反映现场状态的(PSW) 保存入栈,然后才能转到中断例行程序去执行。当然从中断返回时, 除要恢复(IP)和(CS)外,还需要恢复(PSW)。
子程序调用和返回指令
CALL、RET
中断与中断返回指令
INT、INTO、IRET
1 无条件转移指令
JMP 跳转指令
无条件地转移到指令指定的地址去执行从该地址开 始的指令。可以看出JMP指令必须指定转移的目标地址 (或称转向地址)。
总的说来,转移可以分成两类:段内转移和段间转 移。段内转移是指在同一代码段的范围之内进行转移,此 时只需改变IP寄存器的内容,即用新的转移目标地址代替 原有的IP的值就可达到转移的目的。段间转移则是要转到 另一个代码段去执行程序,此时不仅要修改IP寄存器的内 容,还需要修改CS寄存器的内容才能达到目的,因此, 此时的转移目标地址应由新的段地址和偏移地址两部分组 成。
(2)段内间接近调用:CALL DST 执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP) (IP) ← (EA) 其中EA是由DST的寻址方式所确定的有效地址。
1、CALL 调用指令
(3)段间直接远调用:CALL DST 执行操作: (SP) ← (SP) - 2
CALL指令和RET指令都不影响条件码。
5 中断指令
有时当系统运行或者程序运行期间在遇到某些特殊情况时,需要计 算机自动执行一组专门的例行程序来进行处理。这种情况称为中断 (Interrupt),所执行的这组程序称为中断例行程序(Interrupt routine)或中断子程序。中断分为内部中断和外部中断两类。内部 中断(软件中断)包括象除法运算中遇到需要除以0时所产生的中断, 或者程序中为了作某些处理而设置的中断指令等。外部中断(硬件 中断)则主要处理I/O设备与CPU之间的通信。
SFOF = 0
≤ JLE (JNG) OPR (SFOF)∨ZF = 1
> JNLE (JG) OPR (SFOF)∨ZF = 0
(4) 测试 CX 的值为 0 则转移
格式 JCXZ
测试条件 (CX)=0
例:如果 X>50,转到TOO_HIGH; 否则 |X-Y| → RESULT, 如果溢出转 到 OVERFLOW,
条件转移指令根据执行指令前标志位的状态而决定是否发 生控制转移的指令。
每一种条件转移指令有它的测试条件,满足测试条件则转 移到由指令指出的目标地址去执行那里的程序;如不满足条件 则顺序执行下一条指令。
条件转移指令只能使用段内直接短转移,即目标地址应在 本条转移指令下一条指令地址的-128—+127个字节的范围之内
注意: * IRET 指令执行完,标志位由堆栈中取 出的值确定
无条件转移指令
段间直接远转移:JMP FAR PTR OPR(例) 执行操作:(IP) ← OPR 的段内偏移地址
(CS) ← OPR 所在段的段地址
段间间接转移: 执行操作:
JMP DWORD PTR OPR
(IP) ← (EA) (CS) ← (EA+2)
说明: JMP指令不影响条件标志位。
2 条件转移指令
code2 segment subp proc far
…… ret subp endp code2 ends
段间调用和返回
1、CALL 调用指令
(1)段内直接近调用:CALL DST 执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP) (IP) ← (IP) + 16位位移量
INTO指令设置IF和TF标志为0,不影响其它标志位
(3)从中断返回指令:IRET
执行操作: (IP) ← ( (SP)+1,(SP) ) (SP) ← (SP) + 2 (CS) ← ( (SP)+1,(SP) ) (SP) ← (SP) + 2 (FLAGS) ← ( (SP)+1,(SP) ) (SP) ← (SP) + 2
3.2.5 控制转移指令:
无条件转移指令
JMP
条件转移指令
JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ
循环指令
LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE
中断的过程
主程序
中断服务程序
中断请求
断点
IRET
中断请求可以来自处理器外部的中断源, 也可以由处理器执行指令引起: 例如执行INT i8指令。
(1)中断指令:
INT TYPE 或 INT 执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (FLAGS) (SP) ← (SP) - 2 ( (SP)+1,(SP) ) ← (CS) (SP) ← (SP) - 2 ( (SP)+1,(SP) ) ← (IP) (IP) ← (TYPE*4) (CS) ← (TYPE*4+2) INT指令设置IF和TF标志为0,不影响其它标志位
4 过程调用和返回指令
子程序结构相当于高级语言中的过程(procedure)。为便 于模块化程序设计,往往把程序中某些具有独立功能的部分编 写成独立的程序模块,称之为子程序。
程序中可由调用程序(或称主程序)调用这些子程序, 而在子程序执行完后又返回调用程序继续执行。
主程序调用子程序时使用CALL指令,由子程序返回主程 序时使用RET指令。由于调用程序和子程序可以在同一个代码 段中,也可以在不同的代码段中,因此,CALL指令和RET指 令也有近调用、近返回及远调用、远返回两类格式。
相关文档
最新文档