Arrays, Load Word, Store Word

Kategori: MIPS , 16 Ekim 2019 , JanFranco


Bir registera bellekten değer atayacaksak load word, bir registerdaki değeri belleğe yazacaksak store word instructionlarını kullanırız:


- lw

Syntax: lw $t, offset($s)
Encoding: 1000 11ss ssst tttt iiii iiii iiii iiii
lw instruction 3 parametre alır. İlk parametre tutulacak register, ikinci parametre offset, üçüncü parametre adress değeridir.


- sw

Syntax: sw $t, offset($s)
Encoding: 1010 11ss ssst tttt iiii iiii iiii iiii
sw instruction 3 parametre alır. İlk parametre kaydedilecek register, ikinci parametre offset, üçüncü parametre adress değeridir.

Bir array tanımlayalım ve lw ile sw instructionlarının kullanımını görelim. Aynı zamanda array tanımlamasını da görmüş oluruz:


	.data

myArr: .space 12
newLine: .asciiz "\n"

	.text

li $t0, 0
li $s0 , 10
li $s1, 20
li $s2, 30

sw $s0, myArr($t0)
addi $t0, $t0, 4

sw $s1, myArr($t0)
addi $t0, $t0, 4

sw $s2, myArr($t0)

li $t0, 0

lw $t1, myArr($t0)
addi $t0, $t0, 4

lw $t2, myArr($t0)
addi $t0, $t0, 4

lw $t3, myArr($t0)
addi $t0, $t0, 4

li $v0, 1
move $a0, $t1
syscall

li $v0, 4
la $a0, newLine
syscall

li $v0, 1
move $a0, $t2
syscall

li $v0, 4
la $a0, newLine
syscall

li $v0, 1
move $a0, $t3
syscall
Burada 4 sayısı özel bir sayıdır. Print işlemleri için kullandığımız sayıdan bahsetmemekle birlikte, bellekte adresler 4'er 4'er artmakta. Bu nedenle bir sonraki elemana erişmek için offset + 4 işlemi yapıyoruz. Aynı şekilde .space ile 12 byte'lık yer ayırtmamızın sebebi 12 / 4 = 3 elemanlık yer ayırtmaktı.


Sonraki Yazı: Floating Point Arithmetic
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın