寄存器寻址- 操作数位于CPU内部的寄存器中。寄存器名称在指令中指定。寄存器可以是8位、16位或32位。
MOV AX,01E0H; (AX)-01E0H
- 指令中的源操作数为立即数寻址,目的操作数为寄存器寻址。
MOV AX、BX; (AX)—(BX)
- 指令中的源操作数和目标操作数都是寄存器寻址的。在这种情况下,两个寄存器的长度必须相同。
- 这种寻址方式的指令执行速度是最快的,因为操作数都在CPU内部的寄存器中,不需要访问内存来获取操作数。
直接寻址操作数的偏移地址称为有效地址EA(Effictive Address)
-有效地址EA直接在指令中给出。它存储在代码段中指令操作码之后,但操作数一般存储在数据段(DS)中,因此必须先找到操作数的物理地址,然后再访问内存。来获取操作数。
例如:
MOV AX,[1200H]
-源操作数直接在指令中给出并存储在数据段中。有效地址为EA=1200H。假设DS=2000H,则物理地址为:
PA=(DS)*10H+EA=20000H+1200H=21200H
- 可以使用符号地址代替数字地址,例如:
MOVAX,价值
- 当要指定段时,必须指定段跨越前缀,如:
MOV AX,ES:值
寄存器间接寻址操作数的有效地址在基地址寄存器BX、BP或变址寄存器SI、DI中,操作数在内存中。
- 书写格式为寄存器加方括号,例如:
MOV AX,[SI]
-该指令的作用是以SI寄存器的内容为偏移地址,将数据段中字存储单元(即SI指向的存储单元)的内容传送到AX寄存器。
操作数的物理地址为:
PA=10H(DS)+(BX)
PA=10H(DS)+(SI)
PA=10H(DS)+(DI)
PA=10H(SS)+(BP)
寄存器相对寻址- 操作数的有效地址是基址或索引寄存器的内容与指令中指定的8 位或16 位位移之和。现在:
EA=(寄存器)+位移
- 实模式下,除了带有段跨越前缀的,当寄存器为BX、SI、DI时,段寄存器使用DS,寄存器使用BP,SS段寄存器的内容作为段地址。
物理地址=10H(DS)+(BX)或(DI)或(SI)+8或16位位移
或者
物理地址=10H(SS)+(BP)
- 书写格式如:
MOVAX,计数[BX]
其中,COUNT可以是符号地址,也可以是常量。
基址加变址寻址操作数的有效地址是基址寄存器和变址寄存器的内容之和。
物理地址=10H(DS)+(BX)+(DI)或(SI)
或者
物理地址=10H(SS)+(BP)+(DI)或(SI)
- 书写格式如:
MOV AX,[BX][SI]
相对基址加变址寻址操作数的有效地址是基址寄存器和变址寄存器的内容与8位或16位位移之和。
物理地址=10H(DS)+(BX)+(DI)或(SI)+8或16位位移
或者
物理地址=10H(SS)+(BP)+(DI)或(SI)+8或16位位移
- 书写格式如:
MOV AX,数组[BX][SI]
比例变址寻址缩放索引是指一对寄存器中的第二个寄存器乘以缩放因子2、4 或8,以生成操作数的内存地址。
例如:
MOV EDX,[EAX+4*EBX]
- 该指令将EAX 寻址的数据段内存位置的内容加上4 倍EBX 加载到EDX 中。
2.2.2程序存储器寻址直接(程序存储器)寻址跨段直接寻址转换后的段地址和偏移地址由指令直接提供。
行动:
(CS)=FAR_LABEL 的段地址
(IP)=FAR_LABEL 的偏移地址
示例:
JMP FAR PTR FAR_LABEL
FAR_LABEL为远标号,代表目标地址。
相对(程序存储器)寻址移位相对IP。
行动:
(IP)=(IP)+ 8位位移(短转换)
(IP)=(IP)+ 16 位位移(接近转换)
JMP 短标签8 ;短转换JMP 近PTR 标签16 ;近转换JMP $+ 转变
;LABEL8是8位移位,LABEL16i是16位移位
间接(程序存储器)寻址段内间接寻址要传输的目的地的偏移地址,存储在任意16位寄存器或内存单元中
有两种类型(程序存储器)间接寻址模式
**注册间接寻址**
内存间接寻址堆栈寻址CALL指令保存程序的返回地址,
RET(返回)指令从堆栈中删除返回地址。
OK,关于第二章:地址寻址策略与汇编语言程序构建指南和的内容到此结束了,希望对大家有所帮助。
【第二章:地址寻址策略与汇编语言程序构建指南】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
好想快点看看寻址方式和汇编程序组织结构,有点好奇它们是怎么运作的!
有5位网友表示赞同!
学习一下汇编语言好像很有用,说不定以后能写一些小游戏或工具软件
有5位网友表示赞同!
第二章的内容听起来就挺专业的,估计要认真啃啃才能明白
有15位网友表示赞同!
这篇文章写的很全面吧,不仅讲解了寻址方式,还扯到了程序的组织结构
有5位网友表示赞同!
讲道理,只要搞懂这些概念,学习后面的课程应该更容易
有8位网友表示赞同!
我曾经学过一点汇编,感觉有点痛苦,希望能在这里找到一些捷径
有11位网友表示赞同!
现在学计算机越来越需要理解底层知识了,这篇文章算是引入门槛吧
有7位网友表示赞同!
期待看到具体的案例分析,这样更容易理解这些概念
有14位网友表示赞同!
希望老师讲课的时候能解释清楚这些术语,不要过于抽象
有9位网友表示赞同!
我感觉这篇笔记应该对以后写汇编程序很有帮助
有8位网友表示赞同!
有没有人跟我一样觉得汇编语言有点难懂?
有8位网友表示赞同!
希望能在这篇文章中找到一些学习汇编的技巧和方法
有17位网友表示赞同!
寻址方式这个概念听起来很神秘,应该很有趣
有19位网友表示赞同!
这次学习汇编程序组织结构,一定要好好掌握!
有20位网友表示赞同!
感觉这门课内容挺实用的,能让我们更深入地了解计算机工作原理
有12位网友表示赞同!
这篇文章的笔记分享得真好,太感谢作者了!
有18位网友表示赞同!
我要把这篇文章好好收藏一下,以后经常回顾一下
有7位网友表示赞同!
希望能找到一些关于汇编语言学习资源
有12位网友表示赞同!