8086CPU的寻址方式

机器语言与汇编语言

机器语言能被计算机硬件直接识别并执行,它由二进制代码组成。

机器语言中的每一条 称为指令,计算机能够识别的所有指令的集合称为指令系统。

指令是计算机能够执行的最小 功能单位,机器语言程序就是由一条条的指令按一定顺序组织起来的指令序列。

计算机的 CPU 不同,指令系统也不同。INTEL 公司的 80X86 系列 CPU,因其硬件结构设计上的包容 性,指令系统具有兼容性,用 8088/8086CPU 的指令系统设计的程序可以在 80X86 系列的 CPU 上执行。8088/8086CPU 的指令系统常被称为 80X86 系列 CPU 的基础指令。

一条指令一般由操作码和操作数两部分组成。机器语言中操作码和操作数都是二进制代码,因而难于记忆、 书写和输入,即使对于计算机的设计者也一样难于使用。因此,对指令中的操作码和操作数 用便于记忆的符号代替,编程语言因而有了第一次发展。

汇编语言是一种符号语言。用汇编语言编制的程序称为汇编语言源程序,计算机不能直 接识别执行,必须翻译成机器语言程序。翻译的过程称为汇编,完成汇编工作的程序称为汇 编程序。汇编程序属于系统程序,是汇编语言的命令处理程序。

机器语言和汇编语言统称为低级语言

3.2 8086CPU 寻址方式

1. 立即寻址

操作数是立即数,可以是 8 位或 16 位的二进制数,也可以是字符常数。立即数作为操作数,这个操作数的寻址方式称为立即寻址,其实它不用寻址。

MOV  AX, 2000H  ;2000H 是立即数操作数 

注意:立即数操 作数只能作源操作数,不能作为目的操作数。

2. 直接寻址

操作数在内存中,指令中直接给出操作数所在的内存单元的偏移地址。可以是数值形式 的地址,也可以用符号表示。

MOV  BL, [2000H]
MOV BX, [3200H]   //将偏移地址为3200H为首地址的连续两个内存单元的内容传送给BX寄存器。

汇编语言中常常用一个符号代替数值,如 BUFF 代替 3200H.BUFF 称为符号地址。BUFF 需要在程序开始处予以定义.

MOV  BX, [BUFF]  ;或写为  MOV  BX, BUFF 

注意:,CPU 读写内存时使用段基址和段内偏移地址,上面指令中的[2000H]和[3200H],都是段内偏移地址。在通常情况 下,存储器操作数的默认在数据段,段基址在 DS。

如果操作数的段基址不是 DS 段,指令要特别说明。例如在 ES 段,指令应书写为:

MOV   BL, ES:[2000H] 

这种用法称为段超越,逻辑地址为 ESX10H+2000H。

3. 寄存器寻址

操作数在 CPU 内部的寄存器中。

ADD  AX, BX  ;源和目的操作数的寻址方式都是寄存器寻址。 

4. 寄存器间接寻址

操作数在内存中,内存单元的偏移地址存放在寄存器中。

MOV  AX, [SI]  ;操作数[SI]的寻址方式为寄存器间接寻址。取出连续两个内存单元的数据传送给AX 

注意:8086CPU 中能够作为寄存 器间接寻址方式使用的寄存器只有 4 个:BX、BP、SI、DI。。BP 在作为间址寄存器时, 段基址默认为 SS;其它 3 个的默认段基址为 DS。但都可以段超越。例:

MOV  DX, ES:[DI] 

5. 寄存器相对寻址

操作数在内存中,内存单元的偏移地址一部分由间接寻址寄存器提供,一部分是指令给 定的 8 位或 16 位地址位移量,二者相加形成操作数的有效地址。

MOV   AX, [BX+DATA]   ;将以BX+DATA为首地址的连续两个内存单元的 数据传送给 AX。 
//书写方式很灵活,下面都是正确的
MOV  AX, [BX]+DATA 
MOV AL, 20H [SI]   
MOV  CX, DATA [DI] 
MOV DX, DATA+ [BP]  

这种寻址方式可用于存取数据表中的数据,用间址寄存器存放数据表首地址,地址位移 量指明要存取表中的哪一个数据,可以方便地存取数据表中的任何数据。

6. 基址变址寻址

操作数在内存中,基址寄存器和变址寄存器相加作为操作数的偏移地址。

MOV  AX, [BX][SI]  ;将 BX+SI 为首地址的连续两个内存单元的数据送给 AX。

注意:8086CPU 中寄存器 BX 和 BP 为基址寄存器, SI 和 DI 为变址寄存器。这种寻址方式中, 一个基址寄存器加一个变址寄存器构成操作数,操作数的形式只有 4 种:

[BX][SI] 
[BX][DI]
[BP][SI]
[BP][DI] 

基址变址寻址方式的主要用途是寻址存储器数组中的元素。将数组的首地址装入基址寄 存器,而把要存取的元素的序号存入变址寄存器中,通过修改变址寄存器的内容来访问数组 中的各个元素,它比寄存器相对寻址更加灵活

7. 基址变址相对寻址

操作数在内存中,操作数的地址由基址寄存器加上变址寄存器再加上地址位移量构成。

MOV  AX, DATA[BX][SI] 
MOV  AX, [BP][DI] DATA 
指令也可以书写为:
MOV  AX, [DATA+BX+SI] 
MOV  AX, [DATA+BX][SI] 
MOV  AX, DATA[BX+SI] 

这种寻址方式主要用于二维数组操作。地址位移量作为数组首地址,基址寄存器寻址行, 变址寄存器寻址列,可以很方便实现数据阵列检索。

8. 隐含寻址

MUL  BL  ;AL 乘以 BL,结果存在 AX 中。   
MOVSB  ;把 DS:SI 指明的内存单元的数据传送到 ES:DI 指明的内存单元 

猜你喜欢

转载自www.cnblogs.com/Hhhighway/p/12751494.html