我遇到以下问题:
“将余数寄存器左移,将最右边的位设置为 0”
我的尝试: lui $s0, 1 # 将余数寄存器左移 1 位
还是应该是 1*4 = 4 而不是 1 的偏移量?
你有指令集参考吗?lui
是加载上立即数,它不移动寄存器,它移动立即数,并移动 16 位。所以lui $s0, 1
只需加载0x00010000
到$s0
.
要左移,可以使用sll
指令,例如sll $s0, $s0, 1
。数据
prompt_devident: .asciiz "\n 输入你的 Devident :\n "
prompt_devider: .asciiz "输入你的 Devider :\n "
print_quotient: .asciiz "你的商是:"
print_reminder: .asciiz "\n 你的提醒是:"
.text
.globl 主要
主要:
l4: la $a0, prompt_devident
li $v0,4
系统调用
li $v0,5
syscall
move $t0,$v0
la $a0, prompt_devider
li $v0,4
syscall
li $v0,5
syscall
move $t1, $v0
ori $t2, $zero,0
ori $t3, $zero,0
ori $t4, $zero,0
ori $t5, $zero,32
循环: sll $t2,$t2,1
bgez $t0,l1
ori $t2,$t2,1
l1: sll $t0,$t0,1
subu $t3,$t2,$t1
bgez $t3,l2
l3: addi $t4,$t4,1
beq $t4,$t5,next
j 循环
l2: move $t2,$t3
ori $t0,1
j l3
next: la $a0, print_quotient
li $v0,4
syscall
move $a0,$t0
li $v0,1
syscall
la $a0, print_reminder
li $v0,4
syscall
move $a0,$t2
li $v0,1
syscall
j l4
li $v0, 10
syscall