Error a2075 jump destination too far by 9 byte s

My ma'am give me an assignment in which i have to make a program which will take input through keyboard and check the conventional order of the nested brackets. for example: input= {[()]}, outpu...

My ma’am give me an assignment in which i have to make a program which will take input through keyboard and check the conventional order of the nested brackets.
for example:

input= {[()]}, output = correct format, input = ({[]}) output = incorrect

My program:

.model small

.stack 100h

.386

.data

msg1 db "this is a correct format of nested brackets$"
msg2 db "this is no a correct format of nested brakets$"

.code

main proc 
mov ax,@data
mov ds,ax

mov cx,15

push '#'
l1:

mov ah,1
int 21h

cmp al,'['
je pushh1

cmp al,'{'
je pushh2

cmp al,'('
je pushh3

cmp al,']'
je pop1

cmp al,'}'
je pop2

cmp al,')'
je pop3

jmp ser

pushh1:

pop dx
cmp dx,'('

push dx

je wrongorder

movzx dx,al

push dx

jmp ser

pushh2:

pop dx

cmp dx,'['

je wrongorder

cmp dx,'('

je wrongorder

push dx

movzx dx,al

push dx

jmp ser

pushh3:

pop dx

cmp dx,'{'

push dx

je wrongorder

movzx dx,al

push dx

jmp ser

wrongorder:

mov dx,'*'

push dx

jmp ser

pop1:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'{'

push dx

je ser

pop dx

cmp dx,'('

push dx

je ser

pop dx

jmp ser

pop2:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'('

push dx

je ser

pop dx

cmp dx,'['

push dx

je ser

pop dx

jmp ser

pop3:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'{'

push dx

je ser

pop dx

cmp dx,'['

push dx

je ser

pop dx

ser:

cmp al,'q'

je labo

loop l1



labo:

mov ah,2

mov dl,0ah

int 21h

mov dl,0dh

int 21h


mov ah,2h

pop dx

;int 21h

cmp dx,'#'

je labe

cmp dx,'#'

jnz labr



labe:

mov dx, offset msg1

mov ah,9h

int 21h

jmp lab8

labr:

mov dx, offset msg2

mov ah,9h

int 21h


lab8:


mov ah,4ch

int 21h

main endp

end main

but when i compile this code the masm shows me an error:

jmp destination too far by 30 bytes.

Please tell me what should i do to get rid of this message and run my program.

0 / 0 / 0

Регистрация: 30.10.2013

Сообщений: 142

1

Ошибка при переходе на метку

25.10.2015, 17:19. Показов 3390. Ответов 8


Здравствуйте!
Объявлена переменная: a dd 0 . В нее записывается число -6 и отправляется в стек. Затем нужно перейти на метку j1 и здесь возникает проблема при создании файла obj.
Командная строка выдает: error A2075: jump destination too far: by 1 byte(s).
Причем, если в переменную а записываю 0, а не отрицательное число, то все нормально..он переходит на метку. Может при записи отрицательных чисел в стек забирается лишний байт? Вобщем не знаю. Весь код прилагаю в приложении.

Вложения

Тип файла: txt 1.txt (1.8 Кб, 10 просмотров)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



alexcoder

1778 / 756 / 153

Регистрация: 03.06.2009

Сообщений: 5,837

26.10.2015, 09:52

2

У меня и при a=0 не компилируется. Замените loop j1 на

Assembler
1
2
dec ecx
jnz j1

Еще как вариант, можно внутри цикла некоторые команды либо заменить/сократить, либо выбросить, но меня терзают смутные сомнения по поводу правильности программы, оптимизация будет иметь смысл только если программа правильно работает.

Assembler
1
2
    XOR EDX, EDX
    IDIV EBX

Вот это вообще глаз режет.



0



Dick777

0 / 0 / 0

Регистрация: 30.10.2013

Сообщений: 142

26.10.2015, 12:01

 [ТС]

3

alexcoder, программа вроде написана верно, я как раз отлаживала ее и проверяла на ошибки, как вылезла эта ошибка. Мое задание в приложении. Там, в ходе вычисления в регистре EAX появляется 0 и я ошибочно копировала в а значение EAX

