MushOS  0.1
A UNIX-like OS prototype, written from scratch
Loading...
Searching...
No Matches
ports_io.asm
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.
6
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.
11
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.
16
17 mov esp, ebp ; Restoring stack.
18 pop ebp
19 ret
20
21port_byte_out: ; First parameter (word): [ESP + 8] - reading port number.
22 ; Last parameter (byte): [ESP + 12] - new register value.
23 push ebp
24 mov ebp, esp
25
26 push edx
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.
31 pop eax
32 pop edx
33
34 mov esp, ebp
35 pop ebp
36 ret
37
38port_word_in: ; Last parameter (word): [ESP + 8] - reading port number.
39 push ebp
40 mov ebp, esp
41
42 push edx
43 mov dx, [ebp+8]
44 in ax, dx ; Reading word from register DX to AX.
45 pop edx
46
47 mov esp, ebp
48 pop ebp
49 ret
50
51port_word_out: ; First parameter (word): [ESP + 8] - reading port number.
52 ; Last parameter (word): [ESP + 12] - new register value.
53 push ebp
54 mov ebp, esp
55
56 push edx
57 push eax
58 mov dx, [ebp+8]
59 mov ax, [ebp+12] ; Moving new register value into AX.
60 out dx, ax ; Writing byte to register DX from AX.
61 pop eax
62 pop edx
63
64 mov esp, ebp
65 pop ebp
66 ret