assembly 范围相对跳转0001h字节

gk7wooem  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(142)

我捕获了寄存器中的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
bkkx9g8r

bkkx9g8r1#

您显示的代码不包含任何跳转,因此错误消息“Relative jump of range by 0001 h bytes”(范围的相对跳转为0001 h字节)肯定来自其他地方。
这个代码是在调用DOS.PrintCharacter函数02 h时出错的。**您在第一次调用之前忘记写入mov ah, 02h!**因此第一个int 21h将执行一些随机的DOS函数(数字30 h及以上),并产生不可预测的结果。任何事情都有可能发生,但它确实发生了...

MOV     AL, tempTotal                       ; 
AAM
ADD     AX, 3030H                           ; 
PUSH    AX                                  ; 
MOV     DL, AH                              ; 
???     ???????    <== missing MOV AH, 02H
INT     21H
POP     DX                                  ; 
MOV     AH, 02H                             ; 
INT     21H

您的代码对[0,99]范围内的 tempTotal 有效。

相关问题