第3章 8086指令系统
微机原理课件第三章8086寻址方式和指令系统
数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器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指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
微机原理第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汇编程序,实现各种功能和算法。
第3章8086指令系统
寻址方式 段寄存器 有效地址
DISP[BX][SI]
DS (BX)+(SI)+DISP
DISP[BX][DI]
DS (BX)+(DI)+DISP
DISP[BP][SI]
SS
(BP)+(SI)+DISP
DISP[BP][DI]
SS (BP)+(DI)+DISP
物理地址
(DS) ×10H+ (BX)+(SI)+DISP
(DS) ×10H+ (BX)+(DI)+DISP
(DS) ×10H+ (BP)+(SI)+DISP
(SS) ×10H+ (BP)+(DI)+DISP
例:下述各条指令都是错误的
• MOV AX, [CX] • MOV AX, [BX][BP] • MOV AX, [SI][DI] • MOV AX, 112200H[BX]
为数据段中的变量:
• MOV 1AH, CL ; 立即数不能作为目的操作数。
• MOV 1200H, AX
• MOV CS,BX
; CS, IP不能作为目的操作数
• MOV W1,[BX] ; 两个内存操作数之间不能传送
• MOV [1200H], [BX]
2. 段前缀
寻址方式隐含地规定了存储器操作数的段地址。
5.操作数的类型必须一致 例如,
MOV AX , BX
; 正确。指令执行后,AX←(BX),但BX不变
MOV AX, BL
; 错误。源和目的的位数不相同
MOV AL, 256
; 错误。 256=100H,超过了AL能存放的数的
第三章 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
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指令系统概论
➢ 伪指令格式
[符号名] 伪指令助记符 操作数1 [,[操作数2] [,[操作数3]]] [;注释]
✓ 符号名与伪指令之间不需要冒号分隔;
✓ 伪指令的操作数至少1个,多个时用逗号分隔;
2020年11月20日星期五
5
3、示例指令
➢ 数据传送指令 ✓ MOV <目的操作数>,<源操作数>
➢ 指令功能
例如: MOV AX , 2 MOV AX , BX MOV AX , [BX]
ABCDH 标识符
0ABCDH 立即数
2020年11月20日星期五
4
2、指令的书写格式
➢ 指令格式
[标号:] 指令助记符 [操作数1] [,[操作数2] [,[操作数3]]] [;注释]
✓ 标号与指令用冒号分隔,表示指令的存放位置;
✓ 标号不是每条指令中都需要的,必要时定义;
✓ 16位系统中,汇编指令的操作数一般为0—2个;
✓ 使用源操作数的值为目的操作数赋值;
✓ 指令执行完,目的操作数的值与源操作数一样;
源操作数不变,目的操作数改变;
➢ 单独写的指令一般都不包括标号部分;
✓ 标号在写指令序列时才会使用到;
2020年11月20日星期五
6
3.1 8086的寻址方式
3.1.1 数据的寻址方式 3.1.2 指令的寻址方式
2020年11月20日星期五
9
1.立即数寻址方式
➢ 立即数寻址方式
✓ 操作数的数值紧跟在操作码之后,直接在指令中出现。
➢ 特点
MOV AL , 300 正确吗?
✓优点:不需访存,执行速度快; 位数不匹配,不正确!
✓ 缺点:立即数不能修改,通用性差(适用于常数)。
第三章 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)
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指令系统(最后有练习题)
开 始
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的指令系统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章 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指令系统
指令
数据
(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
技 术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-6-8 qingyang@ 26
3. 交换指令
XCHG reg, reg XCHG reg, mem XCHG mem, reg 例 (BX)=1234H,(DS)=2000H, (21234H)=5678H, XCHG BX, [BX] 执行后, (BX)= , (21234H)= 。
18
3.2.1 数据传送指令
所有通用传送指令都不影响标志位。
1. MOV 指令
– – – – – MOV MOV MOV MOV MOV reg, data; mem, data reg, reg reg, mem mem,reg reg: CS,IP,DS,ES,SS除外
}
目的reg: CS,IP除外
2014-6-8
qingyang@
28
4. 输入输出指令(参见第八章)
1)直接输入输出指令 IN AL, PORT ; IN AX, PORT; OUT PORT,AL; OUT PORT,AX; AL ← (PORT) AX ← (PORT+1,PORT) (PORT) →AL (PORT+1,PORT) → AX
2014-6-8
qingyang@
24
采用基址变址寻址方式
MOV SI, 2040H
MOV DI, 2060H MOV BX, 0 MOV CX, 0AH LOOP1: MOV AL, [BX][SI] MOV [BX][DI],AL INC BX DEC CX JNZ LOOP1 HLT
2014-6-8 qingyang@ 25
2. PUSH 和 POP 指令 PUSH reg POP reg PUSH mem POP mem
例, 已知(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H, (BX)=0F79H。试画出堆栈区和SP的内容变化过程示意图 (标出存储单元的物理地址);执行下列指令序列后, AX和BX的内容是什么?
SS
SS
(BP)+(SI)+DISP
(BP)+(DI)+DISP
(DS) ×10H+ (BP)+(SI)+DISP
(SS) ×10H+ (BP)+(DI)+DISP
2014-6-8
qingyang@
15
例:下述各条指令都是错误的
• MOV AX, [CX]
• MOV AX, [BX][BP] • MOV AX, [SI][DI] • MOV AX, 112200H[BX]
2014-6-8
qingyang@
16
5.操作数的类型必须一致 例如,
MOV AX , BX MOV AX, BL
; 正确。指令执行后,AX←(BX),但BX不变 ; 错误。源和目的的位数不相同
MOV AL, 256
MOV AX, -32769
; 错误。 256=100H,超过了AL能存放的数的
第3章 8086指令系统
指令:CPU能够直接完成的基本操作。例 如,加法,减法等。
指令系统:所有指令的集合。CPU性能的 重要指标之一。
2014-6-8
qingyang@
1
• 3.1 寻址方式 指令通常应提供的信息:
(1) 做什么操作 (2) 操作数从哪里来 (3) 操作结果放在哪里 (4) 对于调用和转移指令,还要涉及转移或调用 地址的提供方式
2014-6-8
• 寻址方式总结
1. 三种类型的操作数:立即数(data),寄存器 操作数(reg),存储器操作数(mem)。
双操作数指令的常见格式(以数据传送指令为例) – MOV reg, data – MOV mem, data – MOV reg, reg – MOV reg, mem – MOV mem,reg
2014-6-8
qingyang@
5
• 现代微型计算机中多采用二地址指令,两个操作 数分别称为“源操作数”和“目的操作数”,指 令执行后,把运算结果放到目的操作数的地址之 中。 • 指令的操作码在机器中的表示比较简单,只要对 每一种操作指定相应的二进制代码即可;而指令 的操作数字段的情形就比较复杂。
操作数字段可以有一个,二个或三个操作数,通常称 为“一地址”,“二地址”或“三地址”指令
操作码
操作数
。。。
操作数
2014-6-8
qingyang@
4
例如:
单操作数指令 (INC AX) 只需要指出加1的操作数,它是“一地址”指令。 双操作数指令 (ADD AX, BX) 大多数运算型指令都是双操作数指令,对这种指令,有的 机器(大中型)使用“三地址”指令:除给出参加运算的 两个操作数外,还要指出运算结果的存放地址。
(DS) ×10H+ (SI)+DISP (DS) ×10H+ (DI)+DISP (DS) ×10H+ (BX)+DISP (SS) ×10H+ (BP)+DISP
DISP: 位移量,8位或16位
2014-6-8 qingyang@ 14
4. 基址变址寻址 (MOV AX, [BX][SI]) 基址变址相对寻址(MOV AX, 1100H[BX][SI])
2014-6-8
qingyang@地址的方式称为 寻址方式。 (规定如何对地址字段作出解释以找到操作数) • 程序转移时需提供转移地址,这跟提供操作数地 址在方法上没有本质区别,因此也归入寻址方式 的范畴。 寻址方式可分为二类: 与操作数有关的 与转移有关的
2014-6-8
qingyang@
12
2. 段前缀 寻址方式隐含地规定了存储器操作数的段地址。 例如,
[BX], [SI], [DI],[1200H]… .对应段寄存器为 DS [BP] ……..……………… 对应段寄存器为 SS
允许数据存放在其它的段(代码段除外)。此时应 在指令中给出 “段前缀”。 例如,MOV AX , ES : [3000H]
2014-6-8
qingyang@
20
用寄存器间接寻址方式实现
MOV SI , 2035H
MOV DI, 2045H MOV AH, [SI] MOV AL, [DI] MOV DS:[SI] ,AL
MOV DS:[DI] ,AH
HLT
2014-6-8
qingyang@
寻址方式
DISP[BX][SI] DISP[BX][DI]
段寄存器 DS DS
有效地址
(BX)+(SI)+DISP (BX)+(DI)+DISP
物理地址
(DS) ×10H+ (BX)+(SI)+DISP (DS) ×10H+ (BX)+(DI)+DISP
DISP[BP][SI]
DISP[BP][DI]
2014-6-8
qingyang@
19
例1 用MOV指令实现两内存字节单元内容的交换 用直接寻址方式实现
(DS):2035H
MOV BL, DS:[2035H] MOV CL, DS:[2045H] ;
(DS):2045H
MOV DS:[2045H], BL ; MOV DS:[2035H],CL ; HLT
2014-6-8 qingyang@ 8
• 8088/8086与操作数有关的寻址方式
立即寻址方式 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 基址变址相对寻址方式
2014-6-8 qingyang@ 9
举例
• 已知,(DS)=2000H, (BX)=0100H, (SI)=0002H, (20100H)=12H, (20101H)=34H, (20102H)=56H, (20103H)=78H, (21200H)=2AH, (21201H)=4CH,(21202H)=B7H, (21203H)=65H, 试说明下列各条指令执行完后AX寄存器的内容。
范围
; 错误。 -32769超过了AX能存放的带符号数
(补码)范围
2014-6-8
qingyang@
17
3.2 8086指令系统 六大类:数据传送指令,
算术运算指令, 逻辑运算和移位指令, 控制转移指令, 串操作指令, 处理器控制指令
2014-6-8
qingyang@
• • • • • • • 1)MOV 2) MOV 3) MOV 4) MOV 5) MOV 6) MOV 7) MOV AX, 1200 AX, BX AX, [1200H] AX, [BX] AX, 1100H[BX] AX, [BX][SI] AX, 1100H[BX][SI]
qingyang@ 10
21
例2 数据块传送:把2040H地址开始的10个字节数 据移到2060地址开始的10个字节单元处。
(DS):2040H
10个字节
(DS):2060H 10个字节
2014-6-8
qingyang@
22
地址指针的修改采用增量方式 (寄存器间接寻址)
MOV SI, 2040H MOV DI, 2060H MOV CX, 0AH LOOP1: MOV BL, [SI] MOV [DI],BL INC SI ; INC DI DEC CX JNZ LOOP1 HLT
2014-6-8 qingyang@ 23
地址指针的修改采用减量方式 (寄存器相对寻址方式) MOV SI, 2040H ; MOV DI, 2060H ; MOV CX, 0AH; LOOP1: MOV BL, [SI+09H] ; MOV 09H[DI],BL ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1; HLT