Написать программу проверки готовности устройства с адресом порта 200h - Assembler

Узнай цену своей работы

Формулировка задачи:

Получил задание на ассемблере написать некую программу помогите плиз желательно с описаниями поподробней (отправлю средства на мобилку в знак благодарности)

Написать программу проверки готовности устройства с адресом порта 200h. Готовность определяется наличием 14 и 1 или 9 и 7 битами, если нет готовности, то ждать.

Заранее спасибо этому форуму и всем его участникам!

Решение задачи: «Написать программу проверки готовности устройства с адресом порта 200h»

textual
Листинг программы
use16
org 100h
 
;выводим сообщение msg0
mov dx,msg0
mov ah,9
int 21h
;кидаем в dx номер порта
mov dx,200h
;ждём
@@:
    in ax,dx
    test ax,08h
    jz @b
    test ax,20h
    jz @b
;выводим msg1
mov dx,msg1
mov ah,9
int 21h
;ожидаем нажатия клавиши
xor ax,ax
int 16h
;завершаем выполнение
ret
msg0 db "Waiting...",13,10,"$"
msg1 db "Ready",13,10,"$"

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

  1. Используется сегментный регистр для определения сегмента данных (DS) и кода (CS), а также для обращения к переменным и вывода сообщений (в данном случае).
  2. Организация кода:
    • Линии с комментариями (отсутствующие в коде команды) помогают понять, что делает программа.
    • Команды организованы в блоки (обычно два блока: для чтения и записи), каждый из которых имеет свою функцию.
    • Внутри блоков команды расположены в порядке выполнения (сначала идут более ранние операции, затем более поздние).
    • Команды в блоке чтения обычно расположены в порядке возрастания регистра (AL, AH, DL, DH), а затем идут другие регистры (в данном случае нет использования BX, CX, DX, SI, DI).
    • Команды в блоке записи обычно расположены в порядке убывания регистра (сначала идут более поздние операции, затем более ранние).
  3. Порядок выполнения:
    • Сначала программа выводит сообщение Waiting... с помощью функции BIOS int 21h, используя сегментный регистр DS для определения сегмента строки.
    • Затем программа проверяет, готов ли порт 200h (в данном случае используется регистр DX).
      • Если бит 0 (самый младший) регистра AX равен 1, то порт не готов (поэтому используется jz @b).
      • Если бит 3 (второй по старшинству) регистра AX равен 1, то порт готов (поэтому используется jnz @b).
    • Если порт готов, программа выводит сообщение Ready с помощью функции BIOS int 21h.
    • Затем программа ожидает нажатия клавиши с помощью функции BIOS int 16h.
    • Наконец, программа завершается с помощью команды ret.
  4. Переменные:
    • msg0, msg1 - строки, содержащие сообщения, которые выводятся с помощью функции BIOS int 21h.

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


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

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

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