在数组的开头插入一个整数的方法是什么?
示例:
注册$ s0 = 4(数组中的元素数)
注册$ s1 = 0x10040000(数组开头的地址)
0x10040000 10
0x10040004 20
0x10040008 30
0x1000400C 40
我想在0x10040000处插入一个int,比如5,并将所有内容都移开:
0x10040000 5
0x10040004 10
0x10040008 20
0x1000400C 30
0x10004010 40
我能够做到的一种方法是在数组之前的地址处插入5,但我希望能够做的是在数组的开头插入5并将其他所有内容向下移动
答案 0 :(得分:0)
你需要一个循环和一个临时寄存器($s0
)来移动值:
.data
N: .word 3
VET: .word 2, 3, 4, 5
.text
li $t1, 0
lw $t0, N
sll $t0, $t0, 2
la $t2, $t0(VET)
srl $t0, $t0, 2
loop:
blt $t0, $t1 end_loop
lw $s0, ($t2) #load the number from i pos
sw $s0, 4($t2) #store the number in i+1 pos
addi $t2, $t2, -4 #i--
addi $t0, $t0, -1
j loop
end_loop:
li $s0, 1 #load value you want to store
sw $s0, VET #store value
lw $t0, N
add $t0, $t0, 1
sw $t0, N #update value of N
现在值1
位于向量的开头。
它没有经过优化,只是让你了解程序背后的逻辑。希望这会有所帮助。
答案 1 :(得分:-1)
您将需要一个内循环和一个外循环。
.data
Array: .word 3 5 1 90 21 11 2
.text
la $a0,Array
addi $a1,$zero,7
jal InsertSort
li $v0,10
syscall
InserSort:
addi $t0,$zero,1
outerloop:
beq $t0,$a1,finish
sll $t4,$t0,2
add $t4,$t4,$a0
lw $t4,0($t4)
addi $t1,$t0,-1
innerloop:
slt $t2,$t1,$zero
bne $t2,$zero,GoOuter
sll $t3,$t1,2
add $t3,$t3,$a0
lw t3,0($t3)
slt $t5,$t3,$t4
bne $t5,$zero,GoOuter
addi $t6,$t1,1
sll $t6,$t6,2
add $t6,$t6,$a0
sw $t3,0($t6)
addi $t1,$t1,-1
j innerloop
GoOuter:
addi $t8,$t1,1
sll $t8,$t8,2
add $t8,$t8,$a0
sw $t4,0($t8)
addi $t0,$t0,1
j outerloop
finish:
jr $ra