首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdp-11(模拟器)的组装

pdp-11(模拟器)的组装
EN

Stack Overflow用户
提问于 2010-06-14 01:07:54
回答 1查看 950关注 0票数 1

我在pdp-11上有这个代码

代码语言:javascript
复制
tks = 177560
tkb = 177562
tps = 177564
tpb = 177566
lcs = 177546
. = torg + 2000

main:   mov #main, sp
        mov #kb_int, @#60
        mov #200, @#62
        mov #101, @#tks
        mov #clock, @#100
        mov #300, @#102
        mov #100, @#lcs

loop:   mov @#tks,r2
        aslb r2
        bmi loop
        halt

clock:  tst bufferg
        beq clk_end
        mov #msg,-(sp)
        jsr pc, print_str
        tst (sp)+
        clr bufferg
        bic #100,@#tks
        clr @#lcs
clk_end:rti

kb_int: mov r1,-(sp)
        jsr pc, read_char
        movb r1,@buff_ptr
        inc buff_ptr
        bis #1,@#tks
        cmpb r1,#'q
        bne next_if
        mov #0, @#tks
next_if:cmpb r1,#32.
        bne end_kb_int
        clrb @buff_ptr
        mov #buffer,-(sp)
        jsr pc, print_str 
        tst (sp)+
        mov #buffer,buff_ptr
end_kb_int:
        mov (sp)+,r1
rti


;#############################
read_char:
        tstb @#tks
        bpl read_char
        movb @#tkb, r1
        rts pc
;#############################
print_char:
        tstb @#tps
        bpl print_char
        movb r1, @#tpb
        rts pc
;#############################
print_str:
        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

. = torg + 3000
msg:.ascii<Something is wrong!>
    .byte 0
    .even
buff_ptr: .word buffer
buffer: .blkw 3
bufferg: .word 0

谁能解释一下代码的哪一部分可以改变bufferg(最后一行)?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-14 05:18:24

我在这个程序中发现了三个基本的功能块:

  1. 将字符从键盘读取到缓冲区(kb_int:, read_char:等)
  2. 打印字符(print_char:, print_str:)
  3. 监视上述读/写操作的正确性(clock:).

我假设bufferg是保护字,因为它跟在从键盘读取数据的段之后(bufferg是buffer的3个字之后的一个字-最后两行)。因此,如果出现问题(输入字符太多或打印速度太慢),bufferg将被一些非零值填充。这在时钟中被捕获:(这显然是一个定时器中断处理程序)- tst bufferg测试零值,如果它不等于零(默认值),则消息(msg:)“有问题!”打印并将bufferg重置为零clr bufferg

因此,对这个问题的简短回答是: bufferg可以在movb r1,@buff_ptrclr bufferg中更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3033120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档