|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Дядьки, что то я затупливаю :/
Есть порт, допустим 0x300h.
Если я пишу
то в al получаю значение из порта 0x300h. Это понятно. А что, если я пишу:
Что я получаю? Ну, в AL положим то же что и раньше, а что в AH? Следующий байт из регистра 0x300h или байт из регистра 0x301h?
|
02 Apr 2014 10:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Теоретически - да.
Практически всё зависит от того, какой проц и как выполнено это всё аппаратно на конкретной материнской плате.
Т.е. если ты обращаешься через АХ к 8-битному порту, то железных гарантий нет, поскольку как реализовано
обращение к байту, слову и 4-битному слову определяет схемотехника чипов на материнке.
Вообще говоря, есть еще и:
не хочешь узнать что с ним будет?
А если подробнее - то посмотри документ: 8086_PROGRAMMED _IO.doc
PS. Если ты, правда, конкретно подчеркиваешь, что именно i8088, то он и IN AX, DX будет делать в 2 захода через 8-битную "глотку"...
_________________ iLavr
|
02 Apr 2014 11:16 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Имеется ввиду именно 8088. В том то и дело, что он не делает два захода, а походу в AH помещает значение из соседнего какого-то порта.
То есть
нефига не равно
|
02 Apr 2014 21:55 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 459 Location: Москва
|
Все правильно. Почему же "из соседнего какого-то" ? Не из соседнего какого-то, а просто читает в два приема один 16-битный порт.
А 8086 прочитает 16-битный порт в один прием, если он выровнен на 16 бит (синоним - четный адрес), и в два приема, если его адрес нечетный. В этом смысле 88-му выравнивание по барабану.
|
03 Apr 2014 03:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
То есть у тебя имеется конкретно плата на которой есть реальный i8088?
Ну еще раз говорю - всё зависит от того как из сигналов шины управления
на плате организовали обращение к УВВ.
Если это системная плата - там есть коннекторы ISA16 или только ISA8?
Может получиться, что при in ax,dx он просто считывает байт ерунды из ниоткуда.
Ну и потом:
в принципе неэквивалентно in ah,dx - само по себе вызывает сомнение, а эквивалентно, на мой взгляд, было бы так:
в этом случае, если dx = 300h
то в al - байт из 300h
а в ah - байт из 301h
_________________ iLavr
|
03 Apr 2014 03:19 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 459 Location: Москва
|
Точно. А в ax при этом 16-бит слово из 300h. Масло масляное, но может прояснит, а может и запутает.
|
03 Apr 2014 03:51 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
"Правда освобождает!" (с)
Справедливо, если это реализовано в железе на плате. А что за система там с 8088 - я так и не услышал.
Если самодельная, то обращение к УВВ и надо реализовать аппаратно самому.
Я с этим сталкивался, когда сам делал интерфейс IDE, он 16-битный.
_________________ iLavr
|
03 Apr 2014 04:20 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Я не понимаю, как 16-битное слово читается? шина - 8 битная. Соответственно на шине данных не может 16 битное слово быть никак за раз. При in al,порт - все понятно. При in al,dx; xchg al,ah; inc dx; in al,dx то же все понятно. Не понятно с in ax,dx.
Если быть ближе к практике, то я эксперементирую со своим контроллером sd-карт для ISA8. Все работает, когда я читаю из порта байтами (in al,dx), но это медленно (512 раз in al,dx; stosb). Было бы лучше читать из порта словами по 16 бит (256 раз in ax,dx; stosw), и пусть аппаратно все равно два цикла обращения по шине, зато циклов процессора поменьше. Я думал, что когда я делаю in ax,dx мне в AL придет первый байт из порта а в AH второй, но того не происходит. В AL приходит первый байт, но в AH постоянно 0XFF, как будто значение из несуществующего порта. Конкретно это все происходит на ПЭВМ Поиск, но различий при работе с портами между натуральной XT я не замечал (на примере скажем XT-IDE ROM BIOS - этот option ROM работает на Поиске без проблем). Кстати, на примере последнего (XT-IDE) биоса - сначала они тож читали из порта вроде байтами (младшие версии), а потом провели небольшой мод - поменяли местами A3 и A0 адресные линии, и теперь читают словами. И судя по схемотехнике, первый байт читается из 0x300h, а второй из 0x308h или как то так, но суть в том, что in ax,dx читает в al из одного порта, а в ah из другого (первый плюс 1 или плюс два). Для меня это не очевидно нефига.
|
03 Apr 2014 04:34 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 459 Location: Москва
|
А что мешает у своего контроллера сделать так, чтобы данные были доступны по двум адресам I/O, 1100000000b и 1100000001b ?
Для скорости можно и ПДП замутить, заодно и прикольнее гораздо: один раз программно дергаешь, а дальше оно само пересылается.
|
03 Apr 2014 05:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Разбирайся со схемотехникой "Поиска". Я не знаю как там сделано. И я уже 3-й раз говорю,
что всё работает так, как обеспечивается железом на плате.
8088 - выдает по шине управления сигналы, соответствующие для операций ввода-вывода,
а от того, как эти сигналы у тебя подцеплены к твоим УВВ - и зависит то, что и куда будет
записано или откуда прочитано.
Это понятно?
_________________ iLavr
|
03 Apr 2014 05:15 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Не мешает ничего (кроме усложнения схемы). Так то можно и вообще окно в 64 кб сделать в памяти, и сразу 64кб данных перебрасывать. Но речь не о том, а о том, что я думал раньше что при in ax,dx на адресе выставляется только dx два раза. А оно походу не так, а с инкрементом. С каким тоже не ясно пока - толи dx+1, толи dx+2.
|
03 Apr 2014 05:17 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Неправильно ты думал. И я уже объяснять устал. В железе - может быть просто
"кросс-регистр" со старшей половины - в младшую.
Тогда всё запросто читается по одному адресу DX, но двумя обращениями.
Во втором обращении "кросс-регистр" или "косой регистр" перенаправляет
на 8-битную шину старший разряд слова.
Но я еще раз - НЕ ЗНАЮ, КАК ЭТО СДЕЛАНО ТАМ У ТЕБЯ.
_________________ iLavr
|
03 Apr 2014 05:27 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 459 Location: Москва
|
С такой логикой при mov ax, [si] на адресе два раза si выставится
При mov ax, [si] с каким инкрементом, si+1 или si+2?
|
03 Apr 2014 06:14 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Ааааа, ну так то да...
|
03 Apr 2014 07:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А то! Но ващщет это всё написано вот в этом документе:
Подробно и с картинками, правда, на английском, но, на мой взгляд,
довольно простым языком...
_________________ iLavr
|
03 Apr 2014 08:11 |
|
|
Who is online |
Users browsing this forum: No registered users and 9 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|