前言
在编写汇编代码的时候,我们经常需要取出各种各样的数据,进行操作,
但是有的数据常数(这里叫立即数),还有的在寄存器中,都是很简单的,但是难免有一些在存储器中,这时我们就需要取出数据进行操作。
在分支结构或者循环结构中,我们可能需要跳过几行(if else语句)或者回到几行之间(循环),
所以我们需要修改存储当前指令的IP寄存器,为其赋值的过程中我们就需要赋值,道理同上。
在例子中,我们经常使用的是mov ax,……,这里要说明一下,寻址方式不一定非要是mov指令,而且mov指令这样的两个操作数都可以采用寻址方式。
寻址的准备工作
先讲一下地址的形成:
8086是20位的地址线,但是我们的寄存器是16位的,剩下的四位不能浪费了,所以人们就想出附加段寄存器的方式(下面的配对中,前面的都是附加段寄存器)。
将附加段寄存器的内容乘10H,然后加上偏移地址(EA),这样我们就得到了一个20位的地址。
我们将20位的地址叫做物理地址(PA)。
接下来需要求的就是EA。
给出常用的寄存器配对:
- CS+IP
- SS+SP or BP
- DS+BX、DI、SI或一个16位数
- ES+DI(用于串指令)
如果不是串部分,我们的DI寄存器都配合DS使用。
另外我们还有跨段寻址,就是不按照默认的寄存器来,如:MOV AX,DS:[BP]
立即数寻址和寄存器寻址
mov ax,10h
mov ax,bx
一个是将10h的内容赋值给ax,另一个是将bx的内容赋值给ax。
使用立即数或者是寄存器的数据赋值,都不需要在存储器中寻找数据,还是很快的。

本文详细介绍了8086汇编语言中的寻址方式,包括立即数、寄存器、存储器寻址等,并通过实例解析了直接寻址、寄存器间接寻址、基址变址寻址和相对基址变址寻址。同时,讨论了转移指令,包括段内和段间转移,解析了不同寻址方式下的跳转实现。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



