Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2011, 19:11   #1
ilsenbox@mail.ru
 
Регистрация: 28.06.2011
Сообщений: 3
По умолчанию Работа с Com портом

Помогите, пожалуйста, составить программу. Задание такое: "Написать 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-ти ричном виде вывести? Помогите, плз.

Последний раз редактировалось ilsenbox@mail.ru; 13.09.2011 в 20:45.
ilsenbox@mail.ru вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с com-портом larry Visual C++ 6 12.08.2010 16:21
работа с портом Assemblerru Win Api 16 10.06.2010 20:00
Работа с com портом Валера777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.12.2009 00:06
работа с COM портом ShAzat Общие вопросы Delphi 8 28.05.2008 20:08