第3讲 8086&8088指令系统-寻址方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
8088/8086的寻址方式
二、寄存器寻址 操作数在寄存器中 注意:源操作数与目的操作数的位数相同。 如: MOV AL,100 ;目的操作数
MOV MOV POP PUSH MOV
AL,BL AL,AL AX BX AX,BL
;目的和源操作数 ; ; ;
9
8088/8086的寻址方式
三、直接寻址(Direct Addressing) – 指令的操作数部分直接使用一个偏移地址, 以地址所在单元的内容作为指令的操作数; – 存储器地址可以是直接用偏移地址值来表示, 也可以通过一个变量来表示,变量要在程序 的数据部分加以说明; – 在不加说明的情况下,直接寻找的操作数是 在数据段,即实际的物理地址是: DS:直接地址
5
8088/8086的寻址方式
一、立即寻址 源操作数直接放在指令中,跟在操作码后。目的操 作数不采取该寻址方式 MOV AX,Im 如: MOV AX,3E4DH MOV AL,06H – 立即数可以是二进制,十进制或十六进制的数; – 立即寻址常用于对变量赋初值。
6
8088/8086的寻址方式
12
8088/8086的寻址方式
– 当另一个操作数是立即数时,由于立即数本身 也不决定操作数的位数,此时,为了明确操作 数的位数,需要在直接地址前,加上一个说明 位数的算符: MOV [2000H],100 ;不正确,位数不定 MOV BYTE PTR[2000H],100 ;8位操作数 MOV WORD PTR[2000H],100 ;16位操作数 13
11
8088/8086的寻址方式
– 直接寻址指令的操作数是存储器操作数,存 储器操作数的位数要由另一个操作数来决定, 直接地址本身不能决定操作数的位数。 如: MOV AL,[2000H] ;8位操作数 MOV AX,[2000H];16位操作数 – 16位操作数时,要将直接地址开始的两个存 储器单元的内容送到寄存器:低地址的内容 送寄存器低位;高地址的内容送寄存器的高 位。
14
8088/8086的寻址方式
四、寄存器间接寻址 指令的操作数部分用一个加括号的寄存器来表示,实 际是将寄存器的内容作为偏移地址,将地址单元的内容作 为指令的操作数。 只在寄存器SI、DI、BX、BP任何一个中存放16位偏 移地址。 由[DS:SI]或[DS:DI]或[DS:BX]或[SS:BP]形成数据的 有效地址来得到操作数。
17
8088/8086的寻址方式
• 五、变址寻址(Index Addressing) – 指令的操作数是一个带括号的寄存器和一个 8位或16位偏移量。将寄存器的内容和偏移 量之和作为操作数的偏移地址,将地址单元 的内容作为操作数。 – 这个偏移量可以是一个立即数,也可以是一 个符号,这个符号一般表示一个地址。 – 可以使用的寄存器仍然是SI、DI、BX、BP, BP仍然由堆栈段寻址。
– 如:DS=136CH,SS=136CH,SI=000FH, BP=FFE0H – 对指令MOV AL,[SI] 操作数地址为136C0H+000FH=136CFH 指令将136CFH单元的内容送到AL; – 对指令 MOV AL,[BP] 操作数地址为136C0H+FFE0H=236A0H 指令将236A0H单元的内容送到AL。
第3讲 8088/8086的寻址方式
苏 放
frossesu@sohu.com
1
基本概念
微机工作过程中其内部信息有两类: 一类是控制信息(指令); 一类是被加工处理的信息(数据)。 • 指令:微机中的控制信息就是使计算机进行某 种操作的命令,这些命令就称为指令。 • 指令系统:一台计算机所能执行的全部指令的 集合称为指令系统。不同的计算机其指令系统 是不同的。
8088/8086的寻址方式
• 要注意各种寻址方式的特点及其应用场合,根 据需要来选择寻址方式。 • 对存储器操作数有多种寻址方式可用,寻址方 式越复杂,指令的字节数就越多,指令的执行 时间就越长。因此,如果较简单的寻址方式可 以满足应用的需要,就不要选择更复杂的寻址 方式,以节省程序占用的内存,减少程序的执 行时间。
8088/8086的寻址方式
– 直接寻址由于对变量的操作:可以对一个变 量赋值;也可以将一个变量的值赋给另一个 操作数。 – 变量本质上就是地址单元的内容,对变量的 操作是要通过变量的地址来进行的,直接地 址就是表示变量地址的一种方式。 – C语句x=y,写成指令就是:
• MOV AL,Y • MOV X,AL
由基址寄存器决定段寄存器 有效地址=基址+变址+16位偏移量 如: MOV AX,MASK[BX][SI] 或:MOV AX,MASK[BX+SI] MOV AX,[BX+SI+MASK]
24
8088/8086的寻址方式
– 所用的寄存器一共只有4种组合: 在数据段:用BX+SI 或:BX+DI 在堆栈段:用BP+SI 或:BP+DI – MOV AL,[BX][SI]也可写为: MOV AL,[BX+SI] – MOV AL,[BP][SI]也可写为: MOV AL,[BP+SI]
19
8088/8086的寻址方式
– 寄存器相对寻址可用来访问一个数组来自百度文库任何 元素:将数组的地址作为偏移量,将数组元 素的序号(从0开始),存入间接寻址寄存 器,改变寄存器的内容,就可以访问数组中 的不同元素,设BLOCK是数组地址: MOV DI,0 MOV AL,BLOCK[DI] ;第0个元素 INC DI MOV BL,BLOCK[DI] ;第1个元素
LEA MOV AA:ADD INC DEC JNZ SI,BLOCK CX,LENGTH AL,[SI] SI CX AA ;数组首地址送SI ;数组长度送CX
16
8088/8086的寻址方式
– 寄存器间接寻址本身也不能确定操作数的 位数,当另一个操作数(立即数)也不能 确定操作数位数时,要对间接地址说明操 作数的位数: MOV AL,[DI] ;8位操作数 MOV [DI],AX ;16位操作数 MOV [SI],100 ;不正确指令 MOV BYTE PTR[SI],100 ;8位操作数 MOV WORD PTR[SI],100 ;16位操作数
21
8088/8086的寻址方式
– 如果偏移量是负数,则应带上负号。 如: MOV AL,-1[DI] 其源操作数的地址是: 136C0H-1+0020H=136DFH – 如果偏移量,也可写在括号内,效果相同, 如以下指令效果相同: MOV AL,10[DI] MOV AL,[DI+10]
22
8088/8086的寻址方式
8088/8086的寻址方式
二、寄存器寻址(Register Addressing) – 指令中给出一个或两个寄存器名,以寄存器的内容 作为指令操作数。这样的操作数就是寄存器操作数; – 寄存器操作数可以用于源操作数,也可用于目的操 作数,甚至可以单独使用。在单独使用时是作为源 还是目的要由指令来决定; – 寄存器寻址方式不需要访问总线,是执行速度最快 的寻址方式,有时可以小于4个时钟周期;
20
8088/8086的寻址方式
– 如:DS=136CH,DI=0020H, – 对指令 MOV AL,1000H[DI] 其源操作数的地址是: 136C0H+1000H+0020H=146E0H – 对指令 MOV AL,0FFH[DI] 其源操作数的地址是: 136C0H+FFH+0020H=137DFH
23
8088/8086的寻址方式
六、基址加变址寻址 – 指令操作数部分是两个带括号的寄存器:一个是基址寄 存器,另一个是变址寄存器。将这两个寄存器内容的和 作为操作数的偏移地址,地址单元的内容作为操作数。 – 基址寄存器只能是BX和BP;变址寄存器只能是SI和DI。 – 若基址是BX,则操作数在数据段;若基址是BP,则操作 数在堆栈段
29
8088/8086的寻址方式
10
8088/8086的寻址方式
三、直接寻址 指令中包含操作数的地址(16位偏移量)。 – 如: MOV AL,[2000H] 若DS=3000H,则操作数的物理地址是: DS=3000H 30000H+2000H=32000H – 又如: MOV AL, VAR1 这时,VAR1代表一个地址,具体的数值另行 决定,操作数的物理地址是: DS:VAR1
28
8088/8086的寻址方式
• 举例: BX=0100H,DI=2000H,DS=2100H 偏移量OST=0250H,假定未使用段前缀 (1)直接寻址 有效地址EA=OST=0250H 物理地址=DS*10H+OST=21250H (2)寄存器间接寻址 BX为寄存器 有效地址EA=BX=0100H 物理地址=DS*10H+BX=21100H DI为寄存器 有效地址EA=DI=2000H 物理地址=DS*10H+DI=23000H
– 立即数和目的操作数必须位数相同,立即数 的低位赋给目的操作数的低位,立即数的高 位赋给目的操作数的高位。 如:MOV AL,100 MOV MOV AX,1000 MOV AL,64H MOV AX,03E8H MOV AL,01100100B MOV AX,0000001111101000B
7
指令格式
指令一般由两部分组成:操作码与地址码 操作码规定操作的性质 地址码提供操作数地址或操作数本身。 Q 还有多地址指令 D
Q
D1
D2
D3
4
8088/8086的寻址方式
• • • • 什么是寻址方式? 指令包括操作码和操作数(的地址)。 如何寻找参加操作的数 ——寻址方式 操作数的来源: – 包含在指令中 (立即数) – 寄存器中 (寄存器名) – 内存中 (地址) • 六种寻址方式 1、立即 2、寄存器 3、直接 4、寄存器间接 5、变址 6、基址加变址
码段 MOV [BP],AX 的执行 AX=62B0H SS BP 3000 0 数据段 200 0 B0 62 32000 32001 堆栈段
15
3 200 0 AH AL 62 B0
8088/8086的寻址方式
– 由于寄存器的内容是可以变化的,使用寄存 器间接寻址的指令的操作数地址也就可以是 变化的。因此,这种寻址方式可以用于对一 个数组的内容进行连续处理,如对数组单元 进行连续相加:
26
8088/8086的寻址方式
– 如:DS=136CH,SS=136CH,BX1000H,BP=F000H, SI=0020H,则: MOV AL,[BX][SI] ; 源操作数地址为146E0H MOV AL,[BP][SI] ; 源操作数地址为226E0H – 若两个寄存器内容之和超过了FFFFH,则舍去进位,保留 其余16位二进制数,如BP=F000H,SI=F000H,则 MOV AL,[BP][SI] ; 27 源操作数地址为216C0H
18
8088/8086的寻址方式
五、变址寻址 在寄存器间接寻址的基础上再加一个16位的偏移量 (立即数,标号)。 [DS:SI]或[DS:DI]或[DS:BX]或[SS:BP]再加一个偏移 量。 如: MOV AX,COUNT[SI] 写成: MOV AX,[SI+COUNT] MOV AX,COUNT+[SI] 也可以
2
基本概念
• 汇编语言指令或符号指令:用字母和其它一些符号组 成的“助记符”与操作数等表示的指令称为汇编语言 指令或符号指令。
例如:MOV AX, BX ; AX←BX 其二进制代码(机器代码)为89D8H,就是 1000 1001 1101 1000 B 不易理解,不易记忆。 – 汇编程序与汇编过程:把符号指令变成机器 代码的过程叫汇编,完成汇编任务的程序叫 汇编程序。 3
25
8088/8086的寻址方式
– 这种寻址方式的指令可以写成多种形式,如: MOV AX,BLOCK[BX][SI] MOV AX,BLOCK[BX+SI] MOV AX,[BLOCK+BX+SI] – 这种寻址方式可以用来访问二维数组的元素: 偏移量为二维数组的首地址,一个寄存器中 为每行第一个元素相对于首地址的距离,另 一个寄存器中为一行元素中的序号。