I'm currently working my way through learning writing my own programming language. Currently my language supports adding two numbers or subtracting and I want to now convert my AST into assembly. I'm running on a Linux machine in the x86_64 architecture and I've gone through the hello world tutorial with code that looks like:
section .data
string1 db "Hello World!",10,0
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, string1
mov rdx, 13
syscall
mov rax, 60
mov rdi, 0
syscall
and I get what is happening here. Where I'm a little lost is in code like so:
section .text
global _start
_start:
mov rax, 1
mov rbx, 2
add rax, rbx
mov rsi, rbx
mov rax, 1
mov rdi, 1
mov rdx, 1
syscall
mov rax, 60
mov rdi, 0
syscall
As I understand what I've been reading, the above code should put the value 1 into the register rax, 2 into the register rbx, sum those registers and store it in rbx. Then, the value of rbx should be moved into rsi which should be the buffer argument for the syscall for write. Instead, nothing is printed to my console. If I put "3" in the .data section as a variable I can grab that and print it. So is it just the case that I cannot print an integer and it has to be stored in some data variable?