Чтобы получить доступ к любому отдельному элементу array
, вы можете использовать его как:
la $t3, array # put address of array into $t3
Если массив является массив, как:
array: .byte 'H','E','L','L','O'
для доступа к я тыс Элемент:
lb $a0, i($t3) # this load the byte at address that is (i+$t3)
, потому что каждый элемент имеет 1 байт, поэтому для доступа к байту th обращайтесь по адресу i
, смещенному по адресу array
.
Вы также можете получить доступ к нему, как:
addi $t1,$t3,i
lb $a0,0($t1)
Если массив является слово массива, как:
array: .word 1,2,3,4,5,6,7,8,9
для доступа к я я элемента:
lw $a0, j($t3) #j=4*i, you will have to write j manually
потому что каждый элемент, если из 4 байтов и для доступа к элементу th, вам нужно будет переместить i*4
байт с начального адреса array
.
Существуют также некоторые другие способы доступа к нему:
li $t2, i # put the index in $t2
add $t2, $t2, $t2 # double the index
add $t2, $t2, $t2 # double the index again (now 4x)
add $t1, $t3, $t2 # get address of ith location
lw $a0, 0($t1)
example1:
.data
array: .byte 'H','E','L','L','O','_','W','O','R','L','D'
string: .asciiz "HELLO_WORLD"
size: .word 11
array1: .word 1,2,3,4,0,6,7,8,9
.text
.globl main
main:
li $v0, 11
la $a2,array
lb $a0,0($a2) #access 1st element of array or array[0]
syscall
lb $a0,1($a2) #access 2nd element of byte array or array[1]
syscall
lb $a0,2($a2) #access 3rd element of byte array or array[2]
syscall
lb $a0,10($a2) #access 11th element of byte array or array[10]
syscall
li $a0,10
syscall
syscall
li $v0,1
la $a3,array1
lw $a0,0($a3) #access 1st element of word array or array[0]
syscall
lw $a0,4($a3) #access 2nd element of word array or array[1]
syscall
lw $a0,8($a3) #access 3rd element of word array or array[2]
syscall
lw $a0,12($a3) #access 4th element of word array or array[3]
syscall
jr $ra
Пример: Печать байтовый массив:
li $v0, 11
la $a2,array
lw $t0,size
loop1: #print array
lb $a0, 0($a2) #load byte at address stored in $a2
syscall
add $t0,$t0,-1
add $a2,$a2,1 #go to the next byte, since it is a byte array it will go to the address of next element
#to use it for printing word array instead of adding 1 add 4
bgtz $t0, loop1
возможно дубликат [char array в MIPS] (http: // stack overflow.com/questions/10021039/char-array-in-mips) – mclark1129
Я видел сайт, и это помогло немного, но теперь я застрял в печати ячеек один за другим, я обновил вопрос, надеюсь, вы видите Это. – MuhammadNe
Благодарим за обновление вопроса, я обновил заголовок, чтобы больше соответствовать текущему вопросу. Это не дубликат вопроса, который я опубликовал, поэтому я откажусь от своего голоса. – mclark1129