Итак, проблема в том, что я хочу взять два массива и напечатать числа, которые появляются в них обоих, в основание 10 и основание 4 с 16 цифрами и знак в каскадный порядок .
проблема в том, что я не знаю, как преобразовать его в основание 4 и напечатать из 16 цифр и знака (-
, если отрицательный).
это то, что мне удалось сделать сейчас:
find_eq:
fori:
ble $t1,0,print4 #branch to print 4 when done printing in decimal
addi $t1,$t1,-1 #i--
add $a1,$a1,-4 #next number in array1
addi $t2,$t2,10 #j=10 again
add $a2,$a2,40 #start of the array 2
forj:
addi $sp,$sp,-64 #add 16 words places in the stack
ble $t2,0,fori #if t2 ==0 branch to fori
lw $t3,($a1) #t3 = array1[i]
lw $t4,($a2) #t4 = array2[j]
addi $t2,$t2,-1 #j--
add $a2,$a2,-4 #next number in array2
bne $t3,$t4,forj #if array1[i] != array2[j] branch to forj
beq $a3,4,base4 #if the wanted base if 4 (wanted base kept in $a3) , branch to base4
li $v0,1 #print number
add $a0,$t3,$zero
syscall
li $v0,4 #print comma
la $a0,comma
syscall
beq $t2,0,fori #if j ==0 return to fori
j forj #return to forj
base4:
ble $sp,0,printem #if the stack is on top , print number
abso: bltz $t3,makeAbs #if the number is negative branch to makeAbs
div $t3,$t3,4 #divide number by 4
mfhi $t8 #store the reminder of the division in t8
sw $t8,($sp) #store the reminder in the stack
add $sp,$sp,4 #add to the stack 4 (in order to go to the next cell in the stack)
j base4 #jump back to base4
printem:
ble $t5,0,forj #if t5 (started at 16) is 0 , go to forj
lw $t3,($sp) #load to t3 the current word in the stack
add $sp,$sp,-4 #go to next cell in stack
addi $t5,$t5,-1 #t5 --
li $v0,1 #print number
add $a0,$t3,$zero
syscall
j printem #back to print the next number
makeAbs:
abs $t3,$t3 #make the number positive
li $v0,4 #printing minus sign
la $a0,minus
syscall
j abso #back to abso label
так, если заданные массивы:
1,2,3,4,5,6,7,8,9,10
а также
2,4,6,8,10,12,14,16,18,20
вывод должен быть:
10,8,6,4,2,
в десятичном виде
а также
0000000000000022,0000000000000020,0000000000000012,0000000000000010,0000000000000002
в базе 4
в случае, если число отрицательное, оно то же самое, но перед 16 цифрами стоит -
.
Надеюсь, кто-нибудь может мне здесь помочь, я действительно не знаю, как решить эту проблему: (
Спасибо!