Skip to content

Instantly share code, notes, and snippets.

@0x000000AC
Created August 30, 2015 23:03
Show Gist options
  • Save 0x000000AC/aa5504d44a8365384f5f to your computer and use it in GitHub Desktop.
Save 0x000000AC/aa5504d44a8365384f5f to your computer and use it in GitHub Desktop.
.LC0:
.string "ay"
.LC1:
.string "\nThis is the substring: %s\n"
.LC2:
.string "The first character of the word is %s\n"
.LC3:
.string "AyEnding: %s\n"
.LC4:
.string "Your word in Pig Latin is %s\n"
pigLatin(char*):
push rbp
mov rbp, rsp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 88
mov QWORD PTR [rbp-120], rdi
mov rax, rsp
mov rbx, rax
mov DWORD PTR [rbp-56], 0
mov QWORD PTR [rbp-64], OFFSET FLAT:.LC0
mov DWORD PTR [rbp-52], 0
.L4:
mov eax, DWORD PTR [rbp-52]
movsx rdx, eax
mov rax, QWORD PTR [rbp-120]
add rax, rdx
movzx eax, BYTE PTR [rax]
test al, al
je .L2
mov eax, DWORD PTR [rbp-52]
movsx rdx, eax
mov rax, QWORD PTR [rbp-120]
add rax, rdx
movzx eax, BYTE PTR [rax]
cmp al, 32
je .L3
add DWORD PTR [rbp-56], 1
.L3:
add DWORD PTR [rbp-52], 1
jmp .L4
.L2:
mov rax, QWORD PTR [rbp-120]
movzx eax, BYTE PTR [rax]
mov BYTE PTR [rbp-97], al
mov BYTE PTR [rbp-96], 0
mov eax, DWORD PTR [rbp-56]
cdqe
sub rax, 1
mov QWORD PTR [rbp-72], rax
mov rdx, rax
add rdx, 1
mov r10, rdx
mov r11d, 0
mov rdx, rax
add rdx, 1
mov r8, rdx
mov r9d, 0
lea rdx, [rax+1]
mov eax, 16
sub rax, 1
add rax, rdx
mov ecx, 16
mov edx, 0
div rcx
imul rax, rax, 16
sub rsp, rax
mov rax, rsp
add rax, 0
mov QWORD PTR [rbp-80], rax
mov eax, DWORD PTR [rbp-56]
sub eax, 1
movsx rdx, eax
mov rax, QWORD PTR [rbp-120]
lea rcx, [rax+1]
mov rax, QWORD PTR [rbp-80]
mov rsi, rcx
mov rdi, rax
call memcpy
mov rdx, QWORD PTR [rbp-80]
mov eax, DWORD PTR [rbp-56]
cdqe
mov BYTE PTR [rdx+rax], 0
mov eax, DWORD PTR [rbp-56]
add eax, 3
cdqe
sub rax, 1
mov QWORD PTR [rbp-88], rax
mov rdx, rax
add rdx, 1
mov r14, rdx
mov r15d, 0
mov rdx, rax
add rdx, 1
mov r12, rdx
mov r13d, 0
lea rdx, [rax+1]
mov eax, 16
sub rax, 1
add rax, rdx
mov ecx, 16
mov edx, 0
div rcx
imul rax, rax, 16
sub rsp, rax
mov rax, rsp
add rax, 0
mov QWORD PTR [rbp-96], rax
mov rdx, QWORD PTR [rbp-80]
mov rax, QWORD PTR [rbp-96]
mov rsi, rdx
mov rdi, rax
call strcat
mov rax, QWORD PTR [rbp-96]
lea rdx, [rbp-97]
mov rsi, rdx
mov rdi, rax
call strcat
mov rax, QWORD PTR [rbp-96]
mov rdx, QWORD PTR [rbp-64]
mov rsi, rdx
mov rdi, rax
call strcat
mov rax, QWORD PTR [rbp-80]
mov rsi, rax
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call printf
lea rax, [rbp-97]
mov rsi, rax
mov edi, OFFSET FLAT:.LC2
mov eax, 0
call printf
mov rax, QWORD PTR [rbp-64]
mov rsi, rax
mov edi, OFFSET FLAT:.LC3
mov eax, 0
call printf
mov rax, QWORD PTR [rbp-96]
mov rsi, rax
mov edi, OFFSET FLAT:.LC4
mov eax, 0
call printf
mov rsp, rbx
nop
lea rsp, [rbp-40]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
.LC5:
.string "Please enter a word."
.LC6:
.string "%s"
.LC7:
.string "\nThe String You Entered: %s"
main:
push rbp
mov rbp, rsp
sub rsp, 256
mov edi, OFFSET FLAT:.LC5
call puts
lea rax, [rbp-256]
mov rsi, rax
mov edi, OFFSET FLAT:.LC6
mov eax, 0
call scanf
lea rax, [rbp-256]
mov rsi, rax
mov edi, OFFSET FLAT:.LC7
mov eax, 0
call printf
lea rax, [rbp-256]
mov rdi, rax
call pigLatin(char*)
mov eax, 0
leave
ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment