1[bits 32] ; Set of functions that write certain numbers into system registers.
 
    2global port_byte_in ; Read byte into register.
 
    3global port_byte_out ; Write byte from register.
 
    4global port_word_in ; Read word into register.
 
    5global port_word_out ; Write word from register.
 
    7port_byte_in: ; Only parameter (word): [ESP + 8] - reading port number.
 
    8    push ebp ; Saving register base.
 
    9    mov ebp, esp ; Setting register base to register top.
 
   10                 ; Function won't be able to interfere with previous stack entries.
 
   12    push edx ; Saving EDX register.
 
   13    mov dx, [ebp+8] ; Moving register number into DX.
 
   14    in al, dx ; Reading byte from register DX to AL.
 
   15    pop edx ; Return value is contained in EAX register.
 
   17    mov esp, ebp ; Restoring stack.
 
   21port_byte_out: ; First parameter (word): [ESP + 8] - reading port number.
 
   22               ; Last parameter (byte): [ESP + 12] - new register value.
 
   27    push eax ; Saving EAX.
 
   28    mov dx, [ebp+8] ; Moving register number into DX.
 
   29    mov al, [ebp+12] ; Moving new register value into AL.
 
   30    out dx, al ; Writing byte to register DX from AL.
 
   38port_word_in: ; Last parameter (word): [ESP + 8] - reading port number.
 
   44    in ax, dx ; Reading word from register DX to AX.
 
   51port_word_out: ; First parameter (word): [ESP + 8] - reading port number.
 
   52               ; Last parameter (word): [ESP + 12] - new register value.
 
   59    mov ax, [ebp+12] ; Moving new register value into AX.
 
   60    out dx, ax ; Writing byte to register DX from AX.