-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibmem.asm
119 lines (101 loc) · 1.48 KB
/
libmem.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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
; --- BRAINF*CK CODE
add_symbol_to_memory: ; AL = symbol
push ebp
mov bp, [code_offset]
add ebp, code_start
mov byte [ebp], al
inc [code_offset]
pop ebp
ret
del_symbol_from_memory:
push ebp
dec [code_offset]
mov bp, [code_offset]
add ebp, code_start
mov byte [ebp], 0
pop ebp
ret
add_symbol: ; AL = symbol
cmp al, 0
jz .end
push cx
mov cx, [code_offset]
cmp cx, 00008FFFh
pop cx
je .end
push bx
call add_symbol_to_memory
mov bl, 0Fh
call write_char
pop bx
.end:
ret
del_symbol:
cmp [code_offset], 1
je .end
call del_symbol_from_memory
call clear_char
.end:
ret
get_symbol:
push ebp
mov bp, [code_offset]
add ebp, code_start
mov al, [ebp]
pop ebp
ret ; AL = symbol
; --- DATA CELLS
next_data_cell:
cmp [data_offset], 8FFFh
je .end
inc [data_offset]
.end:
ret
prev_data_cell:
cmp [data_offset], 0
je .end
dec [data_offset]
.end:
ret
get_data_cell:
push ebp
mov bp, [data_offset]
add ebp, data_start
mov al, [ebp]
pop ebp
ret ; AL = data
set_data_cell: ; AL = data
push ebp
mov bp, [data_offset]
add ebp, data_start
mov byte [ebp], al
pop ebp
ret
inc_data_cell:
push ebp
mov bp, [data_offset]
add ebp, data_start
inc byte [ebp]
pop ebp
ret
dec_data_cell:
push ebp
mov bp, [data_offset]
add ebp, data_start
dec byte [ebp]
pop ebp
ret
wipe_data_cells:
push ebp
push eax
mov ebp, data_start
movzx eax, [data_offset]
add eax, data_start
.start:
mov byte [ebp], 0
inc ebp
cmp ebp, eax
jl .start
pop eax
pop ebp
ret