bits 32

global outb
global inb
global outw
global inw

section .text
outb:
  ;word [esp + 4] = port
  ;byte [esp + 8] = value
  mov dx, word [esp + 4]
  mov al, byte [esp + 8]
  out dx, al
  ret

inb:
  ;word [esp + 4] = port
  ;al out = value
  mov dx, word [esp + 4]
  in al, dx
  ret

outw:
  ;word [esp + 4] = port
  ;word [esp + 8] = value
  mov dx, word [esp + 4]
  mov ax, word [esp + 8]
  out dx, ax
  ret

inw:
  ;word [esp + 4] = port
  ;ax out = value
  mov dx, word [esp + 4]
  in ax, dx
  ret