Assembler
1
2
3
4
5
6
7
MOV EBX,a
    SUB EBX, EAX
    MOV a, EAX   ;здесь моя ошибка
    
    PUSH a
    INC EDI
    LOOP j1

Но отлаживая, исправила на ЕВХ, т.е. в а копируется -6. И тут вылезла эта ошибка. А LOOP не случайно там, в ЕСХ хранится значение, до которого должен увеличиваться мой счетчик по j. Поэтому заменить его не могу.

Миниатюры

Ошибка при переходе на метку
 



0



1778 / 756 / 153

Регистрация: 03.06.2009

Сообщений: 5,837

26.10.2015, 12:06

4

Не знаю что там у Вас хранится в ecx, loop эквивалентен этим двум командам. Иначе говоря, выполняет то же самое, то есть уменьшает ecx.



1



Constantin Cat

3405 / 1824 / 489

Регистрация: 28.02.2015

Сообщений: 3,699

26.10.2015, 16:06

5

Цитата
Сообщение от ****777
Посмотреть сообщение

А LOOP не случайно там, в ЕСХ хранится значение, до которого должен увеличиваться мой счетчик по j.

Команда LOOP, когда выполняется, уменьшает значение счетчика ЕСХ на 1 и заканчивает цикл если ЕСХ = 0.
Строки 39:41, в Вы два раза используете одинаковую команду сравнения,

Переходы на следующую строку.

Я бы переписал по другому этот участок кода:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    CMP EDX, 0
;   JNE m1
;   JMP m_out
JE  m_out
 m1:
    MOV EAX, [EBP]
    ADD EAX, [EBP+4]
    MOV EBX, [EBP]
    SUB EBX, [EBP+4]
    
    CMP EBX,0
;   JL m2     ; EBX<0
;   CMP EBX,0
    JE m_next ; EBX=0
    JNS m3    ; EBX>0
; EBX<0
 m2:
    NEG EBX
;   JMP m3  ; EBX>0
 m3:
    IDIV EBX
;   JMP m_next
 
 m_next:
    MOV EBX,5
    IMUL EAX, EBX
;   JMP m_out
 m_out:



1



0 / 0 / 0

Регистрация: 30.10.2013

Сообщений: 142

26.10.2015, 21:02

 [ТС]

6

Цитата
Сообщение от Constantin Cat
Посмотреть сообщение

Команда LOOP, когда выполняется, уменьшает значение счетчика ЕСХ на 1 и заканчивает цикл если ЕСХ = 0.

Да, вы правы. Так и делала, а на словах, наверно вспомнились циклы из Си.

Цитата
Сообщение от Constantin Cat
Посмотреть сообщение

Я бы переписал по другому этот участок кода:

Спасибо, ваш код логичней будет. Нам просто не дали команду JNS, только стандартные операции сравнения. Теперь буду знать.



0



3405 / 1824 / 489

Регистрация: 28.02.2015

Сообщений: 3,699

26.10.2015, 22:46

7

Цитата
Сообщение от ****777
Посмотреть сообщение

Нам просто не дали команду JNS

Ха.
Вы изучали условные переходы, т.е. регистр флагов и флаги:

CF — . . .
PF — . . .
AF — . . .
ZF — . . .
SF — равен значению старшего значащего бита результата, который является знаковым битом в знаковой арифметике.
OF — . . .

которые изменяют свое состояние взависимости от результата выполнения различных команд, значит под него есть и команда перехода, для его анализа.



0



Dick777

0 / 0 / 0

Регистрация: 30.10.2013

Сообщений: 142

26.10.2015, 23:46

 [ТС]

8

Constantin Cat, благодаря

Цитата
Сообщение от Constantin Cat
Посмотреть сообщение

Я бы переписал по другому этот участок кода:

код компилируется (т.е. не выскакивает ошибка). Но функциональные ошибки выскакивают.. причем если запустить выполнение на OllyDbg он останавливается всегда на IDIV EBX в коде:

