2

我有这段代码。有人可以解释为什么它不起作用,我希望每 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
4

2 回答 2

3

Discailmer:我对 PDP-11 的了解有点生疏,所以请确保这是有道理的……

您的代码中有两个问题:

  1. main部分调用progwhich calls outp,当它应该简单地无限循环以便clock调用打印函数时。尝试把(就在之前)mainloop: br mainloop的末尾。mainprog

  2. 现在的写法,你是outp通过分支进入,但用 退出rts pc,这是错误的。clock灵魂调用prog使用jsr prog.

另一个小问题是打印消息可能需要超过 5 秒(谁知道?)所以如果没有完成,您需要保护clock方法表单再次调用。outp

祝你好运。

于 2010-06-21T10:52:14.063 回答
1

看起来堆栈上的字符串指针是 4(sp),而不是 6(sp)。

于 2010-06-21T10:23:49.430 回答