Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255

Jump out of range. Нужна консультация.

20.03.2011, 16:20. Показов 5809. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Программа считывает из файла строку, обрабатывает и заносит результат в другой файл.
При трансляции возникают 2 ошибки команд условного перехода. В коде - ссылка вперёд; если я не ошибаюсь, то в ЯА принято соглашени, что в подобной ситуации ассемблер всегда считает, что, - назовём метку M, - M - метка, и потому всегда формирует команду прямого длинного перехода по этой метке. Прошу проконсультировать в решении проблемы.
Листинг ошибок:
000D 75 B8 jnz progend
lr4.ASM(40): error A2053: Jump out of range by 42 byte(s)
0017 75 B5 jnz closefs
lr4.ASM(45): error A2053: Jump out of range by 29 byte(s)
Код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
data segment 'data'
  inpstr db 'String:$'
  resstr db 'Result:$'
  resstrw db ' words$'
  inpnum db 'Input count (N < count of letters in words):$'
 
  
  str db 512 dup(?)
  str_len dw ?
  str_maxlen dw 512
 
  next db 0Dh,0Ah,'$'
  smb db ?
  RES db ?
 
  ENDCODE db 00; идент-р ошибки
  OPENMSG db '*** Open Error ***','$'
  READMSG db '*** Read Error ***','$'
  WRITEMSG db '*** Write Error ***','$'
  CREATEMSG db '*** Create Error ***','$'
  CLOSEMSG db '*** Close Error ***','$'
 
  ;REC_LEN db 32 ;длина имени + 0Dh/0Ah
  FRPATH db 'C:\STRING.TXT',00h
  FILERHAND dw ?; хэндлер(дескриптор) файла для чтения
 
  FWPATH db 'C:\RESULT.TXT',00h
  FILEWHAND dw ?
data ends 
 
code segment 'code'
  assume cs:code, ds:data
start:
  mov ax, data
  mov ds, ax
 
  call fopen
  cmp ENDCODE,00
  ;jnz word ptr lk_progend
  jnz progend
 
  call fread
  cmp ENDCODE,00
  ;jnz word ptr lk_closefs
  jnz closefs
 
  mov si, str_len
  mov str[si],'$'
  
 
lea dx, inpnum
call outstr
mov ah, 1
mov al, smb
int 21h
sub al, '0'
;al - переменная пользователя; число букв в слове
 
;нахождение кол-ва слов
mov si, 0; индекс первого элемента строки
mov cx, str_len; кол-во введённых элементов строки
mov dl, 0; кол-во слов
mov dh, 0;счётчик букв
 
beg:
 cmp str[si], 20h
 jne sym
 cmp dh, 0
 je nextsm
 jmp short check
sym:
 inc dh
nextsm:
 inc si
 loop beg
check:
 cmp al, dh
 mov dh,0
 jl incres
 cmp cx, 0
 jne nextsm
 jmp short outresult
incres:
 inc dl
 cmp cx, 0
 jne nextsm
;/нахождение кол-ва слов
 
;lk_closefs dw closefs
;lk_progend dw progend
 
;вывод результата
outresult:
 mov RES, dl
 lea dx, next
 call outstr
 
lea dx, inpstr
call outstr
lea dx, str+2
call outstr
 
lea dx, next
call outstr
 
lea dx, resstr
call outstr
mov ah, 2
mov dl, RES
add dl, '0'
int 21h
lea dx, resstrw
call outstr 
 
;вывод в файл
call fcreate
cmp ENDCODE,00
jnz closefs
call fwrite
cmp ENDCODE,00
jnz closefs
 
mov ah, 01h 
int 21h
 
closefs:
 call fclose
 
progend:
 mov ah, 4Ch
 int 21h
 
outstr proc near
 mov ah, 9
 int 21h
 ret
outstr endp
 
fopen proc near
 mov ah, 3Dh
 mov al, 00h
 lea dx, FRPATH
 int 21h
 jc of1
 mov FILERHAND, ax;дескриптор файла
 jmp of2
of1:
 lea dx, OPENMSG
 call outstr
 mov ENDCODE,01
of2:
 ret
fopen endp
 
fread proc near 
 mov ah, 3Fh
 mov bx, FILERHAND
 mov cx, str_maxlen
 lea dx, str
 int 21h
 jc rf1
 cmp ax,00;конец файла
 je rf2
 mov str_len, ax
 jmp rf3
rf1:
 lea dx, READMSG
 call outstr
rf2:
 mov ENDCODE, 01
rf3:
 ret
fread endp
 
fcreate proc near
 mov ah, 3Ch
 mov cx, 01
 lea dx, FWPATH
 int 21h
 jc c1
 mov FILEWHAND, ax
 jmp c2
c1:
 lea dx, CREATEMSG
 call outstr
 mov ENDCODE, 01
c2:
 ret
fcreate endp
 
fwrite proc near
 mov ah,40h
 lea bx, FILEWHAND
 lea dx, str
 mov cx, 200h;512 bytes
 int 21h
 jc w1
 cmp ax,200h
 jne w1
 jmp w2
