Вот мои "ванильные" процедуры сборки:
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 процедурах. Я использую g cc, и я подозреваю, что для этого уже есть макросы!
Кроме того, что произойдет, если я напишу_порт_слово в порт размером 1 байт? Ошибка? Или младший байт передается? Нужно ли мне даже эти многие процедуры?
Каким образом предлагается решить эту проблему?