1.通用寄存器
8086CPU所有一共有14个寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,所有的寄存器都是16位的,可以存放两个字节(一个字)。
AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。
AX通用寄存器存储二进制方式为:
为了保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。
1)AX可以分为AH和AL,分别是高8位和低8位
2)BX可以分为BH和BL
3)CX可以分为CH和CL
4)DX可以分为DH和DL
那如何向下兼容8位寄存器呢?就是将AH全部填0,只用AL部分。
AX的低8位(0~7位)构成了AL寄存器,高8位(8~15位)构成了AH寄存器。
AH和AL寄存器是可以独立使用的8位寄存器。如何不能独立使用那么就不能兼容。
2.几条简单的汇编指令
汇编指令不分大小写
下面是几条简单的汇编指令:
这里需要注意的是,汇编的指令需要从后往前看,例如mov ax,18正确的顺序是将18送入ax中。
两道例题:
(1)
mov ax,8226H
mov bx,8226H
add ax,bx
结果ax中存放的数是044CH
因为即使8226H+8226H=1044CH但是ax为16位寄存器,只能存放044CH,多出的1这里不做讲解。以后的博客中会说。
(2)
mov al,00C5H
add al,93H
那么结果al中存放的数据不是0158H而是0058H,因为这里用的是al寄存器,ax的低8位寄存器,所以高8位为0,至于多出的那个1这里先不做讲解。以后的博客中会说。
8086CPU给出物理地址的方法:
将16位的段地址和16位的偏移地址通过地址加法器给出20位的物理地址。
3.地址加法器合成物理地址的方法
物理地址=段地址*16=偏移地址
段地址*16就是向左移一位,如果是二进制数则就是向左移四位
虽然“段地址”这个名词中包含了“段”这个字,但是并不是说将内存分为一个个的段。
两点需要注意:
(1)段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;
(2)偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。
从这个图中可以得出结论:CPU可以通过不同的段地址和偏移地址形成同一个物理地址。
4.段寄存器
段寄存器顾名思义就是提供段地址的寄存器,8086CPU有4个段寄存器,分别是CS、DS、SS、ES。
CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。
CS为代码段寄存器,IP为指令指针寄存器(偏移地址寄存器)
当8086CPU启动时或者复位时,CS=FFFFH,IP=0000H
传送指令mov不能修改CS和IP寄存器里的值,但是8086CPU提供的一个转移指令jmp指令来修改CS与IP寄存器的值。
5.DEBUG中常用指令
R命令查看、改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以汇编指令的格式在内存中写入一条机器指令;