一. 寄存器总结
1.1 通用寄存器
1.1.1 数据寄存器
- AX (Accumulator):累加寄存器,也称之为累加器;
- BX (Base):基地址寄存器;
- CX (Count):计数器寄存器;
- DX (Data):数据寄存器;
通用寄存器可以拆分为两个独立的 8 位的 AH 和 AL 寄存器
1.1.2 指针寄存器
- SP (Stack Pointer):堆栈指针寄存器;
-
1.1.3 变址寄存器;
SI (Source Index):源变址寄存器;
DI (Destination Index):目的变址寄存器;
1.1.4 控制寄存器
IP (Instruction Pointer):指令指针寄存器;
-
1.1.5 段寄存器
CS (Code Segment):代码段寄存器;
- DS (Data Segment):数据段寄存器;
- SS (Stack Segment):堆栈段寄存器;
- ES (Extra Segment):附加段寄存器;
二.debug
- debug XXX.exe
- -u cs:ip 查看指令
- -r 查看寄存器
- -t 执行程序查看寄存器中的数据
三. 寄存器寻址总结
3.1 直接寻址
汇编代码 MOV AX,[3];
这种在地址码部分直接给出内存地址空间定位的方式就是立即寻址。立即寻址的特征是方便定位,但无法在运行该程序的时候进行地址变化。
3.2 寄存器间接寻址
将内存的地址存放在寄存器中,以特定寄存器中的值作为要定位的地址。
bx,bp取向于行的意义,BX,BP在寻址结构中是互斥
si,di趋向于列的意思SI,DI在寻址结构中也是互斥
3.3 寄存器相对寻址
寄存器相对寻址中的“寄存器”依然指内存地址存放在寄存器中,但是由于添加了“相对”这一内容,需要要在寄存器的基础上加上一个立即数的因素。
MOV AX,[BX+3]
相较于间接寻址, 有了一个立即数, 有了相对概念
3.4 基址间址寻址
使用角度来说没有什么不同, 使用两个寄存相加得到偏移量
MOV AX,[BX+SI]
3.5 相对基址间址寻址
总结
- 物理地址A=段地址SA+偏移地址EA。
- 寻址过程实际上是对偏移地址EA的计算过程。而段地址默认的寻址方式是寄存器间接寻址,也就是说,段地址的内容只能存在于某一段寄存器中。使用时,可以采取默认的方式,比如[bx]默认段寄存器为DS,而[BP] 默认的段地址在SS中,也可以采用段前缀的方式显式指出段地址所在的段寄存器。
- 使用寄存器来寻址使我们能够方便可靠地对数据结构进行管理。在寄存器间接寻址中已经说过,其寻址的本质并没有多少不同,但是人为的赋予其一些意义,使得我们操作数据起来更加的方便快捷。
三. 实模式
8086处理器就是实模式,后面才出现的保护模式。
3.1 内存分段
在8086之前的cpu,是硬编码模式,编写好的程序中的地址是固定的,无法重定位,这就导致如果此地址有程序运行就没法运行,可用内存很多,但是却无法执行程序,除非修改程序,修改地址。