8086汇编(2)——指令系统与寻址方式

8086汇编(2)——指令系统与寻址方式

一、寻址方式

1、与数据有关的寻址方式

【指令的组成】
指令由操作码和地址码组成。

  • 操作码:说明执行什么操作。
  • 地址码:说明操作数从哪里取出。
    aPCsrv5.png

在汇编语言中的操作码和地址码:
操作码:

  • 用一个唯一的助记符表示
  • 对应机器指令的一个二进制编码

地址码:

  • 可以是一个具体的数值
  • 可以是存放数据的寄存器
  • 或指明数据在主存位置的存储器地址

【寻址方式】
寻址方式对机器运行的速度和效率有很大的影响。
8086的机器代码格式:
V4awNZu.png

【1. 立即数寻址方式】
立即数(imm)可以是8位数值i8(00H ~ FFH),也可以是16位数值i16(0000H ~ FFFFH)。
立即数寻址方式常用来给寄存器赋值。

MOV AX, 1234H

【2. 寄存器寻址方式】
操作数存放在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
MOV BX, AX

【3. 存储器寻址方式】
指令中给出操作数的主存地址信息(偏移地址,称为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中。

多种存储器寻址方式:

  1. 直接寻址方式
    有效地址在指令中直接给出,默认段地址在DS段,可使用段超越前缀改变。
mov ax, [2000H]
mov ax, ES:[2000H]
  1. 寄存器间接寻址方式
    有效地址存放在基址寄存器BX或变址寄存器SI、DI中。默认段为DS,可段超越。
mov ax, [si]
  1. 寄存器相对寻址方式
    有效地址是寄存器内容与有符号8位16位位移量之和,寄存器可以是BX、BP或SI、DI:
    "EA=BX/BP/SI/DI+8/16位位移量"
    段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变。
mov ax, [DI+06H]
mov bx, [BP+06H]
  1. 基址变址寻址方式
mov ax, [BX+SI]
mov ax, [BP+DI]
mov ax, DS:[BP+DI]
  1. 相对基址变址寻址方式
    有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和
    "EA=BX/BP+SI/DI+8/16位位移量"
    段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变。
mov ax, [BX+SI+06H]

在寄存器相对寻址或相对基址变址寻址方式中,位移量可以用符号来表示:

mov ax, [SI+COUNT]   ;COUNT是预先定义好的变量或常量(数值)
mov ax, [BX+SI+WNSUM]

同一寻址方式可以写成不同的形式:

mov ax, [BX][SI]
    ;相当于mov ax, [BX+SI]
mov ax, COUNT[SI]
    ;相当于mov ax, [SI+COUNT]
mov ax, WNSUM[BX][SI]
    ;相当于mov ax, WNSUM[BX+SI]
    ;相当于mov ax, [BX+SI+WNSUM]
2、与转移地址有关的寻址方式
  1. 段内直接寻址
    在同一段内,CS不变,只变IP。指令中直接给出了转移地址的偏移量(8位或16位),该值与转移指令的下一条指令的首地址相加,即得IP的新值。
    偏移量>0 向高地址方向转移
    偏移量<0 向低地址方向转移
    偏移量8位,短跳转,范围 -128~+127
    JMP SHORT QUEST
    偏移量16位,近跳转,范围 -32768~+32767
    JMP NEAR PTR QUEST
  2. 段内间接寻址
    转移的有效地址值在寄存器或存储器中。指令中直接给出了寄存器名或给出访问存储器的各种寻址方式,以便在存储器中找到转移的有效地址。
    指令格式:
    JMP BX
    JMP WORD PTR[BP+TABLE]
    例:
    设(DS)=2000H, (BX)=1256H, (SI)=528FH
    位移量=20A1H, (232F7H)=3280H, (264E5H)=2450H

     JMP  BX         ;(IP)=1256H
     JMP  TABLE[BX]  ;(IP)=3280H
     JMP  [BX][SI]   ;(IP)=(264E5H)=2450H
  3. 段间直接寻址
    不在同一段内,同时改变CS和IP。段间直接转移,指令中直接给出了新的段地址CS和偏移地址IP。偏移地址(IP)在低地址,段地址在高地址。
    指令格式:
    JMP FAR PTR NEXTROUTINT
  4. 段间间接寻址
    新的段地址(CS)和偏移地址(IP)在存储器的连续4个字节单元中(段地址在高地址中,偏移地址在低地址中)。存储器的地址由指令中给出的各种寻址方式(立即寻址方式和寄存器寻址方式除外)求得。其段地址隐含为数据段。
    指令格式:
    JMP DWORD PTR[INTERS+BX]

转载于:https://www.cnblogs.com/exRunner/p/7567334.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值