Assembler
1
2
3
4
5
6
7
8
9
CWDE
    CMP EBX,0
    JE j4
 j3:
    IDIV EBX
 j4:
    POP a
    ADD EAX, a
    MOV a, EAX

Вложения

Тип файла: txt lab42.txt (1.8 Кб, 2 просмотров)



0



3405 / 1824 / 489

Регистрация: 28.02.2015

Сообщений: 3,699

27.10.2015, 00:36

9

1)Ошибка какая.
2)Вы делите пару EDX:EAX.



0



Hi Guys, i´m trying to asemble a routine that contains a jmp table, but it is exceeding 8 bytes, and this error came up:

FbRtl.asm(8115) : error A2075: jump destination too far : by 8 byte(s)

I tried to use the LMP command, or even used two «::» on th destination labels, but it keeps showing the error. How can i assemble this ?


.data
_achTabSpaces_7866 db '        ',0
                db    0
                db    0
                db    0
ConPrintTTY_Tbl      dd loc_40F378
                dd loc_40F360
                dd loc_40F2D0
                dd loc_40F280
                dd loc_40F3D0
                dd loc_40F3D0
                dd loc_40F220

.code

; =============== S U B R O U T I N E =======================================

                public fb_ConPrintTTY
fb_ConPrintTTY  proc near               ; CODE XREF: fb_ConsolePrintBufferEx+1BC↑p
                                        ; fb_GfxPrintBufferEx+112↓p

var_45C         = dword ptr -45Ch
var_458         = dword ptr -458h
var_454         = dword ptr -454h
var_450         = dword ptr -450h
var_44C         = dword ptr -44Ch
var_448         = dword ptr -448h
var_438         = dword ptr -438h
var_434         = dword ptr -434h
var_430         = dword ptr -430h
var_42C         = dword ptr -42Ch
var_428         = dword ptr -428h
var_424         = dword ptr -424h
var_420         = dword ptr -420h
var_41C         = byte ptr -41Ch
arg_0           = dword ptr  4
arg_4           = dword ptr  8
arg_8           = dword ptr  0Ch
arg_C           = dword ptr  10h

                push    ebp
                push    edi
                push    esi
                push    ebx
                sub     esp, 44Ch
                mov     ebp, [esp+45Ch+arg_0]
                mov     edi, [esp+45Ch+arg_4]
                mov     ecx, [esp+45Ch+arg_8]
                mov     eax, [ebp+14h]
                sub     eax, [ebp+0Ch]
                add     eax, 1
                mov     [esp+45Ch+var_420], eax
                jz      loc_40F26F
                mov     edx, [ebp+1Ch]
                test    ecx, ecx
                jz      loc_40F26F
                lea     eax, [edi+ecx]
                mov     [esp+45Ch+var_428], 0
                mov     [esp+45Ch+var_430], eax
                mov     [esp+45Ch+var_42C], 0
                mov     [esp+45Ch+var_438], 0
                mov     [esp+45Ch+var_434], edx

loc_40F200:                             ; CODE XREF: fb_ConPrintTTY+B5↓j
                movzx   eax, byte ptr [edi]
                sub     eax, 7
                cmp     al, 6           ; switch 7 cases
                ja      loc_40F3D0      ; jumptable 0040F211 default case
                movzx   eax, al
                jmp    ds:ConPrintTTY_Tbl[eax*4] ; switch jump
; ---------------------------------------------------------------------------

 loc_40F220::                             ; CODE XREF: fb_ConPrintTTY+71↑j
                                        ; DATA XREF: .rdata:ConPrintTTY_Tbl↓o
                mov     ebx, [ebp+0Ch]  ; jumptable 0040F211 case 6
                xor     esi, esi
                sub     ebx, [esp+45Ch+var_434]

loc_40F229:                             ; CODE XREF: fb_ConPrintTTY+1D0↓j
                                        ; fb_ConPrintTTY+267↓j
                mov     edx, [esp+45Ch+var_438]
                test    edx, edx
                jnz     short loc_40F2A8

