Вопрос № 183097: Здравствуйте! Помогите с программками на ассемблере под ОС Windows XP на TASM. 1.Програмка должна выводить любой символ на экран. 2.Прграммка при нажатии цифр выводит столько же звуков с динамика (если 1 - 1 звук, если нажать цифру 1 2 раза то ...
Вопрос № 183097:
Здравствуйте! Помогите с программками на ассемблере под ОС Windows XP на TASM. 1.Програмка должна выводить любой символ на экран. 2.Прграммка при нажатии цифр выводит столько же звуков с динамика (если 1 - 1 звук, если нажать цифру 1 2 раза то 2 раза звук ну и тд)
Сори сам я небельмеса не понимать в этом языке.... Помогите пожалуйста , с подробным описанием каждого сегмента БУДУ ОЧЕНЬ БЛАГОДАРЕН ! И если есть возможность со скринами
1) Программа вывода на экран символа, введенного с клавиатуры
Код:
.model small .code ;сегмент кода start: ;точка входа mov ah, 0 ;ждем код с клавиатуры int 16h
cmp al,
1bh ;Esc ? je finish ;да - на выход
cmp al, 0 je start ;управляющие клавиши (стрелки, F1-F12 и т.п.) игнорируем
mov dl, al ;выведем mov ah, 2 ;используя функцию 2 int 21h ;21 прерывания ДОС jmp start ;на повтор
finish: mov ax, 4c00h ;выход в ДОС int 21h
end start ;точка входа
2) Программа "пищащая" по нажатию на клавишу "1". Издаем звук час
тотой 1кГц на "спикере". Сегмент данных не используется, поэтому инициализация DS опущена Из-за того, что программа успевает очень быстро отработать, то для того, чтобы дать возможность нажать повторно, ввел временную задержку... (Я бы лучше сделал нажатие на "2", "3"... Было бы намного понятнее. Повторное нажатие как-то не очень...)
Код:
.model small .code ;сегмент кода start: ;точка входа xor dx, dx ;счетчик нажатий на "1" repeat: ;цикл подсчета нажатий mov ah, 1 ;проверим, было ли нажатие int 16h jz cmp_count ;не было - на проверку счетчика mov ah, 0 ;было - прочитаем int
16h
cmp al, 1bh ;Esc ? je finish ;да - на выход cmp al, '1' ;не 1 игнорируем jne repeat inc dx ;считаем нажатия на "1"
;т.к. компьютер очень быстро успевает все отработать ;то чтобы дать возможность нажать несколько раз ;зададим небольшую паузу mov bx, 10 ;10 раз xor cx, cx ;по 64k pause: loop pause dec bx jnz pause jmp repeat ;проверим, было ли еще нажатие
cmp_count: ;нажатия нет test dx, dx ;проверим
счетчик нажатий jz repeat ;ничего не было - на ожидание нажатия
beep_loop: ;цикл beep-ов mov al, 0b6h ;команда таймеру на ввод делителя out 43h, al mov ax, 1193 ;делитель = 1193180 (частота тактового генератора таймера) / 1000 (частота сигнала) out 42h, al ;младший байт делителя mov al, ah out 42h, al ;старший байт делителя in al, 61h ;прочитаем режимы таймера mov ah, al ;сохраним or al, 3 ;включим звук
out 61h, al ;зазвучало!
;выждем время mov bx, 10 ;10 раз sound_1: xor cx, cx ;по 64к sound: loop sound dec bx jnz sound_1
mov al, ah ;выключим звук out 61h, al ;отправив обратно сохраненные режимы
delay: ;выждем небольшую паузу loop delay
dec dx ;цикл по числу нажатий jnz beep_loop
jmp start ;на ожидание клавиши
finish: mov ax, 4c00h ;выход в ДОС int 21h
end start ;точка входа
Хм,
а что Вы хотели увидеть на скинах? Первая программа очень проста, "тупо" выводит введенный символ. Вторая же работает без вывода на экран...
Обе программы создаем в формате EXE при помощи команд: tasm name tlink name ----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 10.05.2011, 11:43
Номер ответа: 267063 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: очень очень благодарен :)
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267063
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.