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.