Вот мой файл:
Код: Выделить всё
section .data ; we're not allowed to edit anything
; in section .data for this assignment
prompt: db "What is your name? "
prompt_len: equ $-prompt
buffer: times 255 db '!'
resp1: db "Hello, "
resp1_len: equ $-resp1
resp2: db ", nice to meet you!", 10
resp2_len: equ $-resp2
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, prompt ; "What is your name? "
mov rdx, prompt_len
syscall
mov rax, 0 ; prof. said output is stored here
mov rdi, 1
mov rsi, buffer ; user inputs their name
mov rdx, 225
syscall
mov r8, rax ; I tried storing rax into r8
syscall
mov rax, 1
mov rdi, 1
mov rsi, resp1 ; "Hello, "
mov rdx, resp1_len
syscall
mov rax, 1
mov rdi, 1
mov rsi, buffer ; name is printed out there
mov rdx, r8 ; I try to use r8 to print out the correct length
syscall
mov rax, 1
mov rdi, 1
mov rsi, resp2 ; ", nice to meet you!"
mov rdx, resp2_len
syscall
mov rax, 60
mov rdi, 0
syscall
< /code>
Программа должна распечатать: < /p>
What is your name? INPUTNAME Hello, INPUTNAME, nice to meet you!, но вместо этого он печатает без имени:
Код: Выделить всё
What is your name? INPUTNAME Hello, , nice to meet you!Я новичок в сборке x86, поэтому я не знаю, что на самом деле хранит Rax, номер, адрес, данные мусора?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -later-use