2-微处理器指令系统第4讲

合集下载

微机原理 第四章 微型计算机指令系统

微机原理 第四章 微型计算机指令系统

例: 已知: DS=2000H; SI=1000H 指令: MOV [SI+disp],AX
青岛理工大学琴岛学院
寄存器间接相对寻址过程示意图
CPU
寄存器间接相对 SI=1000H
MOV [SI+20H] 程序 ,AX
CS 偏移1000H
DS
SS
ES
位移20H
青岛理工大学琴岛学院
寄存器相对寻址过程示意图
真正数据所在的地址
青岛理工大学琴岛学院
错误指令举例: 6)基址变址寻址: MOV [BX+CX],AX ; CX不能做变址寄存器 MOV [BX+BP],AX ; BP不能作为变址寄存器 操作数的有效地址 EA等于一个基址寄存器( BX或 MOV [BX+DI],ARRAY; BP)与一个变址寄存器( SI或DI)的内容之和;
总时间=基本执行时间+计算EA的时间+执行总线读/写周期的时间
指令的基本执行时间随指令类型的不同差异很大,访问存 储器既要执行总线的读/写周期,又要计算操作数的有效地址 EA,计算EA的时间又与指令的寻址方式有关。
青岛理工大学琴岛学院
4.2 8086/8088指令系统
数据传送类指令
算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理器控制类指令
21000H 20 位 物 理 地 址 真正数据所在的地址 Memory DS … 20000H

78H 21000H 56H
青岛理工大学琴岛学院

4)寄存器间接寻址:
此方式的操作数存放在存储器单元中,指令给出的 16位寄存器值就是该操作数所在存储单元的EA。

例: 已知: (DS)=2100H,(DI)=2000H 指令: MOV AX,[DI] ;(AX) ((DI)) 注:使用BX、SI、DI,操作数在DS段;BP时在SS段 其中寄存器只能是BX、SI、DI、BP

《计算机组成原理》教程第4章指令系统

《计算机组成原理》教程第4章指令系统

4
二 指令的格式
即指令字用二进制代码表示的结构形式
包括 操作码:操作的性质 操作码 地址码:操作数(operand)的存储位置,即参加操作的 operand , 地址码 数据的地址和结果数的地址
操作码域(op) 地址码域(addr)
5
1.操作码 操作码
指令的操作码表示该指令应进行什么性质的操作。 组成操作码字段的位数一般取决于计算机指令系统的 规模。 固定长度操作码:便于译码,扩展性差 . 可变长度操作码:能缩短指令平均长度 操作码的的位数决定了所能表示的操作数,n位操 作码最多表示2n种操作
(2). 堆栈工作过程 .
(一)进栈操作 ① 建立堆栈,由指令把栈顶地址送入SP,指针 指向栈顶。 ② 进栈:(A)→Msp, (sp)-1→SP ;Msp:存储 器的栈顶单元 (二)出栈操作 (SP)+1→SP, (Msp)→A
22
五.指令类型
一个较完善的指令系统应当包括: 数据传送类指令: 例)move、load、store等 算术运算类指令: 例)add、sub、mult、div、comp等 移位操作类指令: 例) shl,shr,srl,srr 逻辑运算类指令: 例)and、or、xor、not等 程序控制类指令: 例)jump、branch、jsr、ret、int等 输入输出指令: 例)in、out等 字符串类指令: 例)如alpha中cmpbge、inswh、extbl等 系统控制类指令: 例)push、pop、test等
18
10) *段寻址方式 段寻址方式 Intel 8086 CPU中采用了段寻址方式(基址寻址的特例)。 由16位段寄存器和16位偏移量产生20位物理地址 11)*自动变址寻址 自动变址寻址 指在变址方式中,每经过一次变址运算时,都自动改变变址寄存 器的内容,以后在PDP-11中详讲.

微机原理 第02章

