我一直致力于编写一个转换为汇编语言的编译器。我的while循环有问题。无论我在原始程序中如何简单地使用它们,它们总是给我分段错误。
这是我编译成汇编语言的程序的代码:
start
start
int x.
x = 0.
repeat[x <= 5] //while x is less than or equal to 5 print out x
start
print x.
finish
finish
finish
以下是生成的汇编语言代码:
PUSH
LOAD x
STACKW 0
LOAD 0
STACKW 0
L0:
LOAD 5
STORE V0
STACKR 0
SUB V0
BRPOS L1
STACKR 0
STORE V1
WRITE V1
BR L0
L1: NOOP
POP
STOP
V0 0
V1 0
x 0
逻辑对我来说似乎没问题,但是当我运行这个汇编语言代码时,我遇到了分段错误。谁能告诉我可能是什么造成的呢?谢谢!
答案 0 :(得分:1)
对说明书没有任何解释,这很难回答
但是......
我没有看到任何ADD;那么如何增加显示的值?
而且......
循环的每次迭代都以LOAD 5开始。你不应该把它放在循环之外/之前吗?
答案 1 :(得分:0)
事实证明,我所需要的只是在&#34; L0之后放入NOOP:&#34;并摆脱了分段错误并正常工作。所以最终的计划如下:
PUSH
LOAD x
STACKW 0
LOAD 0
STACKW 0
L0: NOOP
LOAD 5
STORE V0
STACKR 0
SUB V0
BRPOS L1
STACKR 0
STORE V1
WRITE V1
BR L0
L1: NOOP
POP
STOP
V0 0
V1 0
x 0