-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhand.s
65 lines (61 loc) · 875 Bytes
/
hand.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
; Header
section .data
fmt: db "%u", 0xa, 0x0
section .bss
mem: resb 30
section .text
extern printf
global _start
print_num:
push rcx
lea rdi, fmt
xor rsi, rsi
mov byte sil, [mem+rcx]
call printf
pop rcx
ret
print_ascii:
push rcx
mov rax, 1
mov rdi, 1
lea rsi, [mem+rcx]
mov rdx, 1
syscall
pop rcx
ret
_start:
xor rcx, rcx
; Next cell
inc rcx
; Prev cell
dec rcx
; Increment cell
xor rdx, rdx
mov byte dl, [mem+rcx]
inc rdx
mov byte [mem+rcx], dl
; Decrement cell
xor rdx, rdx
mov byte dl, [mem+rcx]
dec rdx
mov byte [mem+rcx], dl
; Loop begin
loop_1:
xor rax, rax
xor rdx, rdx
mov byte dl, [mem+rcx]
cmp rdx, rax
je loop_1_end
; Loop end
loop_1_end:
; Show cell
push rcx
lea rdi, fmt
xor rsi, rsi
mov byte sil, [mem+rcx]
call printf
pop rcx
; Kernel exit
mov rax, 60
mov rdi, 0
syscall