game::generateRandomValues(): push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], rdi mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax] cmp eax, 1 jne .L2 call rand mov ecx, eax movsx rax, ecx imul rax, rax, 954437177 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 3 add eax, edx add eax, eax sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+4], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 1717986919 shr rax, 32 mov edx, eax sar edx, 3 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx sal eax, 2 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+8], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 715827883 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx add eax, eax add eax, edx sal eax, 3 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+12], edx call rand movsx rdx, eax imul rdx, rdx, 1321528399 shr rdx, 32 mov ecx, edx sar ecx, 3 cdq sub ecx, edx mov edx, ecx imul edx, edx, 26 sub eax, edx mov edx, eax mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+16], edx jmp .L5 .L2: mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax] cmp eax, 2 jne .L4 call rand mov ecx, eax movsx rax, ecx imul rax, rax, 1717986919 shr rax, 32 mov edx, eax sar edx, 3 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx sal eax, 2 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+4], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 715827883 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx add eax, eax add eax, edx sal eax, 3 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+8], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 818089009 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx sal eax, 2 add eax, edx sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+12], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 1374389535 shr rax, 32 mov edx, eax sar edx, 3 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx lea edx, [0+rax*4] add eax, edx sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+16], edx jmp .L5 .L4: mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax] cmp eax, 3 jne .L5 call rand mov ecx, eax movsx rax, ecx imul rax, rax, 715827883 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx add eax, eax add eax, edx sal eax, 3 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+4], edx call rand movsx rdx, eax imul rdx, rdx, 1321528399 shr rdx, 32 mov ecx, edx sar ecx, 3 cdq sub ecx, edx mov edx, ecx imul edx, edx, 26 sub eax, edx mov edx, eax mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+8], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 954437177 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 3 add eax, edx add eax, eax sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+12], edx call rand mov ecx, eax movsx rax, ecx imul rax, rax, 1717986919 shr rax, 32 mov edx, eax sar edx, 3 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx sal eax, 2 sub ecx, eax mov edx, ecx mov rax, QWORD PTR [rbp-8] mov DWORD PTR [rax+16], edx .L5: nop leave ret .LC0: .string "You have taken " .LC1: .string " health from the computer. Its health is now " game::pAttack(int&): push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], rdi mov QWORD PTR [rbp-16], rsi mov rax, QWORD PTR [rbp-16] mov edx, DWORD PTR [rax] mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+16] sub edx, eax mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], edx mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] test eax, eax jg .L7 mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], 0 .L7: mov esi, OFFSET FLAT:.LC0 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+16] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC1 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) nop leave ret .LC2: .string "You have healed " .LC3: .string " health. Your health is now " game::pHeal(int&): push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], rdi mov QWORD PTR [rbp-16], rsi mov rax, QWORD PTR [rbp-16] mov edx, DWORD PTR [rax] mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+12] add edx, eax mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], edx mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] cmp eax, 100 jle .L9 mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], 100 .L9: mov esi, OFFSET FLAT:.LC2 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+12] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC3 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) nop leave ret .LC4: .string "The computer has taken " .LC5: .string " health from you. Your health is now " game::cAttack(int&): push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], rdi mov QWORD PTR [rbp-16], rsi mov rax, QWORD PTR [rbp-16] mov edx, DWORD PTR [rax] mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+8] sub edx, eax mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], edx mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] test eax, eax jg .L11 mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], 0 .L11: mov esi, OFFSET FLAT:.LC4 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+8] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC5 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) nop leave ret .LC6: .string "The computer has healed " .LC7: .string " health." .LC8: .string " Its health is now " game::cHeal(int&): push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], rdi mov QWORD PTR [rbp-16], rsi mov rax, QWORD PTR [rbp-16] mov edx, DWORD PTR [rax] mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+4] add edx, eax mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], edx mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] cmp eax, 100 jle .L13 mov rax, QWORD PTR [rbp-16] mov DWORD PTR [rax], 100 .L13: mov esi, OFFSET FLAT:.LC6 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax+4] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC7 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov esi, OFFSET FLAT:.LC8 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) nop leave ret game::ComputerRandomChoose(int&, int&): push rbp mov rbp, rsp sub rsp, 32 mov QWORD PTR [rbp-8], rdi mov QWORD PTR [rbp-16], rsi mov QWORD PTR [rbp-24], rdx mov rax, QWORD PTR [rbp-24] mov eax, DWORD PTR [rax] cmp eax, 29 jg .L15 mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] cmp eax, 60 jle .L15 mov rdx, QWORD PTR [rbp-24] mov rax, QWORD PTR [rbp-8] mov rsi, rdx mov rdi, rax call game::cHeal(int&) jmp .L16 .L15: mov rax, QWORD PTR [rbp-24] mov eax, DWORD PTR [rax] cmp eax, 29 jg .L17 mov rax, QWORD PTR [rbp-16] mov eax, DWORD PTR [rax] cmp eax, 39 jg .L17 mov rdx, QWORD PTR [rbp-16] mov rax, QWORD PTR [rbp-8] mov rsi, rdx mov rdi, rax call game::cAttack(int&) jmp .L16 .L17: mov rdx, QWORD PTR [rbp-16] mov rax, QWORD PTR [rbp-8] mov rsi, rdx mov rdi, rax call game::cAttack(int&) nop .L16: nop leave ret .LC9: .string "Attack(a) or Heal(h) or Exit(any other letter): " .LC10: .string "Don't try healing yourself while you already have 100 health. You'll automatically attack" .LC11: .string "Computer won with " .LC12: .string " healh left. And you lost." .LC13: .string "You won with " .LC14: .string " health left. And the computer lost" .LC15: .string "You have tied." .LC16: .string "Do you want to restart? (yes = y, no = any other letter): " game::gameloop(): push rbp mov rbp, rsp sub rsp, 32 mov QWORD PTR [rbp-24], rdi mov rax, QWORD PTR [rbp-24] mov rdi, rax call game::generateRandomValues() mov BYTE PTR [rbp-1], 0 mov DWORD PTR [rbp-8], 100 mov DWORD PTR [rbp-12], 100 .L28: cmp BYTE PTR [rbp-1], 0 jne .L34 mov esi, OFFSET FLAT:.LC9 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) lea rax, [rbp-14] mov rsi, rax mov edi, OFFSET FLAT:_ZSt3cin call std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&) movzx eax, BYTE PTR [rbp-14] cmp al, 104 jne .L20 mov eax, DWORD PTR [rbp-8] cmp eax, 99 jg .L20 lea rdx, [rbp-8] mov rax, QWORD PTR [rbp-24] mov rsi, rdx mov rdi, rax call game::pHeal(int&) jmp .L21 .L20: movzx eax, BYTE PTR [rbp-14] cmp al, 104 jne .L22 mov eax, DWORD PTR [rbp-8] cmp eax, 99 jle .L22 mov esi, OFFSET FLAT:.LC10 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) lea rdx, [rbp-12] mov rax, QWORD PTR [rbp-24] mov rsi, rdx mov rdi, rax call game::pAttack(int&) jmp .L21 .L22: movzx eax, BYTE PTR [rbp-14] cmp al, 97 jne .L23 lea rdx, [rbp-12] mov rax, QWORD PTR [rbp-24] mov rsi, rdx mov rdi, rax call game::pAttack(int&) jmp .L21 .L23: mov edi, 0 call exit .L21: mov eax, DWORD PTR [rbp-8] test eax, eax jle .L24 mov eax, DWORD PTR [rbp-12] test eax, eax jg .L25 .L24: mov BYTE PTR [rbp-1], 1 jmp .L19 .L25: lea rdx, [rbp-12] lea rcx, [rbp-8] mov rax, QWORD PTR [rbp-24] mov rsi, rcx mov rdi, rax call game::ComputerRandomChoose(int&, int&) mov eax, DWORD PTR [rbp-8] test eax, eax jle .L26 mov eax, DWORD PTR [rbp-12] test eax, eax jg .L28 .L26: mov BYTE PTR [rbp-1], 1 jmp .L28 .L34: nop .L19: mov eax, DWORD PTR [rbp-8] test eax, eax jg .L29 mov esi, OFFSET FLAT:.LC11 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov eax, DWORD PTR [rbp-12] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC12 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) jmp .L30 .L29: mov eax, DWORD PTR [rbp-12] test eax, eax jg .L31 mov esi, OFFSET FLAT:.LC13 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov rdx, rax mov eax, DWORD PTR [rbp-8] mov esi, eax mov rdi, rdx call std::basic_ostream<char, std::char_traits<char> >::operator<<(int) mov esi, OFFSET FLAT:.LC14 mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) jmp .L30 .L31: mov esi, OFFSET FLAT:.LC15 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ mov rdi, rax call std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)) .L30: mov esi, OFFSET FLAT:.LC16 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) lea rax, [rbp-13] mov rsi, rax mov edi, OFFSET FLAT:_ZSt3cin call std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&) movzx eax, BYTE PTR [rbp-13] cmp al, 121 jne .L32 mov rax, QWORD PTR [rbp-24] mov rdi, rax call game::gameloop() jmp .L33 .L32: mov edi, 0 call exit .L33: leave ret .LC17: .string "enter difficulty level (1 easy, 2 normal, 3 difficult) or any other key to exit\n" main: push rbp mov rbp, rsp sub rsp, 48 mov edi, 0 call time mov edi, eax call srand mov DWORD PTR [rbp-32], 0 mov DWORD PTR [rbp-28], 0 mov DWORD PTR [rbp-24], 0 mov DWORD PTR [rbp-20], 0 mov DWORD PTR [rbp-16], 0 mov esi, OFFSET FLAT:.LC17 mov edi, OFFSET FLAT:_ZSt4cout call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) lea rax, [rbp-36] mov rsi, rax mov edi, OFFSET FLAT:_ZSt3cin call std::basic_istream<char, std::char_traits<char> >::operator>>(int&) mov eax, DWORD PTR [rbp-36] cmp eax, 1 je .L36 mov eax, DWORD PTR [rbp-36] cmp eax, 2 je .L36 mov eax, DWORD PTR [rbp-36] cmp eax, 3 jne .L37 .L36: mov eax, DWORD PTR [rbp-36] cmp eax, 1 jne .L38 mov DWORD PTR [rbp-32], 1 jmp .L41 .L38: mov eax, DWORD PTR [rbp-36] cmp eax, 2 jne .L40 mov DWORD PTR [rbp-32], 2 jmp .L41 .L40: mov DWORD PTR [rbp-32], 3 jmp .L41 .L37: mov eax, 0 jmp .L43 .L41: lea rax, [rbp-32] mov rdi, rax call game::gameloop() mov eax, 0 .L43: leave ret __static_initialization_and_destruction_0(int, int): push rbp mov rbp, rsp sub rsp, 16 mov DWORD PTR [rbp-4], edi mov DWORD PTR [rbp-8], esi cmp DWORD PTR [rbp-4], 1 jne .L46 cmp DWORD PTR [rbp-8], 65535 jne .L46 mov edi, OFFSET FLAT:_ZStL8__ioinit call std::ios_base::Init::Init() [complete object constructor] mov edx, OFFSET FLAT:__dso_handle mov esi, OFFSET FLAT:_ZStL8__ioinit mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev call __cxa_atexit .L46: nop leave ret _GLOBAL__sub_I_game::generateRandomValues(): push rbp mov rbp, rsp mov esi, 65535 mov edi, 1 call __static_initialization_and_destruction_0(int, int) pop rbp ret
Write, Run & Share Assembly code online using OneCompiler's Assembly online compiler for free. It's one of the robust, feature-rich online compilers for Assembly language. Getting started with the OneCompiler's Assembly compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as Assembly
and start coding.
Assembly language(asm) is a low-level programming language, where the language instructions will be more similar to machine code instructions.
Every assembler may have it's own assembly language designed for a specific computers or an operating system.
Assembly language requires less execution time and memory. It is more helful for direct hardware manipulation, real-time critical applications. It is used in device drivers, low-level embedded systems etc.
Assembly language usually consists of three sections,
Data section
To initialize variables and constants, buffer size these values doesn't change at runtime.
bss section
To declare variables
text section
_start
specifies the starting of this section where the actually code is written.
There are various define directives to allocate space for variables for both initialized and uninitialized data.
variable-name define-directive initial-value
Define Directive | Description | Allocated Space |
---|---|---|
DB | Define Byte | 1 byte |
DW | Define Word | 2 bytes |
DD | Define Doubleword | 4 bytes |
DQ | Define Quadword | 8 bytes |
DT | Define Ten Bytes | 10 bytes |
Define Directive | Description |
---|---|
RESB | Reserve a Byte |
RESW | Reserve a Word |
RESD | Reserve a Doubleword |
RESQ | Reserve a Quadword |
REST | Reserve a Ten Bytes |
Constants can be defined using
CONSTANT_NAME EQU regular-exp or value
%assign constant_name value
%define constant_name value
Loops are used to iterate a set of statements for a specific number of times.
mov ECX,n
L1:
;<loop body>
loop L1
where n specifies the no of times loops should iterate.
Procedure is a sub-routine which contains set of statements. Usually procedures are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
procedure_name:
;procedure body
ret