Выход петли 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 ошибаться.

Другие вопросы по тегам