一. 寄存器总结

1.1 通用寄存器

1.1.1 数据寄存器

  • AX (Accumulator):累加寄存器,也称之为累加器;
  • BX (Base):基地址寄存器;
  • CX (Count):计数器寄存器;
  • DX (Data):数据寄存器;

通用寄存器可以拆分为两个独立的 8 位的 AH 和 AL 寄存器

1.1.2 指针寄存器

  • SP (Stack Pointer):堆栈指针寄存器;
  • BP (Base Pointer):基指针寄存器;

    1.1.3 变址寄存器;

  • SI (Source Index):源变址寄存器;

  • DI (Destination Index):目的变址寄存器;

    1.1.4 控制寄存器

  • IP (Instruction Pointer):指令指针寄存器;

  • FLAG:标志寄存器;

    1.1.5 段寄存器

  • CS (Code Segment):代码段寄存器;

  • DS (Data Segment):数据段寄存器;
  • SS (Stack Segment):堆栈段寄存器;
  • ES (Extra Segment):附加段寄存器;

    二.debug

  1. debug XXX.exe
  2. -u cs:ip 查看指令
  3. -r 查看寄存器
  4. -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 相对基址间址寻址

MOV AX,[BX+SI+3]

总结

  • 物理地址A=段地址SA+偏移地址EA。
  • 寻址过程实际上是对偏移地址EA的计算过程。而段地址默认的寻址方式是寄存器间接寻址,也就是说,段地址的内容只能存在于某一段寄存器中。使用时,可以采取默认的方式,比如[bx]默认段寄存器为DS,而[BP] 默认的段地址在SS中,也可以采用段前缀的方式显式指出段地址所在的段寄存器。
  • 使用寄存器来寻址使我们能够方便可靠地对数据结构进行管理。在寄存器间接寻址中已经说过,其寻址的本质并没有多少不同,但是人为的赋予其一些意义,使得我们操作数据起来更加的方便快捷。

    三. 实模式

    8086处理器就是实模式,后面才出现的保护模式。

3.1 内存分段

在8086之前的cpu,是硬编码模式,编写好的程序中的地址是固定的,无法重定位,这就导致如果此地址有程序运行就没法运行,可用内存很多,但是却无法执行程序,除非修改程序,修改地址。