1
안녕하세요, 나는 변이 부분에 대해 정말로 혼란스러워합니다. N에 의한 왼쪽 쉬프트가 2^N의 결과를 산출한다는 것을 이해 합니다만, 어떻게 승수를 왼쪽으로 이동하고 피승수를 오른쪽으로 이동시키면서 2의 곱을 얻는가 ?? 어떻게 승수와 피승수를 이동하면 두 결과가 생깁니 까?
다음은 콘솔에서 입력 된 두 숫자의 제품을 계산하는 코드이다 :.data
string1: .asciiz "Enter multiplier : "
string2: .asciiz "\nEnter multiplicand : "
.text
li $s0, -1
la $a0, string1
li $v0, 4
syscall
li $v0, 5
syscall
move $a0, $v0
bltzal $a0, Negate
move $t0, $v0
la $a0, string2
li $v0, 4
syscall
li $v0, 5
syscall
move $a0, $v0
bltzal $a0, Negate
move $t1, $v0
li $t2, 1
li $t3, 0
loop:
andi $t5, $t1, 1
bnez $t5, addPartial
shift:
sll $t0,$t0,1
srl $t1,$t1,1
bgtz $t1, loop
done:
beqz $s0, negative_answer
bgtz $s0, positive_answer
bltz $s0, positive_values
Negate:
addiu $s0, $s0, 1
negu $v0, $a0
jr $ra
addPartial:
addu $t3, $t3, $t0
j shift
positive_answer:
move $a0, $t3
li $v0, 1
syscall
li $v0, 10
syscall
negative_answer:
negu $t3, $t3
move $a0, $t3
li $v0, 1
syscall
li $v0, 10
syscall
positive_values:
move $a0, $t3
li $v0, 1
syscall
li $v0, 10
syscall