8086指令格式和寻址方式
认识8086的寻址方式

实验报告
实验题目: 认识8086的寻址方式
姓名: 朱旭锋学号: 1314660221130
班级: 13计算机教育1班指导教师: 李卫华老师
实验时间:7 周,星期一
(一)实验内容
(1)项目要去:通过各种寻址方式操作,了解8086寻址方式。
(2)项目目的:通过项目了解8086汇编指令格式,并掌握808 的寻址方式。
(3)程序代码
DATAS SEGMENT
VALUE DW 5678H,6060H
TABLE DB 33H,55H,20H ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,1234H
MOV BX,AX
MOV AX,VALUE
MOV word ptr [BX],2000H
MOV DL,80H
MOV SI,0020H
MOV [BX+SI],DL
MOV TABLE[BX+SI],AL;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
(4)单步调试过程
第一步反汇编
第二步,显示内存16进制
第三步,逐条运行程序
第四步,可运行程序
执行MOV SI,0020H
执行MOV [BX+SI],DL
第五步,结束
(5)小结
对这几个字母的作用不太了解。
程序也有一些看不懂。
第二章 80868088寻址方式和指令系统

(5)奇偶标志PF
用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清0。
(6)辅助进位标志AF
在字节操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字 节进位或借位,则辅助进位标志AF被置1,否则AF被清0。
②状态控制标志
(1)方向标志DF
方向标志决定着串操作指令执行时,有关指针寄存器调整方向。 当DF为1时,串操作指令按减方式改变有关的存储器指针值, 当DF为0时,串操作指令按加方式 改变有关的存储器指针值。
其中:存储单元的物理地址是12345H, 标出的:两个重叠段的段值分别是:1002H和1233H, 在对应段内的偏移分别是2325H和0015H。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针IP、堆栈指针SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可直接用16位数给 出。
图中指令存放在代码段中,OP表示该指令的操作码部分 再例如: MOV AL,5 则指令执行后,(AL)=05H
MOV BX,3064H 则指令执行后, (BX)=3064H
2、寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数数,寄存器可以是:
AX、BX、CX、DX、SI、DI、SP和BP等;
指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动 形成20位物理址。
3、段寄存器的引用
由于8086/8088CPU有四个段寄存器,可保存四个段值。所以可同时使用四个段值,但这四个 段有所分工。
在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令 的物理地址。
CH3_8086指令系统-陈裕国

寄存器操作数:
参加运算的数存放在指令给出的寄存 器中,可以是16位或8位。
例:
MOV AX,BX
MOV DL,CH 接下页
存储器操作数
参[ ]
立即数或寄存器
接下页
存储器操作数例
例: MOV AX,[1200H] MOV AL,[1200H]
立即数 寄存器
存储器
快!
接下页
六、CISC和RISC指令系统
CISC指令系统
指令的功能强,种类多,高级语言和机 器语言间的距离缩小; 指令系统复杂,难使用。 指令功能较弱,种类少,格式简单; 多数指令在一个计算机周期内完成; 对存储器的结构和存取速度要求较高。 返回
RISC指令系统
答:(1)源操作数是内存寻址中的寄存器间接寻址, EA=BX;目的操作数是寄存器寻址;传送的是字数据。
(2)源操作数是内存寻址中的相对基址变址寻址, EA=BX+DI+0004H;目的操作数是寄存器寻址;传送 的是字数据。 返回
3.3
8086指令系统
一、数据传送类指令 二、算术运算指令 三、逻辑运算指令 四、移位指令 五、串操作指令 六、控制转移指令 七、处理器控制指令 返回
PUSH指令(进栈操作指令)
指令格式:PUSH src 功能:SP-2→SP(隐含操作) ; 将字数据src送到EA=SP的堆栈段内;
例:PUSH AX
设AX=1020H
接下页
PUSH指令(进栈操作指令)
返回
POP指令(出栈操作指令)
指令格式:POP dst 功能:将EA=SP的字送到目的操作dst中。 SP+2→SP
8086汇编各种寻址方式大全

