Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. .ORIG x3000
  2. ;--------------
  3. ; Instructions
  4. ;--------------
  5.  
  6. START_LOOP
  7. LEA R0, PROMPT
  8. PUTS
  9. GETC
  10. OUT
  11. LD R3, CHAR_B
  12. ADD R4, R0, R3
  13. BRnp ERROR_OUT
  14. BRnzp CONTINUE_PROGRAM
  15. END_START_LOOP
  16.  
  17. ERROR_OUT
  18. LEA R0, ERROR
  19. PUTS
  20. BRnzp START_LOOP
  21. END_ERROR_OUT
  22.  
  23. CONTINUE_PROGRAM
  24. LD R1, SUB_BINARY_READER_3200
  25. JSRR R1
  26. LD R0, NEWLIN
  27. OUT
  28. JSR SUB_BINARY_WRITER_3400
  29. END_CONTINUE_PROGRAM
  30.  
  31. HALT
  32. ;---------------
  33. ; Local data
  34. ;---------------
  35. PROMPT .STRINGZ "Enter a 16-bit 2's complement binary number\n"
  36. ERROR .STRINGZ "\nFirst character is not b\n"
  37. SUB_BINARY_READER_3200 .FILL x3200
  38. CHAR_B .FILL #-98
  39. NEWLIN .FILL '\n'
  40.  
  41. ;-------------------------
  42. ; Subroutine
  43. ;-------------------------
  44. .ORIG x3200
  45. ;-------------------------
  46. ; Subroutine Instructions
  47. ;-------------------------
  48. ST R7, BACKUP_R7_3200
  49. ST R1, BACKUP_R1_3200
  50.  
  51. LD R2, TOTAl
  52. LD R5, COUNTER
  53.  
  54. INPUT_LOOP_3200
  55. LD R4, RESET
  56. GETC
  57. OUT
  58. LD R3, SPACE_CHAR
  59. ADD R4, R0, R3
  60. BRz INPUT_LOOP_3200
  61. BRnp ZERO_INPUT
  62.  
  63. ZERO_INPUT
  64. LD R4, RESET
  65. LD R3, ZERO
  66. ADD R4, R0, R3
  67. BRz ADD_ZERO
  68. BRnp ONE_INPUT
  69.  
  70. ONE_INPUT
  71. LD R4, RESET
  72. LD R3, ONE
  73. ADD R4, R0, R3
  74. BRz ADD_ONE
  75. BRnp OTHER_INPUT
  76.  
  77. OTHER_INPUT
  78. LEA R0, ERROR_MSG
  79. PUTS
  80. BRnzp INPUT_LOOP_3200
  81.  
  82. ADD_ZERO
  83. ADD R2, R2, R2
  84. BRnzp INPUT_LOOP_CONT
  85.  
  86. ADD_ONE
  87. ADD R2, R2, R2
  88. ADD R2, R2, #1
  89. BRnzp INPUT_LOOP_CONT
  90.  
  91. INPUT_LOOP_CONT
  92. ADD R5, R5, #-1
  93. BRp INPUT_LOOP_3200
  94. BRz END_LOOP_3200
  95.  
  96. END_LOOP_3200
  97.  
  98. LD R1, BACKUP_R1_3200
  99. LD R7, BACKUP_R7_3200
  100.  
  101. RET
  102. ;-----------------
  103. ; Subroutine data
  104. ;-----------------
  105. BACKUP_R7_3200 .BLKW #1
  106. BACKUP_R1_3200 .BLKW #1
  107. TOTAl .FILL #0
  108. COUNTER .FILL #16
  109. NEWLINE .FILL '\n'
  110. ERROR_MSG .STRINGZ "\nEnter valid character\n"
  111. SPACE_CHAR .FILL #-32
  112.  
  113. ZERO .FILL #-48
  114. ONE .FILL #-49
  115. RESET .FILL #0
  116.  
  117. ;-------------------------
  118. ; Subroutine
  119. ;-------------------------
  120. .ORIG x3400
  121. ;-------------------------
  122. ; Subroutine Instructions
  123. ;-------------------------
  124. SUB_BINARY_WRITER_3400
  125. ST R7, BACKUP_R7_3400
  126.  
  127. LD R4, CNTR
  128. LD R5, SPACE_COUNTER
  129. LD R0, CHAR_B_3400
  130. OUT
  131.  
  132. FOR_LOOP
  133. ADD R2, R2, #0
  134. BRn PRINT_1
  135. ADD R2, R2, #0
  136. BRzp PRINT_0
  137. END_FOR_LOOP
  138.  
  139. PRINT_1
  140. LD R0, NUM_ONE
  141. OUT
  142.  
  143. ADD R2, R2, R2
  144. ADD R4, R4, #-1
  145. BRz LOOP_END
  146. ADD R5, R5, #-1
  147. BRz PRINT_SPACE
  148. ADD R4, R4, #0
  149. BRp FOR_LOOP
  150. END_PRINT_1
  151.  
  152. PRINT_0
  153. LD R0, NUM_ZERO
  154. OUT
  155.  
  156. ADD R2, R2, R2
  157. ADD R4, R4, #-1
  158. BRz LOOP_END
  159. ADD R5, R5, #-1
  160. BRz PRINT_SPACE
  161. ADD R4, R4, #0
  162. BRp FOR_LOOP
  163. END_PRINT_0
  164.  
  165. PRINT_SPACE
  166. LD R0, SPACE
  167. OUT
  168. LD R5, SPACE_COUNTER
  169. ;ADD R2, R2, R2
  170. ADD R5, R5, #0
  171. BRp FOR_LOOP
  172. END_PRINT_SPACE
  173.  
  174. LOOP_END
  175. LD R0, NEWLINES
  176. OUT
  177.  
  178. LD R7, BACKUP_R7_3400
  179.  
  180. RET
  181. ;-----------------
  182. ; Subroutine data
  183. ;-----------------
  184. BACKUP_R7_3400 .BLKW #1
  185. NUM_ZERO .FILL #48
  186. NUM_ONE .FILL #49
  187. CNTR .FILL #16
  188. SPACE_COUNTER .FILL #4
  189. NEWLINES .FILL '\n'
  190. SPACE .FILL ' '
  191. CHAR_B_3400 .FILL 'b'
  192.  
  193. .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement