section .text
global inb
global outb

; Read a byte from the specified port
; Input: DX = port number
; Output: AL = data read from the port
inb:
    PUSH DX    ; Preserve DX
    IN AL, DX  ; Read from port
    POP DX     ; Restore DX
    RET

; Write a byte to the specified port
; Input: DX = port number, AL = data to write
outb:
    PUSH DX    ; Preserve DX
    PUSH AX    ; Preserve AX
    MOV DX, [ESP + 4] ; Get port number from stack
    MOV AL, [ESP + 6] ; Get data from stack
    OUT DX, AL  ; Write to port
    POP AX     ; Restore AX
    POP DX     ; Restore DX
    RET