当前位置: 代码迷 >> 汇编语言 >> 王爽书题目的不明白,该如何解决
  详细解决方案

王爽书题目的不明白,该如何解决

热度:4706   发布时间:2013-02-26 00:00:00.0
王爽书题目的不明白
王爽的汇编原理(第二版)第五章说将ffff:0-ffff:b中的数据直接累加到bx中,书上慢慢引导学生的方法自问自答得方式来说。他说 我们能否将ffff:0-ffff:b直接累加到bx中。他 自己回答 当然不行 ffff:0-ffff:b是八位数据 不能直接累加到16位的bx中。 然后他又问 能否累加到dl中 。他自己回答不能,可能进位丢失。他给出的方法是 用ax做中介,再将ax中数据加到bx中。问题一:ax不是16位的吗,还能直接加?


然后代码是
  mov al,ds:【x】(X属于0到b)
  mov ah ,0
  add dx,ax
这个代码 是用al累加的吧。。。不怕越位吗

------解决方案--------------------------------------------------------
王爽师傅在书中说的很清楚(不知你是否先前已有过汇编经验或其他编程经验),经验很关键的一点是王爽师傅说:ffff:0-ffff:b这段是字节型数据,整体看也是要求是字节型数据累加...
此内容主要是讲解在程序编写过程中注意类型匹配:
王爽的汇编原理(第二版)第五章说将ffff:0-ffff:b中的数据直接累加到bx中,书上慢慢引导学生的方法自问自答得方式来说。他说 我们能否将ffff:0-ffff:b直接累加到bx中。他自己回答 当然不行 ffff:0-ffff:b是八位数据 不能直接累加到16位的bx中。
ffff:0-ffff:b是八位数据(字节型),BX(书上说是DX,意义一样)是16位,采用ADD AX,DS:[BX],因为目的操作数为16位寄存器,那这条指令将会被隐性指定成字操作,也就是说ADD AX,DS:[BX]会使DS:[BX]和DS:[BX+1]两个字节的内容合为一个字加进AX,自然也就不符合字节型数据累加的要求.
然后他又问 能否累加到dl中 。他自己回答不能,可能进位丢失。
用ADD DL,DS:[BX]自然可以保持是字节数据累加,但任何一次累加有可能产生进位,12累加可能造成中间的某些次累加的进位丢失.自然结果会不准确,累加出来也就没意义.

问题一:ax不是16位的吗,还能直接加?


然后代码是
mov al,ds:【x】(X属于0到b);AL为8位寄存器,mov al,ds:【x】自然是字节操作,正确
mov ah ,0 ;将AX的高8位归0,整个AX里自然就是高8位为0,低8位为ds:【x】传进的数的16位数,
add dx,ax ;这样就实现了把字节型数扩展成高8位为0的16位数来进行累加了...
这个代码 是用al累加的吧。。。不怕越位吗 


OK了吗?!
  相关解决方案