Im having a bit of trouble understanding the more complex system calls in assembly. I wrote a exec system call and it worked great
.bss
.text
.globl _start
You don't put strings in a register. You should pass a pointer (the address) to a null (0) terminated string (C style) in the register for this function. Some system calls (like write) take a pointer (not necessarily terminated by '\0') and length in two registers.
# somewhere in the data section:
myString:
.asciz "/bin/bash"
and pass $myString using the register.