微机原理与接口技术-第3章6 控制转移指令
(微机原理与接口技术知识)chapter06程序控制指令
控制程序执行的优化技巧
1 合理使用条件和循环指令
2 优化无条件跳转指令的使用
根据实际需求,灵活运用条件和循环指令, 提高程序的效率和可读性。
减少无条件跳转指令的使用,尽可能通过 条件指令控制程序流程,减少不必要的跳 转。
3 合理划分和设序模块化,合理划分和设计子程序, 提高程序的可维护性和可扩展性。
解决复杂算法问题
通过巧妙运用程序控制指令, 解决复杂的算法问题,如排序、 搜索等。
总结
通过学习程序控制指令,我们能够更好地掌控计算机的执行流程,提高程序 的效率和灵活性。合理运用优化技巧和编写的技巧,能够写出高效、可读性 强的程序。
继续深入研究和实践,不断提升自己在微机原理与接口技术领域的能力。
避免过长的代码块
将过长的代码块分割成多个函数或子程序, 提高代码的可维护性。
注释清晰明了
在关键的代码行或代码块处添加注释,解释 代码的功能和实现思路。
有趣的程序控制指令实例
模拟猜数字游戏
使用程序控制指令创建一个简 单的猜数字游戏,让玩家猜测 正确的数字并给予反馈。
绘制彩色图形
使用程序控制指令生成绚丽的 彩色图形,展示计算机在图像 处理方面的强大能力。
(微机原理与接口技术知 识)chapter06程序控制指 令
探索微机原理与接口技术的第六章内容:程序控制指令。了解指令的概述、 条件和循环指令、无条件跳转指令、子程序调用和返回指令、中断指令、输 入输出指令以及指令的编写和优化技巧。
什么是程序控制指令?
程序控制指令是用于控制计算机执行特定任务和决策的指令。它们可以根据条件改变执行路径或循环执行 任务。
合理配置和使用中断指令,提高程序的响 应速度和系统的可靠性。
微机原理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章(指令部分)
例:编程计算 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章-指令系统
▲按给出偏移地址方式的不同,分为以下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指令系统Ⅴ控制转移
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的指令系统
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_控制转移类指令
还可用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就是偶数;否则,为奇数
微机原理与接口技术(3-4)
JMP BX JMP WORD PTR 5[BX]
JMP FAR PTR PROG_F JMP DWORD PTR [DI]
4
§3-3 8086的指令系统 ——控制转移指令
①段内直接转移指令
指令格式:JMP SHORT 标号 JMP NEAR PTR 标号 (或:JMP 标号)
4F0H; 则指令执行后,IP=(20000H十100H十5H)偏移地址为4F0H处执行。
10
§3-3 8086的指令系统 ——控制转移指令
③段间直接(远)转移指令 指令格式:JMP FAR PTR 标号 特点:用远标号直接给出了转向的段地址和偏移量,即 IP 标号的段内偏移量,CS标号所在段的段地址。 例3-72 JMP FAR PTR PROG_F 设 标 号 PROG_F 所 在 段 的 基 地 址 = 3500H , 偏 移 地 址 = 080AH; 则指令执行后,IP=080AH,CS=3500H;
§3-3 8086的指令系统 ——控制转移指令
五、控制转移指令
作用:
改变CS和IP的值,从而改 变指令的执行顺序。
JMP CALL RET
无条件转移和过程调用指令 无条件转移 过程调用 过程返回 条 件 转 移 直接标志转移 间接标志转移
类型:
无条件转移和过程调用指 令
JZ/JE 等10条指令 JA/JNBE 等8条指令
2
§3-3 8086的指令系统 ——控制转移指令
两种提供地址的方式:
直接转移
指令码中直接给出转移的目的地址,目的操作数用一个标 号来表示,它又可分为段内直接转移和段间直接转移。 间接转移 目的地址包含在某个16位寄存器或存储单元中,CPU根据
微机原理指令大全
微机原理指令大全微机原理是计算机专业的一门重要课程,它主要研究计算机系统的基本组成和工作原理。
在微机原理课程中,指令是一个非常重要的概念,它是计算机能够理解和执行的基本操作命令。
本文将对微机原理中常见的指令进行详细介绍,帮助读者更好地理解和掌握这一知识点。
1. 数据传送指令。
数据传送指令是微机中最基本的指令之一,它用于将数据从一个位置传送到另一个位置。
常见的数据传送指令包括MOV、LDM、STM等。
MOV指令用于将数据从一个存储单元传送到另一个存储单元,LDM指令用于将数据从内存中加载到寄存器中,STM指令用于将数据从寄存器中存储到内存中。
这些指令在程序设计中应用广泛,是程序运行过程中不可或缺的一部分。
2. 算术运算指令。
算术运算指令用于对数据进行加减乘除等算术运算,常见的算术运算指令包括ADD、SUB、MUL、DIV等。
ADD指令用于将两个操作数相加,SUB指令用于将一个操作数减去另一个操作数,MUL指令用于将两个操作数相乘,DIV指令用于将一个操作数除以另一个操作数。
这些指令在编程中经常用到,能够实现各种复杂的算术运算。
3. 逻辑运算指令。
逻辑运算指令用于对数据进行逻辑运算,常见的逻辑运算指令包括AND、OR、NOT、XOR等。
AND指令用于对两个操作数进行与运算,OR指令用于对两个操作数进行或运算,NOT指令用于对操作数进行取反运算,XOR指令用于对两个操作数进行异或运算。
这些指令在逻辑判断和条件控制中起着重要作用,能够实现各种复杂的逻辑运算。
4. 控制转移指令。
控制转移指令用于改变程序的执行顺序,常见的控制转移指令包括JMP、CALL、RET、JZ、JNZ等。
JMP指令用于无条件跳转到指定的地址,CALL指令用于调用子程序,RET指令用于从子程序返回,JZ指令用于在零标志位为真时跳转,JNZ指令用于在零标志位为假时跳转。
这些指令在程序的控制流程中起着关键作用,能够实现复杂的程序控制逻辑。
003_微机原理-指令系统_2
MOV DS, AX
不影响标志位
3.3 指令系统—换码指令
指令书写格式: XLAT
指令执行的操作:
(AL)←((DS:BX+AL)) 查表操作,将BX指定的缓冲区中、AL指定的位移处的一个字节数 据取出赋给AL
指令说明
操作数隐含使用基地址寄存器BX与AL寄存器 换码指令执行前,在主存建立一个字节量表格,内含要转换的目 的码字,表格首地址存放于BX,AL存放相对表格首地址的位移量 换码指令执行后,指令将AL寄存器的内容转换为目标码字,因为 偏移量AL为8位,表格长度≤256字节 不影响标志位
数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令
控制转移指令
处理器控制指令
3.3 指令系统-通用数据传送指令
指令书写格式: MOV dst, src
指令执行的操作:(dst)←(src) 指令说明
操作数类型:立即操作数,寄存器操作数,存储器操作数 立即操作数不能作为目的操作数DST 错误:MOV 30H, AL 两个操作数也不能同时为存储器操作数 错误: MOV [DI+100H], [SI+200H]
dst为目的操作数,操作数类型可为寄存器操 作数或存储器操作数 cnt为移位次数,可为立即数1,或由寄存器 CL指定 SHL、SHR和SAL指令影响标志位CF和OF, cnt=1时,SHL与SAL移位后的最高位和CF不 同,则OF=1;SHR,OF=移位前最高位 SAR指令影响标志位CF、OF、PF、SF、ZF, AF不确定;
; 测试AL中数据的奇、偶
3.3 指令系统-移位指令
逻辑左移指令: SHL dst, cnt 算术左移指令: SAL dst, cnt
微机原理与接口技术(第二版)习题答案-第三章
习题31.假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令原操作数是什么寻址方式,其物理地址是多少?(1)MOV AX, 0ABH (2) MOV AX, [100H](3) MOV AX, V AL (4) MOV BX, [SI](5) MOV AL, V AL[BX] (6) MOV CL, [BX][SI](7) MOV V AL[SI], BX (8) MOV [BP][SI], 100答:(1) 立即数寻址,无物理地址(2) 直接寻址,物理地址=2000H×10H+100H=20100H(3) 直接寻址,物理地址=2000H×10H+0050H=20050H(4) 寄存器间接寻址,物理地址=2000H×10H+00A0=200A0H(5) 相对寄存器寻址,物理地址=2000H×10H+(0050+0100H)=20150H(6) 基址加变寻址,物理地址=2000H×10H+(0100H+00A0H)=201A0H(7) 寄存器寻址,无物理地址(8) 立即数寻址,无物理地址2.已知(SS)=0FFA0H,(SP)=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。
答:“8057H”进栈,则SP自动从00B0H指向00B2H,“0F79H”进栈,则SP 自动从00B2H指向00B4H;执行一条POP指令,“0F79H”被弹出栈,SP从00B4H 指向00B2H。
图略。
3.设有关寄存器及存储单元的内容如下:(DS)=2000H, (BX)=0100H, (AX)=1200H, (SI)=0002H, (20100H)=12H, (20101H)=34H, (20102H)=56H, (20103H)=78H, (21200H)=2AH, (21201H)=4CH, (21202H)=0B7H, (21203H)=65H.试说明下列各条指令单独执行后相关寄存器或存储单元的内容。
《微机原理与接口技术》 (张凡 盛珣华 戴胜华 著) 清华大学出版社 北方交通大学出版社 课后答案
第二章微处理器及其结构2-7 什么是逻辑地址? 什么是物理地址? 在实地址方式下,如何求存储器的物理地址? 设一个16字的数据区,它的起始地址为70A0H:DDF6(段基址:偏移地址).写出这个数据区的首字单元和末字单元的物理地址.解:1). 实模式下,逻辑地址由段基址和偏移地址组成.物理地址是真正的存储单元的地址.2). 物理地址=段基址*16 + 偏移地址3). 首字单元地址:70A0H*16 +DDF6H = 70A00H + DDF6H = 7E7F6H末字单元地址:7E7F6H + (16-1)*2 = 7E7F6H + 1EH = 7E814H注意:相邻两个存储单元可构成一个字长为16位的字,在对准字时,用偶地址表示字的地址.1EH1CH 2H20H16H14H18H4H1AH10H0H12HEHCH8HAH6H第三章指令系统3-6 分别指出下列指令中源操作数和目标操作数的寻址方式. 若是存储器寻址,用表达式表示EA=?(1)AND AX, 00FFH(2)ADD BX, [00FFH](3)MOV AX, [BX+10H](4)ADD AX, [ESI*8](5)SUB [BP][SI], AX(6)MOV AX, [BX+DI+20H](7)CMP [SI], AX(8)OR AX, DX(9)MOV EAX, [ESI][EDI*2](10)PUSH DS解:(1)立即数寻址(2)直接寻址EA=00FFH(3)基址寻址EA=(BX)+10(4)比例间址EA=ESI*8(5)基址加间址寻址EA=(BP)+(SI)(6)带位移的基址加间址寻址EA=(BX)+(DI)+20H(7)间址寻址EA=(SI)(8)寄存器寻址(9)基址加比例间址寻址EA=(ESI)+(EDI)*2(10)寄存器寻址注意:◆16位寻址: BX和BP作为基址寄存器.BX以DS作为默认段寄存器,BP以SS为默认段寄存器.SI和DI作为间址寄存器. 默认DS为段寄存器◆32位寻址: 8个32位通用寄存器均可作为基址寄存器,其中ESP,EBP以SS为默认段寄存器,其余均以DS为默认段寄存器.除ESP外的其它7个寄存器均可作间址寄存器,EBP默认SS作段基址寄存器,其它以DS作段基址寄存器3-7 32位微机工作在实地址模式下, 已知(DS) = 1000和(SS) = 2000H, (SI) =007FH, (BX) = 0040H, (BP) = 0016H, 变量TABLE的偏移地址为0100H. 指出下列指令中源操作数的寻址方式,求它的有效地址(EA)和物理地址(PA).(1)MOV AX, [1234H](2)MOV AX, TABLE(3)MOV AX, [BX+100H](4)MOV AX, TABLE[BP][SI]解:(1)直接寻址EA=1234H PA=(DS)*16 + EA = 11234H(2)直接寻址EA=(TABLE)=0100H PA=(DS)*16+EA=10100H(3)基址寻址EA=(BX)+100H=0140H PA=(DS)*16+EA=10140H(4)带位移的基址加间址寻址EA=(BP)+(SI)+TABLE=0195H PA=(SS)*16+EA=20195H注意: 当基址寄存器和间址寄存器默认的段寄存器不同时,一般规定,由基址寄存器来决定默认的段寄存器为段基址寄存器. 这里BP为基址寄存器,所以默认SS为段基址寄存器.3-8 指出下列指令的错误,并加以改正.(1)MOV DS, 100(2)MOV 1020H, DX(3)SUB [1000H], [SI](4)PUSH AL(5)IN AL, [80H](6)MOV DS, ES(7)JMP BX(8)SHR DX, 4(9)OUT 380H, AX(10)ADD AL, BX(11)POP CS(12)MOV CL, 3300H解:(1)立即数不能直接传送到段寄存器中去应改为: MOV AX, 100MOV DS, AX(2)立即数只能出现在源操作数位置应改为: MOV DX,1020H(3)源操作数和目标操作数不能同时为寄存器寻址应改为: MOV AX, [1000H]SUB AX, [SI](4)PUSH指令不能操作8位数据应改为: PUSH AX(5)[80H ]不是端口IN AL ,80H应改为: IN AL, 80H(6)两个段寄存器之间不能直接传送应改为: MOV AX, ESMOV DS,AX(7)对(8)移位次数超过1的时候,要把移位次数放入CL中应改为: MOV CL, 4SHR DX, CL(9)端口地址大于255时,要把地址放入DX中应改为: MOV DX, 380HOUT DX, AX(10)源操作数和目标操作数不匹配应改为: ADD AX, BX(11)POP指令只能使用在存储器或通用寄存器可改为: POP AX(12)源操作数和目标操作数不匹配应改为: MOV CX, 3300H3-9 已知: (DS) = 091DH, (SS) = 1E4AH, (AX) = 1234H, (BX) = 0024H, (CX) = 5678H, (BP) = 0024H, (SI) = 0012H, (DI) = 0032H, [09226H] = 00F6H, [09228H] = 1E40H, [1E4F6H] = 091DH. 试求下列各指令单独执行后的结果.(1)MOV CL, 20H[BX][SI] ; (CL) = ?(2)MOV [BP][DI], CX ; [IE4F6H] = ?(3)LEA BX, 20H[BX][SI] : (BX) = ?MOV AX, 2[BX] : (AX) = ?(4)LDS SI, [BX][DI]MOV [SI], BX ; (SI]) = ?(5)XCHG CX, 32H[BX] ; (AX) = ?XCHG 20[BX][SI], AX ; [09226H] = ?解:(1)(CL) = 00F6H(2)[IE4F6H] = 5678H(3)(BX) = 0056H(AX) = 1E40H(4)(SI)= 0024H(5)(AX) = 5678H[09226H] = 1234H3-10 已知(AL) = 0C4H, DATA单元中内容为5AH, 写出下列每条指令单独执行后的结果(ODITSZAPC:0---xxux0)(1)AND AL, DATA(2)OR AL, DATA(3)XOR AL, DATA(4)NOT DATA(5)AND AL, 0FH(6)OR AL, 1H(7)XOR AL, 0FFH(8)TEST AL, 80H解:(1)(AL)= 40H CF=0,OF=0,SF=0,ZF=0,PF=0,AF无定义(2)(AL)= DEH CF=0,OF=0,SF=1,ZF=0,PF=1,AF无定义(3)(AL)= 9EH CF=0,OF=0,SF=1,ZF=0,PF=0,AF无定义(4)(AL)= A5H 不影响任何标志位(5)(AL)= 04H CF=0,OF=0,SF=0,ZF=0,PF=0,AF无定义(6)(AL)= C5H CF=0,OF=0,SF=1,ZF=0,PF=1,AF无定义(7)(AL)= 3BH CF=0,OF=0,SF=0,ZF=0,PF=0,AF无定义(8)(AL)不变=0C4H CF=0,OF=0,SF=1,ZF=0,PF=0,AF无定义3-12 (AL)=8EH,(BL)=72H,执行以下指令后,标志位OF、SF、ZF、AF、PF和CF的值是什么?(1)ADD AL,BL(2)AND BL,AL(3)CMP AL,BL(4)SHL AL,1解:(1)OF=0,SF=0,ZF=1,AF=1,PF=1,CF=1(2)OF=0,SF=0,ZF=0,AF=(未定义),PF=0,CF=0(3)OF=1,SF=0,ZF=0,AF=0,PF=0,CF=0(4)OF=1,SF=0,ZF=0,AF=(未定义),PF=0,CF=13-15 试用CMP指令和无条件指令实现以下判断(1)AX和CX中的内容均为无符号数①(AX)>(CX)则转至BIGGER标号执行②(AX)<(CX)则转至LESS标号执行(2)BX和DX中的内容均为有符号数①(BX)>(DX)则转至BIGGER标号执行②(BX)<(DX)则转至LESS标号执行解:(1)CMP AX,CXJA BIGGERJB LESS(2)CMP BX,DXJG BIGGERJL LESS第四章汇编语言程序设计4-9 试用伪指令编写一数据段与下面程序等效。
微机原理与接口技术:转移指令
说明转移范围,以当前 IP 为中心,转移范围-32768~+32767。
说明:在编程时 NEAR 与 SHORT 通常省略,编译时由汇编程序自己计算。如果用了
NEAR 或 SHORT,在编译时有时会提示不正确的属性限制。所以 JMP LABEL 是最常见
的形式。
由于 LABEL 对应一条指令,是这条指令的符号地址,所以以上三种 JMP 形式又称为
表 3-1 条件转移指令
指令名称 进位转移 无进位转移 等于或为零转移 不等于或非零转移 奇偶校验为偶转移 奇偶校验为奇转移 结果为负转移 结果为正转移 溢出转移 不溢出转移 大于则转移 大于或等于则转移 小于则转移 小于或等于则转移 大于则转移 大于或等于则转移 小于则转移 小于或等于则转移 CX内容为0转移
JMP WORD PTR[BX+DI],从[BX+DI]指明的内存区域连续取出两个字节传送给 IP,程序转 移到 CS:IP 处继续执行。操作数可以采用各种寻址方式。
以上两种 JMP 形式又称为段内间接转移,编程时要注意操作数必须是 16 位。
【例题 3-17】
…
MOV DI, 0
JMP DONE
JMP FAR NEXT JMP 8000:2000H JMP DWORD PTR [DI]
2.条件转移指令
条件转移指令先测试条件,若条件成立则执行转移操作;若不成立则不转移并顺序执行 下一条指令。所有的条件转移指令转移范围-128~+127,属于段内短转移,都不影响状态标 志位。
指令格式: JCC OPRD 功能:若条件成立则转移到 OPRD 处执行,IP IP+位移量。 说明:J 是 JUMP 的缩写,CC 表示转移的条件,OPRD 通常是标号。
《微机原理与接口技术》徐惠民 微机原理与接口技术3章
数据传送指令
③ 两个段寄存器之间不能直接传送信息,也不允许 用立即寻址方式为段寄存器赋初值; (X) MOV DS, 100H; (X) MOV DS, ES;
④ 目的操作数,不能用立即寻址方式。
⑤ MOV指令不影响标志位
数据传送指令
2.堆栈指令
功能:从I/O端口输入数据至AL或AX.
输入指令允许把一个字节或一个字 由一个输入端口传送到AL或AX中。若端 口地址超过255时,则必须用DX保存端 口地址,这样用DX作端口寻址最多可寻 找64K个端口。
8086/8088通过 输入输出指令与 外设进行数据交 换;呈现给程序 员的外设是端口 (Port)即I/O地 址。
一般格式:
LES OPRD1,OPRD2
这条指令除将地址指针的段地址部分送入ES外,与 LDS类似。
例如: LES DI,[BX]
数据传送指令
6.标志寄存器传送(有四条标志传送指令)
⑴ LAHF (LOAD AH WITH FLAG) 将标志寄存器中的S、Z、A、P和C(即低8 位)传送至AH寄存器的指定位,空位没有定 义。
2、寄存器寻址
操作数就放在CPU的内部寄存器中,AX、BX、CX、DX、 DI、SI、SP和BP,不需要访问存储器。
例:INC CX MOV AX,BX 若执行前 AX =30A6H, BX =69EDH, CX =40D9H 则执行后 AX =69EDH, BX内容不变 CX =40DAH
3.1 8088/8086的寻址方式
– 操作数是指令执行的参与者,即各种操作的对象。 – 有些指令不需要操作数,通常的指令都有一个或两
个操作数,也有个别指令有3个甚至4个操作数。
微机原理3-3指令系统Ⅴ控制转移
MOV NUM,0 ;清0
MOV SI,2000H ;赋首地址
MOV CX,100 ;给循环次数
AGAIN: MOV AL,[SI] ;取被统计数
OR AL,AL
;影响FR的SF
JNS NOT-NUM ;非负,转移
INC NUM
;负数数量+1
NOT-NUM:INC SI
;地址指向下一个数
定义: 一种非连续而又多次重复的程序段(或叫过程)
特点: 程序中常用到的具有相同功能的部分独立出来形成 。
需要时用调用指令CALL进行调用,子程序结束后,用返 回指令RET再返回原来调用的地方。 优点:
源程序长度缩短,有利于模块化设计,使程序的编制、 阅读和修改都比较方便。
微机原理与接补口充技:术 子 程 序 第3章 指令系统 Ⅴ
例:求S = 1 + 2 + 3 +……+ 100
MOV CX,100 MOV AX,0 MOV DX,0001H REPEAT:ADD AX,DX
INC DX
LOOP REPEAT
HLT
微机原理与接口技术
第3章 指令系统 Ⅴ
2、相等(为零)循环转移指令LOOPE/LOOPZ
形式:LOOPE/LOOPZ short-lable 功能: CX←CX-1;
(五)中断指令
微机原理与接口技术
第3章 指令系统 Ⅴ
(一) 无条件转移指令JMP
格式: JMP OPRD 功能:
若OPRD为16位数,则IPOPRD,实现段内转移; 若OPRD为32位数,则IPOPRD低16,
CSOPRD高16,段间转移。 注解: (1)OPRD常是标号Lable,即某条指令的符号地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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指 令也有近调用、近返回及远调用、远返回两类格式。