8086CPU有14个寄存器:AX , BX , CX , DX , SI , DI , SP , BP , IP , CS , SS , DS , ES , PSW 都是16位寄存器(不同的CPU所拥有的寄存器数量可能不同,位数也可能有所不同)
其中AX , BX , CX , DX 为通用寄存器,为了保持兼容性,这4个寄存器可以拆分为2个8位的寄存器 如:AX --> AL , AH
{8086CPU一次性可处理的两种尺寸数据:字节(byte)和 字(word)}
寄存器逻辑结构:
寄存器的存储方式 如:数据4E20H 存储到AX中, 20H为低8位所以存在AL中,4EH为高8位所以存在AH中(对应在16位中的存储)
(寄存器写法不区分大小写)
汇编指令中的传送指令 mov 如:mov ax , 0101H <==> 把数据0101H传送到寄存器AX中
汇编指令中的相加指令 add 如: add ax , bx <==> 寄存器AX和寄存器BX中的数据相加后的数据传送到寄存器AX中
(物理地址和8086CPU得到物理地址的方法)
{
所有的内存单元构成的是一个一维线性存储空间,在这空间里面每个内存单元都有唯一的地址,(如首个内存单元地址是0),这地址就是物理地址。
8086CPU是一个16位结构的CPU,这CPU能够一次性处理、传输、暂时存储信息的最大长度是16位,因此这样的CPU只能传送一个16位的地址,即寻址能力只有64KB。而作为CPU传送地址的总线有20位,那CPU如何试地址达到20位,即如何提高寻址能力。由于CPU存储处理最大长度只有16位,那CPU就提供2个16位的地址存储,通过地址加法器,组成一个20位的地址信息。即(物理地址 = 段地址*16 + 偏移地址)
物理地址的获得本质上是CPU在访问内存时,用一个基础地址和一个偏移地址进行相加,得到相应内存单元的物理地址
}
8086CPU有4个用来存储段地址的寄存器,分别是 CS,DS,SS,ES。先说CS,它为代码寄存器
与CS匹配一起的是IP,它为指令指针寄存器
(因此CPU会把CS:IP所指向的内容当指令来执行)
CS:IP能透过指令jmp(转移指令)来修改所存储的数据
jmp的使用:例如 (CS:IP 同时修改 jmp XXXX : XXXX )
(IP的修改jmp ax(合法的通用寄存器))
Debug的使用
R命令查看改变CPU寄存器的内容
D命令查看内存中的内容
E命令改写内存中的内容
V命令将内存仲的机器指令翻译成汇编指令
T命令执行一条机器指令
A命令以汇编指令的格式在内存仲写入机器指令