forked from TDA283-compiler-construction/project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathruntime.s
64 lines (52 loc) · 1.22 KB
/
runtime.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
[BITS 64]
%ifidn __OUTPUT_FORMAT__, macho64
%define label(X) _ %+ X
%elifidn __OUTPUT_FORMAT__, elf64
%define label(X) X
%else
%error "Format needs to be macho64 or elf64."
%endif
%define call_(X) call label(X)
%define jmp_(X) jmp label(X)
extern label(printf)
extern label(puts)
extern label(scanf)
section .data
ifmt1 db "%d", 0xA, 0x0
ifmt2 db "%d", 0x0
ffmt1 db "%.1f", 0xA, 0x0
ffmt2 db "%lf", 0x0
section .text
global label(printString)
label(printString):
jmp_ (puts)
global label(printInt)
label(printInt):
mov rsi, rdi
lea rdi, [rel ifmt1]
jmp_ (printf)
global label(printDouble)
label(printDouble):
lea rdi, [rel ffmt1]
mov al, 1
jmp_ (printf)
global label(readInt)
label(readInt):
push rax
lea rdi, [rel ifmt2]
lea rsi, [rsp + 4]
xor eax, eax
call_ (scanf)
mov eax, [rsp + 4]
pop rcx
ret
global label(readDouble)
label(readDouble):
push rax
lea rdi, [rel ffmt2]
mov rsi, rsp
xor eax, eax
call_ (scanf)
movsd xmm0, [rsp]
pop rax
ret