Advertisement
Guest User

Untitled

a guest
Jan 28th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. .data
  2.  
  3. ASCIIfiedReturnString db 'Must input nine (9) chars', 2 dup(' '), 0Ah, 27 dup(' '), 0Ah, 27 dup(' '), 0
  4. deASCIIfiedReturnString db 9 dup ('0'), 0
  5. compareString db 8 dup ('0'), 0
  6. library db '_ | ||_| | |_ _||_ _ _| _| |_| |_ |_ _|_ |_ |_|_ | |_ |_||_|_ |_| _|'
  7.  
  8. .code
  9.  
  10. ; c++ prototypes:
  11. ; extern "C" char* ASCIIfied(int stringLengthInBytes, const char* inputString);
  12. ; extern "C" char* deASCIIfied(int stringLengthInBytes, const char* inputString);
  13.  
  14. ASCIIfied proc
  15. lea rax, ASCIIfiedReturnString
  16. cmp rcx, 9
  17. jne Done
  18.  
  19. xor r8, r8 ; r8 rolls through the input string.
  20. xor r9, r9 ; r9 rolls through the output string.
  21.  
  22. MakeRows:
  23. mov bl, BYTE PTR [rdx+r8]
  24.  
  25. cmp bl, '0'
  26. je construct_0
  27. cmp bl, '1'
  28. je construct_1
  29. cmp bl, '2'
  30. je construct_2
  31. cmp bl, '3'
  32. je construct_3
  33. cmp bl, '4'
  34. je construct_4
  35. cmp bl, '5'
  36. je construct_5
  37. cmp bl, '6'
  38. je construct_6
  39. cmp bl, '7'
  40. je construct_7
  41. cmp bl, '8'
  42. je construct_8
  43. cmp bl, '9'
  44. je construct_9
  45.  
  46. construct_0:
  47. mov WORD PTR [rax+r9], '_ '
  48. mov BYTE PTR [rax+r9+2], ' '
  49. mov WORD PTR [rax+r9+28], ' |'
  50. mov BYTE PTR [rax+r9+30], '|'
  51. mov WORD PTR [rax+r9+56], '_|'
  52. mov BYTE PTR [rax+r9+58], '|'
  53. jmp ContinueLoop
  54.  
  55. construct_1:
  56. mov WORD PTR [rax+r9], ' '
  57. mov BYTE PTR [rax+r9+2], ' '
  58. mov WORD PTR [rax+r9+28], ' '
  59. mov BYTE PTR [rax+r9+30], '|'
  60. mov WORD PTR [rax+r9+56], ' '
  61. mov BYTE PTR [rax+r9+58], '|'
  62. jmp ContinueLoop
  63.  
  64. construct_2:
  65. mov WORD PTR [rax+r9], '_ '
  66. mov BYTE PTR [rax+r9+2], ' '
  67. mov WORD PTR [rax+r9+28], '_ '
  68. mov BYTE PTR [rax+r9+30], '|'
  69. mov WORD PTR [rax+r9+56], '_|'
  70. mov BYTE PTR [rax+r9+58], ' '
  71. jmp ContinueLoop
  72.  
  73. construct_3:
  74. mov WORD PTR [rax+r9], '_ '
  75. mov BYTE PTR [rax+r9+2], ' '
  76. mov WORD PTR [rax+r9+28], '_ '
  77. mov BYTE PTR [rax+r9+30], '|'
  78. mov WORD PTR [rax+r9+56], '_ '
  79. mov BYTE PTR [rax+r9+58], '|'
  80. jmp ContinueLoop
  81.  
  82. construct_4:
  83. mov WORD PTR [rax+r9], ' '
  84. mov BYTE PTR [rax+r9+2], ' '
  85.  
  86. mov WORD PTR [rax+r9+28], '_|'
  87. mov BYTE PTR [rax+r9+30], '|'
  88.  
  89. mov WORD PTR [rax+r9+56], ' '
  90. mov BYTE PTR [rax+r9+58], '|'
  91. jmp ContinueLoop
  92.  
  93. construct_5:
  94. mov WORD PTR [rax+r9], '_ '
  95. mov BYTE PTR [rax+r9+2], ' '
  96. mov WORD PTR [rax+r9+28], '_|'
  97. mov BYTE PTR [rax+r9+30], ' '
  98. mov WORD PTR [rax+r9+56], '_ '
  99. mov BYTE PTR [rax+r9+58], '|'
  100. jmp ContinueLoop
  101.  
  102. construct_6:
  103. mov WORD PTR [rax+r9], '_ '
  104. mov BYTE PTR [rax+r9+2], ' '
  105. mov WORD PTR [rax+r9+28], '_|'
  106. mov BYTE PTR [rax+r9+30], ' '
  107. mov WORD PTR [rax+r9+56], '_|'
  108. mov BYTE PTR [rax+r9+58], '|'
  109. jmp ContinueLoop
  110.  
  111. construct_7:
  112. mov WORD PTR [rax+r9], '_ '
  113. mov BYTE PTR [rax+r9+2], ' '
  114. mov WORD PTR [rax+r9+28], ' '
  115. mov BYTE PTR [rax+r9+30], '|'
  116. mov WORD PTR [rax+r9+56], ' '
  117. mov BYTE PTR [rax+r9+58], '|'
  118. jmp ContinueLoop
  119.  
  120. construct_8:
  121. mov WORD PTR [rax+r9], '_ '
  122. mov BYTE PTR [rax+r9+2], ' '
  123. mov WORD PTR [rax+r9+28], '_|'
  124. mov BYTE PTR [rax+r9+30], '|'
  125. mov WORD PTR [rax+r9+56], '_|'
  126. mov BYTE PTR [rax+r9+58], '|'
  127. jmp ContinueLoop
  128.  
  129. construct_9:
  130. mov WORD PTR [rax+r9], '_ '
  131. mov BYTE PTR [rax+r9+2], ' '
  132. mov WORD PTR [rax+r9+28], '_|'
  133. mov BYTE PTR [rax+r9+30], '|'
  134. mov WORD PTR [rax+r9+56], '_ '
  135. mov BYTE PTR [rax+r9+58], '|'
  136. jmp ContinueLoop
  137.  
  138. ContinueLoop:
  139. inc r8
  140. add r9, 3
  141. dec rcx
  142. jnz MakeRows
  143. Done:
  144. ret
  145. ASCIIfied endp
  146.  
  147. deASCIIfied proc
  148. lea rax, deASCIIfiedReturnString
  149. lea r10, compareString
  150. lea r12, Library
  151.  
  152. cmp rcx, 9
  153. jne Done
  154.  
  155. xor r8, r8 ; r8 rolls through the input string.
  156. xor r9, r9 ; r9 rolls through the output string.
  157.  
  158. MakeItDo: ; Construct the compareString
  159. mov r11b, BYTE PTR [rdx+r8+1]
  160. mov BYTE PTR [r10], r11b
  161. mov r11b, BYTE PTR [rdx+r8+2]
  162. mov BYTE PTR [r10+1], r11b
  163. mov r11w, WORD PTR [rdx+r8+28]
  164. mov WORD PTR [r10+2], r11w
  165. mov r11b, BYTE PTR [rdx+r8+30]
  166. mov BYTE PTR [r10+4], r11b
  167. mov r11w, WORD PTR [rdx+r8+56]
  168. mov WORD PTR [r10+5], r11w
  169. mov r11b, BYTE PTR [rdx+r8+58]
  170. mov BYTE PTR [r10+7], r11b
  171.  
  172. mov rbx, QWORD PTR [r10]
  173.  
  174. cmp rbx, QWORD PTR [r12]
  175. je deconstruct_0
  176. cmp rbx, QWORD PTR [r12+8]
  177. je deconstruct_1
  178. cmp rbx, QWORD PTR [r12+16]
  179. je deconstruct_2
  180. cmp rbx, QWORD PTR [r12+24]
  181. je deconstruct_3
  182. cmp rbx, QWORD PTR [r12+32]
  183. je deconstruct_4
  184. cmp rbx, QWORD PTR [r12+40]
  185. je deconstruct_5
  186. cmp rbx, QWORD PTR [r12+48]
  187. je deconstruct_6
  188. cmp rbx, QWORD PTR [r12+56]
  189. je deconstruct_7
  190. cmp rbx, QWORD PTR [r12+64]
  191. je deconstruct_8
  192. cmp rbx, QWORD PTR [r12+72]
  193. je deconstruct_9
  194.  
  195. deconstruct_0:
  196. mov BYTE PTR [rax+r9], '0'
  197. jmp ContinueLoop
  198.  
  199. deconstruct_1:
  200. mov BYTE PTR [rax+r9], '1'
  201. jmp ContinueLoop
  202.  
  203. deconstruct_2:
  204. mov BYTE PTR [rax+r9], '2'
  205. jmp ContinueLoop
  206.  
  207. deconstruct_3:
  208. mov BYTE PTR [rax+r9], '3'
  209. jmp ContinueLoop
  210.  
  211. deconstruct_4:
  212. mov BYTE PTR [rax+r9], '4'
  213. jmp ContinueLoop
  214.  
  215. deconstruct_5:
  216. mov BYTE PTR [rax+r9], '5'
  217. jmp ContinueLoop
  218.  
  219. deconstruct_6:
  220. mov BYTE PTR [rax+r9], '6'
  221. jmp ContinueLoop
  222.  
  223. deconstruct_7:
  224. mov BYTE PTR [rax+r9], '7'
  225. jmp ContinueLoop
  226.  
  227. deconstruct_8:
  228. mov BYTE PTR [rax+r9], '8'
  229. jmp ContinueLoop
  230.  
  231. deconstruct_9:
  232. mov BYTE PTR [rax+r9], '9'
  233. jmp ContinueLoop
  234.  
  235. ContinueLoop:
  236. inc r9
  237. add r8, 3
  238.  
  239. dec rcx
  240. jnz MakeItDo
  241.  
  242. Done:
  243. ret
  244. deASCIIfied endp
  245.  
  246. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement