循环汇编语言

时间:2014-12-15 05:57:34

标签: assembly compiler-construction segmentation-fault

我一直致力于编写一个转换为汇编语言的编译器。我的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

逻辑对我来说似乎没问题,但是当我运行这个汇编语言代码时,我遇到了分段错误。谁能告诉我可能是什么造成的呢?谢谢!

2 个答案:

答案 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