Выход петли MIPS
У нас есть домашняя работа по архитектуре MIPS32, но у меня возникают некоторые вопросы.
Например, сказано, что R2(регистр № 2) = 0xD0000000. И у нас есть такой код:
ADDI R3, R0, 0
ADDI R4, R0, 31
Bcl: BGEZ R2, Suit
ADDI R3, R3, 1
Suit: SLL R2, R2, 1
ADDI R4, R4, -1
BGEZ R4, Bcl
И вопрос в том, каково значение R3 после казни. Вот что я сделал:
(псевдокод):
R3 = 0
R4 = 31
R2 = 1101 00.. ..00 and it's greater than 0 so we go into the loop
R2 = SLL(R2,1) = 1010 00.. ..00
R4 = R4 - 1
R3 = R3 + 1 (R3 = 1)
R4 = 30 >= 0 so we go to Bcl
R2 = 1010 00.. ..00 and it's greater than 0 so we go into the loop
R2 = SLL(R2,1) = 0100 00.. ..00
R4 = R4 - 1
R3 = R3 + 1 (R3 = 2)
R4 = 29 >= 0 so we go to Bcl
R2 = 0100 00.. ..00 and it's greater than 0 so we go into the loop
R2 = SLL(R2,1) = 1000 00.. ..00
R4 = R4 - 1
R3 = R3 + 1 (R3 = 3)
R4 = 28 >= 0 so we go to Bcl
R2 = 1000 00.. ..00 and it's greater than 0 so we go into the loop
R2 = SLL(R2,1) = 0000 00.. ..00
R4 = R4 - 1
R3 = R3 + 1 (R3 = 4)
R4 = 27 >= 0 so we go to Bcl
И отсюда я как бы застрял, потому что R2 всегда будет 00..00 (у SLL только ноль справа). Так что я должен понимать, что это бесконечный цикл? Но я совершенно уверен, что это неправда и что-то не так в том, что я сделал.
Кто-нибудь может мне помочь?
Благодаря!
1 ответ
Эта строка кода
Bcl: BGEZ R2, Suit
средства:
if R2 >= 0 then jump to Suit
но в твоем
trace sheet
даже если условие подходит для перехода, вы перешли на следующую строку (ADDI R3, R3, 1
).
Например, в вашем первом разделе:
R2 = 1101 00.. ..00 and it's greater than 0 so we go into the loop
R2 = SLL(R2,1) = 1010 00.. ..00
R4 = R4 - 1
R3 = R3 + 1 (R3 = 1)
R4 = 30 >= 0 so we go to Bcl
вы должны изменить его на это:
R2 = 1101 00.. ..00 and it's greater than 0 so we jump to the Suit
R2 = SLL(R2,1) = 1010 00.. ..00
R4 = R4 - 1
R4 = 30 >= 0 so we jump to Bcl
// I will continue one more section to show you
R2 = 1010 00.. ..00 and it's greater than 0 so we jump to Suit
R2 = SLL(R2,1) = 0100 00.. ..00
R4 = R4 - 1
R4 = 29 >= 0 so we go to Bcl
Как вы видите линию
ADDI R3, R3, 1
никогда не будет выполняться до тех пор, пока
Bcl: BGEZ R2, Suit
ошибаться.