我遇到以下问题:
“Shift Remainder register left 将最右边的位设置为0“
我的尝试: lui $ s0,1#Shift剩余寄存器左移1位
或者它应该是1 * 4 = 4而不是1来进行偏移?
答案 0 :(得分:3)
你有指令集参考吗? lui
是Load Upper Immediate,它不会移位寄存器,它会立即移位16位。因此lui $s0, 1
只会将0x00010000
加载到$s0
。
要向左移动,您可以使用sll
指令,例如sll $s0, $s0, 1
答案 1 :(得分:0)
.data
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,下一个
j循环
l2:移动$ t2,$ t3
ori $ t0,1
j l3
下一篇:la $ a0,print_quotient
li $ v0,4
系统调用
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