İçeriğe atla

İşlem kodu tablosu

Vikipedi, özgür ansiklopedi
Image
Tek baytlık işlem kodu tablosunda üst dört bit satırı, alt dört bit sütunu seçer: 90 kodu NOP'u, C3 kodu yakın RET'i gösterir.

İşlem kodu tablosu (İngilizce: opcode table, opcode map ya da opcode matrix), bir buyruk kümesindeki işlem kodlarını, kodun bitlerine göre satır ve sütunlara dizerek gösteren çizelgedir. Her göz bir işlem koduna karşılık gelir ve o kodun buyruğunu, çoğunlukla anımsatıcısını ve işlenen türlerini verir. Boş gözler hiçbir buyruğa atanmamış ya da ileride kullanılmak üzere ayrılmış kodlardır.[1]:Cilt 2D, A-1 Intel'in yazılım geliştirici el kitabı, x86 nesne kodunu yorumlamak için bu tabloların kullanılmasını önerir.[1]:Cilt 2D, A-1

Sekiz bitlik bir işlem kodu 256 farklı değer alabildiğinden tek baytlık bir buyruk kümesinin tablosu 256 gözlüdür. Intel'in tek baytlık işlem kodu tablosunda satırı kodun üst dört biti, sütunu alt dört biti belirler; böylece tablo 16 satır ve 16 sütundan oluşur.[1]:Cilt 2D, A-1 Bu tabloda 90 kodu satır 9, sütun 0'daki NOP buyruğunu, C3 kodu da satır C, sütun 3'teki yakın RET buyruğunu gösterir.[1]:Cilt 2D, A-7

Western Design Center'ın W65C02S veri sayfasındaki tablo da aynı düzendedir. Satırlar kodun yüksek anlamlı on altılık basamağına, sütunlar düşük anlamlı basamağına göre dizilir ve her gözde anımsatıcının altında adresleme kipi yazılıdır. W65C02S, 256 kodun 212'sini 70 buyruğa dağıtır.[2]:5, 22

Tablonun eksenleri dört bitlik öbeklerden oluşmak zorunda değildir. Bir mimari, kodun hangi bitlerinin buyruk biçimini ya da buyruk grubunu belirlediğine göre başka bir bölümleme kullanabilir. Motorola'nın M68000 ailesinde 16 bitlik buyruk sözcüğünün 15-12. bitleri işlemin türünü seçer ve ailenin işlem kodu tablosu bu dört bite göre 16 satırdan oluşur.[3]:8-4

M68000 ailesinin işlem kodu tablosu (15-12. bitler)[3]:8-4
15-12. bitlerİşlem
0000Bit işlemleri, MOVEP, anlık değerli işlemler
0001Bayt taşıma (MOVE)
0010Uzun sözcük taşıma (MOVE)
0011Sözcük taşıma (MOVE)
0100Çeşitli buyruklar
0101ADDQ, SUBQ, Scc, DBcc, TRAPcc
0110Bcc, BSR, BRA
0111MOVEQ
1000OR, DIV, SBCD
1001SUB, SUBX
1010Atanmamış, ayrılmış
1011CMP, EOR
1100AND, MUL, ABCD, EXG
1101ADD, ADDX
1110Kaydırma, döndürme, bit alanı
1111Yardımcı işlemci arayüzü, MC68040 ve CPU32 eklentileri

Atanmamış 1010 satırındaki ve 1111 satırındaki uygulanmamış kodlar, 68000 ailesinde kendi adlarını taşıyan ayrı kural dışı durum vektörlerine gider.[3]:B-2

IBM System/360'ta işlem kodu buyruğun ilk baytıdır ve ilk iki biti buyruğun uzunluğunu ve biçimini belirler. 00 ile başlayan kodlar bir yarım sözcüklük RR, 01 ile başlayanlar iki yarım sözcüklük RX, 10 ile başlayanlar iki yarım sözcüklük RS ya da SI, 11 ile başlayanlar üç yarım sözcüklük SS biçimindedir.[4]:13 System/360 Principles of Operation kitabının G ekindeki işlem kodu tabloları bu yüzden biçime göre ayrılmıştır. Her tabloda sütunlar kodun üst dört bitine, satırlar alt dört bitine göre dizilir ve her sütun bir buyruk sınıfını toplar. RR tablosunda 0000xxxx sütunu dallanma ve durum değiştirme, 0001xxxx sütunu sabit noktalı tam sözcük ve mantık, 0010xxxx ve 0011xxxx sütunları uzun ve kısa kayan nokta buyruklarıdır.[4]:145-146

