Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- ASCIIfiedReturnString db 'Must input nine (9) chars', 2 dup(' '), 0Ah, 27 dup(' '), 0Ah, 27 dup(' '), 0
- deASCIIfiedReturnString db 9 dup ('0'), 0
- compareString db 8 dup ('0'), 0
- library db '_ | ||_| | |_ _||_ _ _| _| |_| |_ |_ _|_ |_ |_|_ | |_ |_||_|_ |_| _|'
- .code
- ; c++ prototypes:
- ; extern "C" char* ASCIIfied(int stringLengthInBytes, const char* inputString);
- ; extern "C" char* deASCIIfied(int stringLengthInBytes, const char* inputString);
- ASCIIfied proc
- lea rax, ASCIIfiedReturnString
- cmp rcx, 9
- jne Done
- xor r8, r8 ; r8 rolls through the input string.
- xor r9, r9 ; r9 rolls through the output string.
- MakeRows:
- mov bl, BYTE PTR [rdx+r8]
- cmp bl, '0'
- je construct_0
- cmp bl, '1'
- je construct_1
- cmp bl, '2'
- je construct_2
- cmp bl, '3'
- je construct_3
- cmp bl, '4'
- je construct_4
- cmp bl, '5'
- je construct_5
- cmp bl, '6'
- je construct_6
- cmp bl, '7'
- je construct_7
- cmp bl, '8'
- je construct_8
- cmp bl, '9'
- je construct_9
- construct_0:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], ' |'
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], '_|'
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_1:
- mov WORD PTR [rax+r9], ' '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], ' '
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], ' '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_2:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_ '
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], '_|'
- mov BYTE PTR [rax+r9+58], ' '
- jmp ContinueLoop
- construct_3:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_ '
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], '_ '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_4:
- mov WORD PTR [rax+r9], ' '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_|'
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], ' '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_5:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_|'
- mov BYTE PTR [rax+r9+30], ' '
- mov WORD PTR [rax+r9+56], '_ '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_6:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_|'
- mov BYTE PTR [rax+r9+30], ' '
- mov WORD PTR [rax+r9+56], '_|'
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_7:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], ' '
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], ' '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_8:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_|'
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], '_|'
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- construct_9:
- mov WORD PTR [rax+r9], '_ '
- mov BYTE PTR [rax+r9+2], ' '
- mov WORD PTR [rax+r9+28], '_|'
- mov BYTE PTR [rax+r9+30], '|'
- mov WORD PTR [rax+r9+56], '_ '
- mov BYTE PTR [rax+r9+58], '|'
- jmp ContinueLoop
- ContinueLoop:
- inc r8
- add r9, 3
- dec rcx
- jnz MakeRows
- Done:
- ret
- ASCIIfied endp
- deASCIIfied proc
- lea rax, deASCIIfiedReturnString
- lea r10, compareString
- lea r12, Library
- cmp rcx, 9
- jne Done
- xor r8, r8 ; r8 rolls through the input string.
- xor r9, r9 ; r9 rolls through the output string.
- MakeItDo: ; Construct the compareString
- mov r11b, BYTE PTR [rdx+r8+1]
- mov BYTE PTR [r10], r11b
- mov r11b, BYTE PTR [rdx+r8+2]
- mov BYTE PTR [r10+1], r11b
- mov r11w, WORD PTR [rdx+r8+28]
- mov WORD PTR [r10+2], r11w
- mov r11b, BYTE PTR [rdx+r8+30]
- mov BYTE PTR [r10+4], r11b
- mov r11w, WORD PTR [rdx+r8+56]
- mov WORD PTR [r10+5], r11w
- mov r11b, BYTE PTR [rdx+r8+58]
- mov BYTE PTR [r10+7], r11b
- mov rbx, QWORD PTR [r10]
- cmp rbx, QWORD PTR [r12]
- je deconstruct_0
- cmp rbx, QWORD PTR [r12+8]
- je deconstruct_1
- cmp rbx, QWORD PTR [r12+16]
- je deconstruct_2
- cmp rbx, QWORD PTR [r12+24]
- je deconstruct_3
- cmp rbx, QWORD PTR [r12+32]
- je deconstruct_4
- cmp rbx, QWORD PTR [r12+40]
- je deconstruct_5
- cmp rbx, QWORD PTR [r12+48]
- je deconstruct_6
- cmp rbx, QWORD PTR [r12+56]
- je deconstruct_7
- cmp rbx, QWORD PTR [r12+64]
- je deconstruct_8
- cmp rbx, QWORD PTR [r12+72]
- je deconstruct_9
- deconstruct_0:
- mov BYTE PTR [rax+r9], '0'
- jmp ContinueLoop
- deconstruct_1:
- mov BYTE PTR [rax+r9], '1'
- jmp ContinueLoop
- deconstruct_2:
- mov BYTE PTR [rax+r9], '2'
- jmp ContinueLoop
- deconstruct_3:
- mov BYTE PTR [rax+r9], '3'
- jmp ContinueLoop
- deconstruct_4:
- mov BYTE PTR [rax+r9], '4'
- jmp ContinueLoop
- deconstruct_5:
- mov BYTE PTR [rax+r9], '5'
- jmp ContinueLoop
- deconstruct_6:
- mov BYTE PTR [rax+r9], '6'
- jmp ContinueLoop
- deconstruct_7:
- mov BYTE PTR [rax+r9], '7'
- jmp ContinueLoop
- deconstruct_8:
- mov BYTE PTR [rax+r9], '8'
- jmp ContinueLoop
- deconstruct_9:
- mov BYTE PTR [rax+r9], '9'
- jmp ContinueLoop
- ContinueLoop:
- inc r9
- add r8, 3
- dec rcx
- jnz MakeItDo
- Done:
- ret
- deASCIIfied endp
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement