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

Ошибка при компиляции кода

20.05.2018, 15:09. Показов 1986. Ответов 2
Метки tasm (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некий код на TASM'e по идее рабочий. При компиляции выдает такие ошибки. Я в растерянности. Что делать?Как исправить? Подскажите пожалуйста.
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
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
IDEAL
 
p386    ; - для использования fsin и fcos
 
MODEL   SMALL
 
EXTRN   hgetch:proc
 
scent   equ ((160-35)*256+100)  ; координаты центра экрана
 
npts    equ 128 ; количество точек (не все попадут в область действия радара)
fadespd equ 5   ; скорость угасания точек (меньше - быстрее)
maxw    equ 16  ; коэффициенты скорости движения и угасания луча
prec    equ 2048    
prect   equ 16  
rcstart equ 200 ; минимальный цвет экрана (после луча)
coffx   equ 121 ; радиусы луча по х (с учетом пропорций экрана)
coffy   equ 100 ; и y
 
macro   getch       ; ввод символа
    mov ah, 08h
    int 21h
endm
 
macro   kbhit       ; проверка нажатия клавиши
    mov ah,0bh          
    int 21h         
endm
 
CODESEG
    STARTUPCODE
 
    cmp al,2
    jz  exit
 
    call initg  ; инициализация видеорежима и палитры
    finit       ; инициализация FPU
 
    xor ah,ah   ; инициализация генератора случ. чисел
    int 1ah ; используя время
    mov [lseed],dx  
 
    call genpts ; генерация координат точек
 
    call main   ; выполнение
 
exit:
 
    EXITCODE 0
 
;==================================
proc    genpts  ; генерация координат точек
    
    mov cx,npts
    mov bx, offset pts
@@gplp: call    rnd
    mov [bx],ax
    inc bx
    inc bx
    loop    @@gplp
 
    ret
endp
 
;==================================
proc    rnd         ; генерация случ. числа
    mov ax,[lseed]
    mov dx,173
    mul dx
    rol ax,3
    mov dx,17
    mul dx
    rol ax,7
    mov dx,23
    mul dx
    rol ax,13
    mov dx,3
    mul dx
    mov [lseed],ax
    ret
endp
 
 
 
 
;==================================
proc    updrefl c   ; обновление точек
    uses    ax,bx,cx,dx,si,di
 
    mov si,offset pts
    mov di,offset nptsc
    xor cx,cx
 
@@cloop:            ; цикл по точкам
    cmp [word ptr di], (rcstart-192) shl fadespd    
    jbe @@c1    ; если погашена, то дальше
 
    dec [word ptr di]   ; иначе уменьшаем яркость
    mov bx,[si]
    mov ax,[di]
    shr ax,fadespd
 
    add ax,192
    mov [es:bx],al  ; и отображаем
 
@@c1:   inc cx
    inc si
    inc si
    inc di
    inc di
 
    cmp cx,npts
    jbe @@cloop
 
    ret
endp
 
;==================================
proc    chkrefl c       ; "обнаружение" точек
    uses    bx,cx,dx,si
    mov cx,0
    mov si,offset pts
    mov bx,offset nptsc
 
@@cloop:            ; цикл по точкам
    cmp [si],di ; если точка луча совпадает с точкой
    jnz @@c1
    
    mov dx,63       ; то присваиваем ей максимальную яркость
    shl dx,fadespd
    mov [ds:bx],dx
 
@@c1:   inc cx
    inc si
    inc si
    inc bx
    inc bx
 
    cmp cx,npts
    jne @@cloop
 
    ret
endp
 
;==================================
proc    main
 
    mov di,offset nptsc
    mov cx,npts
    xor ax,ax
    rep stosw
 
@@mloop:
    kbhit           ; проверяем нажатие клавиши
    cmp al,0ffh     ; если нажата - выходим
    jz  @@mout  
    inc [ca]
    fild    [ca]        ; рассчитываем текущий угол луча
    fild    [ca]
    fadd
    fldpi
    fmulp
    mov [ctmp],prec
    fidiv   [ctmp]
 
    xor cx,cx
@@milp:             ; цикл по положениям луча
                ; за последний отрезок времени - "гасим" их
    push    cx
    fstp    [ttmp]      ; рассчитываем угол и координаты конца луча
    fld [ttmp]
    fld [ttmp]
    mov [ctmp],cx
    sub [ctmp],64
    fild    [ctmp]
    mov [ctmp],prect
    fidiv   [ctmp]
    fadd
    fstp    [ttmp]
    fld [ttmp]
    fsin
    mov [ctmp],coffx
    fimul   [ctmp]
    fistp   [ctmp]
    fwait
    mov bx,[ctmp]
    neg bx      ; инвертируем по Х, чтобы крутить по часовой стрелке
    fld [ttmp]
    fcos
    mov [ctmp],coffy
    fimul   [ctmp]
    fistp   [ctmp]
    fwait
    mov dx,[ctmp]
    mov ax,160-35   ; определяем координаты точки конца в CX
    add ax,bx
    mov ch,al
    mov ax,100
    add ax,dx
    mov cl,al
    mov bx,scent    ; начало луча - центр - в BX
    pop ax
    push    ax
    mov dx,rcstart
    add dx,ax       ; цвет соответствует счетчику цикла
 
    call    line        ; отображаем отрезок с одновременной проверкой
                ; на "обнаружение" точек
 
    pop cx
    inc cx
    cmp cx,maxw
    jb  @@milp
 
    call    updrefl     ; обновляем точки
 
    fstp    [ttmp]
    jmp @@mloop     ; и заново - до нажатия клавиши
@@mout:
    ret
endp
 
;==================================
proc    initg           ; инициализация видеоадаптера
 
    mov ax,0013h    ; инициализация режима 13h (320*200*256)
    int 10h
 
    push    ds
    pop es
 
    mov cx,0        ; подготавливаем палитру - 64 оттенка
    mov si,offset pal   ; от черного до ярко-зеленого
 
@@pset: mov [byte ptr ds:si],0  ; красный - 0
    inc si  
    mov [byte ptr ds:si],cl ; зеленый - счетчик цикла
    inc si
    mov [byte ptr ds:si],0  ; синий - 0
    inc si  
    inc cx
    cmp cx,64
    jb  @@pset
 
    mov ax,1012h    ; номер функции установки блока регистров VGA DAC
    mov bx,192      ; номер начального цвета
    mov cx,64       ; количество цветов
    mov dx,offset pal   ; адрес подготовленных нами данных
    int 10h     ; определяем цвета 192-255
    ret
endp
 
;==================================
proc    calcpa  ; расчет смещения пиксела по его координатам
    ; на входе - DH=x-35, DL=y
    ; на выходе - AX - смещение пиксела
    xor al,al   
    mov ah,dl   ; ax=y*256
    shr ax,2    ; ax=y*64
    add ah,dl   ; ax=y*64+y*256=y*320
    add al,dh   ; ax=y*320+x
    adc ah,0    ; учитываем возможный перенос бита
    add ax,35   ; добавляем смещение
 
    ; смещение используем, поскольку диапазон отображаемых точек -
    ; от (160-121)    до (160+121) - ширина меньше 256, т.е. предполагая
    ; везде смещение по оси х можем использовать всего 1 байт
    ; для х-координаты
 
    ret
endp    calcpa
 
;==================================
proc    line    C   ; отображение отрезка и "обнаружение" точек  
            ; (язык функции "C" указан только для генерации
            ; кода работы с локальными переменными в стеке)
 
    local sdx:word, sdy:word
 
    ;на входе BX - x1 (-35) , y1; CX - x2 (-35) ,y2, DX-color
 
    ; инициализация локальных переменных
    cmp ch,bh       ; расчет расстояния и шага по оси х
    jae @@c1
    mov si,-1
    mov al,bh   
    sub al,ch
    jmp @@c2
@@c1:
    mov si,1
    mov al,ch
    sub al,bh
@@c2:
    xor ah,0
    mov [sdx],si
    push    ax
 
    cmp cl,bl       ; расчет расстояния и шага по оси y
    jae @@c3
    mov si,-320
    mov al,bl   
    sub al,cl
    jmp @@c4
@@c3:
    mov si,320
    mov al,cl
    sub al,bl
@@c4:
    xor ah,0
    mov [sdy],si
    push    ax
mov dx,bx           call    calcpa
    mov di,ax
    xor si,si
    mov ax,0a000h   mov es,ax
    pop ax
    pop bx
    pop cx
    pop dx
 
@@mloop:            
    mov [es:di],bl  
    call    chkrefl     
    cmp di,ax       je  @@mlex
    cmp si,0
    jg  @@msy
    jz  @@msc
@@msx:  add si,dx
    add di,[sdy]
    jmp @@mloop
@@msy:  sub si,cx
    add di,[sdx]
    jmp @@mloop
@@msc:  cmp cx,dx
    jae @@msx
    jmp @@msy
 
@@mlex: ret
 
endp    line
END
Миниатюры
Ошибка при компиляции кода  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2018, 15:09
Ответы с готовыми решениями:

Ошибка при компиляции
Пытаюсь скомпилить в MASM этот код не компилиться. Пытался записать все это через Hiew тоже ошибка.Код взят здесь...

Ошибка при компиляции
задание: пользователь вводит 4 числа с клавиатуры, первые 3 числа складываются, а потом на их сумму делиться 4 число. При компиляции выдает...

Ошибка при компиляции примера
Я начинаю учить ассемблер по книге О. А. Калашникова "Ассемблер Это просто"(второе издание) Там в качестве первого примера программы...

2
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
20.05.2018, 17:20
Лучший ответ Сообщение было отмечено HMV-ll как решение

Решение

1)
В коде, который Вы дали, нет сегмента данных, компилятор так и сказал:
Groups & Segments Bit Size Align Combine Class Cref (defined at #)
DGROUP Group #5 5 33
_DATA 16 0000 Dword Public DATA #5
_TEXT 16 0219 Dword Public CODE #5 5 #30 30
Все Undefined symbol: именно из-за этого.

2)
Не подключена библиотека макросов:
EXITCODE 0 **Error** Illegal instruction
3)
Язык, стратегия которого исползуется в подрограммах, нужно указывать после запятой:
proc updrefl c **Error** Need colon
Соответственно и сообщение на слудеющей строке из-за этого:
uses ax,bx,cx,dx,si,di *Warning* USES has no effect without language
Указывать в подпрограммах стратегию, нужно тогда, когда она отличается от общей, которая указана в директиве
MODEL SMALL
Ставите сюда MODEL SMALL,С и убираете из подпрограмм.