System/360 RX biçiminin ilk iki sütunu (on altılık 40-5F)[4]:145
Alt dört bit0100xxxx (sabit noktalı yarım sözcük ve dallanma)0101xxxx (sabit noktalı tam sözcük ve mantık)
0000STHST
0001LAboş
0010STCboş
0011ICboş
0100EXN
0101BALCL
0110BCTO
0111BCX
1000LHL
1001CHC
1010AHA
1011SHS
1100MHM
1101boşD
1110CVDAL
1111CVBSL

Bu düzen sınıflar arasındaki düzenliliği gösterir. Aynı satırdaki kodlar çoğu zaman aynı işi farklı veri türleri üzerinde yapar. 4A (AH) yarım sözcüğü, 5A (A) tam sözcüğü toplar; RR tablosunda 1A (AR) aynı toplamanın yazmaçtan yazmaca biçimidir. 44 kodlu EX ise yürütme buyruğudur.[4]:145

Image
RISC-V ana işlem kodunda 6-5. bitler satırı, 4-2. bitler sütunu seçer; en düşük iki bit 32 bitlik buyruklarda hep 11'dir.

RISC-V'te 32 bitlik buyrukların en düşük iki biti 11'dir ve ana işlem kodu 7 bittir. Belirtimdeki ana işlem kodu tablosu, kalan beş biti iki eksene böler. Satırlar 6. ve 5. bitlere, sütunlar 4., 3. ve 2. bitlere göre dizilir; böylece 4 satır ve 8 sütunluk tabloda 32 ana kod yer alır. Son sütun 32 bitten uzun buyruklara ayrılmıştır.[5]:553

RISC-V ana işlem kodu tablosu (en düşük iki bit 11)[5]:553
6-5. bitler4-2. bitler
000001010011100101110111
00 LOADLOAD-FPcustom-0MISC-MEMOP-IMMAUIPCOP-IMM-3248 bit
01 STORESTORE-FPcustom-1AMOOPLUIOP-3264 bit
10 MADDMSUBNMSUBNMADDOP-FPOP-Vcustom-2/rv12848 bit
11 BRANCHJALRayrılmışJALSYSTEMOP-VEcustom-3/rv12880 bit ve üstü

Tablodaki her göz tek bir buyruğu değil, bir buyruk grubunu gösterir; grubun içindeki buyruk çoğunlukla funct3 ve funct7 alanlarıyla seçilir.[5]:553-554 Belirtim ayrılmış (reserved) diye işaretli kodların ileride standart eklentilere verilebileceğini, custom-0 ve custom-1 kodlarının ise standart eklentilerde kullanılmayacağını ve üreticilerin kendi eklentilerine bırakıldığını yazar. custom-2/rv128 ve custom-3/rv128 kodları 128 bitlik RV128 için ayrılmıştır, ama RV32 ve RV64'te üretici eklentileri de bunları kullanabilir.[5]:553

Önekler, kaçış baytları ve ek tablolar

[değiştir | kaynağı değiştir]

x86'da tek baytlık tablo yetmediği için Intel ek tablolar tanımlar. 0F baytı iki baytlık işlem kodlarına geçişi sağlayan kaçış baytıdır; ardından gelen bayt ayrı bir 256 gözlü tablonun satır ve sütununu seçer. 0F 38 ve 0F 3A dizileri üç baytlık işlem kodlarının iki ayrı tablosunu açar. 66, F2 ya da F3 zorunlu önekleri aynı gözde duran birden çok buyruğu birbirinden ayırır.[1]:Cilt 2D, A-1, A-4 VEX önekli buyruklar ayrı bir tablo kullanmaz. VEX önekinin mmmmm alanı, kastedilen tablonun 0F, 0F 38 ya da 0F 3A tablolarından hangisi olduğunu kodlar ve öneki taşıyan buyrukların anımsatıcıları çoğunlukla "v" harfiyle başlar.[1]:Cilt 2D, A-5

Bazı gözler tek bir buyruğu değil bir buyruk grubunu gösterir. Bu kodlarda ardından gelen ModR/M baytının 3-5. bitleri işlem kodunun uzantısıdır ve buyruk ayrı bir grup tablosunda aranır. Örneğin 80 kodu 1. gruptadır ve uzantı alanı 000 ise buyruk ADD olur.[1]:Cilt 2D, A-17 x87 kayan nokta buyrukları da D8-DF kaçış kodlarıyla başlar. ModR/M baytı 00-BF aralığındaysa 3-5. bitleri buyruğu seçer, bu aralığın dışındaysa baytın tamamı işlem kodunun uzantısı sayılır.[1]:Cilt 2D, A-21

Intel'in tablolarında bazı gözlerin yanına kipe özgü imler konur. 64 bit kipinde 40-4F aralığındaki tek baytlık INC ve DEC kodları REX öneklerine dönüşür; bu kipte INC ve DEC için FE ve FF kodlarının grupları kullanılır.[1]:Cilt 2D, A-6

Zilog Z80, 8080A'nın 78 buyruğunu da yürüten bir işlemcidir ve 158 buyruk türünü tanır.[6]:32 Sean Young'ın belgelenmemiş Z80 kodları üzerine çalışmasına göre CB, ED, DD, FD, DDCB ve FDCB önekleri ardından gelen kodun yorumunu değiştirir; öneksiz bütün kodlar tek baytlık ve belgelenmiş buyruklardır.[7]:11 Zilog'un el kitabı DD ve FD ile başlayan dizinli buyrukları iki baytlık işlem kodlu gösterir.[6]:37

Toplama buyruğunun tablolardaki yeri

[değiştir | kaynağı değiştir]

Aynı işlemin farklı tablolarda nereye düştüğü, tabloların düzenini karşılaştırmanın bir yoludur. Intel'in tek baytlık tablosunda toplama buyrukları 0. satırın ilk altı gözünü doldurur. 00-03 kodları yazmaç ve bellek işlenenli biçimleri, 04 ve 05 kodları AL ve EAX yazmaçlarına anlık değer ekleyen biçimleri gösterir.[1]:Cilt 2D, A-7 Anlık değerli 80, 81 ve 83 kodlarının gözleri ise tek bir buyruğu değil bir buyruk grubunu gösterir ve toplama, grup tablosunda 000 uzantısıyla seçilir.[1]:Cilt 2D, A-17

System/360'ın biçime göre ayrılmış tablolarında toplama buyrukları aynı satırda, 1010 satırında toplanır. Yazmaçtan yazmaca AR (1A) RR tablosunun 0001xxxx sütununda, tam sözcüklü A (5A) ve yarım sözcüklü AH (4A) RX tablosunun 0101xxxx ve 0100xxxx sütunlarındadır. Aynı satırın sütunlar boyunca izlenmesi, aynı işlemin farklı veri türlerindeki biçimlerini verir.[4]:145-146

M68000 ailesinin tablosunda ADD, ADDX ile birlikte 1101 satırını paylaşır; ikisi buyruk sözcüğünün öteki bitleriyle ayırt edilir.[3]:8-4 RISC-V'de ADD tek başına bir göz değildir. Satır 01, sütun 100'deki OP gözünde SUB, AND ve OR gibi buyruklarla birlikte durur ve funct3 ile funct7 alanlarıyla seçilir.[5]:553-554 Zilog Z80'de ADD A,r buyruğunun kodları on altılık 80-87 aralığını doldurur. Bu aralıktaki 86 kodu ise bellekteki işlenenle çalışan ADD A,(HL) buyruğudur.[6]:145, 148 W65C02S'te ayrı bir toplama buyruğu yoktur. Elde bitini de ekleyen ADC buyruğunun anlık değerli biçimi, tablonun 6. satırı ile 9. sütununun kesiştiği gözdedir.[2]:22 MIPS32'de ADD ana tabloda yer almaz. Ana tablonun SPECIAL (000000) gözü ayrı bir işlev alanı tablosu açar ve ADD bu tablonun 100 satırında ADDU, SUB ve SUBU ile yan yana durur.[8]:451, 452 ARM'ın A32 kodlamasında veri işleme buyruklarının tablosu 24-20. bitlere göre dizilir. ADD, bu bitleri 0100x olan satırdır; son bit S bitidir ve bayrakları güncelleyen biçimi ayırır.[9]:A5-195

Tablodaki boş gözler, mimarinin henüz bir buyruğa vermediği kodlardır ve geçersiz işlem kodu sorununu doğurur. Bu gözlerin nasıl gösterildiği ve işlemcinin onlara nasıl davrandığı mimariden mimariye değişir. Intel boş gözlerin ayrılmış olduğunu ve kullanılmaması gerektiğini yazar; "Reserved-NOP" diye işaretli gözler bazı işlemcilerde boş işlem gibi davransa da ayrılmış sayılır.[1]:Cilt 2D, A-1 MOS Technology'nin 1976 tarihli 6502 programlama el kitabı atanmamış kodları on altılık listede Future Expansion diye gösterir.[10] W65C02S'te bu gözlerdeki kodların hepsi boş işlem gibi yürütülür.[2]:30 System/360'ta ise atanmamış bir kod operation exception adlı kural dışı durumu doğurur.[4]:78

Mimarilere göre işlem kodu tabloları

[değiştir | kaynağı değiştir]
Bazı mimarilerde işlem kodu tablosunun düzeni
Mimariİşlem kodunun yeriTablonun eksenleriEk tablolar
IBM System/360İlk baytSütun üst dört bit, satır alt dört bit[4]:145Biçime göre dört tablo (RR, RX, RS ve SI, SS)
M68000 ailesiBuyruk sözcüğünün 15-12. bitleri16 satır[3]:8-4Her buyruğun bit düzeni ayrı bir biçim özetinde verilir
W65C02Sİlk baytSatır yüksek, sütun düşük on altılık basamak[2]:22Tek tablo
Zilog Z80İlk bayt ya da önekten sonraki baytTek baytlık ana tablo[7]:11CB, ED, DD, FD, DDCB ve FDCB önekleri
Intel 64 ve IA-32Bir, iki ya da üç baytSatır üst dört bit, sütun alt dört bit[1]:Cilt 2D, A-10F, 0F 38 ve 0F 3A tabloları, ModR/M grupları, x87 için D8-DF tabloları
RISC-V7 bitlik ana kod (en düşük iki bit 11)Satır 6-5. bitler, sütun 4-2. bitler[5]:553funct3 ve funct7 alanları

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 Intel (Eylül 2026). Intel 64 and IA-32 Architectures Software Developer's Manual, Combined Volumes. 325462-093US (İngilizce). Intel Corporation. ss. Cilt 2B: 4-737; Cilt 2D: A-1, A-4, A-5, A-6, A-7, A-17, A-21; Cilt 3A: 7-3, 7-32, 7-33. Erişim tarihi: 7 Ekim 2026.
  2. 1 2 3 4 Western Design Center (8 Nisan 2022). W65C02S 8-bit Microprocessor (PDF) (İngilizce). The Western Design Center, Inc. ss. 5, 22, 30. Erişim tarihi: 7 Ekim 2026.
  3. 1 2 3 4 5 Motorola (1992). M68000 Family Programmer's Reference Manual (PDF) (İngilizce). Motorola Inc. ss. 4-107, 8-4, B-2. Erişim tarihi: 7 Ekim 2026.
  4. 1 2 3 4 5 6 7 IBM (1964). IBM System/360 Principles of Operation (PDF). A22-6821-0 (İngilizce). International Business Machines Corporation. ss. 13, 60, 62, 65, 78, 145-148. Erişim tarihi: 7 Ekim 2026.
  5. 1 2 3 4 5 6 RISC-V International (2024). The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture (PDF). 20240411 (İngilizce). RISC-V International. ss. 17, 553-554. Erişim tarihi: 7 Ekim 2026.
  6. 1 2 3 Zilog (2016). Z80 CPU User Manual (PDF). UM008011-0816 (İngilizce). Zilog Inc. ss. 32, 37, 145, 148. Erişim tarihi: 7 Ekim 2026.
  7. 1 2 Young, Sean (18 Eylül 2005). "The Undocumented Z80 Documented" (PDF). 0.91 (İngilizce). ss. 11-13. Erişim tarihi: 7 Ekim 2026.
  8. ↑ MIPS Technologies (15 Aralık 2016). MIPS Architecture for Programmers Volume II-A: The MIPS32 Instruction Set Manual (PDF). MD00086, 6.06 (İngilizce). ss. 33, 35, 36, 38, 451, 452. 23 Ağustos 2018 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 10 Ekim 2026.
  9. ↑ ARM (29 Mart 2018). ARM Architecture Reference Manual, ARMv7-A and ARMv7-R edition. ARM DDI 0406C.d (İngilizce). ARM Limited. ss. A5-195, A8-306, A8-307, A8-310. Erişim tarihi: 10 Ekim 2026.
  10. ↑ MOS Technology (Ocak 1976). MCS6500 Microcomputer Family Programming Manual (PDF). 6500-50A, ikinci baskı (İngilizce). Norristown, Pennsylvania. ss. D-1 ile D-5 arası. Erişim tarihi: 7 Ekim 2026.