Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 297
от 24.11.2005, 21:00

Администратор:Калашников О.А.
В рассылке:Подписчиков: 256, Экспертов: 21
В номере:Вопросов: 1, Ответов: 2


Вопрос № 29821: ;Посмотрите пожалуйста что тут неправильно????? ;??????????? .286 .model tiny CODSEG segment assume cs:CODSEG org 100h _start: jmp _Init Int_08h dd ? _Timer: ;Обработчик прерывания Int 08h ...

Вопрос № 29.821
;Посмотрите пожалуйста что тут неправильно?????
;???????????

.286
.model tiny
CODSEG segment
assume cs:CODSEG
org 100h
_start:
jmp _Init

Int_08h dd ?

_Timer: ;Обработчик прерывания Int 08h {
pusha ;
pushf ;
call cs:[Int_08h] ;
call _Sound ;
popa ;
iret ; }

_Init:
mov ax,3508h ;Сохраняем{
int 21h ;
;
mov word ptr cs:[Int_08h],bx ;
mov word ptr cs:[Int_08h+2],es ; }

push cs ;Заменяем {
pop ds ;
;
mov dx,offset _Timer ;
mov ax,2508h ;
int 21h ; }

xor ax,ax ;Ждём нажатия клавиши
int 16h ;

mov dx,offset Int_08h ;Востанавливаем{
mov ax,2508h ;
int 21h ; }
.exit ;Выход

_Sound:
mov ah,02 ;Звуковой сигнал{
mov dl,07 ;
int 21h ;
ret ; }

CODSEG ends
end _start
;Так вот! Первый раз прога запускается нормально и всё работает( динамик
;"шуршит", а по нажатии любой клавиши программа завершается).
;фсё самое интересное начинается со следующих запусков:
;Второй раз прога запускается и НИКАКОВА звука (зато фсё также безотказно
;завершается по нажатии какой-либо кнопки)
;И наконец третий раз:фсё виснет, нет никакой реакции на нажатие кнопок
;и динамик ПИЩИТ без конца (причём пищит в разнобой, невтакт)
;и остаётся только нажать на RESET
;Если кто знает что делать пожалуйста ответьте, а то как-то надоело при каждой
;отладке и запуске делать перезагрузку (фсё таки не в дОС'e сижу, а в Винде)
Отправлен: 19.11.2005, 19:50
Вопрос задал: Петров Максим Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Петров Максим Викторович!
так и будет.
звук нужно делать вот так
всего хорошего.

proc sound
push ax ;#
push cx
in al,61h
or al,3
out 61h,al
mov al,0B6h
out 43h,al
mov ax,4000 ;частота,чем > x,тем < частота(F). x=1,193,180/F Гц
out 42h,al
mov al,ah
out 42h,al

xor ax,ax
out 40h,al
mov al,ah
out 40h,al

xor cx,cx
loop $

mov ax,3500
out 42h,al
mov al,ah
out 42h,al

xor cx,cx
loop $

mov ax,1000
out 42h,al
mov al,ah
out 42h,al

xor cx,cx
loop $

mov ax,2500
out 42h,al
mov al,ah
out 42h,al

xor cx,cx
loop $

mov ax,1500
out 42h,al
mov al,ah
out 42h,al

xor cx,cx
loop $

in al,61h
and al,0FCh
out 61h,al

pop cx ax
ret
endp

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 19.11.2005, 23:04

Отвечает: Юра Устинов
Здравствуйте, Петров Максим Викторович!
Во-первых:
8 прерывание - прерывание таймера и вызывается 18,2 раза в секунду. Его вообще нежелательно изменять. Тем более работать с обработчиком прерывания на уровне прерываний.
Во-вторых:
pusha ;
pushf ;
...
popa ;
iret;
Ты ложишь в стек все регистры общего назначения, а достаёшь регистр флагов,
Стек - засорил!
iret - это две команды
popf
retf
правильнее будет
pushf
pusha
...
popa
iret
---------
Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 6-ой класс)
Отправлен: 20.11.2005, 10:51


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Архив рассылки
Отписаться
Вспомнить пароль

В избранное