8088/8086的数据寻址方式
Posted 你要永远相信光z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8088/8086的数据寻址方式相关的知识,希望对你有一定的参考价值。
立即数寻址方式
采用立即数寻址方式的操作数就直接存放在机器代码中,紧跟在操作码之后。这条指令汇编成机器代码后,操作数作为指令的一部分存放在操作码之后的主存单元中。我们称这种操作数为立即数imm,立即数是以常量形式出现的。常量可以是二进制数(后缀字母B或b)、十进制数(不用后缀字母,或者用D或d)、十六进制数(后缀字母H或h,以A~F开头则要加个0)、 字符串(用单或双引号括起的字符,表示对应的ASCII码值,例如’A’=41H),还可以是标识符表示的符号常量、立即数寻址方式常用来给寄存器和存储单元赋值。
例如: 将立即数0102H送至AX寄存器。
MOV AX,0102H ;指令功能: AX<——0102H,指令代码:B8 02 01
寄存器寻址方式
寄存器寻址方式的操作数存放在CPU的内部寄存器reg中,它可以是8位寄存器r8,即AH/AL /BH/ BL/CH/ CL / DH / DL,也可以是16位寄存器r16,即AX/BX/CX / DX / SI / DI/BP /SP。另外,操作数还可以存放在4个段寄存器seg中:CS / DS / SS / ES.
例如: 将BX寄存器内容送至AX寄存器。
MOV AX,BX ;两个操作数均为寄存器寻址:AxL<一Bx
存储器寻址方式
有效地址简介: 我们8088的存储器空间是分段管理的,程序设计时采用逻辑地址﹔由于段地址在默认的或用段超越前缀指定的段寄存器中,所以只需要偏移地址,称之为有效地址(Effective Address,EA)。
直接寻址方式
在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以使用段超越前缀来改变。
例: 将数据段中偏移地址2000H处的主存数据送至AX寄存器。
MOV AX, [ 2000H] ;指令功能:AX-DS: [ 2000H],指令代码:Al 00 20
变量的定义方法
常用的变量定义伪指令DB和DW分别表示定义字节变量和字变量,例如:
WVAR DW 1233H ;定义字变量WVAR,它具有初值1234H
寄存器间接寻址方式
在这种寻址方式中,操作数的有效地址存放在某个寄存器中(参见图2-9a),8088/8086中寄存器可以是基址寄存器BX或变址寄存器SI、DI。其默认的段地址在DS段寄存器中,可以使用段超越前缀改变。
例: 将数据段中由BX指定偏移地址处的主存数据送至AX寄存器。
*MOV AX,[ BX ] ;指令功能:AX<-DS : [ BX ]
寄存器相对寻址方式
在这种寻址方式下,操作数的有效地址是寄存器内容与有符号8位或16位位移量之和(参见图2-9b),寄存器可以是BX、BP或SI、DI。其中,BX、SI、DI寄存器默认是数据段DS,BP寄存器默认是堆栈段SS;但都可用段超越前缀改变。
例: 将数据段中相对SI偏移地址的位移06H处的主存数据送至AX寄存器。
MOV AX, [ SI+06H] ;AX<-DS : [ SI+06H]
基址变址寻址方式
这种寻址方式是把一个基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成操作数的有效地址EA。若基址寄存器使用BX,其默认段为数据段DS,若基址寄存器使用BP,其默认段为堆栈段SS。但都可用段超越前缀改变。
例: 将数据段中BX与SI之和作为偏移地址的主存数据送至AX寄存器。
MOV AX,[ BX+SI] ;AX一DS: [ BX+SI]
相对基址变址寻址方式
相对基址变址寻址方式,也使用基址寄存器(BX或BP)和变址寄存器(SI或DI),另外还在指令中指定一个8位或16位的位移量,这三者之和构成操作数的有效地址EA。与BX约定的段为数据段DS,与BP约定的段为堆栈段SS,但都可用段超越前缀改变。
例: 将数据段中以BX与SI之和为偏移地址基础,向地址低端位移06H(即减6)处的主存数据送至AX寄存器。
MOV AX,[BX+DI-06H] ;AX<一DS : [ BX+DI-06H]
以上是关于8088/8086的数据寻址方式的主要内容,如果未能解决你的问题,请参考以下文章