8086CPU全部一共有14个寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,全部的寄存器都是16位的,能够存放两个字节(一个字)。spa
AX、BX、CX、DX一般用来存放通常性数据被称为通用寄存器。翻译
AX通用寄存器存储二进制方式为:3d
为了保证兼容性,这四个寄存器均可以分为两个独立的8位寄存器使用。指针
1)AX能够分为AH和AL,分别是高8位和低8位blog
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位寄存器。如何不能独立使用那么就不能兼容。
汇编指令不分大小写
下面是几条简单的汇编指令:
这里须要注意的是,汇编的指令须要从后往前看,例如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位的物理地址。
物理地址=段地址*16=偏移地址
段地址*16就是向左移一位,若是是二进制数则就是向左移四位
虽然“段地址”这个名词中包含了“段”这个字,可是并非说将内存分为一个个的段。
两点须要注意:
(1)段地址*16必然是16的倍数,因此一个段的起始地址也必定是16的倍数;
(2)偏移地址为16位,16位地址的寻址能力为64KB,因此一个段的长度最大为64KB。
从这个图中能够得出结论:CPU能够经过不一样的段地址和偏移地址造成同一个物理地址。
段寄存器顾名思义就是提供段地址的寄存器,8086CPU有4个段寄存器,分别是CS、DS、SS、ES。
CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。
CS为代码段寄存器,IP为指令指针寄存器(偏移地址寄存器)
当8086CPU启动时或者复位时,CS=FFFFH,IP=0000H
传送指令mov不能修改CS和IP寄存器里的值,可是8086CPU提供的一个转移指令jmp指令来修改CS与IP寄存器的值。
R命令查看、改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以汇编指令的格式在内存中写入一条机器指令;