Даны конкретные инструкции:
Распечатать ответ из Prgm1 в base-32. Не используйте div / mul / rem или аналогичные. Придерживайтесь использования только t-регистров, когда можете.
Примечания:
Под основанием 32 я подразумеваю как шестнадцатеричное (основание 16), но с группами из 5 бит вместо 4, поэтому мы используем буквы до V. Начните с размышлений о том, как вы это сделаетеsyscall 1, 35 или 34.
Мне удалось выполнить первую часть этого, но я понятия не имею, как получить результат в базе 32 или в группах из 5. Любая помощь будет принята с благодарностью.
.data
prompt: .asciiz "Enter a number: "
prompt2: .asciiz "Enter another number: "
.text
# Prompt the user to enter number.
li $v0, 4
la $a0, prompt # Print prompt
syscall
# Get the user's number
li $v0, 5
syscall
# Store the result in $t2
move $s0, $v0 # Move users number from $v0 to $t2
# Prompt the user to enter number.
li $v0, 4
la $a0, prompt2 # Print prompt
syscall
# Get the user's number
li $v0, 5
syscall
# Store the result in $t3
move $s1, $v0 # Move users number from $v0 to $t3
# Store the result in $s0
li $s2, 0
li $s3, 1 # Mask for extracting bit
li $t1, 0 # Counter
Loop:
# If $t1 equals 31, branch the number of instructions by the offset
beq $t1, 31, exit
and $t0, $s1, $s3 # ands $s1 and $s3 and stores in $t0
sll $s3, $s3, 1 # Multiplies value in $s3 by 2^1 and stores in $s3
# If $t0 equals 0, branch the number of instructions by the offset
beq $t0, 0, Loop2
add $s2, $s2, $s0 # Stores the sum of $s0 and $s2 in $s2
Loop2:
# Multiplies value in $s0 by 2^1 and stores in $s0
sll $s0, $s0, 1
addi $t1, $t1, 1 #adds 1 to $t1 and stores in $t1
j Loop
exit:
# Print or show the number
li $v0, 1
add $a0, $s2, $zero # Move the number to the argument
syscall
#Exit
li $v0, 10
syscall