С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75

Masm dosbox 0.74 win7 Error A2049

05.05.2018, 20:33. Показов 1744. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, хотел слинковать программу, но появляется ошибка, хотел спросить с чем она связана

ошибка показывает на эту строку

MAKEPATH FILE,FULLPATH

Описание: A2049: Illegal use of register

ошибка в 236 строке

вот код:
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
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
.286
 
 
STK       SEGMENT   STACK
          DW 100 DUP (0)
STK       ENDS
 
 
 
DATA      SEGMENT
          STR_SFREE      DB   'Free: success',0DH,0AH,'$'
          
          STR_ERR1       DB   'ERROR: Invalid function number',0DH,0AH,'$'
          STR_ERR2       DB   'ERROR: File not found',0DH,0AH,'$'
          STR_ERR3       DB   'ERROR: Path not found',0DH,0AH,'$'
          STR_ERR5       DB   'ERROR: Access denied',0DH,0AH,'$'
          STR_ERR7       DB   'ERROR: Memory control blocks destroyed',0DH,0AH,\
                              '$'
          STR_ERR8       DB   'ERROR: Insufficient memory',0DH,0AH,'$'
          STR_ERR9       DB   'ERROR: Invalid memory block address',0DH,0AH,'$'
          STR_ERRA       DB   'ERROR: Invalid environment',0DH,0AH,'$'
          STR_ERRB       DB   'ERROR: Invalid format',0DH,0AH,'$'
          STR_UNERR      DB   'ERROR: Unknown',0DH,0AH,'$'
          
          STR_RET0       DB   'Ret 0: Exit success',0DH,0AH,'$'
          STR_RET1       DB   'Ret 1: Ctrl-Break',0DH,0AH,'$'
          STR_RET2       DB   'Ret 2: Device error',0DH,0AH,'$'
          STR_RET3       DB   'Ret 3: 31H exit',0DH,0AH,'$'
          STR_UNRET      DB   'Ret code: unknown',0DH,0AH,'$'
          
          STR_SUBRET     DB   'Subprocess returns: " " -   H',0DH,0AH,'$'
 
          FILE           DB   'LAB2.COM',0
          FULLPATH       DB   128 DUP (0)
          CMDLINE        DB   24," CMDLINE TAIL FROM LAB6",0DH 
          
          ENV            DW   ENVS
                         DW   OFFSET CMDLINE
                         DW   SEG CMDLINE
                         DD   0              ; FCB 1
                         DD   0              ; FCB 2
DATA      ENDS
 
 
 
; новая среда
ENVS      SEGMENT        'ENVIRONMENT'
                         DB   'FIRSTNAME=ALEKSANDR',0
                         DB   'LASTNAME=PLOSKOV',0
                         DB   'SUBJECT=LAB6 EXECUTION',0
          ENVEND         DB   0    ; из л/р №2: окружение должно заканчиваться
                                   ; двумя нулями
ENVS      ENDS
 
 
 
CODE      SEGMENT
          ASSUME         CS:CODE, DS:DATA, SS:STK, ES:NOTHING
          
          KEEP_SS        DW   0
          KEEP_SP        DW   0
          KEEP_ERR       DW   0
          
TETR2HEX  PROC      NEAR
          AND       AL,0FH
          CMP       AL,09
          JBE       NEXT
          ADD       AL,07
NEXT:     ADD       AL,30H
          RET
TETR2HEX  ENDP
 
 
BYTE2HEX  PROC      NEAR
          PUSH      CX
          MOV       AH,AL
          CALL      TETR2HEX
          XCHG      AL,AH
          MOV       CL,4
          SHR       AL,CL
          CALL      TETR2HEX      
          POP       CX             
          RET
BYTE2HEX  ENDP
 
 
WORD2HEX  PROC      NEAR
          PUSH      BX
          MOV       BH,AH
          CALL      BYTE2HEX
          MOV       [DI],AH
          DEC       DI
          MOV       [DI],AL
          DEC       DI
          MOV       AL,BH
          CALL      BYTE2HEX
          MOV       [DI],AH
          DEC       DI
          MOV       [DI],AL
          POP       BX
          RET
WORD2HEX  ENDP
 
 
BYTE2DEC  PROC      NEAR
          PUSH      CX
          PUSH      DX
          PUSH      AX
 
          XOR       AH,AH
          XOR       DX,DX
          MOV       CX,10
LOOP_BD:  DIV       CX
          OR        DL,30H
          MOV       [SI],DL
          DEC       SI
          XOR       DX,DX
          CMP       AX,10
          JAE       LOOP_BD
          CMP       AL,00H
          JE        END_L
          OR        AL,30H
          MOV       [SI],AL
          
