汇编——存储器取数据和地址跳转的寻址方式

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

前言

在编写汇编代码的时候,我们经常需要取出各种各样的数据,进行操作,
但是有的数据常数(这里叫立即数),还有的在寄存器中,都是很简单的,但是难免有一些在存储器中,这时我们就需要取出数据进行操作。

在分支结构或者循环结构中,我们可能需要跳过几行(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。
使用立即数或者是寄存器的数据赋值,都不需要在存储器中寻找数据,还是很快的。

五种存储器寻址方式

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值