Эффективные способы реализации инструкций ввода / вывода на языках C/ более высокого уровня
Вот мои "ванильные" процедуры сборки:
read_port:
mov edx, [esp + 4]
in al, dx
ret
write_port:
mov edx, [esp + 4]
mov eax, [esp + 4 + 4]
out dx, al
ret
read_port_word: ;Btw is there a better way to do this??? I use gcc. Something like inb/outb?
mov edx, [esp + 4]
in ax, dx
ret
write_port_word:
mov edx, [esp + 4]
mov eax, [esp + 4 + 4]
out dx, ax
ret
Я делаю их глобальными и вызываю их в своих подпрограммах C. Я использую gcc, и подозреваю, что для этого уже есть макросы!
Кроме того, что произойдет, если я напишу_port_word в порт размером 1 байт? Ошибка? Или младший байт передается? Мне вообще нужно это множество процедур?
Каков предлагаемый способ решения этой проблемы?