END_L:    POP       AX
          POP       DX
          POP       CX
          RET
BYTE2DEC  ENDP
 
 
MAKEPATH  MACRO     FILENAME,RESULTPATH
          PUSH      ES
          PUSH      BX
          PUSH      DX
          PUSH      DI
          PUSH      SI
          MOV       ES,ES:[002CH]
          XOR       BX,BX
          
ROAD2ZERO:MOV       DX,ES:BX
          CMP       DX,0000H
          JZ        READPATH
          INC       BX
          JMP       ROAD2ZERO
READPATH: ADD       BX,4
          MOV       DI,OFFSET RESULTPATH
          
COPYPATH: MOV       DL,ES:BX
          MOV       [DI],DL
          INC       DI
          INC       BX
          CMP       DL,00H
          JNZ       COPYPATH
BACKPATH: DEC       DI
          MOV       DL,[DI]
          CMP       DL,92
          JNE       BACKPATH
          MOV       SI,OFFSET FILENAME
COPYNAME: INC       DI
          MOV       DL,[SI]
          MOV       [DI],DL
          INC       SI
          CMP       DL,00H
          JNZ       COPYNAME
          
          POP       SI
          POP       DI
          POP       DX
          POP       BX
          POP       ES
          ENDM
          
FORMATRES PROC      NEAR
          PUSH      SI
          PUSH      AX
          
          MOV       SI,OFFSET STR_SUBRET+21
          MOV       [SI],AL
          
          CALL      BYTE2HEX          
          MOV       SI,OFFSET STR_SUBRET+26
          MOV       [SI],AL
          MOV       [SI+1],AH
          
          POP       AX
          POP       SI
          RET
FORMATRES ENDP
 
 
PUTS      MACRO     STRING
          PUSH      AX
          PUSH      DX
          
          MOV       DX,OFFSET STRING
          MOV       AH,09H
          INT       21H
          
          POP       DX
          POP       AX
          ENDM
 
 
; Точка входа
MAIN      PROC      NEAR
          ; указываем DS на сегмент данных DATA
          MOV       AX,DATA
          MOV       DS,AX
 
          ; выделяем память для загружаемой программы
          MOV       BX,OFFSET PROGEND
          MOV       AH,4AH
          INT       21H
          JNC       PREPARE
          
          CMP       AX,07H
          JNE       TESTERR8
          PUTS      STR_ERR7
          JMP       EXIT
          
TESTERR8: CMP       AX,08H
          JNE       TESTERR9
          PUTS      STR_ERR8
          JMP       EXIT
          
TESTERR9: CMP       AX,09H
          JNE       UNERRFREE
          PUTS      STR_ERR9
          JMP       EXIT
          
UNERRFREE:PUTS      STR_UNERR
          JMP       EXIT
          
PREPARE:  
         MAKEPATH  FILE,FULLPATH
 
          PUSH      DS
          PUSH      ES
          MOV       KEEP_SS,SS
          MOV       KEEP_SP,SP
          PUSH      DS
          POP       ES
          MOV       DX,OFFSET FULLPATH
          MOV       BX,OFFSET ENV
          MOV       AH,4BH
          MOV       AL,00H
          INT       21H
          MOV       SS,KEEP_SS
          MOV       SP,KEEP_SP
          POP       ES
          POP       DS
          JC        ERROR1
          MOV       AH,4DH
          INT       21H
          CALL      FORMATRES
          PUTS      STR_SUBRET
          CMP       AH,00H
          JNE       RET1
          PUTS      STR_RET0
          JMP       EXIT
          
RET1:     CMP       AH,01H
          JNE       RET2
          PUTS      STR_RET1
          JMP       EXIT
          
RET2:     CMP       AH,02H
          JNE       RET3
          PUTS      STR_RET2
          JMP       EXIT
          
RET3:     CMP       AH,03H
          JNE       UNRET
          PUTS      STR_RET3
          JMP       EXIT
          
UNRET:    PUTS      STR_UNRET
          JMP       EXIT
          
ERROR1:   CMP       AX,01H
          JNE       ERROR2
          PUTS      STR_ERR1
          JMP       EXIT
          
ERROR2:   CMP       AX,02H
          JNE       ERROR3
          PUTS      STR_ERR2
          JMP       EXIT
          
ERROR3:   CMP       AX,03H
          JNE       ERROR5
          PUTS      STR_ERR3
          JMP       EXIT
          
ERROR5:   CMP       AX,05H
          JNE       ERROR8
          PUTS      STR_ERR5
          JMP       EXIT
          
ERROR8:   CMP       AX,08H
          JNE       ERRORA
          PUTS      STR_ERR8
          JMP       EXIT
          
