Эффективные способы реализации инструкций ввода / вывода на языках 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 байт? Ошибка? Или младший байт передается? Мне вообще нужно это множество процедур?

Каков предлагаемый способ решения этой проблемы?

0 ответов

Другие вопросы по тегам