. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  用加法指令时结果超出寄存器范围怎么办?  [待解决] 回复[ 4次 ]   点击[ 194次 ]  
cutebe
[帖 主]   [ 发表时间:2013-05-27 11:35 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
用加法指令时结果超出寄存器范围怎么办?
P54
------
MOV AX,123BH
MOV DS,AX
MOV AL,0
ADD AL,[0]        ;显然如果内存单元数据都是FFH
ADD AL,[1]        ;加起来肯定超出寄存器AL大小
ADD AL,[2]
------

可以改成:
MOV AX,123BH
MOV DS,AX
MOV AX,0        ;临时存放数据
MOV BX,0        ;存放累加结果
MOV BL,[0]
MOV AL,[1]
ADD BX,AX
MOV AL,[2]
ADD BX,AX
------

可是问题3.5怎么办?没有比AX更大的寄存器了。
可能这里也需要知识屏蔽一下^_^
linyu0723
[第1楼]   [ 回复时间:2013-06-16 13:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54
估计你还没有看后面的标志寄存器吧,这个是可以的,可以进位,CF会被设置成1,再说了,FF其实就是-1,加在一起,也不过是-2,装得下了。
linyu0723
[第2楼]   [ 回复时间:2013-06-16 13:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54
补充一下:FF是-1的补码
linyu0723
[第3楼]   [ 回复时间:2013-06-16 13:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54
你可能说的是(-128D)+(-128D)或者是127D+127D这种情况,这种情况会产生溢出,等你看了标志寄存器这章后,会有两个指令:adc和sbb,这两个指令可以解决你所但心的问题。
注:-128的十六进制是80H,127的十六进制是FEH
cutebe
[第4楼]   [ 回复时间:2013-06-19 10:01 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
是按顺序看的,当时产生的疑问。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved