Assembly 简单增量汇编代码卡在无限while循环中

Assembly 简单增量汇编代码卡在无限while循环中,assembly,Assembly,我有一段代码,如果两个值相等,它应该退出循环,$2是一个常量值。程序将卡在循环中,并且看起来两个值每次都递增1 main: org 0x0000 ori $29, $0, 0xfffc ori $3, $0, 0x1 // element a ori $4, $0, 0x1 // element b ori $5, $0, 0x1 // element c push $3 // a value 3 push $4 // b value 4

我有一段代码,如果两个值相等,它应该退出循环,$2是一个常量值。程序将卡在循环中,并且看起来两个值每次都递增1

main:
      org 0x0000
      ori $29, $0, 0xfffc

  ori $3, $0, 0x1 // element a
  ori $4, $0, 0x1 // element b
  ori $5, $0, 0x1 // element c


  push $3  // a value 3
  push $4  // b value 4
  push $5  // c value 5

  ori $6, $0, 0x2 // 
  ori $8, $0, 0x0 // sum of addition
  ori $9, $0, 0x1 // increment i


  jal procedure
  pop $8
  halt



procedure: 
  ori $7, $0, 0x0 // i
  sub $6, $6, $9
  pop $1 // value 1
  pop $2 // value 1

while: 
  beq $7, $2, endloop
loop:
  add $8, $8, $1
  add $7, $7, $9
  j while

endloop:
  bne $6, $0, procedure
  push $8
  jr $31
这是MIPS吗?如果是带有分支延迟槽的真正MIPS,您确定
pop$8
jal
之后是安全的吗?当然,这是一条伪指令,只有一半指令在
过程的第一条指令之前运行,第二条指令在返回后运行。