2010-06-20 2 views
2

나는이 스 니펫을 가지고 있습니다. 누군가가 그것은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 :

  1. main 부품 전화 : PDP-11의 내 지식이 약간 녹슨, 그래서이 의미가 있는지 확인 ...

    당신은 당신의 코드에서이 문제가 prog은 이 단순히 인쇄 기능을 호출 할 수 있도록 끝없이 루핑되어야 할 때 outp을 호출합니다. main (prog 직전)에 mainloop: br mainloop을 넣어보세요.

  2. 지금 작성한 방법은 분기로 outp을 입력했지만 rts pc으로 끝내는 것은 잘못되었습니다. clockjsr prog으로 호출해야합니다.

또 다른 사소한 문제는 메시지를 인쇄하는 5 개 이상의 초 걸릴 수 있다는 점이다 (누가?) 알고 그래서 당신은 그것을 할 있지 않은 경우 다시 outp를 호출 clock 방법 양식을 보호해야합니다.

행운을 빈다.

+0

PDP-11에 대해 알고있는 사람이 있습니까 ** ** 녹슬지 않은가요? 그렇다면, 나는 그들에게 불만을 터트렸다! –

1

는 스택에 문자열 포인터를 보이는, 내가 미리

덕분에 5 초마다 인쇄 "구문 오류"원하는 작동하지 않는 이유를 설명 할 수있는 것은, 4 (SP)하지 6 (sp).