(Kodowanie polskich znaków diakrytycznych: UTF-8) -=(* ReverseCraft Assembler #2 - Opcode *)=- 1. Niekorzystając z disassemblera, a jedynie z wiedzy o budowie opcode'ów, zdisassembluj poniższy, zapisany w hexa, program (tj. przepisz na postać mnemoniczną/tekstową/assembler): 55 89 e5 81 ec 20 00 00 00 89 45 f8 8b 01 Uargumentuj dlaczego każdą instrukcję zdisassemblowałeś(aś) tak a nie inaczej, podobnie jak ja to robię w odcinku 002 (od momentu 43 minuta 46 sekund). 2. Które z poniższych zdań są PRAWDZIWE, a które FAŁSZYWE? Uzasadnij swój wybór, tj. napisz dlaczego dane zdanie uważasz za prawdziwe/fałszywe. a) Każdą instrukcję w assemblerze można zakodować tylko i wyłącznie na jeden, unikatowy, sposób b) Instrukcje "int3" oraz "int 3" to dwie różne instrukcje, kodowane różnymi opcode'ami c) W x86 można zakodować tylko jedno odwołanie do adresu na instrukcję, tj. nie można zrobić mov [eax], [ecx] d) Polecenie mov [eax], [ecx] się nie skompiluje tylko i wyłącznie dlatego, iż kompilator nie wie ile danych programista chce skopiować; poprawna wersja wygląda następująco: mov dword [eax], [ecx] e) mimo iż oficjalnie tylko jeden prefix z danej grupy może poprzedzać opcode, to w zasadzie nie ma przeciwskazań żeby dać więcej niż jeden prefix z danej grupy f) skala w bajcie SIB przyjmuje wartości odpowiadające liczbom 1, 2, 3 oraz 4 3. Korzystając z opcodes.txt i manuali Intela, zakoduj następujące instrukcje: MOV ECX, EAX MOV [ECX], ECX PUSH word [EBX+4] ADD [EDX+EAX*8], EAX INC ESI Uargumentuj dlaczego kodujesz daną instrukcję w taki a nie inny sposób.