汇编语言第二章寄存器

Posted on 2018-10-09 21:08  pgl24  阅读(146)  评论(0)    收藏  举报

一个典型的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各种寄存器的内容、内存的情况和在机器码级跟踪程序的运行。

具体用法需按照参考书上一步步学习。