Opcode
Een opcode (een afkorting van operation code) is een deel van een instructie aan een computer die aangeeft welke bewerking uitgevoerd moet worden.
Een instructie die door een computer wordt uitgevoerd, bestaat meestal uit twee delen: de opcode en de operanden. Er zijn twee soorten opcodes: in de machinetaal en in de assembleertaal. De laatste worden mnemonische opcodes genoemd.
Luidt de instructie bijvoorbeeld dat er vijf moet worden opgeteld bij register EBX, dan is:
- opcode: 'optellen bij een register'
- operanden: 'EBX' en '5'
De machinecode (voor 32-bits x86) van deze instructie is 83C305. De opcode is 83C, het register EBX wordt aangeduid met 3 en de bij te tellen waarde is 05.
De assemblerinstructie is:
ADD EBX,5
Hierin is ADD de mnemonische opcode.
In het gegeven voorbeeld komen de opcodes niet precies met elkaar overeen. Uit de mnemonische opcode 'ADD' blijkt namelijk dat er moet worden opgeteld, maar niet dat er bij een register moet worden opgeteld. Dat blijkt pas uit de operand 'EBX'. Er zijn assembleertalen waarin er wel een directe een-op-eenrelatie is tussen de opcode in de machinetaal en de mnemonische opcode. Zo maakt de assembleertaal van de IBM 360 onderscheid tussen de mnemnnische opcodes 'A' (optellen van waarde in het geheugen) en 'AR' (optellen van waarde uit register). De assemblerinstructies zijn:
A 4,8 Tel de inhoud van adres 8 op bij register 4 AR 4,8 Tel de inhoud van register 8 op bij register 4
Ongedocumenteerde opcodes
De fabrikant van een computer of processor geeft documentatie uit waarin de opcodes beschreven worden, zodat het mogelijk is software te ontwikkelen. Nu zullen er haast altijd bitcombinaties zijn die niet beschreven zijn. Meestal zwijgt de fabrikant hierover, of hij beschrijft ongedocumenteerde opcodes met woorden als 'gereserveerd' of 'onvoorspelbaar gedrag'. Ook is het mogelijk dat een ongedocumenteerde opcode een gedocumenteerde interrupt veroorzaakt.
Natuurlijk zullen er altijd mensen zijn die deze ongedocumenteerde opcodes uitproberen. Soms blijkt dat ze hetzelfde doen als een andere, wel gedocumenteerde opcode. Meestal komt dat doordat de elektronica van de processor zo eenvoudig mogelijk is gehouden. Het komt ook weleens voor dat een ongedocumenteerde opcode een zeer nuttige bewerking uitvoert, maar dat de fabrikant heeft besloten deze mogelijkheid niet te publiceren.
Sommige softwareontwikkelaars gebruiken de ongedocumenteerde opcodes om het disassembleren te bemoeilijken of om te kunnen aantonen dat een programma met hun pakket ontwikkeld is.
Het is enigszins riskant een ongedocumenteerde opcode te gebruiken, want de fabrikant van de processor garandeert niet dat een volgende versie van de processor die opcode ook kan uitvoeren. Aan de andere kant zal de fabrikant ernaar streven de ongedocumenteerde opcodes ook in de nieuwe versie in te bouwen, want hij weet dat hij de schuld krijgt als een programma op de nieuwe processor ineens niet meer werkt.
Een beroemde ongedocumenteerde instructie is LOADALL, waarmee alle registers in een keer geladen kunnen worden. Deze instructie is te vinden in de 80286 en de 80386 - niet in latere processors. De opcodes zijn niet gelijk: op de 80286 is het 0F05 en op de 80386 0F07, en het gedrag is ook niet gelijk. Het was vrijwel onmogelijk deze gecompliceerde instructie te ontdekken door het gedrag van de processor te onderzoeken, en hij is dan ook bekend geworden doordat een document van Intel is uitgelekt. De instructie was bedoeld om de processor te kunnen testen, maar hij bleek zeer bruikbaar om het volledige geheugen te adresseren terwijl de processor in real mode stond. De instructie werd dan ook in veel commerciële software toegepast.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.