w1:
 lea dx, WRITEMSG
 call outstr
 mov ENDCODE, 01
w2:
 ret
fwrite endp
 
fclose proc near
 mov ah, 3Eh
 mov bx, FILERHAND
 int 21h
 mov ah, 3Eh
 mov bx, FILEWHAND
 int 21h
 jc f1
 jmp f2
f1:
 lea dx, CLOSEMSG
 call outstr
 mov ENDCODE, 01
f2:
 ret
fclose endp
 
code ends
end start
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2011, 16:20
Ответы с готовыми решениями:

Relative jump out of range
relative jump out of range 0008h bytes говорит мне ошибку на строке где по сути вызываю макрос. причем до этого вызываю его два раза и...

Relative jump out of range by ... bytes
Есть задача на определенную клавишу совершать некое действие. При компиляции Tasm начинает ругаться вот таким образом: Вот кусок ...

Relative jump out of range by __ bytes
Relative jump out of range by __ bytes (Адрес назначения условного перехода превышает допустимый предел на __ байт) Адрес...

10
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
20.03.2011, 16:36
Используй директиву .386
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
20.03.2011, 18:41  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 call fopen
  cmp ENDCODE,00
  ;jnz word ptr lk_progend
  jz cont1
  jmp progend 
 
cont1:
  call fread
  cmp ENDCODE,00
  ;jnz word ptr lk_closefs
  jnz closefs
 
  mov si, str_len
  mov str[si],'$'
Как видно, заменил переход на jmp. Всё работает.
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
20.03.2011, 19:19
jmp не обязателен. При использовании директивы .386 возможен условный переход в пределах сегмента (near). Если не указывать .386, то можно использовать только условные переходы в диапазоне [-128..127] (short).
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
21.03.2011, 00:23  [ТС]
Переработал на новый вариант, но masm выдаёт ошибку: Cannot assembly

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
;TITLE WORDS_CNT  Подсчёт кол-ва слов, кол-во букв в которых, меньше значения, 
;              вводимого пользователем. Чтение данных из файла .Вывод результата в файл.
 
.model small
.stack 64
.data
 
inpstr db 'String:$'
resstr db 13,10,'Result:$'
resstrw db ' words$'
inpnum db 'Input count (N < count of letters in words):$'
sucoutstr db 13,10,'Creation of file RESULT.TXT is done!$'
sucinstr db 13,10,'String reading from file STRING.TXT was succesful!$'
next db 0Dh,0Ah,'$'
 
smb db ?
RES db ?
str db 512 dup(?)
str_len dw ?
str_maxlen dw 512
 
ENDCODE db 00; идент-р ошибки
OPENMSG db 10,13,'*** Open Error ***','$'
READMSG db 10,13,'*** Read Error ***','$'
WRITEMSG db 10,13,'*** Write Error ***','$'
CREATEMSG db 10,13,'*** Create Error ***','$'
CLOSEMSG db 10,13,'*** Close Error ***','$'
 
FRPATH db 'C:\STRING.TXT',00h
FILERHAND dw ?; хэндлер(дескриптор) файла для чтения из него
 
FWPATH db 'C:\RESULT.TXT',00h
FILEWHAND dw ? ;хэндлер(дескриптор) файла для записи в него
.386 ;--------------------------------------------------------
 
.code
 
START PROC FAR
 
  mov ax, @data
  mov ds, ax
 
  call fopen
  cmp ENDCODE,00
  ;jnz word ptr lk_progend
  jnz progend 
 
  call fread
  cmp ENDCODE,00
  jnz closefs
  
  lea dx, sucinstr
  call outstr
  lea dx, next
  call outstr
  call outstr
  mov si, str_len
  mov str[si],'$'
  
 
lea dx, inpnum
call outstr
mov ah, 1
mov al, smb
int 21h
sub al, '0'
;al - переменная пользователя; число букв в слове
 
;нахождение кол-ва слов
mov si, 0; индекс первого элемента строки
mov cx, str_len; кол-во введённых элементов строки
mov dl, 0; кол-во слов
mov dh, 0;счётчик букв
 
beg:
 cmp str[si], 20h
 jne sym
 cmp dh, 0
 je nextsm
 jmp short check
sym:
 inc dh
nextsm:
 inc si
 loop beg
check:
 cmp al, dh
 mov dh,0
 jl incres
 cmp cx, 0
 jne nextsm
 jmp short outresult
incres:
 inc dl
 cmp cx, 0
 jne nextsm
 
;вывод результата
outresult:
 mov RES, dl
 lea dx, next
 call outstr
 
lea dx, inpstr
call outstr
lea dx, str
call outstr
 
lea dx, next
call outstr
 
lea dx, resstr
call outstr
mov ah, 2
mov dl, RES
add dl, '0'
int 21h
lea dx, resstrw
call outstr 
 
;формируем строку для вывода в файл
mov si, str_len
mov str[si], 20h
inc si
mov str[si], 10h
 
 
 
;вывод в файл
call fcreate
cmp ENDCODE,00
jnz closefs
 
lea dx, str
mov cx, str_len
call fwrite
cmp ENDCODE,00
jnz closefs
 