loc_40F231:                             ; CODE XREF: fb_ConPrintTTY+101↓j
                                        ; fb_ConPrintTTY+128↓j
                add     [ebp+1Ch], ebx
                mov     eax, [ebp+1Ch]
                add     [ebp+20h], esi
                mov     [esp+45Ch+var_434], eax
                mov     [esp+45Ch+var_428], 1
                mov     [esp+45Ch+var_438], 0

loc_40F24E:                             ; CODE XREF: fb_ConPrintTTY+157↓j
                                        ; fb_ConPrintTTY+1BA↓j ...
                add     edi, 1
                cmp     [esp+45Ch+var_430], edi
                jnz     short loc_40F200
                mov     ebx, [esp+45Ch+var_438]
                test    ebx, ebx
                jnz     loc_40F428
                mov     ecx, [esp+45Ch+var_428]
                test    ecx, ecx
                jnz     loc_40F450

loc_40F26F:                             ; CODE XREF: fb_ConPrintTTY+2C↑j
                                        ; fb_ConPrintTTY+37↑j ...
                add     esp, 44Ch
                pop     ebx
                pop     esi
                pop     edi
                pop     ebp
                retn
; ---------------------------------------------------------------------------

loc_40F280::                             ; CODE XREF: fb_ConPrintTTY+71↑j
                                        ; DATA XREF: .rdata:ConPrintTTY_Tbl↓o
                mov     esi, [esp+45Ch+arg_C] ; jumptable 0040F211 case 3
                test    esi, esi
                jz      loc_40F400
                mov     edx, [esp+45Ch+var_438]
                mov     ebx, [ebp+0Ch]
                mov     esi, 1
                sub     ebx, [esp+45Ch+var_434]
                test    edx, edx
                jz      short loc_40F231
                lea     esi, [esi+0]
                nop

loc_40F2A8:                             ; CODE XREF: fb_ConPrintTTY+8F↑j
                mov     eax, [esp+45Ch+var_42C]
                mov     [esp+45Ch+var_45C], ebp
                mov     [esp+45Ch+var_454], eax
                lea     eax, [esp+45Ch+var_41C]
                mov     [esp+45Ch+var_458], eax
                call    fb_ConPrintRaw
                mov     [esp+45Ch+var_42C], 0
                jmp     loc_40F231
; ---------------------------------------------------------------------------

loc_40F2D0::                             ; CODE XREF: fb_ConPrintTTY+71↑j
                                        ; DATA XREF: .rdata:ConPrintTTY_Tbl↓o
                mov     eax, [esp+45Ch+var_434] ; jumptable 0040F211 case 2
                sub     eax, [ebp+0Ch]
                lea     ebx, [eax+8]
                and     ebx, 0FFFFFFF8h
                sub     ebx, eax
                mov     eax, [esp+45Ch+var_438]
                add     eax, ebx
                cmp     eax, 400h
                ja      loc_40F3E8

loc_40F2F0:                             ; CODE XREF: fb_ConPrintTTY+24E↓j
                mov     ecx, offset _achTabSpaces_7866 ; "        "

loc_40F2F5:                             ; CODE XREF: fb_ConPrintTTY+227↓j
                test    ebx, ebx
                jz      loc_40F24E
                mov     eax, [esp+45Ch+var_438]
                lea     esi, [ebx-1]
                mov     [esp+45Ch+var_424], eax

loc_40F308:                             ; CODE XREF: fb_ConPrintTTY+27D↓j
                add     [esp+45Ch+var_434], ebx
                mov     eax, [esp+45Ch+var_434]
                cmp     eax, [ebp+14h]
                jle     short loc_40F324
                sub     eax, [ebp+0Ch]
                cdq
                idiv    [esp+45Ch+var_420]
                add     edx, [ebp+0Ch]
                mov     [esp+45Ch+var_434], edx

loc_40F324:                             ; CODE XREF: fb_ConPrintTTY+173↑j
                add     esi, [esp+45Ch+var_438]
                lea     eax, [esi+1]
                mov     [esp+45Ch+var_438], eax
                mov     eax, [esp+45Ch+var_424]
                mov     [esp+45Ch+var_424], ebx
                sub     ecx, eax
                lea     esi, [esi+0]

