Уважаемый neoarey, не стоит обижаться.
Давайте рассуждать вместе. Насколько я понимаю, предложенная Вами схема - это в своём роде техническое задание, и размышлять по поводу его корректности или же ошибочности не стоит. Я вижу как миниму три возможные причины неудачи Вашего эксперимента:
1. Операции ввода-вывода относятся к привилегированным. Поэтому, было бы ошибкой управлять LPT портом, к примеру, из виртуальной DOS машины NTVDM в Windows XP.
2. Программно-схемотехнический трюк с вводом данных через [LPTBase] порт в стандартном режиме (т.е. в Вашем случае, через 378h) был описан в литературе ещё в те стародавние времена, когда интерфейс строился наполовину из дискретной логики. На современных SuperIO чипсетах этот трюк с перегрузкой выходных формирователей не пройдёт в принципе.
3. Если эксперимент Вы всё же проводите на исключительно старом "железе", тогда может не хватать "подтягивающих" резисторов на +5 В. К примеру, типовая схема разводки LPT на материнской плате SuperIO чипом W83627 выглядит так:

На старых платах и мультикартах этой обвязки может и не быть.
Впрочем, есть и альтернативный вариант. Ведь можно попробовать переключить порт в двунаправленный байтовый режим ECP и использовать его просто как порт ввода. Надеясь на то, что резисторы на +5 В всё таки установлены, можно повторить Ваш эксперимент без каких-либо схемных изменений.
Перевести порт в указанный режим можно так:
Код: Выделить всё
mov dx,LPTBase
add dx,402h {ECP ECR adress}
in al,dx {load current value}
and al,00011111b {clear mode bits}
or al,00100000b
out dx,al {set bidirectional byte mode}
mov dx,LPTBase
add dx,2
mov al,00100000b {set read data mode and no interrupts}
out dx,al