第03章 8086的指令系统D

合集下载

微机原理课件第三章8086寻址方式和指令系统

微机原理课件第三章8086寻址方式和指令系统
2取 单.如操元果作的指数 地令寄, 址中存钥 。用器匙对寄就于间存或相寄接器=当存D寻B于器SP址×进存间1方行储接6+式间D接I的寻E址A计,寄则算存默器 认操作
数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器SS中,操 作放数在的寄物存理器地中址,=即SS寄×存1器6+给BP出。 了要访问的存储单元地址。
DS 3000H ×16

SI 2000H
操作码
+ COUNT 4000H
00
代码段
40
寄存器3相60对00H寻址方式也允许使┋用段超越前缀,
如MOV BX,ES:COUNT[DI]则段地址为ES,物
理地址=ES×16+DI+COUNT。
BH
BL

BX 56
78
36000H
78
56
数据段

指令MOV BX,COUNT[SI]的执行过程
{{ }} 组合起来([B只X能]+相[S加I)]+,D同8或时D还1可6 以加上一个8位或
((1SE86IE8和位A种A种=D的=)I)位也移不[[[[[[[BBB量能BSDBXPPPIIX]],]同]]]]+++但时++++[[[DDDDSDB出8888IIIX现或 或或 或]]]和+++在DDBDDD11P方1188866不66或 或 或括能DDD号111同寄中666时;存出器现相 变在相对 址方对基 寻括寻号址 址址中,
{ 设((D3E86A种S0==0M)300HO0)V[[[[0HBSBD=XIPIB,5]]]]X6或S7,+I8=18H[2S6位0I位0+位0C位H移O,移U量位N量T移] 量COU默 默N认 认T=DS4SS0段 段00H,

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

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

微机原理第3章8086指令系统8086是Intel公司推出的一种16位微处理器,是x86架构的第一代处理器。

8086指令系统是8086微处理器所支持的指令集合,本章将介绍8086指令系统的基本特性和指令编码格式。

8086指令系统采用变长指令编码格式,指令长度可以是1个字节到多个字节,提供了多种寻址方式和丰富的操作类型。

8086指令系统共支持256条标准指令,可以执行各种算术逻辑运算、数据传输和控制流操作。

8086指令由操作码和操作数组成。

操作码指示了执行的具体操作,操作数则是操作码所针对的数据。

8086指令系统提供了多种寻址方式,包括立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址和基址变址寻址等。

立即寻址是将常数或数据直接作为操作数,如MOVAX,1000H,表示将立即数1000H传送到AX寄存器。

直接寻址是通过指定一个内存单元的地址来作为操作数,如MOVAL,[BX],表示将BX寄存器指向的内存单元的内容传送到AL寄存器。

寄存器寻址是直接将一个寄存器作为操作数,如MOVAX,BX,表示将BX寄存器的内容传送到AX寄存器。

除了寻址方式,8086指令系统还提供了多种操作类型,如算术逻辑运算、数据传输和控制流操作等。

算术逻辑运算可以进行加、减、乘、除等数学运算,如ADD、SUB、MUL、DIV等指令。

数据传输可以进行数据的读取和存储操作,如MOV、PUSH、POP等指令。

控制流操作可以用于程序的跳转和条件判断,如JMP、JZ、JC等指令。

8086指令系统还支持多种数据类型的操作,包括字节、字和双字等。

字节操作是对8位数据进行操作,字操作是对16位数据进行操作,双字操作是对32位数据进行操作。

指令的操作数大小可以根据需要选择合适的寄存器或内存单元。

总之,8086指令系统是8086微处理器所支持的指令集合,提供了多种寻址方式和操作类型,支持多种数据类型的操作。

通过掌握8086指令系统,可以编写出高效、精确的8086汇编程序,实现各种功能和算法。

第三章 8086的指令系统

第三章 8086的指令系统
操作码 操作数
机器指令 B0 56 04 78 CB
操作码 操作数
计算机执行的指令是机器指令,是一串二进制代码。 MOV、ADD 是机器指令操作码 B0、04 的助记词。
2. 8086的机器指令格式
B1 OP D W MOD B2 B3 REG R/M B4 B5 B6
操作码 (6)
方 0-字节 寻址 向 1-字操作 方式
立即数→通用寄存器、内存单元
立即数→通用寄存器 MOV AX,2356H; MOV BH,33H; 立即数→内存单元 MOV [BX+SI],0F080H; MOV BYTE PTR [BX],12H; 源操作数、目的操作数的类型要匹配。 源操作数是单字节,目的操作数是间址、变址、基址+ 变址的内存操作数,后者必须用PTR说明是字节型。
三. 标志寄存器
1. 格式 2. 含义
1. 格式
记录当前指令执行后的特征信息,16位数据用9位
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 O D I T S Z A P C
溢出
8位无符号数相加大于255,有符号数相加大于127或小于 -128 16位无符号数相加大于65535,有符号数相加大于32767 或者 小于-32768; 判断 操作数是有符号数,运算后O标志为1表示溢出。
寄存 器号
寻址 方式
① ② ③ ④ ⑤ ⑥
8086 指令是 1~6字节的变字节指令格式。 指令的长度:最少一个字节,最多六个字节。 B1、B2为基本字节,B3-B6 根据指令取舍。 B1字节-称作操作码字节,必不可少的。 B2-操作数寻址方式。一条指令最多可用两个操作数。 B3~B6- 一般为存储器操作地址位移量或立即操作数。

2_第3章 8086指令系统_加减运算指令比较指令52

2_第3章 8086指令系统_加减运算指令比较指令52
4
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同
一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位来检查无符号数和有符号数的 运算结果是否溢出
而乘除运算指令则需要区分无符号数和有符号数
11 11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多次运算的加法 运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区 假设CPU进行8位的加法运算,为此将进行4次加法运算
.386
……
MOVZX AX, A
MOVZX BX, B
ADD
AX, BX
MOVZX BX, C
ADD
AX, BX
MOV
SUM, AX
;取第一个数,扩展0传送 ;取第二个数 ;加第二个数 ;取第三个数 ;加第三个数 ;保存三个数的和
20 20
[例] P,Q,R均为8位有符号数,求它们的和,送入TOTAL
这个问题的另一种方法:
MOV AL, A
;取第一个数
MOV AH, 0
;高8位清零,准备存放和的高8位
ADD AL, B
;加第二个数
ADC AH, 0
;如果有进位,存入AH
ADD AL, C
;加第三个数
ADC AH, 0
;如果有进位,加入AH
MOV SUM, AX ;保存三个数的和
19 19
这个问题的第三种方法:

第3章_8086指令系统

第3章_8086指令系统

EA =

(BX) (BP)
+
(SI)
(DI)
同一组内的寄存器不能同时出现。
寻址的寄存器为BX时,默认的段寄存器为DS ; 寻址的寄存器为 BP时,默认的段寄存器为SS 。 例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
立即数只能作为源操作数
MOV AX,0FA00H MOV 8000H,DX ;正确 ;错误
• 2、寄存器操作数
存放在8个通用寄存器或4个段寄存器中的操作数
AX BX CX DX
AH BH CH DH
AL BL CL DL
可以存放8位或 16位操作数
SI DI BP SP
只能存放16位操作数
CS
DS ES SS
61200
AX AH AL
61200H
44H 33H
数 据 段
寄存器相对寻址

EA=间址寄存器的内容加上一个8/16位的位移量
(BX)
EA =
(BP) (SI) (DI)
+
8位
16位
位移量
寻址的寄存器为BX、SI、DI,默认的段寄存器为DS ;
寻址的寄存器为 BP时,默认的段寄存器为SS 。

例: MOV AX, [BX+8] MOV CX, TABLE[SI] MOV AX, [BP+16H] ;
数 据 段
基址-变址-相对寻址
在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址

微机原理与接口技术 (第三版)电子工业出版社 第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 装入一个新的物理地址

第三章 8086 8088指令系统

第三章 8086 8088指令系统

SI 1200
+)
6000 0 1200 61200 AX 33 44
61200H 61201H
存储器 . . . 44H 33H 数 据 段
. . .
图 3-5 寄存器间接寻址示意图
3.2.5 寄存器相对寻址
寄存器相对寻址——操作数在存储器中。由指令指定的地址寄存器的内容加上指令中
给出的一个8位或16位的地址位移量,即可得操作数的偏移地址。
SI AX AX AX AX AX
3.2.8隐含寻址
隐含寻址—— 操作数隐含在操作码中,在有些指令的操作数中,不仅包含了操作的性质,
还隐含了部分操作数的地址。如乘法指令 MUL,在这条指令中只须指明乘数的地址,而被乘数 已经乘积的地址是隐含且固定的。这种将一个操作数隐含在指令码中的寻址方式就称为隐含
立即数操作数: 所谓立即数指具有固定数值的操作数,不因指令的执行而发生变化 。立即数操作 数只能用作源操作数,而不能用作目标操作数。

