⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.vas

📁 《编译方法》课程设计内容2.《编译方法》课程设计内容
💻 VAS
字号:
\
\      Standard prolog
\
       LDA  L0,R1			 \ Set stack pointer
       STI  R1,0(R1)			 \ Save on stack
       LDA  L1,R3			 \ Return address for main routine
\
\        label L15
L15:
\        beginfunc
       STI  R3,4(R1)
\        var i
\        i := 0
       LDR  R0,R5
\        label L13
       STI  R5,8(R1)
L13:
\        var T0
\        T0 := 11 - i
       LDI  8(R1),R5
       LDA  11(R0),R6
       SUB  R6,R5
\        ifz T0 goto L14
       STI  R5,12(R1)
       LDR  R5,R5
       BZE  L14
\        arg L10
       LDA  L10,R7
       STI  R7,24(R1)
\        call L4
       LDA  L4,R2
       STI  R1,16(R1)
       LDA  16(R1),R1
       BAL  R2,R3
\        arg i
       LDI  8(R1),R5
       STI  R5,24(R1)
\        call L2
       LDA  L2,R2
       STI  R1,16(R1)
       LDA  16(R1),R1
       BAL  R2,R3
\        arg L11
       LDA  L11,R5
       STI  R5,24(R1)
\        call L4
       LDA  L4,R2
       STI  R1,16(R1)
       LDA  16(R1),R1
       BAL  R2,R3
\        var T1
\        arg i
       LDI  8(R1),R5
       STI  R5,28(R1)
\        T1 = call L18
       LDA  L18,R2
       STI  R1,20(R1)
       LDA  20(R1),R1
       BAL  R2,R3
\        arg T1
       LDR  R4,R5
       STI  R5,28(R1)
\        call L2
       STI  R5,16(R1)
       LDA  L2,R2
       STI  R1,20(R1)
       LDA  20(R1),R1
       BAL  R2,R3
\        arg L12
       LDA  L12,R5
       STI  R5,28(R1)
\        call L4
       LDA  L4,R2
       STI  R1,20(R1)
       LDA  20(R1),R1
       BAL  R2,R3
\        var T2
\        T2 := i + 1
       LDA  1(R0),R5
       LDI  8(R1),R6
       ADD  R6,R5
\        i := T2
       STI  R5,20(R1)
\        goto L13
       STI  R5,8(R1)
       BRA  L13
\        label L14
L14:
\        endfunc
       LDI  4(R1),R2
       LDI  0(R1),R1
       BAL  R2,R3
\        label L18
L18:
\        beginfunc
       STI  R3,4(R1)
\        var n
\        ifz n goto L16
       LDI  8(R1),R5
       BZE  L16
\        var T1
\        var T0
\        T0 := n - 1
       LDA  1(R0),R6
       SUB  R5,R6
\        arg T0
       STI  R6,16(R1)
       STI  R6,28(R1)
\        T1 = call L18
       LDA  L18,R2
       STI  R1,20(R1)
       LDA  20(R1),R1
       BAL  R2,R3
\        var T2
\        T2 := n * T1
       LDR  R4,R5
       LDI  8(R1),R6
       MUL  R6,R5
\        return T2
       STI  R4,12(R1)
       LDR  R5,R4
       LDI  4(R1),R2
       LDI  0(R1),R1
       BAL  R2,R3
\        goto L17
       STI  R5,20(R1)
       BRA  L17
\        label L16
L16:
\        return 1
       STI  R4,20(R1)
       LDA  1(R0),R4
       LDI  4(R1),R2
       LDI  0(R1),R1
       BAL  R2,R3
\        label L17
L17:
\        endfunc
       LDI  4(R1),R2
       LDI  0(R1),R1
       BAL  R2,R3
\
\      End of run routine
\
L1:
       HALT
\
\      Print a number recursively
\
L2:
       STI  R3,4(R1)			 \ Save the return address
       LDI  8(R1),R15			 \ Copy arg to R15
       LDA  10(R0),R5			 \ Constant 10
       DIV  R15,R5                       \ Non-zero if more than one digit
       BZE  L3				 \ Branch if only 1 digit
\
       STI  R5,12(R1)			 \ Save on stack for later
       STI  R5,24(R1)			 \ Copy to new stack frame
       LDA  L2,R2			 \ Address to call
       STI  R1,16(R1)			 \ Save stack pointer
       LDA  16(R1),R1			 \ Increment stack pointer
       BAL  R2,R3			 \ Call recursively
       LDA  10(R0),R15			 \ Constant 10 in R15
       LDI  8(R1),R5			 \ Original number
       LDI  12(R1),R6			 \ Divided number
       MUL  R6,R15			 \ Multiply back by 10 in R15
       SUB  R5,R15			 \ Subtract from original for digit
L3:
       LDA  48(R0),R5			 \ ASCII '0' in R5
       ADD  R5,R15			 \ Add to get desired digit in R15
       TRAP				 \ Print the digit
       LDI  4(R1),R2			 \ Return address in R2
       LDI  0(R1),R1			 \ Restore stack pointer
       BAL  R2,R3			 \ Return
\
\      Print a string
\
L4:
       STI  R3,4(R1)			 \ Save the return address
       LDI  8(R1),R5			 \ String pointer in R5
       LDA  16777216(R0),R7		 \ 256 cubed for shifting 24 bits right
L5:
       LDI  0(R5),R6			 \ Next char in top byte  of R6
       LDR  R7,R15			 \ Constant 256 cubed
       DIV  R6,R15			 \ Char in R15
       BZE  L6				 \ EOS branch to exit
       TRAP				 \ Print the char
       LDA  1(R5),R5			 \ Step to next char
       BRA  L5				 \ Round again
L6:
       LDI  4(R1),R2			 \ Return address in R2
       LDI  0(R1),R1			 \ Restore stack pointer
       BAL  R2,R3			 \ Return
\
L10:
       DB   32
       DB   102
       DB   40
       DB   32
       DB   0
L11:
       DB   32
       DB   41
       DB   32
       DB   61
       DB   32
       DB   0
L12:
       DB   10
       DB   0
L0:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -