2

このコードスニペットがあります。なぜそれが機能しないのか誰かが説明できますか、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
4

2 に答える 2

3

Discailmer:PDP-11に関する私の知識は少し錆びているので、これが理にかなっていることを確認してください...

コードに2つの問題があります。

  1. 印刷関数を呼び出すように、単純に無限にループする必要がある場合に、を呼び出すmain部分が呼び出されます。(直前)の最後に入れてみてください。progoutpclockmainloop: br mainloopmainprog

  2. 今の書き方ではoutp、分岐して入りますが、で終了しrts pcます。これは間違っています。を使用してclock呼び出す必要があります。progjsr prog

もう1つの小さな問題は、メッセージの印刷に5秒以上かかる可能性があることです(誰が知っていますか?)。そのため、メソッドフォームの呼び出しが完了していない場合は、clockメソッドフォームの呼び出しをoutp再度保護する必要があります。

幸運を。

于 2010-06-21T10:52:14.063 に答える
1

スタック上の文字列ポインタが6(sp)ではなく4(sp)であるように見えます。

于 2010-06-21T10:23:49.430 に答える