寄存器
对于汇编程序员来说,cpu中的主要部件是寄存器,寄存器是cpu中程序员可以用指令读写的部件,程序员可以通过改变各种寄存器内容实现cpu控制。
不同的cpu,寄存器的个数,结构是不相同的,8086cup有14个寄存器。AX,BX,CX,DX,SI,DI,SP,BP,CS,SS,DS,ES,PSW
8086cup所有寄存器都是16位,可以存放2个字节。AX,BX.CX,DX这4个寄存器通常存放一般性的数据,被称为通用寄存器。
8086cpu的上一代的寄存器是16位,为保证兼容,使原来基于上代cpu编写的程序稍微修改的可以运行在8086上,8086cpu的AX,BX,CX,DX这4个寄存器都可以分为二个独立使用的8位寄存器使用。
AX分为 AH和AL;
AB分为 BH和BL;
AC分为 CH和CL;
AD分为 DH和DL;
对于兼容性考虑,8086cpu可以一次性处理二种尺寸的数据
字节:byte8个bit,可以存在8位寄存器
子,一个字二个字节组成,这二个字节分别这个字的高位字节和地位字节。
几条汇编指令
mov ax,18 将18送入ax寄存器 ax=18
mov ah,78 将78送入ah寄存器 ah=78
add ax,8 将ax数字增加8 ax=ax+8
mov ax,bx 将bx寄存器的值存入ax寄存器中 ax=bx
add ax,bx 将bx寄存器值添加到ax寄存器中 ax=ax+bx
实例:
命令 执行后AX中的数据 执行后BX中的数据
mov ax,4E20H 4E20H 0000H
add ax,1406H 6226H 0000H
mov bx,2000H 6226H 2000H
add ax,bx 8226H 2000H
mov bx,ax 8226H 8226H
add ax,bx ? 8226H
计算:
8226H
+ ----
8226H
=1044CH
应为AX为16位寄存器放不下20位所以高位1不能再AX保存,AX数据为044CH。
实例:
命令 执行后AX中的数据 执行后BX中的数据
mov ax,001AH 001AH 0000H
mov bx,0026H 001AH 0026H
add al,bl 0040H(1A+26) 0026H
add ah,bl 2640H(00+26) 0026H
add bh,al 2640H 4026H(00+40)
add ah,0H 0040H 4026H
add al,85H 00C5H(85H+40H) 4026H
add al,93H ?(C5H+93H) 4026H
计算~,158H但是AL为8位寄存器,所以高位1丢失AX数据为0085H
物理地址
我们知道,cup访问内存单元,要给出内存单元地址,所有内存单元构成的储存空间是一个一维的线性空间,每一个内存内存单元在这空间都有唯一的地址,我们将这唯一的地址称为物理地址。
cup通过地址总线送入寄存器,必须是一个内存单元物理地址,在cpu向地址总线发出地址之前,必须内部先形成这物理地址,不同的cpu有不同的形成方式,8086cup如何形成内存单元物理地址的?