我在pdp-11上有这个代码
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(最后一行)?提前感谢
发布于 2010-06-14 05:18:24
我在这个程序中发现了三个基本的功能块:
kb_int:, read_char:等)print_char:, print_str:) clock:).我假设bufferg是保护字,因为它跟在从键盘读取数据的段之后(bufferg是buffer的3个字之后的一个字-最后两行)。因此,如果出现问题(输入字符太多或打印速度太慢),bufferg将被一些非零值填充。这在时钟中被捕获:(这显然是一个定时器中断处理程序)- tst bufferg测试零值,如果它不等于零(默认值),则消息(msg:)“有问题!”打印并将bufferg重置为零clr bufferg。
因此,对这个问题的简短回答是: bufferg可以在movb r1,@buff_ptr或clr bufferg中更改。
https://stackoverflow.com/questions/3033120
复制相似问题