寄存器操作数:
8086CPU的8个通用寄存器和4个段寄存器可以作为指令中的寄存器操作数,寄存
器操作数在指令中既可以作为源操作数,也可以用作目标操作数。 存储器操作数: 参加运算的数据是存放在内存中。
两单元的内容送到AX中。假设DS=2000H,则所寻找的操作数的物理地址为: 2000H×10H+3102H = 23102H, 指令的执行情况如图3-3所示
存储器 . . .
MOV操作码
02H 31H AH AL 23102H 23103H
图 3-3 直接寻址方式
代 码 段
. . . ×× ×× . . . 数 据 段
请注意:使用基址—变址方式时,不允许将两个基址寄存器或两个变址寄存器组合

第3章 8086指令系统(2)

第3章 8086指令系统(2)
3.3 80X86指令系统
8086/8088指令系统按其功能分为以下类型:数 据传送指令、地址传送指令、标志寄存器传送 指令、算术运算指令、逻辑运算指令、移位指 令、控制转移指令、串操作指令、中断指令和 处理器控制指令。
一.数据传送指令
数据传送指令用于寄存器、存储单元、或输入
输出端口之间传送数据或地址。8086/8088有14
CMP AL,100
29
CMP指令执行后对标志位的影响
操作数类型
带符号的 二进制
CF ZF SF OF
两操作数的关系
01 0 0
等于
-010
小于
- 0 0 1 目的操作数 小于 源操作数
-000
大于
-011
大于
不带符号的 二进制
01 0 0
等于
10 -
- 目的操作数 低于 源操作数
00 -
-
高于
举例: n=8 bit 带符号数(-128~127), 无符号数(0~255)
PUSH AX
PUSH DX
78H
POP AX
56H
POP DX
34H
12H
9
(4)XCHG指令 格式:XCHG OP1,OP2 操作:源、目的操作数之间交换一个字节 或字的数据。源操作数或目的操作数只能 取通用寄存器或通用寄存器与存储器 例: XCHG AX,CX
XCHG AL,BL XCHG AX,[BP+DI]
中的数相乘,结果放在累加器中
乘积为双字节长时,结果放在AX中;乘积为双 字长时,分别放在DX(乘积的高16位)和AX中。 该指令的运行结果只影响标志位CF和OF 例:MOV AL,FIRST
MUL SECOND MOV THIRD,AX (2)IMUL指令 格式:IMUL SRC 该指令为带符号数相乘指令

第3章 8086指令系统(最后有练习题)

第3章  8086指令系统(最后有练习题)


开 始
8086CPU的指令系统的基本指令

包括数据传送类指令、算术运算类指令、 位操作类指令、串操作类指令、控制转移 类指令、处理机控制类指令。后几节将分 别介绍这些指令的语句格式和功能。
3.1 8086的寻址方式

3.1.1 数据的寻址方式 3.1.2 程序转移地址的寻址方式 3.1.3 对端口的寻址方式
3.1.2 程序转移地址的寻址方式
用来确定转移指令及CALL指令的转向地址。
段内寻址
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段间寻址
段内:转移指令与转向的目标指令在同一代码段 中,(CS)不变。
段间:转移指令与转向的目标指令在两个代码段中, (CS) 变化。
表示转移距离(称为位移量)的操作符:
返回本节
2 . 寄存器寻址


寄存器寻址方式的操作数在指令指明的寄 存器中。 汇编格式:R ,其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。 例如:MOV AL,BL
【例3-2】下列程序执行后,(AX)=?,
(BX)=?
MOV AX,1234H
MOV BX,5678H
ADD AX,BX 执行:1234H→AX 5678H→BX (AX)+(BX)→AX 执行后:(AX)=68ACH,(BX)=5678H
3 . 直接寻址




特点:操作数在内存中。 汇编格式:①含有变量的地址表达式。 ②段寄存器名:[EA] 。 功能:指令下一字单元的内容是操作数的偏 移地址EA。 图形表示:
【例3-3】
寄存器和存储器内容为:(AX)=1212H, (DS)=3000H,(32000H)=45H, (32001H)=46H。 执行指令:MOV AX ,[2000H] 问执行后:(AX)=? Step1:计算地址DS*16+2000H=32000H Step2:找内容(32000H),(32001H) 所以执行后:(AX)=4645H

第三次课 8086的指令系统

第三次课   8086的指令系统

第三章8086的指令系统3.1 8086指令系统概述所谓一个微处理器的指令系统是一个微处理器所执行的全部指令的集合。

在8086的指令系统中一共有133条指令。

8086指令系统是在8位微处理器8080/8085的指令系统基础上设计的,它兼容了8080/8085的全部指令,这部分对8位微处理器具有兼容性的指令往往是处理字节(8位)的。

此外,8086还有自己所特有的对字或字符串的处理指令,以及对带符号数的运算指令、中断指令和协处理器指令。

对微处理器的指令的描述,一般有两种表示方法:指令的机器码和汇编指令。

无论对于机器码指令还是对于汇编指令均要解决三个问题(三个信息)(1)指令要完成什么操作(操作码);(2)参加这个操作的操作数在哪里(操作数);(3)操作结果放在哪里(结果);为了简化指令,通常在微机系统中规定:操作结果要放在某一个操作数中。

如MOV AL,08H;ADD AX,BX;(源操作数,目标操作数)这样,就将指令所要提供的信息简化为了两部分:操作码、操作数。

指令的机器码就是用二进制码描述指令的操作码和操作数的一种方式,实际上在微机系统内部,指令就是以机器码的形式存在的。

所谓的汇编指令是用指令功能的英文缩写表示操作码,用数字和符号表示操作数的指令描述方法。

例如操作码操作数MOV AX,2000H操作码B8H操作数:00H20H由于汇编语言程序有便于理解、识别、阅读和交流的优点。

所以汇编指令得到了广泛的应用。

但由于最终在机器中使用的是机器码,所以要有一个中间环节就是对其进行翻译。

3.2 8086指令的寻址方式所谓寻址方式就是寻找操作数的方式,所以寻址方式实际上在两种情况下被涉及:一种是用来对操作数进行寻址;另一种是对转移地址和调用地址进行寻址。

下面我们所讨论的寻址方式都是针对操作数的,关于指令地址的寻址,将在讲述转移指令和调用指令时作具体说明。

一条指令的机器码通常包含操作码(OP)和操作数两部分。

第3章80888086指令系统(老师用的课件哦)

第3章80888086指令系统(老师用的课件哦)

