section .text ; void outb(os_u16 port, os_u8 data); global outb outb: MOV EDX, [ESP + 4] ; load parameter 'port' MOV EAX, [ESP + 8] ; load parameter 'data' OUT DX, AL ; output byte in AL to port in DX RET ; return ; void outw(os_u16 port, os_u16 data) global outw outw: MOV EDX, [ESP + 4] ; load parameter 'port' MOV EAX, [ESP + 8] ; load parameter 'data' OUT DX, AX ; output word in AX to port in DX RET ; return ; void outd(os_u16 port, os_u32 data) global outd outd: MOV EDX, [ESP + 4] ; load parameter 'port' MOV EAX, [ESP + 8] ; load parameter 'data' OUT DX, EAX ; output double word in EAX to port in DX RET ; return ; os_u8 inb(os_u16 port) global inb inb: MOV EDX, [ESP + 4] ; load parameter 'port' XOR EAX, EAX ; reset EAX IN AL, DX ; read byte from port 'DX' RET ; return ; os_u16 inw(os_u16 port) global inw inw: MOV EDX, [ESP + 4] ; load parameter 'port' XOR EAX, EAX ; reset EAX IN AX, DX ; read word from port 'DX' RET ; return ; os_u32 ind(os_u16 port) global ind ind: MOV EDX, [ESP + 4] ; load parameter 'port' XOR EAX, EAX ; reset EAX IN EAX, DX ; read double word from port 'DX' RET ; return