首页 > 其他 > 详细

汇编学习笔记---2.1通用寄存器

时间:2015-11-04 13:17:24      阅读:242      评论:0      收藏:0      [点我收藏+]

对于汇编程序员来说,CPU中主要的部件就是寄存器,这也是我们程序员可以用指令读写的部件,通过指令来实现对CPU的控制。

以8086CPU为例,它所有的寄存器都是16位的,共有14个寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

以AX为例,寄存器的逻辑结构如下图所示:

技术分享

其中,0-7表示AX中的第八位,用AL表示,8-15表示高八位,用AH来表示,对于一个数据,我们需要将其转为二进制数据,然后按位存储到里面去。

比如数据18,二进制表示为10010,那么,在AX中的存储为:

技术分享

这里我们可以看到,由于18的二进制表示只有5位,因此存储的时候5-15分别用0填充。

在存储数据的时候,需要注意:如果我们存储的数据二进制超出了16位,那么超出的部分不会存储,这种情况结果就是错误的。

一个字节由8个bit组成,可以存放在8为寄存器中,一个word,有两个字节组成,分别称为高位字节,和低位字节。在存储的时候,高位字节和低位字节分别存储到寄存器的高位和低位。

下面我们开始学习简单的汇编指令。

技术分享

这几个指令都比较简单,我们举个例子:

mov ax, 4E20H:这个就表示ax = 4E20H

add ax, 1406H:这个表示ax=ax+1460H,执行之后,ax变成了6226H

看最后一个:

mov ax, 8226H

mov bx, 8226H

add ax, bx

这个例子是这样计算的:ax和bx都是8226H,相加后的值为1044CH,但是ax是16位寄存器,只能存放4位16进制数据,所以结果为ax = 044CH,最高位1被丢掉。

同时,还要注意:我们不能在8为何16位寄存器中进行数据传送,也不能超出寄存器的存储范围,否则就会出错,比如以下指令都是错的:

技术分享

他们错误的原因就是指令的两个操作对象的位数不一致。


版权声明:本文为博主原创文章,未经博主允许不得转载。

汇编学习笔记---2.1通用寄存器

原文:http://blog.csdn.net/trent1985/article/details/49636383

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!