În tradiția apocrifă se spune că el nu a fost împotriva lui Baal deda la petrecere a timpului liber de asamblare încă nu a scris pe ea BASIC-ul. Deci, de ce nu ar trebui să facem acest lucru?
În ultimul capitol al acestui volum, am promis să-ți spun cum să conjure NOP instrucțiuni. Este ușor și poate face totul, care deține elementele de bază ale ansamblului. Dar, mai întâi, ar trebui să știi ce Opcode. De fapt, eu sunt sigur că aproape orice unul care a preluat studiul vrajilor cod stie ce este, dar, cu toate acestea, spun că în cazul în care cineva nu știe.
După cum s-ar putea să fie conștienți, asamblorii traduce instrucțiuni într-o (mnemonic) forma umană ușor de înțeles și de neuitat într-o formă ușor de înțeles de calculatoare - în cod mașină. Instrucțiunile din cod mașină au un format specific și constau din mai multe domenii, dintre care majoritatea este Opcode - Opcode. Câteva, instrucțiuni simple, constau doar dintr-un Opcode și în alte domenii, nu.
Un astfel de instrucțiune este NOP. opcod ei - 90h. Această instrucțiune nu are parametri, deci cunoștințe opcode suficient pentru vraja. Aici este un program de exemplu:
Sper ca cititorii acestui capitol, imblanzitori din zilele din urmă, întrebarea de ce acest program nu face nimic. Iar pentru cei care nu apar, am explica: instrucțiuni NOP nu face nimic (deci mnemnonika sa - Nu OPERATIONS). Pentru a fi mai precis, NOP are aceeași Opcode ca instrucțiune XCHG EAX, EAX, dar rezultatul (nici o schimbare) nu se schimba.
Dar NOP - nu e foarte interesant. Desigur, vraja inspiră la început, dar în practică nu este foarte util. Ar fi frumos dacă am putea evoca ceva mai util - de exemplu, crește sau descrește valoarea în EAX este 1.
Este posibil. Pentru a face acest lucru, există mnemonice INC (Increment) și decembrie (decrementare). Opcode INC EAX - 40h, opcod decembrie EAX - 48h. În continuare, voi furniza textul programului, care este pus în numărul EAX 10, atunci conținutul EAX este crescut cu 1 de cinci ori, apoi - de trei ori mai reduse cu 1. Utilizați abac este ușor de calculat că rezultatul ar trebui să aibă 12. Acesta este numărul care le-am afișat în messageBox.
Compilați si executa programul putem vedea că rezultatul este 12. nostru scrie corect și fără erori. La petrecere a timpului liber, puteți experimenta cu EAX PUSH (opcode 50h) și EAX POP (opcode 58h).
Cu toate acestea, acest lucru poate părea să vă un pic. S-ar putea dori să facă o vrajă EBX PUSH sau INC EDX - și este destul de la indemana ta! Eu vă voi da o formulă generală pentru aceste instrucțiuni atunci când este un registru operand (registrul de nume, mai degrabă decât o celulă de memorie, cu 32 de biți!). Formula generală este următoarea:
Basic + numărul din registrul Opcode
Opcodes de bază:- INC - 40h
- Decembrie - 48h
- PUSH - 50H
- POP - 58
- EAX - 0
- ECX - 1
- EDX - 2
- EBX - 3
- ESP - 4
- EBP - 5
- ESI - 6
- EDI - 7
Folosind această formulă este ușor de calculat, de exemplu, opcode PUSH EDX: 48h + 2 = 4Ah. Vă recomandăm să practice în pregătirea de vrăji simple, pe baza de mai sus.
Destul de practică, la rândul său la întrebările teoretice. Cât timp poate fi opcode? Pentru familiile de procesoare x86 poate fi o lungime de 3 octeți. De asemenea, o parte din octeți OpCode poate fi utilizat ModR / M, care vor fi discutate în capitolele următoare.
Da, instrucțiunile pot varia în dimensiune. Și, în unele procesoare cu instrucțiuni diferite de arhitectură au o lungime fixă. De ce, x86 nu este? Conform legendei, atunci când Intel piticii minat de minereu pentru primele procesoare, ei încă nu știu cum să te desparți minereului la aceeași dimensiune, conform instrucțiunilor. Cunoașterea și abilitatea de a face veni mai târziu. Dar apoi piticii Intel a continuat să zdrobească minereului la diferite-instrucțiuni pentru că au știut cum să o facă bine, iar produsele lor sunt deja cunoscute și utilizate de mulți.
Aș dori, de asemenea, să ia în considerare de ce a fost necesar pentru a face un mnemonic separat pentru XCHG EAX, EAX - NOP. Motivul, desigur, în sensul metafizic al 90h. Într-un sens, nouă (ca triada triplat) simbolizează Yin și Yang, și zero, reprezintă Absolutul printre valorile sale. Adăugarea un astfel de cuvânt magic puternic în assembleur x86 consolidat poziția pe planul astral.
În capitolul următor, vom încerca să pună în unitatea de EAX. Mai mult decât atât, încercarea noastră va avea succes. )
[C] Aquila / WASM.RU