汇编语言笔记02-寄存器(CPU工作原理)

 

转载必须注明出处,违者必究。http://www.cnblogs.com/dennisOne

 

 

典型CPU的构成

一个典型的CPU是由运算器、控制器、寄存器等器件构成。在CPU中:

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各种器件进行工作
  • 内部总线连接CPU的各种器件,在它们之间进行数据的传送。

   

8086CPU的通用寄存器

  1. 8086CPU的所有CPU都是16位的,可以存放2个字节。
  2. 为了保证兼容,8086CPU通用寄存器AXBXCXDX可划为两个可独立使用的8位寄存器来使用。

   

字在寄存器中的存储

8086CPU可以一次性处理两种尺寸的数据。一种是字节(byte),可以存在8位寄存器中,一种是字(word),可以存在16位寄存器中。

   

几条简单的汇编指令

总结:

  • 指令的两个操作对象的位数应当一致。 诸如mov ax blmov al 2000都是错误的指令
  • ahal是两个独立的寄存器,CPU在执行指令的时候将ah和al看成两个不相关的寄存器。
  • ax和al进位时进位值并不保存在ax和al中,而是保存在标志位中。

   

物理地址

  1. 内存地址空间是一个线性空间,每个内存单元都有唯一的地址,称为物理地址。
  2. CPU通过地址总线送入寄存器的,必须是一个内存单元的物理地址。必须在CPU内部形成物理地址。
  3. 8086CPU16位结构的。表现在:

    (1). 运算器 一次最多可以处理16位的数据。

    (2). 寄存器的最大宽度为16位。

    (3). 寄存器和运算器之间的通路是16位的。

  4. 8086CPU的地址总线宽度为20位,可以传送20位地址,达到1M寻址能力。8086CPU又是16位结构的。8086CPU采用两个16位地址合成的方式来形成20位的物理地址。

       

   

  1. 内存并没有分段,而是CPU使用"分段"的方式管理内存。
  2. 基础地址(段地址DA*16)+偏移地址(EA)=物理地址
  3. 基础地址(段的起始地址)16的倍数。偏移地址为16位,所以一个段的最大长度最大为64KB
  4. 可以根据需要,将地址连续、起始地址位16的倍数的一组内存单元定义为一个段。
  5. "数据在21F60H内存单元中"的表述:

    "数据存在内存2000:1F60单元中"或"数据存在内存的2000段中的1F60单元中"

   

段寄存器

  1. 8086CPU4个段寄存器:CSDSSSES
  2. CSIP是指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。

    8086CPU的工作过程:

    (1). CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;

    (2). IP自动指向下一条指令;

    (3). 执行指令。(转到步骤(1), 重复这个过程)

  3. 修改CSIP的指令

    (1). mov指令不能用于设置CSIP的值。8086CPU使用jmp命令(转移指令)来改变CSIP的值。

    (2). "jmp 段地址: 偏移地址" 修改CSIP

    "jmp 某一合法寄存器" 修改IP

    8086CPU不支持 "jmp 常量"指令。

   

Debug的几个常见指令

  • R命令查看、改变CPU寄存器的内容。
  • D命令查看内存中的内容。
  • E命令改写内存中的内容。
  • U命令将内存中的机器指令翻译成汇编语言。
  • T命令执行一条机器指令。A命令以汇编指令的格式在内存中写入一条机器指令。
  • P命令执行int 21中断命令。执行到loop指令,Debug会自动重复执行循环中的指令,直到(cx)=0为止。
  • G命令一次性执行到某条命令[类似于断点]

   

posted @ 2012-10-15 10:01  dennis_fan  阅读(1230)  评论(0编辑  收藏  举报