Relative Jump out of range
-
Hi Leute,
ich bekomme in meinem ASM-Code seit kurzer Zeit den Fehler "**Error** C:\PROGRA~1\tasm\test.asm(28) Relative jump out of range by 00EBh bytes"
Wisst ihr wie ich das behben kann? (FAR-Jump? Wenn ja, wie?)Gruß
(Ich benute TASM)
-
zeig doch mal den relevanten teil des codes.
-
ADD msgversion0 , 01d JC errorint CLD .... viele viele Zeilen JMP ende errorint: MOV AX , OFFSET msgnl CALL ECHO MOV AX , OFFSET errorintop CALL ECHO MOV AX , OFFSET msgnl CALL ECHO JMP SHORT ende errorunknown: MOV AX , OFFSET msgnl CALL ECHO MOV AX , OFFSET errorunk CALL ECHO MOV AX , OFFSET msgnl CALL ECHO JMP SHORT ende ende: MOV AH , 4Ch INT 21h
-
schreibe JUMPS am anfang deines quelltextes, dann regelt tasm das für dich.
dieser fehler passiert immer wenn du bedingte sprungbefehle benutzt und das ziel des sprungs mehr als 128 byte [glaub das waren 128] weit vom sprung befehl weg ist.
cmp ax,10
je marke...
ganz viel code
...
marke:
-
Hey super, danke!!
-
du kannst das ganze natürlich auch selber lösen, indem du eine bedingung nimmst die das gegenteil ergibt und gleich danach nen jmp befehl einfühgst, der bedingte sprung, geht dann zur marke direkt nach dem JMP:
cmp ax,10
jne istnichtgleich
jmp istgleichistnichtgleich:
...
ganz viel code
...istgleich:
-
Das geht leider nicht. Die Erklärung warum wäre etwas länger.
Das mit JUMPS geht aber wunderbar. Danke!
-
alternativ ein .386 am anfang, soweit ich weiß gibt es die bedingten near sprünge ab dem 386er