Неактивный пользователь
Пол:
Регистрация: 20.04.2008
Сообщений: 43
Репутация: 0
|
Re: Помогите исправить ошибку в ассемблере
кодmodel TINY
Assume CS: Code
Code SEGMENT
Start proc; Основная процедура
mov ax,cs
mov ds,ax; DS = CS
iniflag db 0; Флаг звучания
old_int1c_off dw 0; Смещение старого вектора
old_int1c_seg dw 0; Сегмент старого вектора
tek_mel dw; Адрес текущей ноты выбранной мелодии
mov ax,351ch
int 21h
mov cs:old_int1c_off,bx
mov cs:old_int1c_seg,es
lea dx,new_int1c
mov ax,251ch
int 21h; DS:DX - адрес новой программы обр.
mov ah,09h
lea dx,menu
int 21h
beg1:
call kbin; Опрос клавиатуры
cmp al,'1'
jnz beg2 ; Нет
mov byte ptr iniflag,1; Взведение флага звуч.
lea ax,mel1
mov tek_mel,ax
jmp beg1; Переход на начало цикла
beg2:
cmp al,'2'
jnz beg3
mov byte ptr iniflag,1
lea ax,mel2
mov tek_mel,ax
jmp beg1
beg3:
cmp al,'q'
jnz beg4
jmp beg5
beg4:
mov ah,09h
lea dx,er
int 21h
jmp beg1
beg5:
mov dx,old_int1c_off
mov ax,old_int1c_seg
mov ds,ax; DS:DX - адрес устанавл. вектора
mov ax,251ch
int 21h
mov ax,4c00h
int 21h
start endp
new_int1c proc far
push ax
call muz; Вызов процедура извлечения звука
pop ax
iret
new_int1c endp
muz proc near
test byte ptr cs:iniflag,0ffh; Проверка флага
jnz muz1
muze:
in al,61h ; Чтение состояния системного порта В
and al,0fch; Запрещение звучания (биты 0 и 1)
out 61h,al; Запись в системный порт В
jmp ex ; Выход, если флаг не взведен
muz1:
mov si,cs:tek_mel; Адрес текущей ноты
mov bl,cs:[si]; Текущая нота
cmp bl,255; Пауза?
jnz muz2
Выключение звука
in al,61h
and al,0fch
out 61h,al
inc cs:tek_mel; Переход к адресу след. ноты
jmp ex
muz2:
or bl,bl; = 0?
jnz muz3
jmp muze
muz3:
xor bh,bh
mov ax,cs:noty [bx]
inc cs:tek_mel; Переход к адресу след. ноты
out 42h,al; Мл.байт частоты. канал 2 таймера
xchg al,ah; AH. AL
out 42h,al; Ст. байт частоты. канал 2 таймера
Разрешение звучания
in al,61h
or al,3; Разрешение звучания (биты 0 и 1)
out 61h,al; Запись в системный порт В
ex:
ret
muz endp
kbin proc near; Ввод с клавиатуры и проверка на выбор игры
mov ah,0
int 16h
ret
kbin endp
;Мелодия "Чижик Пыжик"
mel1 db 17,17,255,13,13,255,17,17,255,13,13,255,18,18,255
db 17,17,255,15,15,15,15,255,255
db 8,8,255,8,8,255,8,8,255,10,255,12,255
db 13,13,255,13,13,255,13,13,13,13
db 0
;Мелодия "Подмосковные вечера"
mel2 db 1,1,1,4,4,4,8,8,8,4,4,4,6,6,6,6,6,6,4,4,4,3,3,3
db 8,8,8,8,8,8,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1
db 0
menu db 10 dup(0ah), 30 dup(20h), 'Enter the point of menu:'
db 0dh,0ah,20 dup(20h),'1 - CHIZHIK-PYZHIK',0dh,0ah,20 dup(20h),'2 - PODMOCKOVNYE VECHERA',0dh,0ah,20 dup(20h), 'q - Quit',5 dup(0ah), "$ "
er db 'Incorrect input! Try again!',0dh,0ah,"$ "
;Коэффициенты деления для нот
noty dw 0eeeh,0e18h,0d49h,0c8eh,0bdfh,0b2fh,0abeh
dw 9f7h,968h,8e0h,861h,7e8h,777h,70ch,6a5h,647h
dw 5edh,597h,547h,4fbh,4b4h,470h,430h,3f4h
dw 3bbh,386h,352h,323h,2f6h,2cbh,2a3h,27dh,25ah,238h, 218h,1fah
dw 1ddh,1c3h,1a9h,192h,17bh,166h,152h,13fh,12dh,11ch, 10ch,0fdh
dw 0
code ends
END
Вот и весь код. За ответ спасибо, скомпилировал, но линковщик говорит что invalid initial entry point address...
Последний раз редактировалось fosgen29; 18.03.2010 в 18:44..
|