第3章 8088/8086指令系统
图3.5 变址寻址示意图
第3章 8088/8086指令系统
例:MOV AX,200AH[SI];或(AX)←
[(DS)*16+(SI)+200AH
EA=(SI)
+200AH,SI为变址寄存器,200AH为16位的位移量。
图3.6为用BP寄存器进行变址寻址时的示意图。
第3章 8088/8086指令系统
3.存储器操作数 存储器操作数是把操作数放在存储器单元中。对这 类操作数,在指令中必须给出存储器的地址。存储器 的实际地址(也称物理地址)是由指定的段基址和段内地 址偏移量(也称为有效地址EA)所决定的。由于段基址 相对很少改变,故一般预先予以指定,以后通过隐含 方法使用,即只要段基址未改变,其在汇编指令中便 不再出现。此时,只给出有效地址EA(以各种寻址方式 给出)。
第3章 8088/8086指令系统
3.2 8088/8086指令系统
3.2.1 数据传送指令 1 .数据传送指令MOV 指令格式:MOV OPRD1,OPRD2 MOV 为操作码。 OPRD1为目的操作数,可以是寄存器、存储器、
累加器。
第3章 8088/8086指令系统
OPRD2为源操作数,可以是寄存器、存储器、累 加器和立即数。
第3章 8088/8086指令系统
4.寄存器间接寻址
寄存器间接寻址的操作数类型为存储器操作数,与 直接寻址方式的区别是:该存储单元的16位段内偏移 地址,不是从指令代码中直接得到,而是从指令所指 定的寄存器中得到。能用于间接寻址的寄存器为SI、 DI、BX、BP。若以SI、DI、BX进行间接寻址,应由 数据段DS的内容作为段基址,间接寻址寄存器的内容 为段内偏移量,并指定形成操作数的物理地址。若以 寄存器BP间接寻址,则BP中的内容为段内偏移量,段寄 存器SS与之一起形成物理地址。寄存器间接寻址示意 图如图3.4所示。

[小学教育]第三章 8086指令系统

[小学教育]第三章 8086指令系统

指令
数据
(a)
指令
内存
指令 基址寄存器 变址寄存器
变址值
EA
数据
(b)
指令
寄存器
寄存器
数据
(f) 指令
基址值
基址寄存器 变址寄存器 位移量
(c)
指令
寄存器
内存
变址值
寄存器
EA
(d) 指令
数据
基址值 (g)
寄存器 位移量
内存
+
数据
8086寻址方式
地址 (e)
内存
+ 数据
内存
+ EA 数据

§3.3 数据传送指令


[17000H] AL

[17001H] AH


原 理
[SI]

(2) 若EA = [BP] +

[DI]



则操作地址:SS: EA
第 三 章
7. 相对的基址加变址寻址
[SI]
(1) 若EA = [BX] +
+ 8位或16位偏移量
[DI]
则操作数地址:DS: EA
例 MOV AX,[BX+SI+0250H]
SI,DI - 变址寄存器
第 三 章
微 机
[SI] (1) 若EA = [BX] +
[DI]


则操作数地址:DS: EA
及 接
例 MOV AX,[BX+SI]

若 DS = 1000H, BX = 5000H, SI = 2000H
技 术

微机原理第3章 8086的指令系统d

微机原理第3章 8086的指令系统d

3.4.4 串操作指令
由多个字节/字组成的数据称为字节/字数据串,简称字节/ 字串。 数据串存放在某一连续的内存区中,最长长度为64kB。 串操作指令的特点: • 采用串寻址,规定源操作数的逻辑地址为(DS):(SI),目的 操作数的逻辑地址为(ES):(DI)。 • 执行串指令时,存储单元的地址指针是自动移动的,DF= 0则地址增大,DF=1则地址减小。 • 串指令通常使用指令前缀,串的长度(数据个数)由CX给定。 • 串指令在同段之间进行传送或比较时,应使(DS)=(ES)。
LEA SI, BUFF1;源操作数偏移地址 LEA DI, BUFF2;目的操作数偏移地址 CLD;DF=0 AG: MOVSW; MOV CX, 100;串长度(CX)=100 LOOP AG;(CX)=(CX)−1, ;(CX)≠0则转移 MOVSW;送1个字,(CX)=100
2. 串比较指令 串比较指令CMPSB/CMPSW (compare byte/word string) 格式:CMPSB/CMPSW 功能:把(DS):(SI)指定的字节/字单元内容减去(ES):(DI)指 定的字节/字单元内容,结果不送回(DS):(SI)指定的单元, 但影响状态标志位,且SI、DI的内容自动加(减)1/2。 例:检查数据段中首地址分别为STR1和STR2的两个长度 为50的字节串是否相等。若相等,则(BX)=0;若不相等, 则BX保存STR1中第1个不相同字节的偏移地址,并将该 数据保存到AL中。 CLD;DF=0 MOV CX, 50;设置串长度 MOV AX, DS;使(EX)=(DS) MOV ES, AX
2. 逻辑与指令 逻辑与指令AND (and) 格式:AND dest, src 功能:把dest的内容与src的内容按位进行逻辑与运算,并 把结果送回dest。 注意:dest不能为立即数;不允许两个操作数都为存储器 操作数;该指令执行后使CF=OF=0,并影响PF、ZF和SF。 例:MOV BL, 38H;(BL)=38H AND BL, 0FH;(BL)=08H, CF=OF=PF=ZF=SF=0 利用AND指令可以使目的操作数的某些位清0。 例:把AX中的D15、D11、D6、D1位保留,其余位清0。 AND AX, 8842H

第03章 8086的指令系统D

第03章 8086的指令系统D

示例 SHORT
说明
段 内 转 移
立即数( 立即数 ( 偏移 量) 寄存器
2100H JMP 2100H JMP BX JMP [BX] JMP FAR PTR NEXT JMP 21000100H 21000100H JMP DWORD PTR [BX]
①SHORT 表示短跳; 表示短跳; ②FAR表 FAR表 示段间跳 ; ③DWORD PTR表明 PTR表明 内存操作 数属性为 双字
3 过程调用和返回指令
如果有一些程序需要在不同的地方多次出现, 如果有一些程序需要在不同的地方多次出现 , 则可 以将这些程序段设计成过程(即子程序) 以将这些程序段设计成过程 (即子程序) ,供需要时 调用. 调用. 在过程(即子程序)中要安排返回指令, 在过程 ( 即子程序 )中要安排返回指令 ,使得过程结 束时,返回到调用处. 束时,返回到调用处. 如: 显示一个字符,需要利用下列程序段完成: 显示一个字符,需要利用下列程序段完成:
mov dl,'a' mov ah,2 int 21h
DL寄存器保存 DL寄存器保存 要显示的字符 ASCII码 的ASCII码
过程与调用程序在同一段内, 过程与调用程序在同一段内,称"段内调用"; 段内调用" 过程与调用程序不在同一段内, 过程与调用程序不在同一段内,称"段间调用". 段间调用" 过程调用指令为:CALL 过程调用指令为: 返回指令为: 返回指令为:RET 过程调用与返回指令均不影响标志位,但影响堆栈. 过程调用与返回指令均不影响标志位,但影响堆栈. 不影响标志位
说明
大于等于 或 不小于 转移
小于 或 不大于等于
有进位或借位 转移 无进位/ 无进位/借位 转移 等于转移 不等于 转移 无溢出 转移 有溢出 转移 1的个数为奇数 转移 1的个数为偶数 转移 正数 转移 负数 转移
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

调用 类型
寻址 方式
格 式
操 作
示 例
说 明
procCALL proc-name 直接 disp16 CALL disp16 段内 调用 CALL BX 间接 CALL r16 / m16 ①IP入栈; IP入栈; 入栈 (r16)/(m16 16)/(m16) ②IP← (r16)/(m16) CALL WORD PTR [BX] ①IP入栈; IP入栈; 入栈 ②IP ← IP + 偏移量 SUB1 CALL SUB1
①段内 调用, 调用, CS不变 CS不变 ②FAR PTR表 PTR表 示段间 调用 ③ DWORD PTR表 PTR表 明内存 操作数 属性为 双字, 双字, 用于段 间调用
直接 段间 调用 间接
过程调用的寻址方式
直接寻址
调用指令中直接给出被调用过程的首地址( 调用指令中直接给出被调用过程的首地址(标号或 立即数). 立即数)
间接寻址
预先把被调用过程的地址存于寄存器或内存, 预先把被调用过程的地址存于寄存器或内存,调用 指令仅给出这些地址存放处(寄存器名或内存地址), 指令仅给出这些地址存放处(寄存器名或内存地址) 间接寻址" 为"间接寻址".
3 过程调用和返回指令
如果有一些程序需要在不同的地方多次出现, 如果有一些程序需要在不同的地方多次出现 , 则可 以将这些程序段设计成过程(即子程序) 以将这些程序段设计成过程 (即子程序) ,供需要时 调用. 调用. 在过程(即子程序)中要安排返回指令, 在过程 ( 即子程序 )中要安排返回指令 ,使得过程结 束时,返回到调用处. 束时,返回到调用处. 如: 显示一个字符,需要利用下列程序段完成: 显示一个字符,需要利用下列程序段完成:
循环 指令
LOOP
ShortShort-label
相等循 环指令
ShortLOOPZ/LOOPE Shortlabel
不相等 循环指 令
ShortLOOPNZ/LOONE Shortlabel
【例】有一首地址为Array的长度为M字数组,试编写实现下列功能 有一首地址为Array的长度为M字数组, Array的长度为 的代码:统计出数组中0元素的个数,并存入变量total total中 的代码:统计出数组中0元素的个数,并存入变量total中. CX, 数组长度存入循环计数器CX MOV CX,M ;数组长度存入循环计数器CX total, 计数变量初始值为0 MOV total,0 ;计数变量初始值为0 SI, 初始偏移量送寄存器SI MOV SI,0 ;初始偏移量送寄存器SI AGAIN:MOV AX,Array[SI] AX, ;取数 AX, CMP AX,0 ;与0比较 不为0 JNZ NEXT ;不为0,取下一个数 计数器加1 INC total ;为0,计数器加1 SI, 调整地址, NEXT:ADD SI,2 ;调整地址,指向下个数 LOOP AGAIN ;进入下一轮循环 显然, AGAIN指令的功能与下列语句相同 指令的功能与下列语句相同: 显然,LOOP AGAIN指令的功能与下列语句相同: DEC CX JNZ AGAIN 但是,LOOP指令中完成的操作CX←CX指令中完成的操作CX←CX 不影响标志位. 但是,LOOP指令中完成的操作CX←CX-1,不影响标志位.
无符号 数
多 标 志 位
JGE / JNL JL / JNGE JG / JNLE JLE / JNG
CX
JCXZ
【例】比较两个字属性的符号数X,Y的大小,如果X>Y, 比较两个字属性的符号数X 的大小,如果X>Y, X>Y AL为 如果X=Y AL为 X=Y, 如果X<Y AL为 FFH. X<Y, AL为1,如果X=Y,AL为0,如果X<Y,AL为0FFH. 为内存变量,功能实现主要代码如下: 解:设X,Y为内存变量,功能实现主要代码如下: AX, MOV AX,X AX, CMP AX,Y JLE LE MOV AL,1 AL, ;X > Y,AL=1 AL=1 JMP DONE LE: LE:JL L AL,00H AL=00 00H MOV AL,00H ;X = Y,AL=00H JMP DOWN AL, AL=0 L:MOV AL,0FFH ;X < Y,AL=0FFH DONE: DONE:HLT
mov dl,'a' mov ah,2 int 21h
DL寄存器保存 DL寄存器保存 要显示的字符 ASCII码 的ASCII码
过程与调用程序在同一段内, 过程与调用程序在同一段内,称"段内调用"; 段内调用" 过程与调用程序不在同一段内, 过程与调用程序不在同一段内,称"段间调用". 段间调用" 过程调用指令为:CALL 过程调用指令为: 返回指令为: 返回指令为:RET 过程调用与返回指令均不影响标志位,但影响堆栈. 过程调用与返回指令均不影响标志位,但影响堆栈. 不影响标志位
说明
大于等于 或 不小于 转移
小于 或 不大于等于
有进位或借位 转移 无进位/ 无进位/借位 转移 等于转移 不等于 转移 无溢出 转移 有溢出 转移 1的个数为奇数 转移 1的个数为偶数 转移 正数 转移 负数 转移
单 标 志 位
JZ JNZ JNO JO JNP / JPO JP / JPE JNS JS
(2) 条件转移指令
格式:Jcc short-label 格式: short说明: 说明: cc代表跳转条件 该指令只能实现段内短转移. 代表跳转条件, cc代表跳转条件,该指令只能实现段内短转移.
特征
助记符 JAE / JNB JB /JNAE JC JNC
转移条件 CF=0 CF=0 CF=1 CF=1 CF=1 CF=1 CF=0 CF=0 ZF=1 ZF=1 ZF=0 ZF=0 OF=0 OF=0 OF=1 OF=1 PF=0 PF=0 PF=1 PF=1 SF=0 SF=0 SF=1 SF=1 无符 号数
2 循环控制指令
循环指程序段在一定条件下重复执行. 循环指程序段在一定条件下重复执行. 循环指令提供了程序段循环的控制及手段. 循环指令提供了程序段循环的控制及手段 . 这些指令都用 CX寄存器作为循环次数计算器 寄存器作为循环次数计算器, 这些指令都 用 CX 寄存器作为循环次数计算器 , 表示某程序段最大循环次数, 且循环体每执 表示某程序段最大循环次数 , 行一次,CX被减去 被减去1 行一次,CX被减去1. 8086/ 8088CPU 规定被循环的程序段必须在同 CPU规定 8086 / 8088 CPU 规定 被循环的程序段必须在同 一段内,且长度不能大于256字节. 256字节 一段内,且长度不能大于256字节. 循环控制指令有3 循环指令LOOP LOOP, 循环控制指令有3条:循环指令LOOP,相等循 LOOPE/LOOPZ, 环 指 令 LOOPE/LOOPZ, 不 相 等 循 环 指 令 LOOPNE/LOOPNZ. LOOPNE/LOOPNZ.
名称
格式
操作 ① CX ← CX – 1 ② 如 果 CX = 0, 结 束 循 执行后续语句. 环 , 执行后续语句 . 否则 转移到标号处. 转移到标号处. ① CX ← CX – 1 如果CX ② 如果 CX = 0 或 ZF= 0, 结束循环, 结束循环 , 执行后续语句 否则转移到标号处. .否则转移到标号处. ① CX ← CX – 1 如果CX ZF=1 ② 如果 CX =0执行后续语句 . 否则转移到标号处. 否则转移到标号处.
3.4.5 控制转移指令
控制转移指令用来改变程序的执行顺序, 控制转移指令用来改变程序的执行顺序 , 执行转移就是将 目的地址传送给代码段寄存器CS 与指令指针寄存器IP CS与指令指针寄存器 IP. 目的地址传送给代码段寄存器 CS 与指令指针寄存器 IP. 如 果跳转目的地与被转移点在同一代码段, 果跳转目的地与被转移点在同一代码段 , 称为 " 段内转 此时, 只需指明目标地址的有效地址( 16位 移 " , 此时 , 只需指明目标地址的有效地址 ( 16 位 ) . 如果 跳转目的地与被转移点不在同一代码段, 跳转目的地与被转移点不在同一代码段 , 称为 " 段间转 此时,需知道目标地址的段地址( 16位 移 " , 此时 , 需知道目标地址的段地址 ( 16 位 ) 及有效地址 16位 (16位). 控制转移指令的寻址方式分为" 直接寻址" 控制转移指令的寻址方式分为 " 直接寻址 " , " 间接 寻址" 两种. 如果指令中直接给出目标地址, 寻址 " 两种 . 如果指令中直接给出目标地址 , 如地址标号 或立即数( 偏移量, 目标与源之间的偏移距离) , 称为" 直 或立即数( 偏移量 , 目标与源之间的偏移距离 ) 称为" 接寻址" 如果指令中, 给出目标地址存放地的地址, 接寻址 " ; 如果指令中 , 给出目标地址存放地的地址 , 如 寄存器或内存地址,称为"间接寻址". 寄存器或内存地址,称为"间接寻址" 控制转移指令包括:转移指令,循环控制指令, 控制转移指令包括:转移指令,循环控制指令,过程 调用指令和中断指令等4 调用指令和中断指令等4类.
间接 存储器 地址符号
CS不 CS不 变
段 间 转 移
直接 立即数(32位 立即数 ( 32 位 ) 间接 内存(双字) 内存(双字)
IP ← 目标偏移地址 立即数低16 16位 /立即数低16位 CS ← 目 标 段 地 址 / 立即数高16 16位 立即数高16位 (EA+1 IP ← (EA+1,EA) (EA+3 EA+2 CS ← (EA+3,EA+2)
相关文档
最新文档