about summary refs log tree commit diff stats
path: root/example/samples/human.S
blob: 750aa5b74e657a0f2c967395c7e38b4acfe4ed54 (plain) (blame)
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
	;;  Walk a human link list and print its information
main:
	TEST       RDI, RDI
	JZ         end

	PUSH       RBX
	MOV        RBX, RDI
loop:
	LEA        RSI, QWORD PTR [RBX+0x10]
	LEA        RDI, QWORD PTR [name-_+RIP]
	XOR        EAX, EAX
	CALL       printf

	MOVZX      ESI, WORD PTR [RBX+0x8]
	LEA        RDI, QWORD PTR [age-_+RIP]
	XOR        EAX, EAX
	CALL       printf

	MOV        ESI, DWORD PTR [RBX+0xC]
	XOR        EAX, EAX
	LEA        RDI, QWORD PTR [height-_+RIP]
	CALL       printf

	MOV        RBX, QWORD PTR [RBX]
	TEST       RBX, RBX
	JNZ        loop

	POP        RBX
end:
	RET

printf:
	;; Dummy printf
	RET

age:
.string "Age: %d\n"
height:
.string "Height: %d\n"
name:
.string "Name: %s\n"