Advertisement
Guest User

Untitled

a guest
May 29th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. .ORIG x3000
  2. START AND R0, R0, #0 ;initialize all registers to 0, except for R7
  3. AND R1, R1, #0
  4. AND R2, R2, #0
  5. AND R3, R3, #0
  6. AND R4, R4, #0
  7. AND R5, R5, #0
  8. AND R6, R6, #0
  9.  
  10. LD R1, User_Char ;load variables
  11. LD R2, This_Digit
  12. LD R3, Neg_Flag
  13. LD R4, User_Int
  14.  
  15. LEA R0, STARTPROMPT ;print welcome message
  16. PUTS
  17. AND R0, R0, #0
  18. LEA R0, OPTIONPROMPT ;print option message
  19. PUTS
  20. GET_USER_CHAR
  21. AND R0, R0, #0 ;reset R0 for user input
  22. AND R1,R1,0
  23. GETC
  24. OUT
  25. ADD R1, R1, R0 ;Update User_Char
  26. ADD R0, R0, #-16 ;Subtract 45 (-) from ASCII value in R1
  27. ADD R0, R0, #-16
  28. ADD R0, R0, #-13
  29.  
  30. BRz SET_NEG_FLAG ;Branch out to SET_NEG_FLAG if character in User_Char is '-'
  31. AND R0, R0, #0 ;Reload User_Char into R0
  32. ADD R0, R0, R1
  33. ADD R0, R0, #-16 ;Subtract 88 (X) from ASCII value in R1
  34. ADD R0, R0, #-16
  35. ADD R0, R0, #-16
  36. ADD R0, R0, #-16
  37. ADD R0, R0, #-16
  38. ADD R0, R0, #-8
  39.  
  40. BRz GOODBYE ;Branch out to GOODBYE if character in User_Char is 'X'
  41. AND R0, R0, #0 ;Subtract 10 (Newline) from ASCII value in R1 moved to R0
  42. ADD R0, R0, R1
  43. ADD R0, R0, #-10
  44.  
  45. BRnp UPDATE_INT ;Branch out to UPDATE_INT if character in User_Char is NOT '\n'
  46. ADD R3, R3, #0
  47.  
  48. BRnz PRINT_USER_INT_LOOP ;Branch out to PRINT_USER_INT_LOOP if Neg_Flag is NOT set
  49. NOT R4, R4
  50. ADD R4, R4, #1
  51. BR PRINT_USER_INT_LOOP ;Branch out to PRINT_USER_INT_LOOP after taking 2SC of User_Int
  52.  
  53. SET_NEG_FLAG
  54. ADD R3, R3, #1 ;Neg_Flag=1
  55. BR GET_USER_CHAR ;Branch back to user input
  56.  
  57. UPDATE_INT
  58. AND R0, R0, #0
  59. ADD R0, R0, R1
  60. ADD R0, R0, #-16 ;Subtract "0" in ASCII from inputted value
  61. ADD R0, R0, #-16
  62. ADD R0, R0, #-16
  63. AND R2, R2, #0
  64. ADD R2, R0, #0 ;Update This_Digit
  65. AND R0, R0, #0 ;Reset R0 for updating User_Int
  66. ADD R0, R4, R4 ;R0=2*R4(original)
  67. ADD R4, R4, R4 ;R4=2*R4(original)
  68. ADD R4, R4, R0
  69. ADD R4, R4, R0
  70. ADD R4, R4, R0
  71. ADD R4, R4, R0 ;R4=10*R4(original)
  72. ADD R4, R4, R2 ;User_Int=User_Int*10+This_Digit
  73. BR GET_USER_CHAR ;Branch back to user input
  74.  
  75. PRINT_USER_INT_LOOP
  76. AND R0, R0, #0
  77. ADD R0, R0, R5 ;R5 is both an offset for array element retrieval, and loop counter
  78. ADD R0, R0, #-15
  79. ADD R0, R0, #-1 ;Check whether all 16 bits of User_Int were accessed
  80.  
  81. BRz PRINT_NEWLINE ;Print '\n' after 16 binary digits of User_Int have been printed
  82. AND R0, R0, #0 ;clears R0 for storage of array elements
  83. AND R6, R6, #0 ;clears previous bit mask retrieved from Mask_Array
  84. LEA R6, Mask_Array ;store Mask_Array pointer in R6
  85. ADD R6, R6, R5 ;add offset value of R5 to Mask_Array pointer
  86. LDR R0, R6, #0 ;Load array value at R6+R5 into R0
  87. AND R0, R0, R4 ;Look at specific bit of User_Int
  88.  
  89. BRnp ONE ;Branch out to print '1' if specific bit of User_Int is non-zero
  90. AND R0, R0, #0 ;Resets R0 to be used for printing '1'
  91. LEA R0, Zero
  92. LDR R0, R0, #0 ;load string "0" into R0
  93. PUTC
  94. BR INCREMENT ;Branch to INCREMENT to increment loop counter by 1
  95.  
  96. ONE AND R0, R0, #0 ;Resets R0 to be used for printing '0'
  97. LEA R0, One
  98. LDR R0, R0, #0 ;load string "1" into R0
  99. PUTC
  100.  
  101. INCREMENT ADD R5, R5, #1 ;Increments offset
  102. BR PRINT_USER_INT_LOOP
  103.  
  104. PRINT_NEWLINE ;Print newline, option prompt, and return to user input
  105. AND R0, R0, #0
  106. LEA R0, New_Line ;print newline
  107. PUTS
  108. AND R0, R0, #0
  109. LEA R0, OPTIONPROMPT ;print option message
  110. PUTS
  111. BR START
  112.  
  113. GOODBYE
  114. AND R0, R0, #0
  115. LEA R0, New_Line ;print \n
  116. PUTS
  117. AND R0, R0, #0
  118. LEA R0, ENDPROMPT ; prints exit message
  119. PUTS
  120. HALT
  121.  
  122. STARTPROMPT .STRINGZ "Welcome to the conversion program!\n"
  123. ENDPROMPT .STRINGZ "Bye. Have a great day."
  124. OPTIONPROMPT .STRINGZ "Enter a decimal number or X to quit:\n"
  125. User_Char .FILL #0
  126. This_Digit .FILL #0
  127. Neg_Flag .FILL #0
  128. User_Int .FILL #0
  129. Zero .STRINGZ "0"
  130. One .STRINGZ "1"
  131. New_Line .STRINGZ "\n"
  132. Mask_Array:
  133. .FILL b1000000000000000
  134. .FILL b0100000000000000
  135. .FILL b0010000000000000
  136. .FILL b0001000000000000
  137. .FILL b0000100000000000
  138. .FILL b0000010000000000
  139. .FILL b0000001000000000
  140. .FILL b0000000100000000
  141. .FILL b0000000010000000
  142. .FILL b0000000001000000
  143. .FILL b0000000000100000
  144. .FILL b0000000000010000
  145. .FILL b0000000000001000
  146. .FILL b0000000000000100
  147. .FILL b0000000000000010
  148. .FILL b0000000000000001
  149. .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement