Advertisement
pcanete

Untitled

May 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.27 KB | None | 0 0
  1. .ORIG x3000 ;LAB4
  2.  
  3. GREETING3: .STRINGZ "\n \n Please enter a string\n"
  4. GREETING1: .STRINGZ "\n \n Enter a right offset cipher number \n"
  5.  
  6. START
  7.  
  8. ; clear all registers that we may use
  9. AND R0, R0, 0 ; USED FOR
  10. AND R1, R0, 0 ; USED FOR COUNTER
  11. AND R2, R0, 0 ; USED FOR INPUT SIZE CHECK
  12. AND R3, R0, 0 ; USED FOR HOLDS CIPHER
  13. AND R4, R0, 0 ; USED FOR ARRAY POINTER
  14. AND R5, R0, 0 ; USED FOR BASE ARRAY MEMORY LOCATION
  15. AND R6, R0, 0 ; USED FOR MEMORY POINTER
  16. ST R1, CIPHER
  17. ST R2, POINTER
  18. ST R1 CRYPTION
  19. ADD R1, R1, #1
  20. ST R1, COUNTER
  21. AND R1, R1, 0
  22.  
  23. LD R5, ARRAY_ADDRESS
  24.  
  25.  
  26. LEA R0, GREETING3 ; Prompt for string input
  27. PUTS
  28.  
  29.  
  30. STRING_INPUT ; print out STRING argument, stops when input = LF
  31. LD R6, INV_ASCII_LF
  32.  
  33. BRz CIPHER_INPUT
  34. GETC ; Get string character
  35. PUTC ; Print character
  36.  
  37. ADD R6 ,R6, R0 ; Check if char was enter key
  38. BRz CIPHER_INPUT ; If 0 go back to start of loop to stop loop
  39.  
  40.  
  41. ;Check if they have input 200 character limit
  42. LD R2 ARRAY_SIZE
  43. ADD R2, R2, R4
  44. BRn CIPHER_INPUT
  45.  
  46. WRITEARRAY ; Stores into array
  47. STR R0, R5, 0 ; Store the contents of string index [a] into ARRAY+pointer
  48. ADD R5, R5, #1 ; Increment pointer
  49. ADD R1, R1, #1 ; Increment counter
  50. ST R5, POINTER ; Store pointer
  51. ST R1, COUNTER
  52. BRnzp STRING_INPUT ; Loop back to recieve next character
  53.  
  54.  
  55. CIPHER_INPUT
  56.  
  57. LEA R0 GREETING1 ; Prompt for cipher input
  58. PUTS
  59.  
  60. C_INPUT
  61. AND R3, R3, 0 ; Enter button checking
  62. LD R3, ASCII_OFFEST
  63. LD R2 INV_ASCII_LF ; Multiplication
  64.  
  65. GETC
  66. PUTC
  67.  
  68. ADD R2, R2, R0 ; CHECK IF INPUT = LF
  69. BRz CRYPTION_INPUT
  70.  
  71. ADD R3, R3, R0 ; OFFSET INPUT to give actual number offset
  72.  
  73. LD R1, CIPHER ; Load the value of int into R1
  74. ADD R1, R1, R1 ; Makes int into 2int
  75. ADD R2, R1, R1 ; Makes int into 4int
  76. ADD R2, R2, R2 ; Makes int into 8int
  77. ADD R2, R2, R1 ; Adds 8int and 2int
  78. ADD R2, R2, R4 ; Adds R4, or digit, to 10int
  79. ADD R2, R3, R2
  80. ST R2, CIPHER ; Store 10int + digit into INT
  81. ADD R2 R2, 0 ; Add dummy 0 so BR checks R2 instead of R3
  82.  
  83. BRnzp C_INPUT
  84.  
  85.  
  86.  
  87.  
  88. CRYPTION_INPUT ; print out CIPHER argument, valid inputs are D, E, or X
  89.  
  90. LEA R0, GREETING2 ; Load cryption prompt
  91. PUTS ; Print cryption prompt
  92. GETC ; Get value, store into R0
  93. PUTC ; Display value entered
  94.  
  95. ; Check if input == D
  96. LD R1, INV_ASCII_D ; Load ascii value of inverse D character
  97. ADD R1, R1, R0 ; Add input and inverse D to check if result is 0
  98. BRz DECRYPT; If 0 go to DECRYPT subroutine
  99.  
  100. ; Check if input == E
  101. LD R1, INV_ASCII_E ; Load ascii value of inverse E character
  102. ADD R1, R1, R0 ; Add input and inverse E to check if result is 0
  103. BRz ENCRYPT ; If 0 go to ENCRYPT subroutine
  104.  
  105. LD R1, INV_ASCII_X ; Load ascii value of inverse X
  106. ; Check if input == X
  107. ADD R1, R1, R0 ; Add input and inverse X to check if result is 0
  108. BRz STOP ; If 0 STOP
  109.  
  110. ST R0 CRYPTION ; Set R4 to value of char - 48 (digit)
  111.  
  112. BRnzp CRYPTION_INPUT ; If not valid input loop back to reprompt for cipher
  113.  
  114.  
  115.  
  116.  
  117.  
  118. DECRYPT ; Inverts cipher
  119. ST R0, REG0
  120. ST R1, REG1
  121. ST R2, REG2
  122. ST R3, REG3
  123. ST R4, REG4
  124. ST R5, REG5
  125. ST R6, REG6
  126.  
  127. LD R1, CIPHER
  128. NOT R1, R1
  129. ADD R1, R1, #13
  130. ADD R1, R1, #12
  131. ST R1, CIPHER
  132. BRnzp CRYPT
  133.  
  134. ENCRYPT
  135. ST R0, REG0
  136. ST R1, REG1
  137. ST R2, REG2
  138. ST R3, REG3
  139. ST R4, REG4
  140. ST R5, REG5
  141. ST R6, REG6
  142. CRYPT AND R0, R0, 0 ; HOLD CIPHER
  143. AND R1, R0, 0 ; ITERATION COUNTER
  144. AND R2, R0, 0 ; BASE ARRAY POINTER
  145. AND R3, R0, 0 ; CRYPTED ARRAY POINTER
  146. AND R4, R0, 0 ; USED FOR CHARACTER CHECKING
  147. AND R5, R0, 0 ; VALUE OF BASE REGISTER
  148. AND R6, R0, 0 ; WORKING REGISTER
  149.  
  150. LD R0, CIPHER
  151. LD R1, COUNTER ; Pointer used as counter
  152. LD R2, ARRAY_ADDRESS ; Set R2 to location of base array
  153. LD R3, ARRAY_SIZE ; Set R3 to location of encrypted array
  154. ADD R3, R3, R2
  155.  
  156.  
  157.  
  158.  
  159. FUNCTION
  160.  
  161. JSR LOAD ; CALL LOAD ROUTINE
  162.  
  163. BRz PRINT
  164.  
  165.  
  166. LD R4, INV_64 ; CHECK IF STRING WAS NOT LETTER, less than capital A
  167. ADD R4,R4, R5
  168. BRn INSTANT_WRITE
  169.  
  170. LD R4, INV_122 ; CHECK IF STRING WAS NOT LETTER, less than lowercase z
  171. ADD R4, R4, R5
  172. BRp INSTANT_WRITE`
  173. ; LD R6, INV_90 ; CHECK IF STRING WAS NOT LETTER, less between capital Z and lowercase a
  174. ; ADD R6, R6, R5
  175. ; LD R4, INV_6
  176. ; ADD R4, R6, R6
  177. ;X BRn INSTANT_WRITE
  178.  
  179. LD R6, INV_90 ; IF STRING < 90, must be lowercase
  180. ADD R6, R6, R5
  181. BRnz UPPERCASE
  182.  
  183. BRnzp LOWERCASE ; IF STRING >90m must be uppercase
  184.  
  185.  
  186. INSTANT_WRITE ;Check if input equals space
  187.  
  188. JSR STORE
  189. ADD R2, R2, #1 ; INCREMENT BASE ARRAY Pointer
  190. ADD R3, R3, #1 ; INCREMENT CRYPTED ARRAY Pointer
  191. ADD R1, R1, #-1 ; DECREMENT COUNT
  192. BRnzp FUNCTION
  193.  
  194. LOWERCASE
  195.  
  196. LD R6, INV_122
  197. ADD R6, R6, R0
  198. ADD R6, R6, R5 ; Check if cipher + input is greater than uppercase Z
  199. BRp LOWERRIGHTWRAP
  200. LD R6, INV_97
  201. ADD R6, R6, R0
  202. ADD R6, R6, R5 ; Check if cipher + input is greater than uppercase Z
  203. BRn LOWERLEFTWRAP
  204.  
  205. BRnzp WRITE
  206.  
  207. LOWERRIGHTWRAP ;Lowercase rightwards wrap - cipher = cipher - 26
  208.  
  209. LD R6, INV_26
  210. ADD R0, R0 R6
  211. BRnzp WRITE
  212.  
  213. LOWERLEFTWRAP
  214.  
  215. LD R6, INV_26 ;Lowercase leftwards wrap - cipher = !cipher + 26
  216. NOT R6, R6
  217. ADD R0, R0, R6
  218. BRnzp WRITE
  219.  
  220. UPPERCASE
  221.  
  222. LD R6, INV_90
  223. ADD R6, R6, R0
  224. ADD R6, R6, R5 ; Check if cipher + input is greater than uppercase Z
  225. BRp UPPERRIGHTWRAP
  226.  
  227. LD R6, INV_65
  228. ADD R6, R6, R0
  229. ADD R6, R6, R5 ; Check if cipher + input is greater than uppercase Z
  230. BRn UPPERLEFTWRAP
  231.  
  232. BRnzp WRITE
  233.  
  234. UPPERRIGHTWRAP
  235.  
  236. LD R6, INV_26
  237. ADD R0, R0 R6
  238. BRnzp WRITE
  239.  
  240. UPPERLEFTWRAP
  241.  
  242. LD R6, INV_26
  243. NOT R6, R6
  244. ADD R0, R0, R6
  245. BRnzp WRITE
  246.  
  247.  
  248. WRITE
  249. ADD R5, R5, R0 ; Add cipher to R5
  250. JSR STORE
  251. ADD R2, R2, #1 ; INCREMENT BASE ARRAY Pointer
  252. ADD R3, R3, #1 ; INCREMENT CRYPTED ARRAY Pointer
  253. ADD R1, R1, #-1 ; DECREMENT COUNT
  254. BRnzp FUNCTION
  255.  
  256. PRINT
  257.  
  258. LEA R0 , GREETING4 ;Here is your original string and encrypted result
  259. PUTS
  260.  
  261. LEA R0, GREETING6 ;<Original>:
  262. PUTS
  263.  
  264. LEA R0, ARRAY ;Print original array
  265. PUTS
  266.  
  267. LEA R0, GREETING5 ;<Encrypted>:
  268. PUTS
  269.  
  270. LEA R0, ARRAY ;Print crypted array
  271. LD R1, ARRAY_SIZE
  272. ADD R0, R0, R1
  273. PUTS
  274.  
  275. AND R1, R1, 0
  276. LD R2 ARRAY_SIZE ;R2 as counter for cleararray
  277. ADD R2, R2, R2
  278. LEA R0, ARRAY
  279.  
  280. CLEARARRAY
  281. BRnz START
  282. STR R1, R0, 0
  283. ADD R0, R0, #1
  284. ADD R2, R2, #-1
  285. BRnzp CLEARARRAY
  286.  
  287.  
  288. RESTOREARRAY
  289.  
  290. ST R0, REG0
  291. ST R1, REG1
  292. ST R2, REG2
  293. ST R3, REG3
  294. ST R4, REG4
  295. ST R5, REG5
  296. ST R6, REG6
  297. BRnzp START
  298.  
  299.  
  300. LOAD ;SETS R5 TO VALUE OF (Ri, Ci) with R0 as row (1 or 2), R2 as column (1-200)
  301.  
  302. LDR R5, R2, 0 ; LOAD given array index into given register
  303. RET
  304.  
  305.  
  306. STORE ;STORES VALUE OF (Ri, Ci) with R0 as row (1 or 2(, R3 as column (1-200)
  307.  
  308. STR R5, R3, 0 ; STORE given register into given array index
  309. RET
  310.  
  311. STOP HALT
  312.  
  313. ;DECLERATION
  314.  
  315.  
  316. CIPHER .fill 0 ; Value from 0 - 25 that denotes rightward shift
  317. POINTER .fill 0
  318. COUNTER .fill 1
  319. CRYPTION .fill 0
  320. ARRAY_SIZE .fill #200;
  321. INV_ASCII_E .fill #-69
  322. INV_ASCII_D .fill #-68
  323. INV_ASCII_X .fill #-88
  324. INV_ASCII_LF .fill #-10
  325. INV_ASCII_SPACE .fill #32
  326. INV_64 .fill #-64
  327. INV_122 .fill #-122
  328. INV_90 .fill #-90
  329. INV_6 .fill #-6
  330. INV_97 .fill #-97
  331. INV_26 .fill #-26
  332. INV_65 .fill #-65
  333. ASCII_OFFEST .fill #-48
  334. ARRAY_ADDRESS .fill ARRAY
  335. REG0 .fill 0
  336. REG1 .fill 0
  337. REG2 .fill 0
  338. REG3 .fill 0
  339. REG4 .fill 0
  340. REG5 .fill 0
  341. REG6 .fill 0
  342. REG7 .fill 0
  343. GREETING6 .STRINGZ "\n <Original>: "
  344. GREETING5 .STRINGZ "\n <Crypted>: "
  345. GREETING4 .STRINGZ "\n Here is your original string and crypted result"
  346.  
  347. GREETING2: .STRINGZ "\n \n Enter 'E' to encrypt, or 'D' to decrypt, or X to cancel \n"
  348.  
  349. ARRAY .BLKW 400
  350.  
  351. .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement