This repository has been archived by the owner on Dec 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
naskfunc.s
94 lines (80 loc) · 1.4 KB
/
naskfunc.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.globl io_hlt, io_cli, io_sti, io_stihlt
.globl io_in8, io_in16, io_in32
.globl io_out8, io_out16, io_out32
.globl io_load_eflags, io_store_eflags
.globl load_gdtr, load_idtr
# void io_hlt(void)
io_hlt:
hlt
ret
# void io_cli(void)
io_cli:
cli
ret
# void io_sti(void)
io_sti:
sti
ret
# void io_stihlt(void)
io_stihlt:
sti
hlt
ret
# int io_in8(int port)
io_in8:
mov 4(%esp), %edx # port
mov $0, %eax
in %dx, %al
ret
# int io_in16(int port)
io_in16:
mov 4(%esp), %edx # port
mov $0, %eax
in %dx, %ax
ret
# int io_in32(int port)
io_in32:
mov 4(%esp), %edx # port
in %dx, %eax
ret
# int io_out8(int port, int data)
io_out8:
mov 4(%esp), %edx # port
mov 8(%esp), %eax # data
out %al, %dx
ret
# int io_out16(int port, int data)
io_out16:
mov 4(%esp), %edx # port
mov 8(%esp), %eax # data
out %ax, %dx
ret
# int io_out32(int port, int data)
io_out32:
mov 4(%esp), %edx # port
mov 8(%esp), %eax # data
out %eax, %dx
ret
# int io_load_eflags(void)
io_load_eflags:
pushfl # push eflags
pop %eax
ret
# void io_store_eflags(int eflags)
io_store_eflags:
mov 4(%esp), %eax
push %eax
popfl # pop eflags
ret
# void load_gdtr(int limit, int addr)
load_gdtr:
mov 4(%esp), %ax
mov %ax, 6(%esp)
lgdt 6(%esp)
ret
# void load_idtr(int limit, int addr)
load_idtr:
mov 4(%esp), %ax
mov %ax, 6(%esp)
lidt 6(%esp)
ret