2010-06-20 5 views
2

J'ai cet extrait de code. Quelqu'un peut-il expliquer pourquoi il ne fonctionne pas, je veux toutes les 5 secondes print « Erreur de syntaxe »imprimante en pdp-11

merci à l'avance

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 

Répondre

3

Discailmer: ma connaissance du PDP-11 est un peu rouillé, alors assurez-vous que cela a du sens ...

Vous avez 2 problèmes dans votre code:

  1. Les appels main partie prog qui appelle outp, alors qu'il devrait être simplement en boucle sans fin afin que clock appelle la fonction d'impression. Essayez de mettre mainloop: br mainloop à la fin de main (juste avant prog).

  2. La façon dont il est écrit maintenant, vous entrez outp par branche, mais en le sortant avec rts pc, ce qui est faux. clock appelez prog en utilisant jsr prog.

Un autre problème mineur est que l'impression du message peut prendre plus de 5 secondes (qui sait?) Si vous avez besoin de protéger la forme de la méthode clock appelant outp à nouveau si elle ne se fait pas.

Bonne chance.

+0

Y at-il quelqu'un qui connaît le PDP-11 ** n'est pas ** rouillé? Si oui, je les gêne! –

1

REGARDENT le pointeur de la chaîne sur la pile est un 4 (sp), non 6 (sp).