Java教程

汇编语言 第二章 寄存器

本文主要是介绍汇编语言 第二章 寄存器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

CPU结构:

一典型的CPU主要有寄存器、运算器、控制器等器件构成,它们通过内部总线相连,进行数据传输。第一章中的总线相应为(CPU的)外部总线。

  • 寄存器进行信息存储;
  • 运算器进行信息处理;
  • 控制器控制各种器件进行工作。

8086是16位结构的CPU,这说明:

  • 寄存器的最大宽度为16位;
  • 运算器一次最多可以处理16位的数据;
  • 运算器和寄存器之间的通路为16位。

也就是说,16位结构CPU意味着,在8086CPU内部,能够一次性处理、传输、暂时存储的信息的最大长度为16位。

 通用寄存器:

用于存放一般性的数据的寄存器,称为通用寄存器。8086CPU所有的寄存器都是16位的,可以存放两个字节,一个字。包含AX、BX、CX、DX,四个通用寄存器。

一个16位寄存器可以分为两个8位寄存器,AX可以分为AH(8-15)和AL(0-7)。

需要注意以下两点:

  • 单纯赋值给AL时,如果产生溢出,并不会向AH进位,而是进位直接消失。
  • 8086采用的是小端法,一个完整的存储地址中,低位在小地址,高位在大地址。(两位为一个相对整体)

几条汇编指令:

首先汇编指令和寄存器名称均不区分大小写,mov 和 MOV,AX和ax 均等价

  • mov   ax,bx     AX=BX
  • add    ax,bx     AX=AX+BX
  • sub    ax,bx     AX=AX-BX

写汇编指令时,要注意指令的两个操作对象位数必须一致

比如,mov   ax,bx     mov   al,bh     mov   ah,bh     mov   al,9H都是正确的

而,   mov   ax,bl      mov    bh,ax   mov   al,100H都是错误的

8086CPU给出物理地址的方法:

我们在第一章中知道,地址总线的宽度为20位,但是8086CPU内部一次只能传送16位的数据,那么CPU内外如何交互地址呢?

8086CPU在内部用两个16位地址合成,经过地址加法器产生一个20位的地址,再通过地址总线与存储单元进行交互。

这两个16位地址分别为段地址(SA)和偏移地址(EA),物理地址 = 段地址 * 16  +  偏移地址    其中,段地址*16 也称为基础地址

或许有一个不太恰当的比喻。在书店,书被分成许多类,有文学类、工学类、理学类、农学类等等,每一个大类之中有许多本书,每一本书有自己独特的编号。

那么这个段地址 *16之后便代表某一类某一类书籍,然后再根据偏移地址,找到具体的哪一本书。

使用段地址 * 16可以确定一个起始地址,很显然这个起始地址一定是16的倍数,用十六进制表示就是最后一位一定是0。当段地址固定时,16位的偏移地址的寻址能力为64KB,所以一个段的最大长度为64KB。

对于同一个地址,可以使用不同的段地址和偏移地址来描述。例如:

  • 21F60H  =     2000H     1F60H
  • 21F60H  =     2100H     0F60H

21F60H内存单元的一种表示为  2000:1F60 (段地址:偏移地址)  

段寄存器:

存储段地址的寄存器称为段寄存器,8086CPU包括4个段寄存器,CS、DS、SS、ES

CS和IP:

CS(Code Segment)代码段寄存器,IP(Instruct Pointer)指令指针寄存器,CS存储代码段地址,IP存储偏移地址。任意时刻,CPU将CS:IP指向的内容当作指令执行。

指令实现过程:

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. IP=IP+所读取指令的长度,从而指向下一条指令
  3. 执行指令,跳转到1,重复这个过程

8086CPU不允许像通用寄存器一样直接修改段寄存器的值,有两种方法可以修改CS:IP的指令

第一种jmp转移指令:

  1. 同时修改CS和IP,例如jmp 2AE3:3,执行后:CS = 2AE3H,IP=0003H     jmp 段地址:偏移地址  ==  mov  CS  段地址;mov IP 偏移地址;          
  2. 仅修改IP, 执行前ax=1000H,jmp ax,执行后:IP=1000H      jmp ax(合法寄存器)  == mov  IP ax

第二章debug修改指令:

详见Debug专题

 

 

          

 

这篇关于汇编语言 第二章 寄存器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!