Wie speichere und verwende ich Rax -Ausgabe in ein Register für die spätere Verwendung?
Posted: 16 Sep 2025, 22:08
Ich habe eine Zuordnung zum Speichern und Aufschreiben einer in Buffer gespeicherten von vom Benutzer eingesperrten Zeichenfolge erhalten. Mein Professor sagte, dass die Anzahl der gelesenen Bytes in Rax gespeichert ist, nachdem der Benutzer die Zeichenfolge in Puffer eingegeben hat. Also habe ich versucht, die Daten von Rax in r8 zu speichern, um sie später zum Ausdruck von Puffer zu verwenden. Wenn R8 verwendet wird, um die richtige Länge auszudrucken, passiert nichts.
, aber stattdessen druckt es ohne den Namen:
Ich bin neu in der Montage x86, daher weiß ich nicht, was Rax tatsächlich speichert, eine Nummer, eine Adresse, Mülldaten?
Code: Select all
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>
Das Programm soll ausdrucken: < /p>
What is your name? INPUTNAME Hello, INPUTNAME, nice to meet you!
, aber stattdessen druckt es ohne den Namen:
Code: Select all
What is your name? INPUTNAME Hello, , nice to meet you!
Ich bin neu in der Montage x86, daher weiß ich nicht, was Rax tatsächlich speichert, eine Nummer, eine Adresse, Mülldaten?