Files
nand2tetris/MARS/Simulationen/Simulation 05 Lade-Speicher-Operationen lbu, lb, sb/Simulation 05.asm
2025-03-26 09:10:55 +01:00

55 lines
1.6 KiB
NASM

##################################################################################
##### Beispielcode zur Verwendung von Lade- und Speicherbefehlen lb, lbu, sb #####
##################################################################################
.data
src: .word 0xf78c4203
lbu: .asciiz " Nach dem Ladebefehl lbu $s1, 2($s0) steht in Register $s1 nun das mit 0en erweiterte Byte 2 des Eingabewortes: \n"
lb: .asciiz "\n Nach dem Ladebefehl lb $s2, 2(s0) steht in Register $s2 nun das vorzeichenerweiterte Byte 2 des Eingabewortes: \n"
sb: .asciiz "\n Mit dem Speicherbefehl sb $s3, 3(s0) wird das Byte 3 in $s0 durch das least significant Byte\n aus $s3 ersetzt, die anderen Bytes aus $s3 wurden ignoriert: \n"
.text
# Laden der Adresse von src in s0
la $s0, src
# Laden eines Beispielwerts in s1-s3, damit erkennbar wird, was mit den Werten in den Zielregistern passiert
li $s1, 0x6c00216f
li $s2, 0x6c00216f
li $s3, 0x6c00216f
# Laden des Bytes 2, also 0x8c mit dem lbu Befehl in Register $s1
lbu $s1, 2($s0)
# In s1 steht nun das mit 0 erweiterte Byte, Ausgabe:
la $a0, lbu
li $v0, 4
syscall
move $a0, $s1
li $v0, 34
syscall
# Laden des Bytes 2, also 0x8c mit dem lb Befehl in Register $s2
lb $s2, 2($s0)
# In s2 steht nun das vorzeichenerweiterte Byte, Ausgabe:
la $a0, lb
li $v0, 4
syscall
move $a0, $s2
li $v0, 34
syscall
# Bedeutet: Nimm das least significant Byte aus $s3 und ersetze damit das Byte 3 in $s0
sb $s3, 3($s0)
# In s0 wurde durch den sb Befehl das Byte 3 durch das Byte 0 aus $s3 ersetzt
la $a0, sb
li $v0, 4
syscall
lw $a0, ($s0)
li $v0, 34
syscall
# exit
li, $v0, 10
syscall