80x86的寻址方式及Dosbox演示

在进入介绍之前首先给大家说一下简单介绍一下DOSBox及DOSBox的使用
DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台。目前,DOSBox 已经支持在 Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运行。

如需要DOSBox,可到一下链接获取
链接:https://pan.baidu.com/s/1rGNR_VoAM6dZG_quwTMW-A
提取码:7ww1

操作DOSBox的步骤:

  1. 首先将DOSBox文件放入C盘或D盘
  2. 安装DOSBox
  3. 若放在C盘,打开界面输入mount c c:\masm,若是D盘将c换成d即可
  4. 输入c:->输入debug进入debug环境,即可进行相关操作
    DOSBox
    debug环境下的几条常用指令(debug中指令一般不区分大小写)
  • — U 反汇编命令
  • — D 查看内存单元neir
  • — R 查看寄存器
  • — A 编写指令
  • — E 修改内存单元
  • — T 执行命令
  • — Q 退出debug环境
    命令

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

与数据有关的寻址方式

1、立即寻址方式(直接找数据本身,不用通过地址)

  • 操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存在代码段里,这种操作数称为立即数
  • 立即数寻址用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目标操作数字段,且源操作数字与目标操作数字长度一致。
  • 举几个栗子并在Dosbox上演示一下
(1)   MOV     AL,5      执行后AL里的值为05H
(2)   MOV    AX,3064H       执行之后AX里的值为3064H
(3)   MOV    EAX,12345678H    执行之后EAX里的值为12345678H

dosbox

2、寄存器寻址方式

  • 操作数存在寄存器中,指令指定寄存器号。
  • 对于16位操作数,寄存器可以是AX,BX,和CX,DX,SI,DI,SP,BP;
  • 对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH;
  • 对于32位操作数,寄存器可以是EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP;
  • 举个栗子并在Dosbox上演示一下
      MOV   AX,BX
      
      执行指令前(AX) = 3064H,(BX) = 1234H,执行指令后(AX) = 1234H,BX保持不变

Dosbox
寄存器寻址

有效地址

在80x86系统中,我们将操作数的偏移地址称为有效地址(effective address,EA),寻址方式其实就是为求得有效地址的不同途径。
有效地址由四个成分组成:

  1. 位移量是存放在指令中的一个8位,16位或32位的数,但它不是一个立即数,是一个地址。
  2. 基址是存在基址寄存器中的内容。它是有效地址中的基址部分,通常用来指向数据段中的数组或是字符串的首地址。
  3. 变址是存放在变址寄存器中的内容。它通常用来访问数组中的某个元素或是字符串中的某个字符。
  4. 比例因子386及其后继机型新增加的寻址方式中的一个术语,其值可为1,2,4,8。

有效地址的计算公式

  • EA = 基址+(变址 * 比例因子) + 位移量

3、直接寻址方式

  • 操作数的有效地址只包含位移量一种成分,其值就放在代码段中指令的操作码之后
  • 位移量及操作数的有效地址。
  • 举个栗子并在Dosbox上演示一下
    MOV  AX,[2000H]
    若是(DS) = 3000H,执行后(AX) = 3050H

DOSBox
立即寻址

4、寄存器间接寻址方式

  • 操作数的有效地址只包含基址寄存器内容或变址寄存器内容的成分。
  • 16位寻址可用寄存器BX,BP,SI,DI;
  • 32位寻址可用寄存器EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP;
  • 举个栗子并在Dosbox上演示一下
 MOV AX,[BX]
   若(DS) = 2000H,(BX) = 1000H
   则物理地址 = 20000+1000 = 21000H
   执行结束(AX) = 50A0H

寄存器间接寻址

5、寄存器相对寻址方式

  • 操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两部分组成。
  • 举个栗子
   MOV   AX,COUNT[SI]
       COUNT为16位位移量的符号地址,若(DS) = 3000H,(SI) = 2000H,COUNT = 3000H
       则物理地址 = 30000 + 2000 + 3000 = 35000h
       执行结果(AX) = 1234H

寄存器相对寻址

6、基址变址寻址方式

  • 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两部分组成。
  • 举个栗子
     MOV    AX,[BX][DI]
     若(DS) = 2100H,(BX) = 0158H,(DI) = 10A5H
     则EA = 0158 + 10A5 = 11FDH
     物理地址 = 21000 + 11FD = 221FDH

7、相对基址变址寻址方式

  • 操作数的有效地址是基址寄存器和变址寄存器的内容加上指令中指定位置位移量之和,所有有效地址由三部分组成。
  • 举个栗子
 MOV  AX,MASK[BX][SI](或者可以写成MOV AX,[MASK+BX+AX])
 
      若(DS)  = 3000H  (BX) = 2000H,(SI) = 1000H, MASK = 0250H
      则物理地址 = 30000 +2000 + 1000 + 0250 = 33250H
      执行之后 (AX) = 1234H

相对基址变址
后三种寻址方式不经常使用,这里简单介绍一下

8、比例变址寻址方式

  • 有效地址由三部分组成:变址寄存器内容乘以指令中指定的比例因子加上位移量之和

9、基址比例变址寻址方式

  • 有效地址有三部分组成:变址寄存器内容乘以比例因子加上基址寄存器内容之和

10、相对基址比例变址寻址方式

  • 有效地址由四部分组成:变址寄存器内容乘以比例因子加上基址寄存器内容,再加上位移量之和。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值