2010-06-21 3 views
2

Je suis un peu confus au sujet du programme simple que j'ai écrit, pouvez-vous s'il vous plaît expliquer pourquoi il se ferme après l'impression d'un seul caractère, je m'attendais m'imprimera caractère toutes les 5 secondes, merci avancehorloge sur pdp-11

tks = 177560 
tkb = 177562 
tps = 177564 
tpb = 177566 
lcs = 177546 
. = torg + 2000 

main: mov #main, sp 

     mov #clock, @#100 ; vector interrupt of the clock 100-102 
     mov #300, @#102 ; 

     mov #100, @#lcs ; here I enable interrupt-enable of the clock 

prog: clr r0    ; here endless loop 
     beq prog 
     halt 

clock: inc count 
     cmp count, timeout 
     bne clk_end 
     clr count 
     mov #'*, @#tpb 
clk_end:rti 

. = torg + 3000 
timeout: .word 300000 
count: .word 0 
+0

PDP11? Avez-vous du matériel réel ou utilisez-vous un simulateur? –

+0

@ theatrus: J'utilise simulateur – helloWorld

+0

Simulateur ou non, question du jour. –

Répondre

2

Il s'agit sûrement d'un problème lié au simulateur, puisque j'ai essayé de vous faire exécuter du code, et cela fonctionne très bien!

Êtes-vous par hasard un étudiant au Technion?

+0

oui, vous avez raison je suis étudiant du Technion, et ce simulateur me fait fou, quel peut être le problème, pourquoi je reçois halte? Je suggère que vous étudiez aussi là-bas? Votre programme n'a pas arrêté? parce que je m'attends à ce qu'il m'imprime * toutes les 5 secondes – helloWorld

+0

J'utilise le simulateur fourni par le cours sur Windows 7, et il imprime * toutes les ~ 4 sec. sans s'arrêter. Peut-être essayer de l'exécuter sur un autre ordinateur? –

+0

Je pensais que le simulateur ne dépend pas de l'OS, ok, merci – helloWorld

0

Je ne suis pas familier avec le PDP-11, mais j'ai écrit le code d'interruption pour d'autres processeurs. Sur les autres processeurs, le comportement que vous décrivez peut se produire si le registre flags n'est pas sauvegardé par la routine d'interruption. Si une interruption s'est produite entre les deux instructions clr r0 et beq prog et que le gestionnaire d'interruption a effacé le bit égal dans le registre des indicateurs, cela entraînerait le comportement que vous décrivez. Encore une fois, je ne suis pas familier avec l'assembleur PDP-11, mais vous pouvez essayer d'enregistrer l'état du registre flags lorsque vous entrez dans la routine d'interruption, et de le restaurer juste avant l'instruction rti. Peut-être en utilisant l'équivalent PDP-11 de l'instruction 80x86 push.

+0

merci pour la réponse, mais je pense que j'ai quelque chose d'autre ici, j'ai changé mon code pour prog: br prog, mais ça marche de la même façon – helloWorld

0

Je pense que le mode pour l'horloge ne devrait pas être 0 mais 1, Chargez-le avec 110 au lieu de 100. Voir le manuel de l'horloge en temps réel programmable KW11-P.