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
|
# Error function
#
# Print error messages and exit program.
.include "linux.s"
.equ ST_ERROR_CODE, 16
.equ ST_ERROR_MSG, 24
.globl error_exit
.type error_exit, @function
error_exit:
pushq %rbp
movq %rsp, %rbp
# Write error Code
movq ST_ERROR_CODE(%rbp), %rcx
pushq %rcx
call count_chars
popq %rcx
movq %rax, %rdx
movq %rcx, %rsi
movq $STDERR, %rdi
movq $SYS_WRITE, %rax
syscall
# Write error message
movq ST_ERROR_MSG(%rbp), %rcx
pushq %rcx
call count_chars
popq %rcx
movq %rax, %rdx # How many bytes to write
movq %rcx, %rsi # Buffer to write from
movq $STDERR, %rdi # FD to write to
movq $SYS_WRITE, %rax # self explanatory
syscall
pushq $STDERR
call write_newline
# Exit program
movq $SYS_EXIT, %rax
movq $1, %rdi
syscall
|