各种寻址方式1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。
例:MOV AL,50HMOV DS, 1250H 错误2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。
例:MOV AL,BLMOV CL, BX 错误以下寻址方式3~8,操作数都在存储器中。
存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUF DB 10H,20H。
3. 存储器寻址(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。
例:MOV AL,[1000H] 约定由DS提供段地址MOV AL,CS:[1000H] ;段超越,由CS提供段地址MOV AL,SS:[1000H] ;段超越,由SS提供段地址例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。
可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。
其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。
例:MOV AX,[SI] ;AX←DS:[SI]MOV [BX],AX ;DS:[BX]←AX例:MOV AX, [BX]如果(DS)= 2000H, (BX)= 1000H,则物理地址 = 20000H + 1000H = 21000H(3)寄存器相对寻址这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。
8086 CPU的七种基本的寻址方式

MOV [BP], CX
5. 寄存器相对寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8位或16位位移量之和。即:
EA = (BX/BP/SI/DI) + (8/16位位移量)
例如:MOV AX, [DI+1223H]
MOV BX, [BP-4]
MOV ES:[BX+5], AL
注意:书写时基址或变址寄存器名一定要放在方括号中,而位移可以不写在方括号中。#43;3] 等价于 MOV AX, 3[SI]
6. 基址加变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。
EA = (BX/BP) + (SI/DI)
在不使用换段前缀的情况下,若BP的内容作为有效地址的一部分,则以SS的值为段值;否则以DS的值为段值。有效地址超过FFFFH,则对其进行64K取模。例如:
8086 CPU的七种基本的寻址方式.txt逆风的方向,更适合飞翔。我不怕万人阻挡,只怕自己投降。你发怒一分钟,便失去60分钟的幸福。忙碌是一种幸福,让我们没时间体会痛苦;奔波是一种快乐,让我们真实地感受生活;疲惫是一种享受,让我们无暇空虚。生活就像"呼吸""呼"是为出一口气,"吸"是为争一口气。8086 CPU的七种基本的寻址方式
在不使用换段前缀的情况下,若SI/DI/BX的内容作为有效地址的一部分,则以DS的值为段值;若BP的内容作为有效地址的一部分,则以段寄存器SS的值为段值。
在指令中给定的8位或16位位移量以补码形式表示。在计算有效地址时,若位移量是8位,则将其有符号扩展为16位,当有效地址超过FFFFH,则对其进行64K取模。
指令格式及寻址方式

特点:指令中直接给出操作数在段内的偏移量,段基 址隐含给出或用段前缀指明。该寻址方式适用于处理单个变
一般操作数存放在数据段,故操作数的物理地址为 物理地址=(DS)× 16D+ EA
=(段基址的寄存器)× 16 + 偏移地址
1.3与数据有关的寻址方式
【例3.4】已知(DS)=4000H,[42000H]=3355H MOV AX,[2000H]
1.3与数据有关的寻址方式
(3)寄存器相对寻址方式(register relative addressing 特点:操作数的有效地址是一个基址寄存器或变址寄存器的 内容和指令中指定的8位或16位位移量(即偏移量)之和。 适用于表格处理,修改基址或变址寄存器的内容来取得表格
{ 物理地址=16D×(DS){}+
ADD AX, BX
1.18086/8088的通用指令格式
对有操作数的指令,在执行指令所规定的操作之前首 先要寻找操作数。指令中的操作数字段实质上是指出参加 操作运算的操作数存放在何处。一般来说,操作数存放在 指令代码中,称为立即数;操作数存放在CPU寄存器中, 称为寄存器操作数;操作数存放在内存单元中,称为存储 器操作数; 操作数也可存放在I/O端口内。寻找这些操作 数的方式称为寻址方式,即指令中用于说明操作数或操作 数所在地址的方法。
微机原理与接口技术 (第三版)电子工业出版社 第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 装入一个新的物理地址
汇编语言2-1寻址方式

EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 80x86指令系统
第4章 80x86指令系统
4.1 8086/8088指令系统 4.1.1 8086/8088指令格式 4.1.2 8086/8088指令系统的寻址方式 4.1.3 8086/8088指令系统
第4章 80x86指令系统
汇编语言程序设计过程:
第一步,利用记事本输入汇编源程序,然后将扩展名 改为ASM。如文件名为33.asm。
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内 容。
对于某条具体指令,这三个地址分量可有不同的组合。如果 存在两个或两个以上的分量,那么就需要进行加法运算,求出操 作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种 地址分量有不同的组合,才使得对存储器操作数的寻址产生了若 干种不同的方式。
第4章 80x86指令系统
1)固定寻址方式 有些单字节指令,规定CPU对某个固定的寄存器进
行。
例如:十进制加法的调整指令AAA,规定被调整的 数总位于AL中。 该指令用来调整AL中的结果,指令编码为:
OP 0011 0111
37H
第4章 80x86指令系统
2)立即数寻址方式 操作数就在指令中,当执行指令时,CPU直接从指 令队列中取得立即数,而不必执行总线周期。立即数 可以是8位的或16位的;只能是整数类型的源操作数; 主要用来给寄存器赋初值;指令执行速度快。 例如:MOV AL, 80H MOV AX, 1234H
第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
(DS)*10H=20000H + 1064H 21064H
操作码
64 10
代Байду номын сангаас码 段
100010DW mod 100010 0 0 1000 1000 01 reg 001 0100 1001 r/m 001 disp8 11111010 1111 1010 =88H、49H、FAH
第4章 80x86指令系统
例: 写出下面指令的机器语言编码。 ADD AX,[BX+DI-0826]
存储器
AL
80H
存储器 操作码字节 指 令 码
AH 12
AL 34
操作码字节
34H 34
80H
12H 12
指 令 码
第4章 80x86指令系统
3)寄存器寻址方式 操作数在CPU的寄存器中,指令中给出寄存器名。 源操作数和目的操作数均可采用寄存器寻址的方式。 寻址的指令长度短;操作数就在CPU内部进行,不需 要使用总线周期;指令执行速度快。 例如:MOV AX, CX
AL
45
20000H
… 21064H 45
数 据 段
第4章 80x86指令系统
如果没有特殊指明,直接寻址方式的操作数一般在存储器的 数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超 越,此时需要在指令中特别标明,方法是在有关操作数的前面写 上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令 中源操作数不在数据段而在附加数据段中,则指令应写为如下形 式: MOV AL,ES:[1064H] 在汇编语言指令中,可以用符号地址来表示位移量。例如: MOV AL,[value] 或MOV AL,value 此时value为存储单元的符号地址。
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量(Displacement):它是存放在指令中的一个8位或16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
第4章 80x86指令系统
② 寄存器间接寻址-基址寻址方式
设当前(DS)=3000H, (BP)=2000H, (BX)=1000H,(SS)=4000H MOV [BX], AL MOV AX, [BP]
第4章 80x86指令系统
由此可见,操作数可分为源操作数和目的操作
数。 源操作数:只能读取的操作数。 目的操作数:即可读取又可写入(存放操作结 果)的操作数。
操作数又可分为两大类:数据操作数和地址操 作数。
第4章 80x86指令系统
指令长度与字长的关系
指令的长度主要取决于指令操作码的长度、操作 数的长度和操作数的个数。通常指令字长位数越多, 所能表示的操作信息也就越多,指令功能就越丰富。 但位数多则指令所占的存储空间就多,读取指令的时 间就增加。 字长(一般是指CPU的机器字长)是指CUP一次能 够处理的二进制数位数,它都是字节长度(8位二进制 数)的1、2、4或8倍,也就是8、16、32或64位。因此, 指令字长也是字节的简单倍数,如一字节指令,二字 节指令、三字节指令……。
寄存器寻址 W=0 W=1 mod=11
AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI
D=1 D=0
目的操作数 源操作数
源操作数 目的操作数
双操作数指令中各字段定义
第4章 80x86指令系统
例:写出下面指令的机器语言编码。 MOV [BX+DI-6],CL
第4章 80x86指令系统
教学内容
本章重点介绍8086指令格式和寻址方式,包括操作数的 寻址方式和转移地址的寻址方式;然后介绍8086指令系统, 包括数据传送、算术运算、位操作、串操作、控制转移以及 处理器控制等六大类指令。具体内容如下: 1、8086/8088指令格式 2、8086/8088指令系统的寻址方式
3、8086/8088指令系统
第4章 80x86指令系统
学习要求
指令系统是程序员编写程序的基础,因此很好地掌握本 章内容是后续进一步学习汇编语言程序设计的关键。通过本 章学习,应该达到如下要求: 1、了解8086/8088指令格式。 2、熟练掌握8086/8088(包括后续CPU)的寻址方式。 3、掌握8086/8088指令系统中的各种指令的名称、功能及 对操作数寻址方式的约定。
存储器 AX
CX
89 C1
指令码 (包括操作数)
第4章 80x86指令系统
4)存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。 因此,要存取操作数就必须知道其存储器的单元地 址。在指令中可以直接给出或间接给出操作数的地 址,以达到存取操作数的目的。 指令中给出的地址只是操作数的有效地址 (EA),并且是放在方括号(“[ ]”)中。若要 从存储器中存取操作数还须得到实际的地址(物理 地址)。物理地址=段基址左移四位+有效地址
存储器地址 有效地址的计算公式 mod=00 mod=01 mod=10
BX+SI BX+SI+disp8 BX+ DI BX+ DI+disp8 BP+SI BP+SI+disp8 BP+DI BP+DI+disp8 SI+disp8 SI DI+disp8 DI 直接地址 BP+disp8 BX BX+disp8 BX+SI+disp16 BX+ DI+disp16 BP+SI+disp16 BP+DI+disp16 SI+disp16 DI+disp16 BP+disp16 BX+disp16
第4章 80x86指令系统
根据操作数的个数,指令格式可分为以下几种: 1. 无操作数 控制类指令,比如“HLT”暂停指令。 2. 单操作数 只给出一个操作数地址。该操作数可在寄存器或存储 器中,或指令中直接给出立即数。比如“INC CX” 3. 双操作数指令 指令中有两个操作数,其中一个为目的操作数,另一 个为源操作数。一个操作数在寄存器中,另一个在寄存器或 存储器中,或指令中直接给出立即数。不允许两个都在存储 器中。
计算机是通过执行指令来处理各种数据的, 因此,一条指令即要指出如何处理数据,同时 还应指出数据的来源、操作结果的去向。一般 来说指令是由两部分组成,即操作码和操作数。
操作码 操作数 用来描述该指令的操作对象
给出该指令应完成何种操作
在指令中操作码是不可缺少的,但操作数 可以没有,也可以有一个操作数或两个操作数。
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
寻找存储器操作数,必须经过总线控制逻辑电 路进行存取。当EU单元需要读/写位于存储器的操作 数时: ①根据寻址方式(指令中的B2字节),由EU计算 出操作数的偏移量,即有效地址EA; ②将EA送至BIU单元,同时请求BIU执行一个 总线周期; ③BIU将某个段寄存器的内容左移4位,在加上 EU送来的EA,形成20位的实际地址,即物理地址 PA; ④执行总线周期,读/写指令所需要的操作数。 计算EA的通式为:
第4章 80x86指令系统
8086/8088 指令(编码)格式
80X86CPU指令系统采用变字长的指令格式,不 可能用一个简单的规则来描述指令编码格式。通常 指令中包含操作码和操作数两部分。 操作码表示计算机执行什么操作,由一组二进 制代码表示。在汇编语言中用助记符代表。 操作数可能指明了参与操作的数的本身,或规 定了操作数的地址。如何寻找操作数,这就是指令 的寻址方式,也是由指令编码格式指出。
第二步,利用宏汇编程序MASM对汇编源程序33.asm 进行汇编,产生33.obj文件。
第三步,利用LINK对33.obj进行连接,产生33.exe文 件。
第4章 80x86指令系统