寄存器(通用寄存器)

因为学习使用的是王爽的《汇编语言(第3版)》,因此也只能提到8086CPO的寄存器。对于其他而言,原理都是相通的。

对于8086寄存器,有14个寄存器,主要是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

一、通用寄存器

8086的通用寄存器有AX、BX、CX、DX4个,16位,可存放两个字节,可分为高8位和低8位,这里主要是考虑兼容性问题,8086一次可以处理1字节或是1字的数据。例如:


这里需要注意的是,对于AH和BH是两个完全不相干的东西,例如:

mov al,93H
add al,C5H


通过计算的到的结果应该是158H,但是这已经超过了AL所能存储的最大值了,但1并没有进入到AH中去,而是“丢失了”。至于原因自己还没有找到,还在学习中,等找到答案我会回来进行修改。但这足以说明AL和AH是两个不同的东西。

二、几条汇编指令

(1)数据传送指令mov

格式:mov oprd1,oprd2

功能:本指令将一个源操作数送到目的寄存器中,即oprd1<—oprd2。

说明:

<1>oprd1 为目的操作数,可以是寄存器、存储器、累加器。 oprd2为源操作数,可以是寄存器、存储器、累加器和立即数。

<2>mov 指令有四种可能的操作: 

  • 寄存器与寄存器之间的数据传输指令。如:mov ax,bx;
  • 立即数到通用寄存器数据传送指令。如:mov ax,5600H,这里需要注意立即数只能作为源操作数使用;
  • 寄存器与存储器之间的数据传送指令。如:mov ax,buffer;
  • 立即数到存储器的数据传送。如:mov alfa,24。
<3>本指令不影响状态标志位。
<4>mov指令执行时的数据传送方向

  • 立即数只能作为源操作数,不允许作目的操作数,立即数也不通送至段寄存 器。
  • 通用寄存器可以与段寄存器,存储器互相传送数据,寄存器之间也可以互相传送。但CS段不能作为目的操作数。
  • 存储器与存储器之间不能进行数据直接传送。若要实现存储单元间的数据传送,可以借助于通用寄存器作为中介来进行。
(2)加法指令add
格式:add oprd1,oprd2
功能:两数相加。
说明:
<1>opr1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数。这给程序的编写带来了很大的方便.。
      opr2为立即数,也可以是任意一个通用寄存器操作数。立即数只能用于源操作数。

<2>opr1和opr2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数。理由是指令代码的寻址方式中规定了两个操作数(除立即        数)至少有一个是寄存器操作数。

<3>加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响。以上标志也称为结果标志。加法指令适用于无符号数或有符号数的加法运算。操作数可以是8位,也可以是 16位。


posted @ 2017-01-05 14:27  人形裁判爱丽丝  阅读(1165)  评论(0编辑  收藏  举报