Top.Mail.Ru
Ответы
Аватар пользователя
13лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Вот ошибки в коде 5 штук, как исправить понять не могу, ПОМОГИТЕ!

Вот ошибки:
**Error** temp.asm(29) Unmatched ENDP: NEW_1T
**Error** temp.asm(39) Too few operands to instruction
**Error** temp.asm(91) Undefined symbol: OLD1C
**Error** temp.asm(92) Undefined symbol: OLD1C
**Error** temp.asm(111) Undefined symbol: OLD_1C

Вот код:
code_seg segment
TSRprog proc far
assume cs:code_seg
begin:
jmp start
New_2F Proc ; обработка мультиплексного прерывания
cli; на всякий случай запретим на время все прерывания в ОС cmpax,08000h; проверим, а нашу ли программу вызывают (см. выше п1)? jneexit; если нет, то выйти из процедуры.
mov ax, 0ABCDh;иначе - отправить пароль "я здесь" (см. выше п1).
sti ;разрешить опять все прерывания в ОС.
iret ; выйти из прерывания
exit:sti ; разрешить опять все прерывания в ОС.
jmp cs:[Old_2F]; и перейти по адресу старого обработчика прерывания 2F.
Old_2F DD 0; это место под адрес старого обработчика прерывания 2F.
New_2F endp

New_1C Proc
cmpcs:Cnt,182;проверяем прошло ли 10 сек.?
jbM2;если нет, то переход на увеличение счетчика
;(jb -переход при анализе беззнаковых величин)
movcs:flg_timer,1;сообщение можно выводить, поэтому установим в
;ячейке флага истечения контрольного времени 1
M2:incbyte ptr cs:Cnt;увеличить счетчик времени на 1
jmpcs:[Old_1С];и перейти по адресу старого обработчика
;прерывания 2F.
Old_1СDD0; это место под адрес старого обработчика преры-
;вания 2F.
CntDB0;ячейка для счетчика тиков
flg_timer DB0;ячейка для флага истечения заданного времени
New_1С endp

New_28 proc
pushf
cmp cs:flg_timer,1
jne M1
pushax
pushbx
pushbp
pushes
pushсх
cli
mov bx,0B800h
mov es,bx
leabp,curtime
movbx,0
mov cx,19

vivod_on:
moval,byte ptr cs:[bp]
movbyte ptr es:[bx],al
incbx
moval,74h
movbyte ptr es:[bx],al
incbx
incbp
loop vivod_on
mov cs: flg_timer, 0
mov cs:cnt, 0
sti
popcx
popes
popbp
popbx
popax
M1: popf
jmpcs:[old_28]
curtime db " 10 секунд истекли!"
old_28 dd 0
New_28 endp

start:
movax,08000h
int2Fh
cmpax,0ABCDh
jeanaliz
movax,3528h
int21h
movword ptr old_28,bx
movword ptr old_28+2,es
movax,2528h
leadx,new_28
int 21h
movax,352Fh
int21h
movword ptr old_2F,bx
movword ptr old_2F+2,es
movax,252Fh
leadx, New_2F
int 21h
movax,351Ch
int21h
movword ptr old1C, bx
movword ptr old1C+2, es
movax,251Ch
leadx, New_1C
int 21h
leadx,start
int27h

analiz:
mov si,80h
lodsb
cmp al,3
jl bue
inc si
lodsw
cmp ax,'u/'
jne bue
movax,3528h
int21h
push ds
lds dx,dword ptr es:old_1C
mov ax,251Ch
int 21h
lds dx,dword ptr es:old_28
mov ax,2528h
int 21h
lds dx,dword ptr es:old_2F
mov ax,252Fh
int 21h
pop ds
mov ah,49h
int 21h
mov es,word ptr es:[002ch]
mov ah,49h
int 21h
bue:
mov ax,4c00h
int 21h
TSRprog endp
code_seg ends
end begin

По дате
По рейтингу
Аватар пользователя
Новичок
13лет

проблема в том что у тебя местами вместо латинских букв использована кириллица. .
поэтому получилось вот такое:
**Error** temp.asm(29) Unmatched ENDP: NEW_1T
в строке 29 у тебя написано
New_1С endp
ты думаешь это латинская буква C?
напрасно ты так думаешь.
и вот через это у тебя и ошибка "Unmatched ENDP:" непарный конец блока/процедуры

по этой же причине у тебя не опознана и следовательно не определена переменная OLD_1C

а позднее ты вдруг вместо OLD_1C используешь OLD1C

ну и под завязку строка 39
push сх
тут тоже вместо латиских CX вбита кириллица и ошибка гласит
Too few operands to instruction
"слишком мало операндов в инструкции"

короче, внимательно надо перепечатывать чужой код.. .
да и знание английского не помешало бы.. . тексты ошибок чётко говорят что и где не так.

Аватар пользователя
Знаток
13лет

Такие вопросы не здесь задавать надо, и не за бесплатно (...пардоньте...)

Аватар пользователя
13лет

сертификат