寄存器(通用寄存器)

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

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

1、通用寄存器code

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


这里须要注意的是,对于AH和BH是两个彻底不相干的东西,例如:class

mov al,93H add al,C5H


经过计算的到的结果应该是158H,可是这已经超过了AL所能存储的最大值了,但1并无进入到AH中去,而是“丢失了”。至于缘由本身尚未找到,还在学习中,等找到答案我会回来进行修改。但这足以说明AL和AH是两个不一样的东西。兼容性

2、几条汇编指令原理

(1)数据传送指令mov程序

格式:mov oprd1,oprd2im

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

说明:

<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位。