У меня есть школьное задание, чтобы узнать сумму 1 + 2 + .. n на языке ассемблера MIPS (используя PC- Spim как виртуальная машина). Я написал простую программу, которая не имеет дело с большими числами (поэтому n * (n + 1) не должно превышать 2^32-1, чтобы она работала). Сегодня я слышал, что профессор, если вы не используете регистраторы привет и Ло, скажет вам использовать их и сделать программу для 64-битных чисел тоже!Как разделить большое число (64 бита) на два в PC-Spim (язык ассемблера MIPS)
Так это начальная программа:
.data
n:.word 10
s:.word 0
.text
main:
lw $t0,n
add $t1,$t0,1
mulou $t1, $t0, $t1
sra $t1,$t1,1
sw $t1,s
sfarsit:
li $v0,10
syscall
и это моя попытка изменить его:
.data
n:.word 1048576
s:.word 0
s2:.word 0
.text
main:
lw $t0,n
add $t1,$t0,1
mult $t0, $t1
mflo $t0
mfhi $t1
sra $t0,$t0,1
sra $t1,$t1,1
sw $t0,s
sw $t1,s
sfarsit:
li $v0,10
syscall
«SRA» трюк не работает, если применить его к каждому 32 -битной части вашего результата. (Хотя я надеялся, что это будет лол) п: 1048576 ожидаемый результат: 549756338176 , что программа дает: 549755813888
Что я мог сделать, чтобы разделить большое число на два?