2015-05-10 3 views
1

Я начинаю изучать ассемблер, и в документации fasm есть две команды для ввода & output - in & out. Как я знаю, STDIN является порт # 0, а стандартный вывод - # 1, поэтому я стараюсь, чтобы запустить этот код:Вход/выход в fasm с использованием команд in, out

in eax,0 

но программа вылетает. Тот же результат после запуска

out 1,eax 

Я попытался найти что-то об этом, но не повезло.

Итак, каково правильное использование команд &, и есть ли более простой способ ввода/вывода?

ответ

0

Это аппаратные порты. Специальный аппаратный метод x86 для чтения и записи на периферийные устройства. in и out, формируют специальные сигналы к шинам CPU, которые могут понять периферийные устройства.

Для чтения и записи в STDIN и STDOUT вы должны использовать стандартные функции файлов в своей ОС, передавая STDIN, соответственно STDOUT в качестве дескриптора файла.

Для Linux это системные функции sys_read и sys_write. Вы можете прочитать обширную, ориентированную на сборку систему, ссылающуюся на ссылку here.

1

Вы смешиваете некоторые вещи.

Команды in и out используются для чтения из порта и для записи в порт соответственно. Эти порты не имеют ничего общего с STDIN или STDOUT. (На уровне DOS STDIN равен 1, а STDOUT равно 2.)

Порты размером по размеру по дизайну, но вы можете читать/записывать сразу несколько портов.
Когда вы писали in eax,0 процессор получил 4 байта исходя из портов 0, 1, 2 и 3.
Когда вы писали out 1,eax процессор положить 4 байта в порты 1, 2, 3 и 4.

Используемые здесь порты обслуживают первый контроллер DMA . Вы не должны вмешиваться в эти настройки!