微机原理 第02章
• 则其对应的物理地址为BC777H 。
存储器单元的地址
物理地址 12340H 67H 逻辑地址(段+偏移) 1234H:0000H
12341H
12342H 12343H 12344H
67H
67H 67H 67H
1234H:0001H
1234H:0002H 1234H:0003H 1234H:0004H
AH AL BH BL CH CL DH DL SP BP
DI SI
(图2-2) 数据寄存器
地址寄存器
总线 控制 逻辑 电路
外 总 线
运算寄存器 ALU 标志
执行部分 控制电路
1 2 3 4
指令队列缓冲器 4个字节 总线接口单元 (BIU)
执行单元 (EU)
指令预取
取指令1 执行指令1 取指令2 执行指令2 取指令3 执行指令3
存储器的分段管理
• 8086/8088将1MB存储器空间分成若干个逻辑段 来管理。每个段最大限制为64KB。 • 采用逻辑地址(段地址:偏移地址)的形式来表达 段中每个存储器单元的20位物理地址。 • 段地址和偏移地址都是16位二进制数。
段地址
• 段地址说明该逻辑段在内存中的起始位置,即该 段中的第一个内存单元的物理地址。 • 段地址必须是模16地址,即××××0H的形式, 故可采用16位二进制数据表示,保存在段寄存器 (CS,DS,ES,SS)中。
低地址
AL ... 操作码 05H ... 指 令 代 码 段
例: MOV AL, 05H
指令执行后: (AL)=05H
05H
高地址
低地址
例:MOV AX, 3064H
指令执行后: (AX)=3064H

大学计算机第4讲-冯-诺依曼计算机器-程序执行

大学计算机第4讲-冯-诺依曼计算机器-程序执行

自动存取:存储器的工作原理 (1)什么是存储器?
存储器的基本结构
概念映射
存储器
存储单元 存储位(存0或存1) 地址编码An-1…A0 单元控制线Wi 输出缓冲器 …
宿舍楼
房间 床位(住人/不住人) 房间号 房间钥匙 公共的走廊及大门 ……
从存储器与宿舍楼的概念对比中,你能发现什 么异同吗?
自动存取:存储器的工作原理 (2)存储器是怎样存储0和1的? 又是怎样控制存取的?
图灵机的思想与模型简介 (4)小结?
输入
程序&指令 (计算规则)
按计算规则(程序)对输 入进行变换得到输出
输出
输入/输出都是0和1的形 式表达
程序和指令也是0和1的形 式表达
程序可用状态转换 图来表达
冯.诺依曼计算机: 思想与构成
战德臣
哈尔滨工业大学 教授.博士生导师 教育部大学计算机课程教学指导委员会委员
OK Z hanD C
Research Center on Intelligent Computing for Enterprises & Services,
Harbin Institute of Technology
冯.诺依曼计算机: 思想与构成 (1)什么是冯.诺依曼计算机?
冯.诺依曼(Von.Neumann)计算机
基本目标: 理解程序是如何被执行的
基本思维:机器级算法与程序机器指令与指令系统存储器存储程序运 算器与控制器机器级程序的执行;算法程序化程序指令化指令存储化 执行信号化
机器指令与机器级程序
战德臣
哈尔滨工业大学 教授.博士生导师 教育部大学计算机课程教学指导委员会委员
OK Z hanD C
Research Center on Intelligent Computing for Enterprises & Services,

第二章-8086微处理器

第二章-8086微处理器

答案:A
思考题
8086/8088的状态标志有 A)3 B)4 C)5 答案:D 个。 D)6
思考题
8086/8088的控制标志有 A)3 B)4 C)5 答案:A 个。 D)6
三、引脚信号和功能(图2-5 )
8086总线周期的概念: 为了取得指令或传送数据,就需要CPU的总线接 口单元(BIU)执行一个总线周期。 一个最基本的总线周期由4个时钟周期组成。 习惯上将4个时钟周期分别称为4个状态,即T1状 态、T2状态、T3状态和T4状态。 图2-17
2.方向标志DF(Direction Flag) 用于串操作指令中的地址增量修改(DF =0)还是减量修改(DF=1)。 STD使DF=1 CLD使DF=0
(三)标志寄存器-控制标志(续)
3.跟踪标志TF(Trap Flag) 若TF=1,则CPU按跟踪方式(单步方式) 执行程序,否则将正常执行程序。
思考题
指令队列的作用是 A)暂存操作数地址 。 B)暂存操作数
C)暂存指令地址
D)暂存预取指令 答案:D
思考题
8086的指令队列的长度是 A)4个 B)5个 C)6个 D)8个 字节。
答案: C
思考题
8088的指令队列的长度是 A)4个 B)5个 C)6个 D)8个 字节。
答案:A
思考题
第二章 8086/8088微处理器
8086/8088微处理器的结构 8086/8088典型时序分析

简 介
8086:16位微处理器 数据总线宽度16位:可以处理8位或16位数据 地址总线宽度20位:可直接寻址1MB存储单元和 64KB的I/O端口 8088:准16位处理器 内部寄存器及内部操作均为16位,外部数据总线8位 8088与8086指令系统完全相同,芯片内部逻辑结构、芯片引 脚有个别差异。 设计8088的目的主要是为了与Intel原有的8位外围接口芯片 直接兼容

微机原理接口技术03_指令系统

微机原理接口技术03_指令系统

3.2.1 数据的寻址方式
基址变址寻址同样适用于数组或表格处理,首地 址存放在基址寄存器中,变址寄存器访问数组中各元
素。因两个寄存器都可以修改,所以它比寄存器相对
寻址方式更灵活。需要注意的是,两个寄存器不能均 为基址寄存器,也不能均为变址寄存器。
3.2.1 数据的寻址方式
7.基址变址相对寻址 (Relative Based Indexed Addressing) 操作数的有效地址为指令中规定的1个基址寄存 器和1个变址寄存器的内容及指令中指定的位移量三 者之和。 位移量[基址寄存器][变址寄存器] 可以表示成多种形式组合。寻址寄存器要放在方括 号中。
3.2.1 数据的寻址方式
4.寄存器间接寻址(Register Indirect Addressing) 操作数的有效地址存放在基址寄存器或变址寄存 器中,而操作数则在存储器中。对16位数进行寄存器 间接寻址时可用的寄存器是基址寄存器BX、BP和变 址寄存器SI、DI。使用BP时默认的段寄存器为SS, 使用其他寄存器默认的段寄存器为DS。 操作数有效地址格式为:[间接寻址的寄存器]。 寻址寄存器放在方括号中。
CPU执行指令时,指令是按顺序存放在存储器 中的,而程序执行顺序是由CS和IP的内容来决定的。 当程序执行到某一转移或调用指令时,需脱离程序 的正常顺序执行,而把它转移到指定的指令地址, 程序转移及调用指令通过改变IP和CS内容,就可改 变程序执行顺序。
3.2.2 程序转移地址寻址方式
根据程序转移地址相对于当前程序地址的关 系,可分为段内、段外;又根据转移地址是否直 接出现在指令中,分为直接、间接,所以有四种 程序转移寻址方式:段内直接寻址、段内间接寻
第3章
指令系统
指令是计算机用以控制各个部件协调

微型计算机指令系统


例:已知:(DS)=2100H,(DI)=2000H
指令: MOV AX,[DI] ;(AX)
物理地址=(DS) * 16 + (DI)
((DI))
=2100H * 16 + 2000H
=21000H + 2000H
=23000H
指令结果:将23000H单元内容送AL中,
将23001H单元内容送AH中。
3、1 8086/8088的寻址方式
本章主要介绍8086/8088的指令系统以及在指令中为 取得操作数地址所使用的寻址方式。
汇编指令:
操作码 操作数
操作码:指令操作类型; 操作数:指令所需操作数或操作数的地址;操作数可以 有一个,也可以有两个,一个源操作数,一个目的操作 数。 例: MOV AX,CX ;将CX的内容送入AX中。
5、相对基址变址寻址方式
操作数在存储器内,指令将基址寄存器(BX或BP)与 变址寄存器(SI或DI)的内容之和再加上位移量(8位 或16位),得到操作数所在单元的有效地址。
有效地址=
(BX)
(BP)
+
(SI)
DISP8
+
(DI)
DISP16
物理地址 = (DS)* 16 +(BX)产生的有效地址
物理地址 = (SS)* 16 +(BP)产生的有效地址
AA
AA 间接寻址 BB AX
0001
AH
AL
操作数在存储器中,指令中寄存器内容作为操作数所在 单元的有效地址。
(BX) 有效地址 =
(SI)
(DI)
段寄存器为DS 段寄存器为SS
(BP) 物理地址计算方法:
物理地址 = (DS)* 16 + (BX)或(SI)或(DI) 物理地址 = (SS)* 16 + (BP)

大工计算机原理第3章8086微处理器的指令系统(1)资料

第3章 8086微处理器的指令系统(1)3.1 指令系统概述● 指令系统是一台计算机所能(识别和执行)的全部指令的集合。

它与(微处理器)有着密切的关系,不同的微处理器有不同的指令系统。

8086CPU 包含133条指令● 指令是使计算机执行某种(特定操作)的二进制编码。

指令一般包括两个部分:(操作码域)和(地址域)。

填空操作码域:存放指令的操作码,即指明该指令应由计算机完成何种操作。

地址域:确定操作数的值或地址、操作结果的地址,有的指令的地址域还指出下一条指令的地址。

● 机器指令:计算机能(直接识别)的二进制代码。

● 汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的● 汇编程序:将汇编语言源程序翻译成机器语言(就是一条一条的机器指令),即目标程序。

3.2寻址方式● 根据(指令内容)确定(操作数地址)的过程,称为寻址。

● 根据寻址方式计算所得到的地址叫做(有效地址EA ),也就是(段内偏移地址)。

有效地址还需要与相应的(段基地址)组合才是20位的(物理地址PA) ,该工作由微处理器来完成。

牢记什么是EA ?什么是PA ?怎么计算?后面有关于EA 和PA 的解释及计算方法!● 寻址方式在两种方式下被涉及:(操作数)的寻址方式和(指令)的寻址方式。

如果没有特别说明,寻址方式是指源操作数的寻址方式。

1、隐含寻址(隐含了规定的操作数)例:DAA 指令,只有操作码,无操作数。

规定对AL 中的内容进行压缩BCD 码转换。

2、立即寻址(操作数(立即数)直接放在指令中,不需访问存储器)例:MOV AX ,1234H (若CS=1000H ,IP=100H )3、寄存器寻址(操作数就放在内部寄存器中,不需访问存储器)例:INC CX ;(CX)←(CX)+1 MOV AX ,BX ;执行后BX 内容不变 4、直接寻址(指令中直接给出操作数的存放地址) 例1:MOV AX ,[4000H] (DS =3000H )☞操作数寻址 可以进行寄存器寻址的寄存器: (16位)AX 、BX 、CX 、DX 、SI 、DI 、SP 、BP(8位) AH 、AL 、BH 、BL 、CH 、CL 、DH 、DL例2:MOV ES:[1234H],BL (ES =4000H )注意:(1)指令中给出的[4000H]和[1234H]是操作数的偏移地址。

第4章Intel 80868088指令系统


