2010-06-20 25 views
2

我有這段代碼。有人可以解釋爲什麼它不工作,我想每5秒鐘打印「語法錯誤」打印機在pdp-11

在此先感謝

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 

回答

3

Discailmer:我的PDP-11的知識是有點生疏了,所以一定要確保這是有道理的......

你在你的代碼2個問題:

  1. main部分通話prog,它調用outp,當它應該簡單地循環以便clock將調用打印功能。嘗試在main的末尾放置mainloop: br mainloop(就在prog之前)。

  2. 它現在寫的方式,你通過分支輸入outp,但用rts pc退出它,這是錯誤的。 clock應該使用jsr prog致電prog

另一個小問題是,打印信息可能需要超過5秒(誰知道?),所以你需要再次保護clock方法調用的形式,如果outp它沒有這樣做。

祝你好運。

+0

有沒有人知道PDP-11 **不是生鏽的?如果是這樣,我會跟他們保持聯繫! – 2010-06-21 11:09:55

1

看起來在棧上的字符串指針是4(SP),不6(SP)。