Ошибка при компиляции - Assembler
Формулировка задачи:
Пытаюсь скомпилить в MASM этот код не компилиться.
Пытался записать все это через Hiew тоже ошибка.Код взят здесь http://www.cracklab.ru/pro/asm/11.php
(Программа воспроизведение звука через Бипер)
TITLE SOUND (COM) Процедура для генерации звука SOUNSG SEGMENT PARA 'Code' ASSUME CS:SOUNG,DS:SOUNG,SS:SOUNG ORG 100H BEGIN: JMP SHORT MAIN ; ------------------------------------------------------- DURTION DW 1000 ;Время звучания TONE DW 256H ;Высота (частота) звука ; ------------------------------------------------------- MAIN PROC NEAR IN AL,61H ;Получить и сохранить PUSH AX ; данные порта CLI ;Запретить прерывания CALL B10SPKR ;Произвести звук POP AX ;Восстановить значение OUT 61H,AL ; порта STI ;Разрешить прерывания RET MAIN ENDP B10SPKR PROC NEAR B20: MOV DX,DURTION ;Установить время звучания B30: AND AL,11111100B ;Очистить биты 0 и 1 OUT 61H,AL ;Передать на динамик MOV CX,TONE ;Установить частоту B40: LOOP B40 ;Задержка времени OR AL,00000010B ;Установить бит 1 OUT 61H,AL ;Передать на динамик MOV CX,TONE ;становить частоту B50: LOOP B50 ;Задержка времени DEC DX ;Уменьшить время звучания JNZ B30 ;Продолжать? SHL DURTION,1 ; нет - увеличить время, SHR TONE,1 ; сократить частоту JNZ B20 ;Нулевая частота? RET ; да - выйти B10SPKR ENDP SOUNSG ENDS END BEGIN
Решение задачи: «Ошибка при компиляции»
textual
Листинг программы
TITLE SOUND (COM) Процедура для генерации звука .model tiny .code ORG 100H ; ------------------------------------------------------- MAIN: IN AL,61H ;Получить и сохранить PUSH AX ; данные порта CLI ;Запретить прерывания CALL B10SPKR ;Произвести звук POP AX ;Восстановить значение OUT 61H,AL ; порта STI ;Разрешить прерывания RET B10SPKR: B20: MOV DX,DURTION ;Установить время звучания B30: AND AL,11111100B ;Очистить биты 0 и 1 OUT 61H,AL ;Передать на динамик MOV CX,TONE ;Установить частоту B40: LOOP B40 ;Задержка времени OR AL,00000010B ;Установить бит 1 OUT 61H,AL ;Передать на динамик MOV CX,TONE ;становить частоту B50: LOOP B50 ;Задержка времени DEC DX ;Уменьшить время звучания JNZ B30 ;Продолжать? SHL DURTION,1 ; нет - увеличить время, SHR TONE,1 ; сократить частоту JNZ B20 ;Нулевая частота? RET ; да - выйти ; ------------------------------------------------------- DURTION DW 1000 ;Время звучания TONE DW 256H ;Высота (частота) звука END MAIN
Объяснение кода листинга программы
Список элементов кода:
- MAIN:
- Получение и сохранение данных порта (IN AL,61H)
- Запрет прерываний (CLI)
- Вызов процедуры для генерации звука (CALL B10SPKR)
- Восстановление значения порта (POP AX)
- Вывод данных порта (OUT 61H,AL)
- Включение прерываний (STI)
- Возврат в основную программу (RET)
- B10SPKR:
- Установка времени звучания (MOV DX,DURTION)
- Очистка битов 0 и 1 (AND AL,11111100B)
- Передача на динамик (OUT 61H,AL)
- Установка частоты (MOV CX,TONE)
- Повторение цикла (LOOP B40)
- Установка бита 1 (OR AL,00000010B)
- Передача на динамик (OUT 61H,AL)
- Увеличение времени звучания (DEC DX)
- Повторение цикла (LOOP B50)
- Уменьшение частоты (SHL DURTION,1)
- Выход из процедуры (RET)
- DURTION DW 1000 - Время звучания
- TONE DW 256H - Высота (частота) звука
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д