4)
inc [ca]
**Error** Undefined symbol: CA
*Warning* Argument needs type override
Об ошибке я говорил, нет сегмента данных, нет имени, и сообщение идет из-за этого, т.к. компилятор не знает длину переменной и не знает какую инструкцию правильно генерировать byte ptr или word ptr.

5)
В некоторых строчках есть несколько команд:
mov dx,bx call calcpa **Error** Extra characters on line
Одна строка одна команда:
mov dx,bx
call calcpa
Вроде все ошибки по типам вспомнил.
4
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 4
20.05.2018, 17:36  [ТС]
Спасибо большое
Буду теперь сидеть разбираться)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2018, 17:36
Помогаю со студенческими работами здесь

Синтаксическая ошибка A2008 при компиляции
Начал изучать книгу "Самоучитель Ассемблера" Александра Крупника, и в первой же программе ошибка. .586 .model flat, stdcall ...

Ошибка на строке mov sі,0 при компиляции
sseg segment Db 128 dup(?) sseg ends dseg segment A db 1,2,3,4,5,6 B dw 3 dup(?) dseg...

Ошибка в каждой строке при компиляции
Написал код, но при его компиляции(MASM) мне выдает примерно следующее(во вложении), код же следующий: .386 .MODEL flat, stdcall ...

Ошибка при компиляции программы типа HelloWorld
подскажите еще пожалуйста section .data slovo dw "hi forum" section .text ;описывают, что регистры edx и...

Ошибка компиляции при переводе с NASM в MASM32
Доброго времени суток форумчани. В общем в чем суть моего вопроса. Я самостоятельно пытаюсь изучить ассемблер в книге что я выбрал...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru