Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: тестирование операторов работы с портами IN OUT  (Прочитано 11869 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
eugrita
Помогающий

ru
Offline Offline

« : 03-02-2011 07:09 » 

Что-то не понимаю механизма работы IN ,OUT
в такой программе казалось все очевидно
Код:
k equ 100
IN AX, 200;
IN AL, k;
OUT 30h, AX ;
Но при проходе по шагам регистры AX,AL не изменяются
а  последний оператор при дизассемблировании вообще превращается в бесконечную цепочку
т.е. программа не завершается
Среда - эмулятор 8086
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 03-02-2011 13:02 » 

eugrita, а должны? Что эта программа, по-твоему, делает?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
eugrita
Помогающий

ru
Offline Offline

« Ответ #2 : 03-02-2011 14:05 » 

по моему она должна засылать переменную k (значение=100 десятичное ) на регистр AL
а также 200 (десятичное) на регистр AX. Потом содержимое регистра выводится в порт
30h   По крайней мере содержимое регистров AX AL должно измениться- но не вижу этого
А насчет бесконечной цепочки сдвигов при ассемблировании команды OUT тоже непонятно.
В чем механизм действия OUT ?
« Последнее редактирование: 03-02-2011 14:07 от eugrita » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 03-02-2011 14:35 » 

Пересылка константы или значения из памяти в регистр - это инструкция MOV. Инструкции IN и OUT - это инструкции работы с портами ввода/вывода. Обе инструкции при 8-битных портах имеют лишь по одному операнду - номеру порта, регистр AL используется как приёмник/источник данных. При 16-битных портах - два операнда.
« Последнее редактирование: 03-02-2011 14:36 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
eugrita
Помогающий

ru
Offline Offline

« Ответ #4 : 03-02-2011 16:31 » 

хорошо, тогда IN 200 воспринимается как ввод из порта 200
OUT 30h - как вывод в порт 30
вроде из документации IN,OUT относятся к спец командам ввода/вывода, позволяющих
 иметь доступ к первым 256 портам
Есть ли такие номера портов для моего случая ассемблер 8086и как проконтролировать ввод или вывод в эмуляторе ?
« Последнее редактирование: 03-02-2011 16:37 от eugrita » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-02-2011 17:11 » new

eugrita, вопрос непонятен.

Во-первых, я понятия не имею, о каком эмуляторе идёт речь, что там можно, и что нельзя. Кроме того, я не работал с эмуляторами, и поэтому даже название эмулятора лично мне ничего не скажет. Но, быть может, это поможет дать ответ кому-нибудь другому.

Во-вторых, я не понимаю, что значит контролировать ввод/вывод? Порты служат для обмена информацией между ЦПУ и вспомогательным оборудованием (например, контроллерами устройств ввода/вывода). Работа с ними определяется соответствующими протоколами, специфичными для каждого типа оборудования. Если работа организована правильно, устройство правильно себя ведёт или возвращает правильную информацию.

Соответственно, пока не поставлена задача - с каким оборудованием должна работать эта ассемблерная программа, и что нужно получить в результате этой работы - говорить особо не о чем.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
eugrita
Помогающий

ru
Offline Offline

« Ответ #6 : 04-02-2011 16:11 » 

Спасибо. Я сам разобрался. Моя программная оболочка - эмулятор процессора 8086. Программный интерфейс имитирует процессор. Т. е. видно содержание основных регистров, флагов а также 4 однобайтных портов ввода вывода 100h,101h,300h,301h. Я просто неумел воспользоваться заданием в интерфейсе конкретного значения байта порта ввода. (надо было выбирать чекбоксы). Теперь умею.
Но теперь я спрашиваю вас вот о чем.  
байт порта ввода, как уже сказал, на этой модели процессора я набираю ручками.
Я всегда очень хотел работать с портами. И хотел бы подключить этот эмулятор к настоящим портам компа последовательным или параллельным. чтобы воспользовавшись этим интерфейсом просматривать входящие байты. Я конечно понимаю что в работе в РВ байты приходят со скоростью превосходящий уровень доступный глазу чел. Но есть соблазн или на этом эмуляторе или на какой-то другой оболочке построить имитационную модель работы процессора, обрабатывающего входящий поток байтов по некоему алгоритму, и, создающему выходящий поток. Скорее всего эта оболочка для этой цели не подходит.
Вспоминаю что есть среда СodeWarrior для процессоров ColdFire , контроллер AFDX- но это все платно и лицензионно.
Насколько я помню библиотеки для работы с портами есть под C и под Delphi
Так вот не посоветуете ли мне какую нибудь доступную оболочку для этой цели.
Чтоб мог либо сам задать входной поток байт либо подключить источник . Регулировать скорость подачи на порт, и смотреть их обработку. Иметь такое наверно бы было мечтой системщиков.
Например, можно было бы моделировать работу ОЗУ двойного или еше какого доступа и кучу других задач. Когда-то была Смелянским (RedLab) создана система Диана для имитации работы ЛС. Т.е на ней отслеживались вопросы производительности сети, а каждый узел-комп мог посылать и принимать сигналы
« Последнее редактирование: 04-02-2011 16:29 от eugrita » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 04-02-2011 17:12 » 

Цитата: eugrita
И хотел бы подключить этот эмулятор к настоящим портам компа последовательным или параллельным. чтобы воспользовавшись этим интерфейсом просматривать входящие байты.
Если речь идёт о COM (последовательных) и LPT (параллельных) портах машины, то это совсем не то же самое, что порты ввода/вывода, с которыми работает процессор посредством IN/OUT инструкций.

Хотя для COM и LPT портов есть соответствующие множества портов ввода/вывода, чтобы CPU взаимодействовал с их контроллерами, а ещё есть линии аппаратных прерываний.

Для просмотра байтов, приходящих, например, в COM-порт, достаточно использовать соответствующие средства BIOS.

Наверно, более перспективно было бы поработать с клавиатурой, написав ассемблерную программу для DOS: у клавиатуры тоже есть аппаратное прерывание (если не ошибаюсь, 08h) и порты ввода/вывода (если не ошибаюсь 60h и 61h), из которых читаются скан-коды нажатых клавиш. Однако перегружать обработчик аппаратного прерывания нужно аккуратно - там есть некоторые правила.

Классическая задача - написать собственный руссификатор клавиатуры для DOS Улыбаюсь (Хотя её можно решать без использования портов клавиатуры, обрабатывая буфер ввода операционной системы.)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines