所以我在.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
答案 0 :(得分:0)
添加-99和+99应该可以在8位寄存器中正常工作。如果没有,则表示添加没有正确完成,或者结果的显示处理不当。
常见的显示错误是调用具有8位结果的库函数,但将其传递给期望16位(或更宽)值的函数。在创建要传递给库函数的值时,请务必屏蔽或清零未生成的位。
当加倍+99时,结果当然大于127,因此您要么必须将结果作为无符号的8位值处理,要么将其扩展为更宽的值。你是如何看待结果的?