-
Notifications
You must be signed in to change notification settings - Fork 0
/
port.asm
66 lines (58 loc) · 2.21 KB
/
port.asm
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
;#########################################################################
;@file port.asm
;@brief Libreria para el manejo de puertos, escritura y lectura de los mismos
; Intel x86 compatible en 32 bit.
;@author Agustin Alba Chicar
;@date Octubre, 2015
;#########################################################################
;********************************************************************************
; Simbolos externos y globales
;********************************************************************************
GLOBAL portRead
GLOBAL portWrite
;********************************************************************************
; Defines
;********************************************************************************
%define port (ebp+8)
%define value (ebp+12)
;********************************************************************************
; Datos no inicializados
;********************************************************************************
;********************************************************************************
; Datos inicializados
;********************************************************************************
USE32
SECTION .library
;********************************************************************************
;@fn portRead(uint32_t port)
;@brief Lee el valor de un puerto y lo deja en al
;@param port El valor del puerto a leer
;@return El valor del puerto (uint8_t) en al
;********************************************************************************
portRead:
push ebp
mov ebp, esp ;Cargo el valor de esp por si me interrupen
push edx
mov edx, [port]
in al, dx
pop edx
pop ebp
ret
;********************************************************************************
;@fn portWrite(uint32_t port, uint32_t value)
;@brief Escribe el valor value en port
;@param port El valor del puerto a escribir
;@param value El valor a escribir en el puerto
;********************************************************************************
portWrite:
push ebp
mov ebp, esp ;Cargo el valor de esp por si me interrupen
push eax
push edx
mov edx, [port]
mov al, [value]
out dx, al
pop edx
pop eax
pop ebp
ret