ERRORA:   CMP       AX,0AH
          JNE       ERRORB
          PUTS      STR_ERRA
          JMP       EXIT
          
ERRORB:   CMP       AX,0BH
          JNE       UNERR
          PUTS      STR_ERRB
          JMP       EXIT
          
UNERR:    PUTS      STR_UNERR
          
EXIT:     XOR       AL,AL
          MOV       AH,4CH
          INT       21H
          RET
MAIN      ENDP
PROGEND:
CODE      ENDS
          END       MAIN

Последовательность действий, выполняемых программой.
Модуль типа .EXE выполняет следующие функции:
1) Подготавливает параметры для запуска загрузочного модуля из того же каталога, в котором находится он сам. Вызываемому модулю передается новая среда, созданная вызывающим модулем и новая командная строка.
2) Вызываемый модуль запускается с использованием загрузчика.
3) После запуска проверяется выполнение загрузчика, а затем результат выполнения вызываемой программы. Необходимо проверять причину завершения и, в зависимости от значения, выводить соответствующее сообщение. Если причина завершения 0, то выводится код завершения.
В качестве вызываемой программы взята программа lab2, которая распечатывает среду и командную строку.

Добавлено через 31 секунду
Заранее большое спасибо за помощь
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2018, 20:33
Ответы с готовыми решениями:

Написать "Hello, World!"
Написать программу "Hello,world!" на Visual masm,dosbox.

DosBox и ошибка "Illegal command: masm"
Создаю простой хелло ворлд под дос в редакторе Quick, сохраняю как hello.asm .MODEL Small .STACK 100h .DATA db msg 'Hello,...

MASM 6.15 Error A2070 - invalid instruction operands
Добрый день! Ассемблер только начал изучать по книжкам. Столкнулся при трансляции программки с ошибкой, которой я озаглавил эту тему....

5
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
05.05.2018, 20:35
строка 138 - что-то в ней не так. Проверьте, что подразумевалось, т.к. подозреваю опечатку.
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75
05.05.2018, 20:38  [ТС]
что-то вроде
Assembler
1
2
MOV       СS,ES:[002CH]
MOV       ES,CS
напишу

ошибка в 236 уйдет тогда?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
05.05.2018, 20:54
По моему, прямая запись констант и значений из памяти в сегментные регистры не реализована. Поэтому
Assembler
207
208
209
          ; указываем DS на сегмент данных DATA
          MOV       AX,DATA
          MOV       DS,AX
И для остальных - то же самое свойство
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.05.2018, 21:15
Лучший ответ Сообщение было отмечено bikovbiv как решение

Решение

Цитата Сообщение от bikovbiv Посмотреть сообщение
ошибка в 236 строке
Ошибка в макросе, а номер строки 236, там, где макрос подключается.

Если регистр ВХ используется в косвенной(базовой, индексной) адресации он должен быть в квадратных скобках.
Assembler
1
2
3
4
5
6
7
8
9
ROAD2ZERO:MOV       DX,ES:[BX]
          CMP       DX,0000H
          JZ        READPATH
          INC       BX
          JMP       ROAD2ZERO
READPATH: ADD       BX,4
          MOV       DI,OFFSET RESULTPATH
          
COPYPATH: MOV       DL,ES:[BX]
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75
06.05.2018, 00:47  [ТС]
Большое спасибо, постараюсь все исправить

Добавлено через 3 часа 25 минут
Прошу прощения, если не составит труда, можете в двух словах описать, чем занимается функция MAKEPATH
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2018, 00:47
Помогаю со студенческими работами здесь

Ошибка Error при переустановке Win7 после Vista
Всем добрый вечер, решила тут переустановить винду на ноуте, снести Висту и поставить 7ку. И вот собралась с силами, села, все быстренько...

Win10 запускается только с Win7 на другом HDD (Boot Confuguration Error)
Сабж. Изначально стоял Win7 несколько лет, в 2015 с нее установил Win10 на другой HDD. Недавно обнаружил, что при отключение HDD с Win7...

При сборке выдает ошибку "MASM: fatal error A1000: : 1.asm.asm"
"MASM : fatal error A1000: : 1.asm.asm :\1>link16 /TINY 1.asm.obj, 1.asm.com" Вопользовался кодом из темы Собирал через...

Ошибка "Runtime Error 430 class does not support Automation or expected Interface" под Win7
Привет всем) Написанный мною скрипт, работает всего лишь на Windows 8, а на Windows 7 при открытии .exe файла пишет ошибку ...

Раздать интернет по локальной сети Win7(64bit) -Win7(32bit)
Всем доброго времени суток. У меня сложилась такая проблемка, надеюсь что не останусь без внимания за что зарание благодарен =) Два...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru