-2

所以我在 .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
4

1 回答 1

0

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

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

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

于 2014-09-17T21:10:33.137 回答