实验三,不同寻址方式的灵活应用


mov指令

MOV AX,VAL MOV指令用于给寄存器赋值,

寄存器

通用数据寄存器

AX 累加器

BX 基地址寄存器

CX 计数寄存器

DX 数据寄存器

地址寄存器

SP 堆栈地址寄存器

BP 基地址寄存器

SI 源变地址寄存器

DI 目的变址寄存器

端地址寄存器

CS 代码寄存器

SS 堆栈端寄存器

DS 数据寄存器

ES附加端寄存器

指令寄存器

IP 指令指针寄存器

标志寄存器

FLAGS 存放CPU的两类标志

操作数的寻址方式

立即寻址

所要找的操作数全部写在指令中

寄存器寻址

我们把操作数放到寄存器中

立即寻址方式使用

我们进入debug模式,然后输入A,准备执行指令

首先我们在界面输入MOV AL,6, MOV AX,12AF。这里我们就往寄存器里面存入了这两条指令

然后我们按回车,进入命令模式,我们输入U0100 0105这个命令可以查看地址(0100-0105)的指令信息(这个也叫反汇编)

这里我们可以看到,我们输入的指令显示出来了

然后我们查看一下地址信息输入D0100

寄存器寻址方式使用

首先我们可以使用d命令来查看内存的内容

然后我们使用r命令向bx寄存器中写入值,这里我们向BX寄存器中写入了4050

然后我们使用mov指令把bx寄存器的内容写入ax

然后使用反汇编查看我们输入的指令,这里我们查看0102-0104这个范围的内容

同时我们可以使用-g来运行这两个地址的存储的指令,这里我们可以看到 AX里面是4050可以看到这个指令是执行成功了的

直接寻址方式使用

首先我们给e命令4050这个地址写值,然后使用d查看内容,我们可以看到6,这里我们使用的全部是偏移地址(正常的是 段地址:偏移地址)

首先我们设置编译地址并放入寄存器ax中

我们使用反汇编可以看到我们的编译地址已经存储到机器码中去了

下面我们使用t来执行命令(注意,自己的指令在哪个地址,t后面就接那个地方,我这里是因为之前写过指令,现在放到0105这个地方了)

从这里可以看到,ax寄存器中获取到了4050的值

寄存器间接寻址方式的使用

首先我们的4050这个地方有值

然后我们给寄存器bx写入4050

写入完成后,我们使用mov指令,把寄存器bx中的值作为偏移地址,然后我们执行一下指令查看结果

我们可以看到AX寄存器中获取到了我们的内容

寄存器相对寻址方式的使用

这里我们同样需要向4050这块内存写入数据

然后我们向寄存器bx写入地址数据,我们这里只写入4000(因为后面我们会在指令上加上50)

然后我们写入指令,这样我们就把bx+50 也就是4050这个地址的数据移动到ax寄存器中

我们执行一下我们的指令,可以看到,ax里面成功有了66这个值

基址变址寻址方式的使用

这个其实和上面的一样,我们这里利用两个寄存器,我们向SI寄存器中写入50这个值

然后我们写入指令到内存,然后执行代码

这里我们可以看到AX的值变成了66

相对基址变址寻址方式

我们这里使用两个寄存器外加一个值来实现赋值操作,原理是一样的,这里我们还是接上一步,先给di寄存器写入10

然后写指令到内存并执行,这里我为了区分,这次就放cx寄存器中

我们可以看到cx寄存器成功获取到了4050的66这个值


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录