Ошибка при компиляции - 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

Объяснение кода листинга программы

Список элементов кода:

  1. MAIN:
    • Получение и сохранение данных порта (IN AL,61H)
    • Запрет прерываний (CLI)
    • Вызов процедуры для генерации звука (CALL B10SPKR)
    • Восстановление значения порта (POP AX)
    • Вывод данных порта (OUT 61H,AL)
    • Включение прерываний (STI)
    • Возврат в основную программу (RET)
  2. 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)
  3. DURTION DW 1000 - Время звучания
  4. TONE DW 256H - Высота (частота) звука

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы