我一直致力于编写一个编译成汇编语言的编译器。我的时间循环有问题。无论我在我的原始程序中多么简单,它们总是给我分段错误。
下面是我正在编译成汇编语言的程序的代码:
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这个逻辑在我看来是正常的,但是当我运行这个汇编语言代码时,我遇到了一个分段错误。有人能告诉我是什么原因造成的吗?谢谢!
发布于 2015-01-31 20:04:20
结果,我只需要把NOOP放在"L0:“之后,这就消除了分割错误,并正确地工作了。因此,最后的计划如下:
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发布于 2014-12-21 16:35:50
没有对说明的任何解释,这是很难回答的。
但是..。
我没有看到任何ADD's;那么如何增加显示的值呢?
还有..。
循环的每一次迭代都是从LOAD 5开始的。难道不应该把它放在循环的外部/前面吗?
https://stackoverflow.com/questions/27478188
复制相似问题