Вот код C:Преобразование C код MIPS ассемблере
int A[10];
int sum = 0;
int i = 0;
while (i<10){
sum += A[i++];
sum *= 2;
}
Вот мое взятие на преобразование в MIPS:
Я понимаю, что в основной во время цикла, такие как: i = $s1
, 5 = $s3
i=0;
while(i != 5)
i=i+1;
addi $s1, $zero, 0 #i=0
loop: beq $s1, $s3, endloop
add $s1, $s1, 1
j loop:
endloop:
Я просто возникли проблемы, или с трудом всесторонни ding несколько более сложный цикл, где вводятся sum+= A[i++];
и sum*= 2;
.
Любая помощь очень ценится. Я не ищу полного решения, поэтому, пожалуйста, помогите мне думаю.
Спасибо!
'сумма * = 2' является' мул <регистр, который содержит сумму><регистр, который содержит сумму> 2'. Тогда 'sum + = A [i ++]' is 'add sum, sum,
(i)>' (возможно, немного другой синтаксис, в зависимости от того, как ваш ассемблер обрабатывает адресацию памяти), а затем 'add i, i, 1' (где 'i' - регистр, содержащий значение' i'). –Почему ваш компилятор не делает это? –