Эффективные способы реализации инструкций ввода / вывода на языках C / более высокого уровня - PullRequest
1 голос
/ 21 марта 2020

Вот мои "ванильные" процедуры сборки:

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 байт? Ошибка? Или младший байт передается? Нужно ли мне даже эти многие процедуры?

Каким образом предлагается решить эту проблему?

...