55 lines
1.6 KiB
NASM
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
|