diff options
Diffstat (limited to 'PGU/CHAP9/error.s')
| -rw-r--r-- | PGU/CHAP9/error.s | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/PGU/CHAP9/error.s b/PGU/CHAP9/error.s new file mode 100644 index 0000000..6e933ed --- /dev/null +++ b/PGU/CHAP9/error.s @@ -0,0 +1,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 |