loc_40F340:                             ; CODE XREF: fb_ConPrintTTY+1B0↓j
                mov     edx, eax
                add     eax, 1
                movzx   ebx, byte ptr [ecx+eax-1]
                mov     byte ptr [esp+eax+45Ch+var_420+3], bl
                cmp     esi, edx
                jnz     short loc_40F340
                mov     ebx, [esp+45Ch+var_424]
                add     [esp+45Ch+var_42C], ebx
                jmp     loc_40F24E
; ---------------------------------------------------------------------------

loc_40F360::                             ; CODE XREF: fb_ConPrintTTY+71↑j
                                        ; DATA XREF: .rdata:ConPrintTTY_Tbl↓o
                xor     ebx, ebx        ; jumptable 0040F211 case 1
                mov     eax, [esp+45Ch+var_434]
                cmp     [ebp+0Ch], eax
                setl    bl
                xor     esi, esi
                neg     ebx
                jmp     loc_40F229
; ---------------------------------------------------------------------------

loc_40F378::                             ; CODE XREF: fb_ConPrintTTY+71↑j
                                        ; DATA XREF: .rdata:ConPrintTTY_Tbl↓o
                call    fb_Beep         ; jumptable 0040F211 case 0
                cmp     [esp+45Ch+var_438], 400h
                jbe     loc_40F24E
                xor     ebx, ebx

loc_40F38D:                             ; CODE XREF: fb_ConPrintTTY+243↓j
                mov     ecx, edi

loc_40F38F:                             ; CODE XREF: fb_ConPrintTTY+259↓j
                mov     eax, [esp+45Ch+var_42C]
                mov     [esp+45Ch+var_45C], ebp
                mov     [esp+45Ch+var_424], ecx
                mov     [esp+45Ch+var_454], eax
                lea     eax, [esp+45Ch+var_41C]
                mov     [esp+45Ch+var_458], eax
                call    fb_ConPrintRaw
                mov     [esp+45Ch+var_42C], 0
                mov     ecx, [esp+45Ch+var_424]
                mov     [esp+45Ch+var_438], 0
                mov     [esp+45Ch+var_428], 0
                jmp     loc_40F2F5
; ---------------------------------------------------------------------------

loc_40F3D0::                             ; CODE XREF: fb_ConPrintTTY+68↑j
                                        ; fb_ConPrintTTY+71↑j
                                        ; DATA XREF: ...
                mov     esi, [esp+45Ch+var_438] ; jumptable 0040F211 default case
                lea     eax, [esi+1]
                cmp     eax, 400h
                jbe     short loc_40F410
                mov     ebx, 1
                jmp     short loc_40F38D
; ---------------------------------------------------------------------------

loc_40F3E8:                             ; CODE XREF: fb_ConPrintTTY+14A↑j
                mov     eax, [esp+45Ch+var_438]
                test    eax, eax
                jz      loc_40F2F0
                mov     ecx, offset _achTabSpaces_7866 ; "        "
                jmp     short loc_40F38F
; ---------------------------------------------------------------------------

loc_40F400:                             ; CODE XREF: fb_ConPrintTTY+E9↑j
                xor     ebx, ebx
                mov     esi, 1
                jmp     loc_40F229
; ---------------------------------------------------------------------------

    loc_40F410:                             ; CODE XREF: fb_ConPrintTTY+23C↑j
                mov     [esp+45Ch+var_424], esi
                mov     ecx, edi
                xor     esi, esi
                mov     ebx, 1
                jmp     loc_40F308
; ---------------------------------------------------------------------------

loc_40F428:                             ; CODE XREF: fb_ConPrintTTY+BD↑j
                mov     eax, [esp+45Ch+var_42C]
                mov     [esp+45Ch+var_45C], ebp
                mov     [esp+45Ch+var_454], eax
                lea     eax, [esp+45Ch+var_41C]
                mov     [esp+45Ch+var_458], eax
                call    fb_ConPrintRaw
                add     esp, 44Ch
                pop     ebx
                pop     esi
                pop     edi
                pop     ebp
                retn
; ---------------------------------------------------------------------------

loc_40F450:                             ; CODE XREF: fb_ConPrintTTY+C9↑j
                mov     eax, [ebp+18h]
                cmp     eax, 0FFFFFFFFh
                jz      loc_40F26F
                mov     edx, [ebp+20h]
                cmp     eax, edx
                jge     loc_40F26F
                sub     edx, eax
                mov     [esp+45Ch+var_44C], eax
                mov     [esp+45Ch+var_448], edx
                mov     eax, [ebp+14h]
                mov     [esp+45Ch+var_450], eax
                mov     eax, [ebp+10h]
                mov     [esp+45Ch+var_454], eax
                mov     eax, [ebp+0Ch]
                mov     [esp+45Ch+var_45C], ebp
                mov     [esp+45Ch+var_458], eax
                call    dword ptr [ebp+4]
                jmp     loc_40F26F
fb_ConPrintTTY  endp


The error is at
                jmp    ds:ConPrintTTY_Tbl[eax*4] ; switch jump

I tried some of these tips:
https://www.cyberforum.ru/assembler/thread1005284-page35.html
https://stackoverflow.com/questions/32706833/how-to-code-a-far-absolute-jmp-call-instruction-in-masm

But, didn´t suuceed to fix. How can this be fixed ?

Note: The beginning of he file whwre this function is called is:

; #########################################################################
;
;          Build this DLL from the batch file called BldDLL.bat
;
; #########################################################################

    .686
    .model flat, stdcall
    .xmm
option casemap :none  ; case sensitive

  1. Компилер ругается на следующим текстом

    1. error A2075: jump destination too far : by 1922 byte(s)

    Вляпать фар пробовал(синтаксис использования не нашел), но результата ноль, не помню как сделать дальний прыжок, возможен ли он вообще?


  2. l_inc

    l_inc

    New Member

    Публикаций:

    0

    Регистрация:
    29 сен 2005
    Сообщения:
    2.566

    JCronuz
    Он бывает только короткий.

  3. Моя пьяная голова сейчас не поймет о чем Вы, я так понял нельзя пролетить через длинный кусок кода, вот так?


  4. l_inc

    l_inc

    New Member

    Публикаций:

    0

    Регистрация:
    29 сен 2005
    Сообщения:
    2.566

    JCronuz
    Говорю, что только короткие прыжки jecxz бывают. Длина кода операции — два байта. Смещение в коде — один байт. Максимальная дальность — +127/-128.
    Адаптированный перевод для пьяной головы: через «много текста» низзя.

  5. JCronuz

    1. ;влезет текста сколько хочешь
  6. JCronuz
    а вообще кодинг в хлам пьяном виде это дзенно :) — так писать в бегинерс намного интереснее


  7. Z3N

    Z3N

    New Member

    Публикаций:

    0

    Регистрация:
    10 фев 2009
    Сообщения:
    812

    Возможно это немного поздновато, но, наверно лучше будет
    test ecx,ecx
    jz Kudanado

    Каллы тармозные…

  8. JCronuz
    приятно похмелиться … :)


  9. Mikl___

    Mikl___

    Супермодератор
    Команда форума

    Публикаций:

    14

    Регистрация:
    25 июн 2008
    Сообщения:
    3.468

    JCronuz
    jecxz и loop — близнецы-братья —> отличие в кодировке всего один бит и оба могут делать только short jmp


  10. Mikl___

    Mikl___

    Супермодератор
    Команда форума

    Публикаций:

    14

    Регистрация:
    25 июн 2008
    Сообщения:
    3.468

    Instuction |Opcode
    LOOPNE rel8 |E0 cb
    LOOPE rel8 |E1 cb
    LOOP rel8 |E2 cb
    JCXZ/JECXZ/JRCXZ rel8 |E3 cb


  11. wasm_test

    wasm_test

    wasm test user

    Публикаций:

    0

    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582

    Rockphorr
    ох, тебя за флейм не по теме бы еще + на недельку.


WASM

My ma’am give me an assignment in which i have to make a program which will take input through keyboard and check the conventional order of the nested brackets.
for example:

input= {[()]}, output = correct format, input = ({[]}) output = incorrect

My program:

.model small

.stack 100h

