Rückblick: MOV Challenge
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 22 von 45.
Aufgabe
Diese Herausforderung testet dein Verständnis von:
- Laden von Werten aus dem Speicher
- Speichern von Werten im Speicher
- Kopieren zwischen Registern
- Verwendung der korrekten Registergröße
Die Datenadressen sind bereits für dich erstellt worden. Du musst nur die MOV-Anweisungen schreiben.
Herausforderung
Erledige die folgenden Aufgaben der Reihe nach. Schreibe eine Zeile Assembly für jede Aufgabe.
Bereits bereitgestellte Daten:
num1— enthält den Wert 8 (1 Byte)num2— enthält den Wert 3 (1 Byte)result— leerer Speicherplatz (1 Byte)
Aufgaben:
- Lade den Wert von
num1inal - Lade den Wert von
num2inbl - Kopiere den Wert von
blincl - Speichere den Wert von
alinresult
Nach deinem Code:
alsollte 8 enthaltenblsollte 3 enthaltenclsollte 3 enthalten- Der Speicher bei
resultsollte 8 enthalten
Probier es selbst
section .data
msg_al db 'al = '
msg_al_len equ $ - msg_al
msg_bl db 'bl = '
msg_bl_len equ $ - msg_bl
msg_cl db 'cl = '
msg_cl_len equ $ - msg_cl
msg_result db 'result = '
msg_result_len equ $ - msg_result
newline db 0xa
section .bss
digit resb 1
section .text
global _start
_start:
; Der Code des Studenten wird zuerst ausgeführt
%include "solution.asm"
mov r12, rax
mov r13, rbx
mov r14, rcx
mov r15, 0
mov r15b, [result]
mov rax, 1
mov rdi, 1
mov rsi, msg_al
mov rdx, msg_al_len
syscall
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_bl
mov rdx, msg_bl_len
syscall
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_cl
mov rdx, msg_cl_len
syscall
mov rax, r14
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, msg_result
mov rdx, msg_result_len
syscall
mov rax, r15
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
mov rax, 60
mov rdi, 0
syscallAlle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur3Erster Befehl - MOV
Was ist MOV?MOV ImmediateMOV Register zu RegisterMOV Speicher zu RegisterMOV Register zu SpeicherLEA - Adresse ladenMOV mit verschiedenen GrößenÜbung: Register tauschenRückblick: MOV Challenge