zl程序教程

您现在的位置是:首页 >  Java

当前栏目

(二)汇编语言——寄存器

2023-02-18 16:38:07 时间

目录

通用寄存器

汇编指令

物理地址


        接下来我们来介绍寄存器,同时会介绍一些基本的语句(mov,add等),好了,就让我们进入今天的学习吧!同时,我们以8086为例子来介绍,参考来自王爽老师的书。


        说起寄存器,我们可不陌生,在单片机中我们已经接触过了。但是这个地方的寄存器要比单片机中有点不一样,以8086为例子,一共有14个寄存器:

  • 通用寄存器:AX、BX、CX、DX;
  • 变址寄存器:SI、DI;
  • 指针寄存器:SP、BP;
  • 指令指针寄存器:IP;
  • 段寄存器:CS、SS、DS、ES;
  • 标志寄存器:PSW 

        这些我们在后面都会一一介绍,不过首先,我们来介绍一下通用寄存器。

通用寄存器

        8086所有的寄存器都是16位的,所以最大可以存放2^16 - 1,但是目前有个问题,就是8080是8位的,那么两种是否是否是完全不同的两个东西,答案是否定的,这是因为8086的寄存器,分为高位(H)和低位(L),这就相当于两个8位,不得不说,还是满巧妙地,这样也解决了我的疑问,为什么在单片机里面寄存器可以拆开来用。

汇编指令

        接下来我们来简单介绍两个汇编指令:mov 和 add,主要就是用来移动数据和加数据。 可以说非常简单了 ,就不再赘述。唯一需要注意的就是,当加法溢出之后,溢出位是直接没有的,比如16位数据相加溢出,17位的1直接消失,而如果是8位,也不会向高位溢出,也是直接舍弃。

        就像这里红色圈起来的0058,当执行add al, 93,之后,相当于,c5+93=158,然后1溢出,不会向高位进位。 

物理地址

        我们知道,8086有20位地址总线,所以寻址能力应该为1M。但是有个问题,就是8086是16位的机器,并不能一次传输20位的数据,这可怎么办呢?         解决办法就是用两个16位寄存器合成20位数据,这样就解决了问题,也就是:物理地址=段地址×16+偏移地址,接下来我们来看一看。         这样,我们表示123C8就可以直接用1230:00C8来表示,当然也可以用其他的,在此不再赘述。

 未完待续