我有这段代码。有人可以解释为什么它不起作用,我希望每5秒打印一次“语法错误”
提前致谢
tks = 177560
tkb = 177562
tps = 177564
tpb = 177566
lcs = 177546
. = torg + 2000
main: mov #main, sp
mov #outp, @#64
mov #200, @#66
mov #clock, @#100
mov #300, @#102
mov #101, @#tks
mov #100, @#tps
mov #100, @#lcs
prog: mov #msg, -(sp)
br outp
clock: inc time_is
cmp time_is, time_out
bne clk_end
clr time_is
jmp prog
clk_end:rti
outp:
mov r1,-(sp)
mov r2,-(sp)
mov 6(sp),r2
str_loop:
movb (r2)+,r1
beq pr_str_end
jsr pc, print_char
br str_loop
pr_str_end:
mov (sp)+,r2
mov (sp)+,r1
rts pc
print_char:
tstb @#tps
bpl print_char
movb r1, @#tpb
rts pc
. = torg + 3000
msg:.ascii<Syntax Error>
.byte 0
.even
time_out: .word 300
time_is: .word 0
buffer: .blkw 3
答案 0 :(得分:3)
Discailmer:我对PDP-11的了解有点生疏,所以请确保这是有道理的......
您的代码中有2个问题:
main
部分调用调用prog
的{{1}},它应该无限循环,以便outp
调用打印功能。尝试将clock
放在mainloop: br mainloop
的末尾(就在main
之前)。
现在写的方式是,您通过分支输入prog
,但是使用outp
退出,这是错误的。 rts pc
可以使用clock
。
prog
醇>
另一个小问题是打印邮件的时间可能超过5秒(谁知道?)因此,如果没有完成,则需要再次保护调用jsr prog
的{{1}}方法表单。
答案 1 :(得分:1)
看起来堆栈上的字符串指针是4(sp),而不是6(sp)。