📄 dc4.s
字号:
.globl getchar.globl stats.globl lookchar.globl fsfile.globl seekchar.globl backspace.globl putchar.globl alterchar.globl move.globl rewind.globl create.globl zero.globl allocate.globl release.globl collect.globl getword, putword.globl length, position.globl w, r, a, l/testing = 0/// routine to return the length of a string// mov ...,r1/ jsr pc,length/ mov r0,.../length: mov w(r1),r0 sub a(r1),r0 rts pc/// routine to return the read pointer position// mov ...,r1/ jsr pc,position/ mov r0,.../position: mov r(r1),r0 sub a(r1),r0 rts pc///// routine to get a word from the string/ mov ...,r1/ jsr pc,getword/ mov r0,.../getword: jsr pc,getchar bes noch movb r0,nchar jsr pc,getchar bec 2f dec r(r1) br noch2: movb r0,nchar+1 mov nchar,r0 tst r0 /tst clears c-bit rts pc/// routine to put a word onto the string/ mov ...,r1/ mov ...,r0/ jsr pc,putword/putword: jsr pc,putchar swab r0 jsr pc,putchar swab r0 rts pc/.bssnchar: .=.+2.text//// routine to read next character from string/ pointed to by r1; character returned in r0/ c-bit set if character not available (end of file)/ r1 is preserved// mov ...,r1/ jsr pc,getchar/ movb r0,.../getchar: jsr pc,lookchar bec 2f rts pc2: inc r(r1) tst r0 /tst clears c-bit rts pc/noch: clr r0 sec rts pc// routine to look at next character from string/ pointed to by r1; character returned in r0/ c-bit set if character not available (end of file)/ r1 is preserved// mov ...,r1/ jsr pc,lookchar/ movb r0,.../lookchar: .if testing jsr pc,plausible inc stats+6. .endif cmp w(r1),r(r1) blos noch movb *r(r1),r0 clc rts pc/plausible: cmp r1,$headers bhis 9f; 4; 9: cmp r1,$headend blo 9f; 4; 9: rts pc//// routine to move the read pointer of a string to a/ specified point. If the string is not long enough,/ the string is extended// mov position,r0/ mov ...,r1/ jsr pc,seekchar/seekchar: mov r1,-(sp) mov r0,-(sp) .if testing jsr pc,plausible inc stats+10. .endif1: mov (sp),r0 add a(r1),r0 cmp r0,l(r1) bhi 3f mov r0,r(r1) cmp r0,w(r1) blo 1f mov r0,w(r1) br 1f3: mov (sp),r0 jsr pc,allocate mov 2(sp),r0 jsr pc,move jsr pc,swap jsr pc,release mov 2(sp),r1 br 1b1: mov (sp)+,r0 mov (sp)+,r1 rts pc/// routine to move read pointer of string to end of string// mov ...,r1/ jsr pc,fsfile/fsfile: .if testing jsr pc,plausible inc stats+10. .endif mov w(r1),r(r1) rts pc/// routine to read a string backwards/ the read pointer is decremented before reading// mov ...,r1/ jsr pc,backspace/ mov r0,.../backspace: .if testing jsr pc,plausible inc stats+6. .endif cmp a(r1),r(r1) bhis noch dec r(r1) movb *r(r1),r0 clc rts pc///// routine to put a character into the string/ pointed to by r1; character in r0/ r0 and r1 are preserved.// movb ch,r0/ mov ...,r1/ jsr pc,putchar/putchar: mov r1,-(sp) mov r0,-(sp) .if testing jsr pc,plausible inc stats+8. .endif1: cmp w(r1),l(r1) blt 3f mov w(r1),r0 inc r0 sub a(r1),r0 /W-A+1 jsr pc,allocate mov 2(sp),r0 /r1 jsr pc,move jsr pc,swap jsr pc,release mov 2(sp),r1 /r1 cmp w(r1),l(r1) blt 3f jmp err/3: movb (sp),*w(r1) inc w(r1) mov (sp)+,r0 tst (sp)+ rts pc//swap: mov w(r1),-(sp) mov w(r0),w(r1) mov (sp),w(r0) mov r(r1),(sp) mov r(r0),r(r1) mov (sp),r(r0) mov a(r1),(sp) mov a(r0),a(r1) mov (sp),a(r0) mov l(r1),(sp) mov l(r0),l(r1) mov (sp)+,l(r0) rts pc/// routine to alter a character in the string/ pointed to by r1; character in r0/ r0 and r1 are preserved.// movb ch,r0/ mov ...,r1/ jsr pc,alterchar/alterchar: mov r1,-(sp) mov r0,-(sp) .if testing jsr pc,preposterous inc stats+8. .endif1: cmp r(r1),l(r1) blt 3f mov l(r1),r0 inc r0 sub a(r1),r0 /W-A+1 jsr pc,allocate mov 2(sp),r0 /r1 jsr pc,move jsr pc,swap jsr pc,release mov 2(sp),r1 /r1 cmp r(r1),l(r1) blt 3f jmp err/3: movb (sp),*r(r1) inc r(r1) cmp r(r1),w(r1) ble 1f mov r(r1),w(r1)1: mov (sp)+,r0 tst (sp)+ rts pc/// routine to move the contents of one string/ to another.// mov source,r0/ mov dest,r1/ jsr pc,move// on return, r1 points to the new string and should/ be saved. r0 is preserved./move: mov r3,-(sp) mov r2,-(sp) mov r1,-(sp) mov r0,-(sp) mov w(r0),r2 sub a(r0),r2 /W-A mov l(r1),r3 sub a(r1),r3 /L-A cmp r2,r3 ble 1f mov r2,r0 jsr pc,allocate mov 2(sp),r0 /r1 jsr pc,swap jsr pc,release mov r0,r1 mov 0(sp),r0 /r0/1: mov a(r0),(r0) mov a(r1),(r1)1: dec r2 blt 1f movb *(r0),*(r1) inc (r0) inc (r1) br 1b// fix up read ptr of new string/1: mov r(r0),r2 sub a(r0),r2 add a(r1),r2 mov r2,r(r1)// restore and return/ mov (sp)+,r0 mov (sp)+,r1 mov (sp)+,r2 mov (sp)+,r3 rts pc/// routine to rewind read pointer of string/ pointed to by r1// mov ...,r1/ jsr pc,rewind/rewind: .if testing jsr pc,plausible inc stats+10. .endif mov a(r1),r(r1) rts pc// routine to rewind write pointer of string/ pointed to by r1// mov ...,r1/ jsr pc,create/create: .if testing jsr pc,plausible inc stats+10. .endif mov a(r1),w(r1) mov a(r1),r(r1) rts pc/// routine to zero a string// mov ...,r1/ jsr pc,zero/zero: mov r0,-(sp) .if testing jsr pc,preposterous .endif mov a(r1),r01: cmp r0,l(r1) bhis 1f clrb (r0)+ br 1b1: mov (sp)+,r0 rts pc//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -