常用的7中寻址方式
昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式.
(注意,这个属于简陋版的,写了4个小时的博客,也就是第一版,保存了一下,但是博客出问题了,重新打开后发现保存的内容没了,让我很无语
所以我星期六星期天重新编辑这一张,现在发出这些先简单的预习一下谢谢)
1.操作码,操作数,位移量,立即数的概念
8086的寻址方式,这个寻址方式是什么意思,是让我们书序8086汇编指令的格式,
尤其是其中的操作数的表达方法
操作码: mov add ....等指令,暂时就先把这些认定为mov即可.后面会一一讲解指令
操作数, 例如 mov ax,1234 那么操作数就是 ax,和 1234 其中 1234成为源操作数,ax成为目标操作数
为什么这样说,因为我们要把源操作数 通过 mov 传送指令, 传送给 目标操作数ax
对于操作数而言
1.操作数可以是一个具体的值(也就是 立即数,其中立即数是后面翻译过来的,叫做(imm缩写))
2.操作数可以是存放数据的寄存器(上面也说了, ax目的地操作数)
3.操作数可以是存储器的地址(怎么理解,可以理解为 mov ax,[2000])可以是一个地址
常用的7中寻址方式
昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式.
1.操作码,操作数,位移量,立即数的概念
8086的寻址方式,这个寻址方式是什么意思,是让我们书序8086汇编指令的格式,
尤其是其中的操作数的表达方法
操作码: mov add ....等指令,暂时就先把这些认定为mov即可.后面会一一讲解指令
操作数, 例如 mov ax,1234 那么操作数就是 ax,和 1234 其中 1234成为源操作数,ax成为目标操作数
为什么这样说,因为我们要把源操作数 通过 mov 传送指令, 传送给 目标操作数ax
对于操作数而言
1.操作数可以是一个具体的值(也就是 立即数,其中立即数是后面翻译过来的,叫做(imm缩写))
2.操作数可以是存放数据的寄存器(上面也说了, ax目的地操作数)
3.操作数可以是存储器的地址(怎么理解,可以理解为 mov ax,[2000])可以是一个地址
立即寻址
mov ax,2000h
格式是:
操作码 立即数
操作码则是mov 立即数就是后面的数
寄存器寻址方式
mov ax,1234h
mov bx,ax
机器代码格式
操作码
89 操作码和操作数
存储器寻址方式
- 8086设计了多种存储器寻址方式
1、直接寻址方式
2、寄存器间接寻址方式
3、寄存器相对寻址方式
4、基址变址寻址方式
5、相对基址变址寻址方式
五种寻址方式,加上上面两种总共其中
直接寻址方式
mov ax,[2000h]
反汇编:
机器代码格式
操作码 立即数
A1 0020
寄存器间接寻址方式
有效地址存放在基址寄存器BX或变址寄存器SI、DI中
默认的段地址在DS段寄存器,可使用段超越前缀改变
MOV AX,[SI] ;AX←DS:[SI]
机器码格式
操作码 寻址方式,目的寄存器
8B 04
04拆分为二进制为 0000 0100 00(寻址方式) 000(目的寄存器) 100 (源操作数)
可以对应下方的表格
查找 (mod 寻址方式 )
由此得出源操作数是SI
寄存器相对寻址
有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI
有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变
mov ax,[di + 06h]两种不同的形式,如过06是8位的话那么寻址方式是不同的.
操作码 寻址方式/目标寄存器/源操作数 位移量
8B 45 06
45 得出寻址方式目的寄存器,和源操作数
01 000 101
代表了DI 要加一个8位的偏移量即可.
基址变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变
mov ax,[bx+si] 基址寄存器(bx bp) 变址寄存器(SI DI)
操作码 寻址指令/目标寄存器,源操作数
8B 00
基址变址,相对寻址
mov ax,[bx + si +06h]
操作码 寻址公式/目标寄存器/源操作数 位偏移
8B 40 06
拆分40得出 0100 0000
表示BX + SI 还需要家后面的8位偏移量6