Assembly 简单增量汇编代码卡在无限while循环中
我有一段代码,如果两个值相等,它应该退出循环,$2是一个常量值。程序将卡在循环中,并且看起来两个值每次都递增1Assembly 简单增量汇编代码卡在无限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
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
之后是安全的吗?当然,这是一条伪指令,只有一半指令在过程的第一条指令之前运行,第二条指令在返回后运行。