Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;
  2. ; Initialization
  3. ;
  4.         .ORIG   x3000
  5.         LD      R6, EMPTY       ; R6 is the stack pointer
  6.         LD      R5, PTR         ; R5 is pointer to characters
  7.         AND     R0, R0, #0
  8.         ADD     R0, R0, #10     ; Print a new line
  9.         OUT
  10. ;  
  11. REDO    LDR     R3, R5, #0      ; R3 gets character
  12. ;
  13. ; Test character for end of file
  14. ;      
  15.         ADD     R4, R3, #-10    ; Test for end of line (ASCII xA)
  16.         BRz     EXIT            ; If done, quit
  17.         LD      R4, ZERO
  18.         ADD     R3, R3, R4      ; Get the decimal value from ASCII
  19.         ADD     R5, R5, #1
  20.         JSR     CONV
  21.         AND     R4, R5, #1      ; check odd/even
  22.         ADD     R4, R4, #1
  23.         BRz     EVEN
  24.         ADD     R2, R3, #0      ; Save the first operand to R2
  25.         LD      R0, FACTOR      ; '!'
  26.         OUT
  27. EVEN    LD      R0, EQUAL       ; '='
  28.         OUT
  29. ; Start calculation
  30.  
  31.         ADD R4,R2, #0
  32.         ADD R1,R2, #-1
  33. OLoop   AND R3,R3, #0
  34. ILoop   ADD R3,R3,R4
  35.         ADD R1,R1, #-1
  36.         BRp ILoop
  37.         ADD R4,R3, #0
  38.         ADD R2,R2, #-1
  39.         ADD R1,R2, #-1
  40.         BRp OLoop
  41.         ADD R3, R4, #0
  42. ;
  43.         JSR     CONV
  44.         AND     R0, R0, #0
  45.         ADD     R0, R0, #10     ; Print a new line
  46.         OUT
  47.         BRnzp   REDO       
  48. ;
  49. ; A subroutine to output a 3-digit decimal result.
  50. ;
  51. CONV    ADD     R1, R7, #0      ; R3, R4, R5 and R7 are used in this subroutine
  52.         JSR     Push
  53.         ADD     R1, R3, #0      ; R3 is the input value
  54.         JSR     Push
  55.         ADD     R1, R4, #0
  56.         JSR     Push
  57.         ADD     R1, R5, #0
  58.         JSR     Push
  59.         AND     R5, R5, #0
  60. OUT100  LD      R4, HUNDRED
  61.         ADD     R4, R3, R4      ; R3 - #100
  62.         BRn     PRI100
  63.         LD      R4, HUNDRED
  64.         ADD     R3, R3, R4      ; R3 - #100
  65.         ADD     R5, R5, #1
  66.         BRnzp   OUT100
  67. PRI100  LD      R0, ASCII       ; Load the ASCII template
  68.         ADD     R0, R0, R5      ; Convert binary count to ASCII
  69.         OUT                     ; ASCII code in R0 is displayed.
  70.         AND     R5, R5, #0
  71. OUT10   ADD     R4, R3, #-10
  72.         BRn     PRI10
  73.         ADD     R3, R3, #-10
  74.         ADD     R5, R5, #1
  75.         BRnzp   OUT10
  76. PRI10   LD      R0, ASCII       ; Load the ASCII template
  77.         ADD     R0, R0, R5      ; Convert binary count to ASCII
  78.         OUT                     ; ASCII code in R0 is displayed.       
  79.         LD      R0, ASCII
  80.         ADD     R0, R0, R3      ; Convert binary count to ASCII
  81.         OUT                     ; ASCII code in R0 is displayed.
  82.         JSR     Pop
  83.         ADD     R5, R1, #0
  84.         JSR     Pop
  85.         ADD     R4, R1, #0
  86.         JSR     Pop
  87.         ADD     R3, R1, #0
  88.         JSR     Pop
  89.         ADD     R7, R1, #0
  90.         RET
  91. Push    STR     R1, R6, #0      ; Stack Push
  92.         ADD     R6, R6, #-1
  93.         RET
  94. Pop     ADD     R6, R6, #1      ; Stack Pop
  95.         LDR     R1, R6, #0
  96.         RET
  97. ; End of the subroutine
  98. EXIT    HALT                    ; Halt machine
  99.  
  100. PTR     .FILL   x3500
  101. EMPTY   .FILL   x4000
  102. ASCII   .FILL   x0030           ; '0'
  103. ZERO    .FILL   xFFD0           ; -'0'
  104. HUNDRED .FILL   xFF9C           ; -#100
  105. EQUAL   .FILL   x003D           ; '='
  106. PLUS    .FILL   x002B           ; '+'
  107. MINUS   .FILL   x002D           ; '-'
  108. FACTOR  .FILL   x0021           ; '!'
  109. MULT    .FILL   x002A           ; '*'
  110. VAL     .BLKW   1
  111.         .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement