• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Работа с Com портом

  • Автор темы ilsinho
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ilsinho

Помогите, пожалуйста, составить программу. Задание такое: "Написать 16–ти разрядную ассемблерную программу, которая выводит на экран консоли сообщение о том, установлен или нет порт СОМ2 и в случае установки выводит также его базовый адрес в 16-тиричном виде."
Вот, что нашел

Определение статуса коммуникационного порта.​

Регистр статуса линии микросхемы UART 8250 определяет протокол связи. Этот регистр имеет адрес порта на 5 больше, чем базовый адрес данного канала. Обычно он постоянно просматривается в процессе коммуникационного обмена. При передаче данных регистр сообщает, что предыдущий символ уже послан, позволяя программе записать новый символ поверх его. При приеме данных регистр информирует программу о поступлении следующего символа, с тем чтобы программа могла прочитать его прежде чем он будет уничтожен следующим прибывшим. Значение битов этого регистра следующее:

бит 0 1 = байт данных получен
1 1 = полученные данные были перезаписаны (предыдущий
символ не был вовремя считан)
2 1 = ошибка четности (вероятно, из-за шума в линии)
3 1 = ошибка окружения (передача не синхронизована)
4 1 = обнаружен перерыв (получена длинная строка единиц,
индицирующая, что другая станция запрашивает
конец передачи)
5 1 = регистр хранения передатчика пуст (в этот регистр
должны помещаться передаваемые данные)
6 1 = регистр сдвига передатчика пуст (этот регистр по-
лучает данные из регистра хранения и преобразует
их в последовательный вид)
7 1 = таймаут (устройство не связано с машиной)

Средний уровень.​

Функция 3 прерывания 14H BIOS возвращает в AH регистр статуса линии. При входе DX должен содержать номер коммуникационного порта, к которому осуществляется доступ, где COM1 = 0, а COM2 = 1. Kак и предыдущий пример, этот проверяет наличие перерыва:

Код:
 MOV AH,3		 ;номер функции
MOV DX,1		 ;выбираем COM2
INT 14H		 ;получаем байт статуса
TEST AH,10000B	;обнаружен перерыв?
JNZ BREAK_DETECT ;если да, то на процедуру обработки
Hизкий уровень.

Из области данных BIOS считывается базовый адрес коммуникационного канала, к нему добавляется 5, а затем из полученного адреса порта считывается байт статуса.

Код:
MOV AX,40H		 ;ES указывает на область данных BIOS
MOV ES,AX		 ;
MOV DX,ES:[2]	 ;получаем базовый адрес COM2
ADD DX,5		  ;добавляем 5 для регистра статуса
IN  AL,DX		 ;получаем байт статуса
TEST AL,10000B	 ;бит 5 установлен?
JNZ BREAK_DETECT  ;если да, то на обработку перерыва

Вот пример обмена базовых адресов
Код:
---обмен базовых адресов для COM1 и COM2
MOV AX,40H	  ;ES указывает на область данных BIOS
MOV ES,AX		;
MOV DX,ES:[0]	;помещаем 1-й базовый адрес в DX
MOV AX,ES:[2]	;помещаем 2-й базовый адрес в AX
MOV ES:[0],AX	;обмениваем адреса
MOV ES:[2],DX	;
Как осуществить проверку, а потом еще в 16-ти ричном виде вывести? Помогите, плз.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!