.data # Data segmentet kommer automatiskt att starta från adress 0x10000000
.byte 10, -1, -5, 7, 99, 0
.word 0x1234abcd
.text # Text segmentet börjar från 0x00400000
.globl main
main:
lui $a0, 0x1000 # Övre 16 bitarna av adressen 0x10000000 hamnar i register $a0.
ori $a0, $a0, 0x0000 # Denna instruktion är helt onödig i detta fall eftersom lägre halvan
# av 0x10000000 ju är 0x0000 och togs med bara för att illustrera lagringen av
# de 16 lägsta bitarna av adressen 0x10000000.
# Noteras bör dock att lui -instruktionen automatiskt tömmer lägre halvan
# av registret.
lbu $t0, 0($a0) # Hämtar första byten ur räckan, dvs. värdet 10, till register $t0.
lbu $t1, 1($a0) # Hämtar andra byten till $t1.
addi $a0, $a0, 2 # Nu ökar vi adressen i register $a0 med 2 byte framåt
lbu $t2, 0($a0) # så att lbu nu kommer att läsa tredje byten ur vår räcka, dvs. värdet -5.
addi $a0, $a0, 4 # Vi ökar igen pekaren med 4 så att vi hamnar på adressen 0x10000006, dvs. dit vårt ord är lagrat.
lw $t3, 0($a0) # Vi kunde också ha skippat instruktionen på raden ovanför och på denna rad istället
# använt lw $t3, 4($a0) för att nå ordet.
.
.
.
|
.data
.byte 10, -1, -5, 7, 99, 0 # En godtycklig byte-array för att göra adressen för nedanstående
# ord jobbigare att leta fram.
ordet: .word 0x1234abcd # Vi har nu döpt adressen för vårt ord till "ordet".
.text
.globl main
main:
# Vi börjar med att hämta adressen för vårt ord med följande två rader :
lui $a0, %hi_addr(ordet) # Lagrar övre 16 bitarna ...
ori $a0, $a0, %lo_addr(ordet) # och nedre 16 bitarna av adressen till $a0.
# Sedan hämtar vi ordet från minnet till register $t0
lw $t0, 0($a0)
.
.
.
|
.data
.byte 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0 # Ett väldigt jobbigt sätt att deklarera en sträng.
.asciiz "Hello World" # Samma textsträng mera utförligt.
.ascii "Hello World" # Ett tredje sätt, bara att nu kommer strängen att
.byte 0 # inte termineras med en nolla, utan vi måste explicit
# använda .byte 0 för detta.
.
.
.
|