;mov resstr
lea dx, resstr
mov cx, 9
call fwrite
cmp ENDCODE,00
jnz closefs
 
add RES, '0'
;mov al, RES
;add RES,
lea dx, RES
mov cx, 1
call fwrite
cmp ENDCODE,00
jnz closefs
 
lea dx, resstrw
mov cx, 6
call fwrite
cmp ENDCODE,00
jnz closefs
 
lea dx, sucoutstr
call outstr
 
closefs:
 call fclose
 
progend:
 mov ah, 01h    
 int 21h ; отклик пользователя
 mov ah, 4Ch
 int 21h
 
START ENDP
 
;  Вывод строки на экран
outstr proc near
 mov ah, 9
 int 21h
 ret
outstr endp
 
;  Открытие файла, обработка исключений
fopen proc near
 mov ah, 3Dh
 mov al, 00h
 lea dx, FRPATH
 int 21h
 jc of1
 mov FILERHAND, ax;дескриптор файла
 jmp of2
of1:
 lea dx, OPENMSG
 call outstr
 mov ENDCODE,01
of2:
 ret
fopen endp
 
;  Чтение файла, обработка исключений
fread proc near 
 mov ah, 3Fh
 mov bx, FILERHAND
 mov cx, str_maxlen
 lea dx, str
 int 21h
 jc rf1
 cmp ax,00;конец файла
 je rf2
 mov str_len, ax
 jmp rf3
rf1:
 lea dx, READMSG
 call outstr
rf2:
 mov ENDCODE, 01
rf3:
 ret
fread endp
 
;  Запись в файл, обработка исключений
fwrite proc near
 mov ah,40h
 mov bx, FILEWHAND
 int 21h
 jc w1
; cmp ax,200h
 ;jne w1
 jmp w2
w1:
 lea dx, WRITEMSG
 call outstr
 mov ENDCODE, 01
w2:
 ret
fwrite endp
 
;  Создание файла, обработка исключений
fcreate proc near
 mov ah, 3Ch
 mov cx, 01
 lea dx, FWPATH
 int 21h
 jc c1
 mov FILEWHAND, ax
 jmp c2
c1:
 lea dx, CREATEMSG
 call outstr
 mov ENDCODE, 01
c2:
 ret
fcreate endp
 
;  Закрытие файла, обработка исключений
fclose proc near
 mov ah, 3Eh
 mov bx, FILERHAND
 int 21h
 mov ah, 3Eh
 mov bx, FILEWHAND
 int 21h
 jc f1
 jmp f2
f1:
 lea dx, CLOSEMSG
 call outstr
 mov ENDCODE, 01
f2:
 ret
fclose endp
 
 END START
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
21.03.2011, 09:54
alexsvk, не вдаваясь в смысл написанного -- первое сообщение об ошибке в 20-ой строке
str db 512 dup(?) str не может быть именем переменной (зарезервированное слово) меняю str на str1 везде где оно встречается и получаю ЕХЕ-файл
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
21.03.2011, 12:05  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
alexsvk, не вдаваясь в смысл написанного -- первое сообщение об ошибке в 20-ой строке
str db 512 dup(?) str не может быть именем переменной (зарезервированное слово) меняю str на str1 везде где оно встречается и получаю ЕХЕ-файл
Как я понял, то .386 влечёт за собой подобные ошибки.
До изменений в стиле, - первый пост, - всё работало.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
21.03.2011, 12:31
alexsvk, нет .386 тут не при чем, у тебя в тексте нет 32-разрядных операторов и команд для Intel 386, я компилировал и линковал с .286 в первой строке
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
21.03.2011, 12:34
А у меня на TASM с .286 не компилируется. Только с .386
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
21.03.2011, 12:47
murderer, а я компилировал MASM'ом там стоит фраза
Переработал на новый вариант, но masm выдаёт ошибку: Cannot assembly
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
21.03.2011, 13:06  [ТС]
Скачал последний MASM32 Editor, - Assembly error.
Пробую в "обычном" MASM старых версий - сannot open *.asm
ОС: XP SP3.
В самом верху обозначил директиву .286
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2011, 13:06
Помогаю со студенческими работами здесь

Jump out of range
Здравствуйте, в чем причина такой вот ошибки? Пример кода. l1: cmp al, 0 je is0: cmp al, 1 je is1

Illegal indexing mode и Relative jump out of range
**Error** urkin.asm(111) READW(33) Illegal indexing mode **Error** urkin.asm(114) Relative jump out of range by 000Bh bytes .model...

Ошибка "relative jump out of range by 0007h", как исправить?
keypressed: mov AH, 06h ;функция dos mov DL, 0FFh ;ввод символа из буфера клавиатуры без ожидания int 21h cmp AL, 27 ;Esc ...

Ошибка "Relative jump out of range by 002Bh bytes"
Нужно отсортировать элементы матрицы по возрастанию, которые принадлежат указанному в варианте траектории. .x...... m -max эл-т...

tasm, "Relative jump out of range "
Подскажите, пожалуйста, что делать в таком случае: при компиляции выскакивает такая ошибка &quot;Relative jump out of range&quot; и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru