Advertisement
Guest User

LC3 Funzies

a guest
May 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. .ORIG x3000
  2. 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. GET_USER_CHAR AND R0, R0, #0 ;clear R0 for GETC
  18. GETC
  19. AND R0, R0, #0
  20.  
  21. BRzp XCHECK
  22. ADD R3, R3, #1 ;Neg_Flag=1
  23. BR GET_USER_CHAR
  24.  
  25. XCHECK ADD R1, R1, R0
  26. ADD R1, R1, #-16 ;Subtract 88 (X) from ASCII value in R1
  27. ADD R1, R1, #-16
  28. ADD R1, R1, #-16
  29. ADD R1, R1, #-16
  30. ADD R1, R1, #-16
  31. ADD R1, R1, #-8
  32.  
  33. BRz GOODBYE ;Exit the program if entered character was X
  34. AND R1, R1, #0 ;Subtract 12 (Newline) from ASCII value in R1
  35. ADD R1, R1, R0
  36. ADD R1, R1, #-12
  37. BRz 2SC_CHECKER ;Converts User_Int into 2SC if newline was entered
  38.  
  39. AND R1, R1, #0
  40. ADD R1, R1, R0
  41. ADD R1, R1, #-16 ;Subtract "0" in ASCII from inputted value
  42. ADD R1, R1, #-16
  43. ADD R1, R1, #-16
  44. ADD R2, R1, #0 ;Update This_Digit
  45. ADD R4, R4, R4 ;User_Int*10
  46. ADD R4, R4, R4
  47. ADD R4, R4, R4
  48. ADD R4, R4, R4
  49. ADD R4, R4, R1 ;User_Int=User_Int*10+This_Digit
  50.  
  51. BR GET_USER_CHAR
  52. 2SC_CHECKER ADD R3, R3, #0
  53.  
  54. BRz PRINT_USER_INT_LOOP ;If Neg_Flag is not set, print the User_Int, otherwise take 2SC of User_Int
  55. NOT R4, R4
  56. ADD R4, R4, #1
  57.  
  58. PRINT_USER_INT_LOOP AND R0, R0, #0
  59. ADD R0, R0, R5 ;Copy Counter_Offset to R0, check whether 16 iterations passed
  60. ADD R0, R0, #-15
  61. ADD R0, R0, #-1
  62.  
  63. BRz GET_USER_CHAR ;program returns to prompt after printing inputted number in binary
  64. AND R0, R0, #0
  65. AND R6, R6, #0 ;clears previous bit mask retrieved from Mask_Array
  66. LEA R6, Mask_Array ;store Mask_Array pointer in R6
  67. ADD R6, R6, R5 ;add offset of Counter_Offset to Mask_Array pointer
  68. LDR R0, R6, #0 ;Load array value at new position into R0
  69. AND R0, R0, R4 ;Look at specific bit of User_Int
  70.  
  71. BRnp ONE
  72. AND R0, R0, #0 ;Resets R0 to be used for printing 1
  73. LD R0, Zero
  74. PUTC
  75. BR INCREMENT
  76.  
  77. ONE AND R0, R0, #0 ;Resets R0 to be used for printing 0
  78. LD R0, One
  79. PUTC
  80.  
  81. INCREMENT ADD R5, R5, #1 ;Increments Counter_Offset
  82. BR PRINT_USER_INT_LOOP
  83.  
  84. GOODBYE AND R0, R0, #0
  85. LEA R0, ENDPROMPT ; prints exit message
  86. PUTS
  87. HALT
  88.  
  89. STARTPROMPT .STRINGZ "Welcome to the conversion program!"
  90. ENDPROMPT .STRINGZ "Bye. Have a great day."
  91. User_Char .FILL #0
  92. This_Digit .FILL #0
  93. Neg_Flag .FILL #0
  94. User_Int .FILL #0
  95. Mask_Array:
  96. .FILL b1000000000000000
  97. .FILL b0100000000000000
  98. .FILL b0010000000000000
  99. .FILL b0001000000000000
  100. .FILL b0000100000000000
  101. .FILL b0000010000000000
  102. .FILL b0000001000000000
  103. .FILL b0000000100000000
  104. .FILL b0000000010000000
  105. .FILL b0000000001000000
  106. .FILL b0000000000100000
  107. .FILL b0000000000010000
  108. .FILL b0000000000001000
  109. .FILL b0000000000000100
  110. .FILL b0000000000000010
  111. .FILL b0000000000000001
  112. .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement