在装配中,我如何通过-128到127范围?

时间:2014-09-17 21:07:37

标签: assembly integer-overflow underflow

所以我在.bss

中有这个声明
answer resb 1

作为回答,我存储了从-99到+99的2位整数之和的结果。当我尝试添加+99和+99时,答案变为否定。正确输入-128到127范围内的任何答案。如何解决此上溢/下溢问题?

我刚开始编写汇编代码,请帮助我理解这个问题。我已经尝试将resb作为resw但是我的代码在运行时产生了“浮点错误”,所以我恢复使用resb。

我如何打印答案

;ansh,anso,anst are all declared as resb 1 in .bss
print_answer: ;tens1 holds the answer always
;getting each digit of tens2 to be converted as char    
mov al,[answer]
mov bl,100
div bl

mov [ansh],al ; holds tens digit of average
mov [anst],ah

mov ah,0
mov al,[anst]
mov bl,10
div bl

mov [anst],al
mov [anso],ah

add byte[ansh],30h
add byte[anst],30h
add byte[anso],30h

;printing routine follows here

1 个答案:

答案 0 :(得分:0)

添加-99和+99应该可以在8位寄存器中正常工作。如果没有,则表示添加没有正确完成,或者结果的显示处理不当。

常见的显示错误是调用具有8位结果的库函数,但将其传递给期望16位(或更宽)值的函数。在创建要传递给库函数的值时,请务必屏蔽或清零未生成的位。

当加倍+99时,结果当然大于127,因此您要么必须将结果作为无符号的8位值处理,要么将其扩展为更宽的值。你是如何看待结果的?