Dalam komputasi, kode operasi[1] (Inggris: operation code, disingkat opcode[1][2]), dikenal juga sebagai kode mesin instruksi,[3] kode instruksi,[4] suku kata instruksi,[5][6][7] dan paket instruksi, adalah bagian dari instruksi bahasa mesin yang menentukan operasi yang akan dilakukan. Selain kode operasi itu sendiri, sebagian besar instruksi juga menentukan data yang akan mereka proses, dalam bentuk operan. Selain kode operasi yang digunakan dalam arsitektur set instruksi dari berbagai CPU, yang merupakan perangkat keras, kode operasi juga dapat digunakan dalam mesin komputasi abstrak sebagai bagian dari spesifikasi kode bita mereka.
Spesifikasi dan format kode operasi tercantum dalam arsitektur set instruksi (ISA) prosesor yang bersangkutan, berupa CPU umum atau unit pemrosesan yang lebih khusus.[8] Kode operasi untuk set instruksi tertentu dapat dijelaskan melalui penggunaan tabel kode operasi yang merinci semua kode operasi yang mungkin. Terlepas dari kode operasi itu sendiri, sebuah instruksi biasanya juga memiliki satu atau lebih penentu untuk operan (yaitu data) di mana operasi harus bertindak, meskipun beberapa operasi mungkin memiliki operan implisit, atau tidak sama sekali.[8] Ada set instruksi dengan bidang yang hampir seragam untuk kode operasi dan penentu operan, serta yang lain (arsitektur x86 misalnya) dengan struktur variabel-panjang yang lebih rumit.[8][9] Set instruksi dapat diperpanjang melalui penggunaan awalan kode operasi yang menambahkan subset instruksi baru yang terdiri dari kode operasi yang ada setelah urutan bita yang dicadangkan.
Operan
Tergantung pada arsitektur, operan dapat berupa nilai pendaftar, nilai dalam tumpukan, nilai memori lainnya, porta I/O (yang mungkin juga dipetakan memori), dll., ditentukan dan diakses menggunakan mode pengalamatan yang kurang lebih kompleks.[butuh rujukan]Jenis-jenis operasi termasuk aritmatika, penyalinan data, operasi logis, dan kontrol program, serta instruksi khusus (seperti CPUID dan lain-lain).[8]
Bahasa rakitan, yang menggunakan instruksi mnemonik dan operan untuk mewakili kode mesin,[8] mampu meningkatkan keterbacaan sambil tetap memberikan kendali yang tepat atas instruksi mesin. Sebagian besar pemrograman saat ini dilakukan menggunakan bahasa pemrograman tingkat tinggi,[10] yang biasanya lebih mudah dibaca dan ditulis.[8] Bahasa-bahasa tersebut perlu disusun (diterjemahkan ke dalam bahasa rakitan) oleh penyusun khusus sistem, atau dijalankan melalui program penyusun lainnya.[11]
Set instruksi perangkat lunak
Kode operasi juga dapat ditemukan dalam apa yang disebut kode bita dan representasi lain yang ditujukan untuk penerjemah perangkat lunak daripada perangkat keras. Set instruksi berbasis perangkat lunak terkadang menggunakan tipe data dan operasi dengan tingkat yang sedikit lebih tinggi daripada kebanyakan rekan perangkat keras, namun tetap dibangun di sepanjang garis yang sama. Contohnya seperti, kode bita yang ditemukan dalam berkas kelas Java yang telah diterjemahkan oleh Mesin Maya Java (JVM), kode bita yang digunakan dalam GNU Emacs untuk kode Lisp yang tersusun, .NET Common Intermediate Language (CIL), dan lain-lain.[12]
Referensi
- ^ a b Barron, D. W. (1978). Assemblers and loaders (edisi ke-Third edition). New York. ISBN 0-444-19462-2. OCLC 4004247.
- ^ "Javassist, a Java-bytecode translator toolkit". Diarsipkan dari versi asli tanggal 2020-03-02.
- ^ "Appendix B - Instruction Machine Codes" (PDF). Diarsipkan dari versi asli (PDF) tanggal 2020-03-01.
- ^ "The Functions Of A Computer: Instruction Register And Decoder" (PDF). Diarsipkan dari versi asli (PDF) tanggal 2020-03-03.
- ^ Jones, Douglas W. (1988-06). "A minimal CISC". ACM SIGARCH Computer Architecture News (dalam bahasa Inggris). 16 (3): 56–63. doi:10.1145/48675.48684. ISSN 0163-5964.
- ^ Domagała, Łukasz (2012). Application of CLP to instruction modulo scheduling for VLIW processors : PhD dissertation. Wydawnictwo Pracownia Komputerowa Jacka Skalmierskiego. Gliwice: Jacek Skalmierski Computer Studio. ISBN 978-83-62652-42-6. OCLC 968496798.
- ^ "Multiple Instruction Issue". Diarsipkan dari versi asli tanggal 2016-05-28.
- ^ a b c d e f Hennessy, John L. (2012). Computer architecture : a quantitative approach. David A. Patterson, Krste Asanović (edisi ke-5th ed). Waltham, MA: Morgan Kaufmann/Elsevier. ISBN 978-0-12-383873-5. OCLC 778873467.
- ^ Mansfield, Richard (1983). Machine language for beginners : machine language programming for BASIC language programmers. Greensboro, N.C.: Compute! Books. ISBN 0-942386-11-6. OCLC 9660584.
- ^ "Programming Language Popularity". Diarsipkan dari versi asli tanggal 2015-04-11.
- ^ "Introduction to Assembly Language". Diarsipkan dari versi asli tanggal 2020-03-02.
- ^ "bytecode Definition". Diarsipkan dari versi asli tanggal 2012-10-06.