私は次のことに問題があります:
「Remainder レジスタを左にシフトし、右端のビットを 0 に設定」
私の試み: lui $s0, 1 # 残りのレジスタを 1 ビット左にシフト
または、オフセットの 1 ではなく 1*4 = 4 にする必要がありますか?
命令セットリファレンスはありますか?lui
Load Upper Immediateであり、レジスタをシフトせず、イミディエートを16ビットシフトします。したがってlui $s0, 1
、にロード0x00010000
するだけ$s0
です。
sll
左にシフトするには、次のような命令を使用できますsll $s0, $s0, 1
。データ
prompt_devident: .asciiz "\n デバイス ID を
入力
してください:\n
"
.text
.globl メイン
メイン:
l4: la $a0, prompt_devident
li $v0,4
syscall
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
サブ $t3,$t2,$t1
bgez $t3,l2
l3: addi $t4,$t4,1
beq $t4,$t5,next
j ループ
l2: $t2,$t3
ori $t0,1
j l3 を動かす
次: 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