Bölüm 10 · Simülatör

Komut Kodlama: Opcode, D/W ve ModR/M

← Bölüm 10
opcodeD / SWMODREGR/Myer değiştirmeanlık

Komut Kodlama: Opcode, D/W ve ModR/M

Amaç: Bir 8086 komutunun makine kodunu alan alan görmek. Genel biçim: opcode (6 bit) + D (1: REG hedef, 0: REG kaynak) + W (0: bayt, 1: word), ardından ModR/M baytı: MOD (2 bit), REG (3 bit), R/M (3 bit); gerekirse yer değiştirme (disp) ve anlık veri. 16 bitlik değerler küçük uçlu yazılır: önce düşük bayt.

MODAnlamı
00bellek, disp yok (R/M = 110 ise doğrudan 16 bit adres)
01bellek + 8 bit disp (işaretli)
10bellek + 16 bit disp
11yazmaç: R/M de bir yazmaç kodu

REG / R/M yazmaç kodları: 000 AL/AX, 001 CL/CX, 010 DL/DX, 011 BL/BX, 100 AH/SP, 101 CH/BP, 110 DH/SI, 111 BH/DI. R/M bellek kodları: 000 [BX+SI], 001 [BX+DI], 010 [BP+SI], 011 [BP+DI], 100 [SI], 101 [DI], 110 [BP] (MOD = 00'da doğrudan adres), 111 [BX].

Nasıl kullanılır?

  1. Kodla: kutuya bir komut yazın (ör. MOV CL, [BX+SI+12h]) ya da örnek seçin. Bir komutun birden çok geçerli kodlaması varsa (D = 0 / D = 1, kısa akümülatör biçimi, 83h işaret genişletmesi) üstteki düğmelerle seçilir; ilk düğme en kısa biçimdir.
  2. Çöz: onaltılık baytları yazın (ör. 8A 48 12); her alan sırayla okunur.
  3. Adım ▶ / ◀ Geri (→ / ←), Oynat, Sıfırla alanları tek tek açar. Kendini dene açıkken önce doğru kodu ya da komutu seçersiniz.

Desteklenenler: MOV, ADD, OR, ADC, SBB, AND, SUB, XOR, CMP, TEST (yazmaç, bellek, anlık), MOV kesim yazmacı, INC/DEC/PUSH/POP, NOT/NEG/MUL/DIV, IN/OUT, INT, RET ve tek baytlık komutlar; ES:/CS:/SS:/DS: önekleri. Atlamalar çözme yönünde göreli uzaklıkla ($+n) gösterilir.

Kodlamalar Intel 8086 kılavuzundaki biçim tablolarına göredir; sunumdaki örneklerle (ör. MOV AX, BX = 8B C3 / 89 D8), bağımsız bir başvuru kodlayıcısıyla ve ortak 8086 aracının komut uzunluklarıyla karşılaştırılarak doğrulanmıştır.

İlgili sunum: Bölüm 10 · Komut Kümesi (makine kodu biçimi, REG/MOD/R/M, MOV'un kodlama biçimleri).