MIPS求陣列交集
阿新 • • 發佈:2019-01-05
題目:
編寫一程式,實現將既包含在陣列A中又包含在陣列B中的無符號字數取出並存於記憶體中,其中陣列A包含20個數,陣列B包含30個數。如找不到相同的數則顯示“No same!”。
思路:
這個題目,用高階語言來做其實蠻簡單的,這裡,就不再用高階語言來展示了。思路也很簡單,就先輸入陣列A的20個數。然後,再迴圈輸入陣列B的30個數,每輸入一個數,將這個數和陣列A中的數逐個進行比較,若相同,則放進另一個數組S,並開始輸入下一個數,若比較完了20個數還沒有相同,則證明此數不在陣列A中。最後,當30個數都輸入完畢了,檢視陣列S中有沒有元素,若有,就列印,反之,輸出“No same!”。
流程圖:
程式碼:
#編寫一程式,實現將既包含在陣列A中又包含在陣列B中的無符號字數取出並存於記憶體中,
#其中陣列A包含20個數,陣列B包含30個數。如找不到相同的數則顯示“No same!”。
.data
array:
.align 2 #之前不知道,debug一個小時
.space 80 # 開闢陣列A空間
input_msg_A:
.asciiz "Input 20 numbers of Arrar_A:\n" # 輸入數字提示符
space_str:
.asciiz " " # 輸出空格資訊
input_msg_B:
.asciiz "Input 30 numbers of Array_B:\n"
sameNum:
.align 2 #兩位元組對齊
.space 80 #交集的空間
notFound:
.asciiz "No same!\n"
Found:
.asciiz "The last number sequence is:\n"
.text
.globl main
main:
la $t5, sameNum #將交集的地址放在t5中
la $t6, array # 將陣列地址放到 t6位置上
move $t7, $zero # 用於計數 控制輸入
addi $t8, $zero, 20
move $t3, $zero #用t3來統計交集中元素的個數
la $a0, input_msg_A #輸出提示資訊
li $v0, 4
syscall
move $t0, $t6
input_A:
li $v0, 5 # 呼叫了輸入命令 5 裝載到$v0上
syscall # 系統呼叫 輸入的數被放到了v0上
sw $v0, 0($t0)
addiu $t0, $t0, 4 #t0的值指向下一個陣列元素地址
addi $t7, $t7, 1 # 對計數的$t7進行加一操作
bne $t7, $t8, input_A # 如果不相等,就迴圈該程序
la $a0, input_msg_B #輸出提示資訊
li $v0, 4
syscall
move $t0, $zero #統計輸入的個數
addi $t9, $zero, 30
input_B:
beq $t0, $t9, output #判斷是否輸入完成
li $v0, 5
syscall
move $s4, $v0 #將輸入的數儲存在s4
addi $t0, $t0, 1 #計數+1
j Loop_1 #將輸入的數和陣列A裡的數作對比
Loop_1:
move $t7, $zero #開始計數
addi $t8, $zero, 20
move $t1, $t6 #獲取陣列A首地址
Loop_2:
lw $t2, 0($t1) #將陣列A的元素放入t2
beq $t2, $s4, AddNum #如果相同,加入sameNum陣列
addiu $t1, $t1, 4 #指標+1
addi $t7, $t7, 1 #計數+1
bne $t7, $t8, Loop_2 #還未遍歷玩,繼續遍歷
j input_B
AddNum:
sw $s4, 0($t5) #將輸入的數儲存進記憶體
addiu $t5, $t5, 4 #地址偏移一位
addiu $t3, $t3, 1 #陣列中元素數量+1
j input_B #輸入下一個數
NoSame: #交集為空時,輸出
la $a0, notFound
li $v0, 4
syscall
j Exit
output:
beq $t3, $zero, NoSame
la $a0, Found
li $v0, 4
syscall
move $t7, $zero # 用於計數 控制輸入
la $t0, sameNum
print_all:
lw $a0, 0($t0) # 所得到的地址的數 load到 a0上
li $v0, 1 #輸出
syscall
la $a0, space_str
li $v0, 4
syscall
addiu $t0, $t0, 4
addi $t7,$t7,1
bne $t7,$t3,print_all
Exit:
li $v0 10 # 退出
syscall
計組實驗開始了,實訓也開始了,好希望老師能手下留情,讓我們能夠平平安安地度過這一個月啊。還好這次MIPS的作業不難。。