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

本文详细介绍了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。
使用立即数或者是寄存器的数据赋值,都不需要在存储器中寻找数据,还是很快的。

五种存储器寻址方式

### 存储器与寄存器地址分配机制 存储器本身不具备固有的地址信息,这些地址由芯片制造商或最终用户定义并配置。这一过程被称为存储器映射,涉及设定不同种类存储器的大小及其在系统中的具体位置[^1]。 对于特定型号的微控制器而言,内部RAM、ROM以及其他形式内存资源的位置容量均已被预先规定好;然而,在某些情况下允许通过编程手段调整默认设置来满足特殊需求——这便是所谓的“存储器重映射”。这种灵活性使得开发者可以根据实际应用场景优化硬件资源配置。 当涉及到C51单片机时,“`idata`”被用来表示一种特殊的存储类别,即间接寻址模式下的内部数据区。这意味着程序员可以利用8位宽的寄存器充当指向该区域任意字节单元的有效指针,从而实现动态访问控制功能[^2]。 ### 跳转向量的工作原理 跳转向量(Interrupt Vector Table 或 Exception Vector Table),通常位于程序执行空间起始处的一组预设入口点集合,用于指示处理器如何响应各类中断事件服务请求。每当发生异常情况或是外部触发信号到达时,CPU会依据当前状态自动定位到相应向量表项所指定的目标地址继续运行新指令序列。 #### 实现方式: - **固定偏移法**:最简单的方法之一就是按照预定顺序排列各个可能发生的例外情形,并为其分配连续编号作为相对基址计算的基础。 - **可变索引法**:更灵活的设计方案则是引入额外参数参与运算以决定最终跳跃目的地的确切坐标。这种方式能够更好地适应复杂多变的实际工作环境要求。 ```assembly ; 假定这是一个简单的汇编代码片段展示基本概念 .org 0x00 ; 设置PC计数器初始值为零(通常是复位矢量所在位置) reset_vector: jmp main_program_start ; 复位处理函数调用 interrupt_1_vec: jmp handle_interrupt_1 ; 中断服务例程ISR1入口 ... default_handler: jmp default_exception ; 默认未识别异常处理流程 ``` 上述例子展示了典型的跳转表格布局结构,其中包含了几个关键部分如复位向量(`reset_vector`)其他潜在干扰源对应的分支路径(`interrupt_xxx_vec`)等。每条记录都是一次无条件转移命令,负责引导后续操作至恰当的目的地去完成必要的任务处理逻辑[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值