pdp-11中的打印机

时间:2010-06-20 19:31:05

标签: assembly pdp-11

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

2 个答案:

答案 0 :(得分:3)

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

您的代码中有2个问题:

  1. main部分调用调用prog的{​​{1}},它应该无限循环,以便outp调用打印功能。尝试将clock放在mainloop: br mainloop的末尾(就在main之前)。

  2. 现在写的方式是,您通过分支输入prog,但是使用outp退出,这是错误的。 rts pc可以使用clock

  3. 致电prog

    另一个小问题是打印邮件的时间可能超过5秒(谁知道?)因此,如果没有完成,则需要再次保护调用jsr prog的{​​{1}}方法表单。

    祝你好运。

答案 1 :(得分:1)

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