Relative jump out of range by

淺唱寂寞╮ 提交于 2020-05-02 08:53:12

问题


I get the message "(76)Relative jump out of range by 000Eh bytes" and (79)Relative jump out of range by 0007h bytes" whenever I input CMP octal, '3'. I'm supposed to do up until the 7th octal number but it always gives me an error when I try to do the 3rd octal number. I can only do 0,1, and 2 until it gives me an error. I don't know what I'm supposed to do. I've tried everything that I can as far as I've been taught but I still can't get any results. Please help me. I'm new to assembly. P.S. I'm using DOSBox 0.74

.Model small

.data
txt1 db "Octal to Binary Converter$"
txt2 db "Enter an Octal Symbol: $"
title0 db "000$"
title1 db "001$"
title2 db "010$"
title3 db "011$"
title4 db "100$"
title5 db "101$"
title6 db "110$"
title7 db "111$"

mess db "Press ESC to exit...$"
invalid db "Input is invalid. Try again.$"
keypress db ?
octal db ?

.code
Start:
Mov AX, @data
Mov ds, ax

sys_st:
Mov AH, 6
Mov AL, 0
Mov BH, 15
Mov ch, 0
Mov cl, 0
Mov DH, 100
Mov DL , 100
Int 10H

Mov AH, 2
Mov BH, 0
Mov DL, 5
Mov DH, 5
Int 10H 

Mov AH, 9
Lea DX, txt1 
Int 21H

JMP sys_st2

sys_st2:
Mov AH, 2
Mov BH, 0
Mov DL, 5
Mov DH, 8
Int 10H 

Mov AH, 9
Lea DX, txt2 
Int 21H 

Mov AH, 1
Int 21H
Mov octal, AL 

CMP octal, '0'
JE sys_0

CMP octal, '1'
JE sys_1

CMP octal, '2'
JE sys_2

CMP octal, '3'
JE sys_3


CMP octal, '0'
JNE sys_invalid

CMP octal, '1'
JNE sys_invalid

CMP octal, '2'
JNE sys_invalid

CMP octal, '3'
JNE sys_invalid

sys_0:
Mov AH, 2
Mov BH, 0
Mov DL, 11
Mov DH, 11 
Int 10H

Mov AH, 9
Lea DX, title0 
Int 21H 

Mov AH, 2 
Mov BH, 0
Mov DL, 5
Mov DH, 15 
Int 10H 

JMP sys_exit

sys_1:
Mov AH, 2 
Mov BH, 0
Mov DL, 11
Mov DH, 11 
Int 10H 

Mov AH, 9
Lea DX, title1
Int 21H 

Mov AH, 2 
Mov BH, 0
Mov DL, 5
Mov DH, 15 
Int 10H 

JMP sys_exit

sys_2:
Mov AH, 2 
Mov BH, 0
Mov DL, 11
Mov DH, 11 
Int 10H 

Mov AH, 9
Lea DX, title2
Int 21H 

Mov AH, 2 
Mov BH, 0
Mov DL, 5
Mov DH, 15 
Int 10H 

JMP sys_exit

sys_3:
Mov AH, 2 
Mov BH, 0
Mov DL, 11
Mov DH, 11 
Int 10H 

Mov AH, 9
Lea DX, title3
Int 21H 

Mov AH, 2 
Mov BH, 0
Mov DL, 5
Mov DH, 15 
Int 10H 

JMP sys_exit

sys_invalid: 
Mov AH, 2 
Mov BH, 0
Mov DL, 5 
Mov DH, 11 
Int 10H 

Mov AH, 9
Lea DX, invalid 
Int 21H 

Mov AH, 1 
Int 21H 
JMP sys_st 

sys_exit: 

Mov AH, 2
Mov BH, 0
Mov DL, 5
Mov DH, 14
Int 10H 

Mov AH, 9
Lea DX, mess 
Int 21H 

Mov AH, 1 
Int 21H 
Mov keypress, AL 

CMP keypress, 27
JNE sys_exit 

JMP exit 

Exit: 
Mov AH, 4ch 
Int 21H 
End Start 

回答1:


Add a .386 directive to your file to be able to use relative jump instructions with larger offsets introduced with the 80386. Alternatively, find the offending jump and replace it with something like this:

   jnz foo ; this jump is too long

replace with

   jz bar ; opposite conditional
   jmp foo ; unconditional jumps can have larger offsets
bar:
   ...


来源:https://stackoverflow.com/questions/39427980/relative-jump-out-of-range-by

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!