物理地址=30000H+1150H=31150H
执行后: (AX)=5678H。
第四章 Intel 8086/8088指令系统
5. 相对基址变址寻址
特点:操作数的有效地址是一个基址寄存器与一个变址寄 存器的内容之和再加上8位或16位位移量。同样,当基址寄存器 为BX时,用DS作为段寄存器; 而当基址寄存器为BP时,则用 SS作为段寄存器。因此物理地址为 (SI) 8位 位移量 物理地址=(DS)×16+ (BX)+ + (DI) 16位 (SI) 8位 位移量 + 物理地址=(SS)×16+ (BP)+ (DI) 16位
执行后: (AX)=1234H, (BX)不变。
第四章 Intel 8086/8088指令系统
4.1.4 存储器寻址
操作数在存储器中。存储器是分段管理的, 要找到操作数, 必须指明操作数所在的段(段基址由段寄存器指明)及段内偏 移地址(以有效地址EA的形成方式指出)。 1. 直接寻址方式 特点:指令中直接给出操作数在段内的偏移量,段基址隐 含给出或用段前缀指明。该寻址方式适用于处理单个变量。
4.1.1 8086/8088的通用指令格式 机器语言指令是由二进制代码组成的。一条指令是由操作 码与操作数字段构成的,其一般格式为 操作码字段 + 操作数字段 操作码字段指明计算机所要执行的操作(即功能);操作 数字段指出在指令执行过程中所需要的操作数。 例如: ADD AX, BX
第四章 Intel 8086/8088指令系统
变址寄存器内容之和。 (SI) 物理地址=(DS)×16+ (BX)+ (DI) (SI) 物理地址=(SS)×16+ (BP)+ (DI) 适用表格或数组处理,表格或数组首地址可存放在基址寄存器中。

第4章 指令系统(一)

格式:转移指令OPD;OPD为间接数据寻址方式
功能:(OPD)--> IP,(OPD+2)-->CS
例4.1.13:JMP DWORD PTR [BX]
物理地址的形成过程如图4-9。
图4-9物理地址形成过程
作业
P137 4.1 4.2 4.3 4.4题
教学反馈
操作数直接放在指令中,以立即数或常数的形式出现,它是紧跟在指令操作码后面的一个可用8位或16位二进制补码表示的有符号数。
汇编语言格式:N
功能:指令下一单元的内容为操作数N,如图4-1。
图4-1立即寻址方式指令在存储器中存储形式
指令指明的寄存器就是操作数的存放地址,操作数在指令指明的寄存器中。
汇编语言格式:R
如:MOV AX, 0指令中的0为立即数操作数。
(2)寄存器操作数:指令中所需的操作数放在指定的寄存器中。
如:MOV AX, BX指令中的BX寄存器为寄存器操作数。
(3)存储器操作数:指令中所需的操作数放在指定的存储器中的存储单元中,而指令中的操作数提供存储单元的偏移地址。
如:MOV AX, [1000H]指令中的[1000H]为存储器操作数。
教学手段
多媒体教学
教学内容:
第4章8086/8088寻址方式及指令系统(一)
汇编语言程序是由一条一条的指令组成的,指令相当于高级计算机语言(如C语言)中的语句,它是人们操纵和控制计算机的工具,让计算机按人们的意图工作,即我们常常所说的编写程序。指令系统是微处理器所能执行的指令的集合,类似于小孩子玩具的积木,我们所编写的程序由指令组成。指令系统与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中我们主要讨论INTEL公司生产的8086/8088微处理器指令系统,它有100多条指令,每条指令最多由四部分组成:标号场、操作场、操作数场、注释场。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据块传送(字)
mov cx,200h
;设置循环次数:1K÷2=200H
mov si,offset sbuf
;设置循环初值:SI指向数据段源缓冲区开始
mov di,offset dbuf again:
;DI指向附加段目的缓冲区开始(附加段) mov ax,[si] ;循环体:实现数据传送 mov es:[di],ax ;每次传送一个字 add si,2 ;指向下一个(字)单元
;循环条件判定:循环次数减1,不为0转移(循环)
add di,2 loop again
子程序指令


子程序是完成特定功能的一段程序 采用CALL指令转移到该子程序的起始 处执行 采用RET指令回到主程序继续执行 用堆栈保存断点与现场 使用子程序时,注意堆栈的变化
子程序调用指令CALL

例题

题目:找出无符号数AL,BL,CL中的最大值, 设三个数不相等
CMP AL,BL AL>BL N Y CMP AL,CL AL>CL Y MAX=AL AL交换BL
CMP AL,BL JAE NEXT; XCHG AL,BL NEXT:CMP AL,CL JNB NEXT1 XCHG AL,CL NEXT1:MOV MAX,AL
JCXZ label;如果CX=0(直接判断),则转移到
label


label操作数采用相对短寻址方式 还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令
循环指令



LOOPZ/LOOPE label;为零/相等时循环 操作:(CX)← (CX)-1 若ZF=1且CX≠0,则转移到label;否则退出循 环 功能:将CX减1,如果CX为0或者ZF为0则退出 循环,在ZF=1且CX≠0时继续循环。 注意:CX中的值为0时,并不会影响标志位ZF。

间接寻址方式


目的地址从指令中寄存器或存储单元中间接获 得 例如:JMP [BX]
目标地址的寻址范围:段内寻址


段内转移——近转移(near) 在当前代码段64KB范围内转移 ( ±32KB范围) 只改变IP,CS不变 JMP START 段内转移——短转移(short) 转移范围可以用一个字节表达,在段 内-128~+127范围的转移 JNZ LP
例: 求两符号数较大值
cmp ax,bx ;比较AX和BX jge next ;若AX≥BX,转移 xchg ax,bx ;若AX<BX,交换 mov wmax,ax
next:
循环指令

8088设计有针对CX计数器的专门计数循环指令 LOOP label ;循环指令
;首先CX←CX-1;然后判断;若CX≠0,转移
相对寻址方式 直接寻址方式 间接寻址方式
相对寻址方式

指令中提供目的地址为:相对于当前IP的位移 量,转移后的IP值=当前IP值加上位移量
MOV BX,0678H LP:DEC BX JNZ LP;该指令中操作数部分为相对位移量
直接寻址方式
转移后的目标地址直接来自指令中提供的目标 逻辑地址 MOV BX,0678H LP:DEC BX JMP LP;指令中操作数部分为逻辑符号地址LP 的值
例:将数据段的sbuf开始的1KB数据传送到附加 段的Dbuf开始的区域

可以以字节或字为单位传送
以字节为单位传送:


一次传送1字节
利用循环 初始化源、目标地址和循环计数
数据块传送(字节)
mov cx,400h;设置循环次数:1K=400H mov si,offset sbuf;SI指向数据段源缓冲区首址 mov di,offset dbuf;DI指向附加段目的缓冲区首址 again:mov al,[si] ;循环体:实现数据传送 mov es:[di],al ;每次传送一个字节 inc si ;SI和DI指向下一个单元 inc di loop again;CX=CX-1,不为0转移(循环)
子程序返回指令RET

根据段内和段间、有无参数,分成4种类型

RET ;无参数段内返回 RET i16;有参数段内返回,SP+i16 RET ;无参数段间返回 RET i16;有参数段间返回,SP+i16 段内返回——出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
LOOPZ举例
设内存中存放一字符串,找出第一个不是a的 字符,并记下它的地址放在ADDR单元,如果 都是a字符,则将ADDR单元清0。 Dseg segment String db ‘aaaaaabaaaa….’ Agin: inc si Count db 50 cmp al,[si] Addr dw ? loopz agin Dseg ends jnz next Cseg segment mov si,0 Assume cs:cseg,ds:dseg Next: mov addr,si Start: mov ax,dseg mov ah,4ch mov ds,ax int 21h lea si,string Cseg ends mov cl,count end start mov ch,0 mov al,’a’ dec si
段内直接无条件转移

JMP label;
IP=偏移地址label
举例: START: INC BL ADD AL,BL JMP START
条件转移指令


条件转移指令Jcc根据指定的条件确定程序是 否发生转移。其通用格式为: Jcc label ;条件满足,发生转移 ;IP←IP+8位位移量; ;否则,顺序执行 label是一个标号 label只支持短转移的相对寻址方式
代 码 段
代 码 段
目标地址的寻址范围:段间寻址

段间转移——远转移(far) 从当前代码段跳转到另一个代码段, 可以在1MB范围 需要更改CS段地址和IP偏移地址
实际编程时,汇编程序会根据目标地址的 属性,自动处理成短转移、近转移或远转移 程序员可用操作符 short 、 near ptr 或 far ptr 强制成为需要的转移类型
Jcc指令的分类

Jcc指令不影响标志,但要利用标志(表2-3) 根据利用的标志位不同,分成两种情况比较有符号数 大小与比较无符号数高低)
判断单个标志位状态
⑴ JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等) ⑵ JS和JNS 利用符号标志SF,判断结果是正是负 ⑶ JO和JNO 利用溢出标志OF,判断结果是否产生溢出 ⑷ JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是奇 ⑸ JC/JB/JNAE和JNC/JNB/JAE 利用进位标志CF,判断结果是否进位或借位
2.6 控制转移类指令


控制转移类指令用于实现分支、循环、过 程(子程序)等程序结构 重点掌握: JMP/Jcc/LOOP/JCXZ CALL/RET INT n/IRET 常用系统功能调用
控制转移类指令通过改变 IP (和 CS )值,实现程 序执行顺序的改变
目标地址的寻址方式

子程序调用举例
将data单元中的一字节十六进制数转成两个 ASCII码,分别存放asch和ascl中
Dseg segment data db 8ah Asch db ? Ascl db ? Dseg ends Cseg segment Assume cs:cseg,ds:dseg Start: mov ax,dseg mov ds,ax Mov dl,data and al,0f0h Mov cl,4 Shr dl,cl Call htoasc mov asch,dl Mov dl,data And dl,0fh Call htoasc mov ascl,dl mov ah,4ch int 21h Htoasc proc … … ret Htoasc endp Cseg ends end start
例题

题目:判断AX与BX内容是否相等,如果相等, 则将MAX单元置0,不相等则置-1
CMP AX,BX JZ ZERO MOV MAX,0FFH JMP NXET
ZERO:MOV MAX,0 NEXT:
例题

题目:找出无符号数AL,BL,CL中的最大值, 设三个数不相等
CMP AL,BL AL>BL N Y CMP AL,CL AL>CL Y MAX=AL AL交换BL
CMP AL,BL JNC NEXT XCHG AL,BL NEXT:CMP AL,CL JNC NEXT1 XCHG AL,CL NEXT1:MOV MAX,AL
N AL交换CL
比较无符号数高低
无符号数的大小用高(Above)、低(Below) 表示,需要利用CF确定高低、利用ZF标志确定 相等(Equal) 两数的高低分成4种关系,对应4条指令 JB(JNAE):目的操作数低于(不高于等于)源操作数 JNB(JAE):目的操作数不低于(高于等于)源操作数 JBE(JNA):目的操作数低于等于(不高于)源操作数 JNBE(JA):目的操作数不低于等于(高于)源操作数

需要弹出CALL指令压入堆栈的返回地址


例: 十六进制转换为ASCII码的子程序

将DL低4位的一位16进制数转换成ASCII码
0-9:30h-39h(+30h)
A-F:41h-46h(+30h+07h)
PROC与ENDP必须成对出现, PROC 后可加参数 near和far分 例: 十六进制转换为 ASCII 码的子程序 别表示近过程和远过程,如 省略,为近过程 htoasc proc;定义子程序(过程)开始伪指令 and dl,0fh ;只取DL的低4位 or dl,30h ;+30h cmp dl,39h ;是0~9,还是0Ah~0Fh ? jbe htoend ;是0~9,转移 add dl,7 ;是0Ah~0Fh,再+7 htoend: ret ;子程序返回 htoasc endp;定义过程结束伪指令
相关文档
最新文档