我捕获了寄存器中的3个数字变量。但是当我想在控制台程序中显示时,我发现“tempTotal”变量的值被超出,并导致错误“范围的相对跳转0001h字节”,我该如何修复它?(顺便说一下,我使用doxbox版本0.74)。
.....
temp DB ? ;
remainder DB ? ;
quotient DB ? ;
tempRebate DB ? ;
tempSST DB ? ;
tempTotal DB ? ;
....
MOV AL, totalPrice
MOV BL, tempRebate
ADD AL, BL
MOV BL, tempSST
ADD AL, BL
MOV tempTotal, AL
MOV AL, tempTotal ;
AAM
ADD AX, 3030H ;
PUSH AX ;
MOV DL, AH ;
INT 21H
POP DX ;
MOV AH, 02H ;
INT 21H
1条答案
按热度按时间bkkx9g8r1#
您显示的代码不包含任何跳转,因此错误消息“Relative jump of range by 0001 h bytes”(范围的相对跳转为0001 h字节)肯定来自其他地方。
这个代码是在调用DOS.PrintCharacter函数02 h时出错的。**您在第一次调用之前忘记写入
mov ah, 02h
!**因此第一个int 21h
将执行一些随机的DOS函数(数字30 h及以上),并产生不可预测的结果。任何事情都有可能发生,但它确实发生了...您的代码对[0,99]范围内的 tempTotal 有效。