Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 16:39   #1
T.A.T.A.R.I.N
 
Регистрация: 03.09.2009
Сообщений: 8
Вопрос Обработчик прерывания(Звук)

Здравствуйте, вот код программы. Почему то она работает не корректно. Не выгружается из памяти. Как это исправить? Помогите кто знает!
Код:
.186
.model tiny
TITLE Resident (com)
code SEGMENT 
assume CS:code, DS:code, SS:code,ES:code
org 100h
start: jmp initz
New_sound Proc far
jmp sou
gwts dw 1985
kbsave dd ? 
;::::::::::список нот:::::::::::::::::::::::::::::::
Melody:                         
        db      1,1,1
        db      02fh,015h,3 ;A    
        db      02fh,015h,3 ;A
        db      0dah,00fh,6 ;D        
        db      02fh,015h,3 ;A      
        db      0cah,011h,2 ;C
        db      0deh,012h,2 ;B
        db      02fh,015h,4 ;A      
        db      0,0,0  
;::::::::::::::::делитель частоты,длительность:::::::::::        
mesi db "Resident is installed",0ah,0dh,'$'
mese db "Resident is erased",0ah,0dh,'$'
sou: 
pusha
pushf
mov ax,cs
mov ds,ax
mov es,ax
 in AL,60H  ;читаем scan-код  из порта 60H 
 cmp AL,47H;  код клавиши  <Home>?
 jne  exit  
        cld
        lea     si,melody
mus_000:lodsb
        cmp     al,0
        je      exit
        inc     si
        cmp     al,1
        je      mus_001
        dec     si
        out     42h,al
        lodsb
        out     42h,al
        in      al,61h
        or      al,3
        out     61h,al
mus_001:lodsb
mus_002:push    ax
        mov     ah,2ch
        int     21h
        mov     al,dl
mus_003:push    ax
        mov     ah,2ch
        int     21h
        pop     ax
        cmp     dl,al
        je      mus_003
        pop     ax
        dec     al
        jnz     mus_002
        in      al,61h
        and     al,0fch
        out     61h,al
        jmp     mus_000
EXIT:   popf
        popa
        jmp cs:kbsave
        iret 		
new_sound endp
;--------Процедруа инициализации---------------------------
Initz proc far
mov ax,3509h
int 21h
mov word ptr kbsave,bx
mov word ptr kbsave+2,es
add bx,3
cmp word ptr es:[bx],1985
je installed
lea dx,new_sound
mov ax,2509h
int 21h
mov ah,09h
lea dx,mesi
int 21h
lea dx,initz
int 27h
installed:
    push bx
    add bx,2
    mov dx,es:[bx]
    add bx,2
    mov ds,es:[bx]
    mov ax,2509h
    int 21h
    pop bx
    mov ah,49h
    int 21h
    mov ax,cs
    mov ds,ax
    mov ah,9h
    lea dx,mese
    int 21h
    mov ah,4ch
    int 21h
initz endp
code ENDS
END start
T.A.T.A.R.I.N вне форума Ответить с цитированием
Старый 03.05.2011, 03:13   #2
UsamaBenLadan
Пользователь
 
Аватар для UsamaBenLadan
 
Регистрация: 01.05.2011
Сообщений: 23
По умолчанию

Если при нескольких подряд запусках выдаёт "Resident is installed" - команда jmp sou - двухбайтовая (short) а не трёхбайтовая.
Хотя тут любым Debugger'ом можно определить где что не так.
UsamaBenLadan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик прерывания Клавиатуры paska Паскаль, Turbo Pascal, PascalABC.NET 2 04.07.2010 19:35
резидентный обработчик прерывания hadji Помощь студентам 2 10.05.2010 21:00
Обработчик вектора прерывания Festovec Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 07.04.2010 10:05
Обработчик прерывания Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 16 04.12.2009 19:00
Создание резидентной программы (обработчик прерывания). Петруха Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.03.2009 16:31