.386

.data

msg1 db "this is a correct format of nested brackets$"
msg2 db "this is no a correct format of nested brakets$"

.code

main proc 
mov ax,@data
mov ds,ax

mov cx,15

push '#'
l1:

mov ah,1
int 21h

cmp al,'['
je pushh1

cmp al,'{'
je pushh2

cmp al,'('
je pushh3

cmp al,']'
je pop1

cmp al,'}'
je pop2

cmp al,')'
je pop3

jmp ser

pushh1:

pop dx
cmp dx,'('

push dx

je wrongorder

movzx dx,al

push dx

jmp ser

pushh2:

pop dx

cmp dx,'['

je wrongorder

cmp dx,'('

je wrongorder

push dx

movzx dx,al

push dx

jmp ser

pushh3:

pop dx

cmp dx,'{'

push dx

je wrongorder

movzx dx,al

push dx

jmp ser

wrongorder:

mov dx,'*'

push dx

jmp ser

pop1:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'{'

push dx

je ser

pop dx

cmp dx,'('

push dx

je ser

pop dx

jmp ser

pop2:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'('

push dx

je ser

pop dx

cmp dx,'['

push dx

je ser

pop dx

jmp ser

pop3:

pop dx

cmp dx,'#'

push dx

je ser

pop dx

cmp dx,'{'

push dx

je ser

pop dx

cmp dx,'['

push dx

je ser

pop dx

ser:

cmp al,'q'

je labo

loop l1



labo:

mov ah,2

mov dl,0ah

int 21h

mov dl,0dh

int 21h


mov ah,2h

pop dx

;int 21h

cmp dx,'#'

je labe

cmp dx,'#'

jnz labr



labe:

mov dx, offset msg1

mov ah,9h

int 21h

jmp lab8

labr:

mov dx, offset msg2

mov ah,9h

int 21h


lab8:


mov ah,4ch

int 21h

main endp

end main

but when i compile this code the masm shows me an error:

jmp destination too far by 30 bytes.

Please tell me what should i do to get rid of this message and run my program.

From BetaArchive Wiki

Jump to:navigation, search

Article ID: 79829

Article Last Modified on 10/17/2003


  • Microsoft Macro Assembler 6.0 Standard Edition

This article was previously published under Q79829

SYMPTOMS

In the Microsoft Macro Assembler (MASM) version 6.0, the following error message may be produced

A2075: jump destination too far : by xxxxx byte(s)

when using the /Zm option, the MASM driver with MASM 6.0, or OPTION M510. When MASM 5.1 compatibility is not used or MASM 5.1 is used, the code assembles correctly.

CAUSE

This behavior is caused by using the current address operator, $, minus a constant (for example, jmp $-5), and the MASM driver with MASM 6.0, OPTION M510, or the /Zm switch when assembling.

RESOLUTION

Use a label instead of the current address operator or assemble without the MASM 5.1 switch.

STATUS

Microsoft has confirmed this to be a problem in MASM version 6.0. This problem was corrected in MASM version 6.0a.

MORE INFORMATION

The /Zm switch is the MASM 5.1 compatibility switch in MASM 6.0. The MASM driver calls ML with the /Zm option in MASM 6.0. OPTION M510 is a directive that specifies MASM 5.1 compatibility.

Sample Code

; Assembly options need: /Zm

DOSSEG
.MODEL small
.STACK 4096
.DATA
.CODE
start:  mov     al,5h
here:   dec     al
        jnz     $-2             ; This line causes the A2075 error.
        ;jnz    here            ; Uncomment this line and comment out
        mov     ax,4c00h        ; jnz $-2 to get the code to assemble
        int     21h             ; correctly.
END     start
                

Additional query words: 6.00 5.10 buglist6.00 fixlist6.00a

Keywords: kbfix KB79829

Понравилась статья? Поделить с друзьями:
  • Error a2071 initializer magnitude too large for specified size
  • Error a2070 invalid instruction operands как исправить
  • Error a2045 missing angle bracket or brace in literal
  • Error an unexpected network error occurred
  • Error an unexpected error occurred https registry yarnpkg com not found