MIPS汇编语言中的二进制除法算法...帮助一行?

时间:2012-11-26 19:29:43

标签: assembly binary mips division

我遇到以下问题:

“Shift Remainder register left 将最右边的位设置为0“

我的尝试: lui $ s0,1#Shift剩余寄存器左移1位

或者它应该是1 * 4 = 4而不是1来进行偏移?

2 个答案:

答案 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