数据寻址方式,指的是查找数据中内存地址的方式,数据寻址方式有多种(寻址方式分为指令寻址,和数据寻址,现在介绍的是数据寻址)
寻址时,EA表示段偏移,SA表示段地址,内存地址由”段+偏移“合成
首先复习一下不涉及内存的2种寻址
- mov eax, idata ==> 立即寻址
- mov eax, eax ==> 寄存器寻址
下面5种是本节学习内容
寻址方式 | 含义 | 名称 | 常用格式 |
[idata] | EA=idata;SA=(ds) | 直接寻址 | [idata] |
[bx] [si] [di] [bp] | EA=(bx);SA=(ds) EA=(si);SA=(ds) EA=(di);SA=(ds) EA=(bp);SA=(ss) | 寄存器间接寻址 | [bx] |
[bx+idata] [si+idata] [di+idata] [bp+idata] | EA=(bx)+idata;SA=(ds) EA=(si)+idata;SA=(ds) EA=(di)+idata;SA=(ds) EA=(bp)+idata;SA=(ss) | 寄存器相对寻址 | 结构体:[bx].idata 数组:idata[si] 二维数组[bx][idata] |
[bx+si] [bx+di] [bp+si] [bp+di] | EA=(bx)+(si);SA=(ds) EA=(bx)+(di);SA=(ds) EA=(bp)+(si);SA=(ss) EA=(bp)+(di);SA=(ss) | 基址变址寻址 | 二维数组[bx][si] |
[bx+si+idata] [bx+di+idata] [bp+si+idata] [bp+di+idata] | EA=(bx)+(si)+idata;SA=(ds) EA=(bx)+(di)+idata;;SA=(ds) EA=(bp)+(si)+idata;;SA=(ss) EA=(bp)+(di)+idata;;SA=(ss) | 相对基址变址寻址 | 表格[bx].idata[si] 二维数组idata[bx][si] |
在上面的寻址中,段寄存器可以是省略的,有默认值,但可以指定某个寄存器,比如cs
多种寻址方式,可以更灵活的定位内存
在指令执行前,要处理的数据可能存在三个地方,cpu内部,内存,端口
- mov bx, [0] ==》 内存单元
- mov bx, ax ==》 cpu内部,ax寄存器
- mov bx, 1 ==》 cpu内部,指令缓存器
可见数据并不一定在内存中,但绝大部分都放在内存中