一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。
♦ 运算器进行信息处理;
♦ 寄存器进行信息存储;
♦ 控制器控制各种器件进行工作;
♦ 内部总线连接各种器件,在它们之间进行数据传送;
不同的CPU,寄存器的个数、结构不同。
8086CPU有14个寄存器,这些寄存器是AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
8086CPU的所有寄存器都是16位的,可以存放两个字节。为了保证兼容,8086CPU的AX、BX、CX、DX这四个寄存器都可分为两个可独立使用的8位寄存器来用。
可以通过几条简单的汇编指令控制CPU的工作。
| 汇编指令 | 控制CPU完成的操作 | 用高级语言的语法描述 |
| mov ax,18 | 将18送入寄存器AX | AX=18 |
| mov ax,bx | 将寄存器BX中的数据送入寄存器AX | AX=BX |
| add ax,8 |
将寄存器AX中的数值加上8 |
AX=AX+8 |
| add ax,bx |
将AX和BX中的数值相加,结果存在AX中 |
AX=AX+BX |
注意:例如AX中数值为00c5H,当执行指令add al,93H时,执行前,al中数据为C5H,相加所得的值为:158H,但是al为8位寄存器,只能存放两位十六进制的数据,所以最高位1丢失,AX中的数值为:0058H.而如果执行的是:add ax,93H,低8位的进位会存储在ah中,CPU在执行这条指令时认为只有一个16位寄存器AX,进行的是十六位运算,执行后,AX中的值为:0158H。
CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,称作物理地址。
8086CPU采用一种在内存用两个16位地址合成的方法来形成一个20位的物理地址。
地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址和偏移地址合成物理地址。
8086CPU有四个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这四个段寄存器提供内存单元的段地址。
CS和IP是8086CPU中两个最关键的寄存器,它们指令了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
8086CPU大部分寄存器的值都可以用mov指令来改变,mov指令被称为传送指令。
然而,mov指令不能用于设置CS和IP的内容,所以有一个简单的修改的指令:jmp指令。
若想同时修改CS、IP的内容,可用形如“jmp段地址:偏移地址”的指令来完成。
若仅想修改IP的内容,可用形如“jmp 某一合法寄存器”的指令完成。
jmp ax在含义上形同于IP=ax。
之后是关于debug的使用。debug是DOS、windows都提供的实模式程序的调试工具。使用它可以查看CPU各种寄存器的内容、内存的情况和在机器码级跟踪程序的运行。
具体用法需按照参考书上一步步学习。
浙公网安备 33010602011771号