Bölüm 2.2: 8086 Yazmaçları
Giriş
Öğrenme Çıktıları
8086'nın 14 yazmacını gruplarına göre sayabilmek ve 8/16 bitlik kullanımını açıklamak.
AX, BX, CX, DX, SP, BP, SI, DI yazmaçlarının komutlardaki örtük (implicit) görevlerini bilmek.
CF, ZF, SF, OF, PF, AF bayraklarının hangi sonuçta kurulduğunu açıklamak; DF, IF, TF'nin işlemciyi nasıl yönettiğini bilmek.
CS:IP, SS:SP, SS:BP, DS:SI ve ES:DI çiftlerinin hangi erişimde kullanıldığını bilmek.
Yazmaç Kümesi
Yazmaç Nedir?
- Yazmaç (register): işlemcinin içinde bulunan, çok hızlı, küçük bellek hücresidir.
- 8086'da yazmaçlar 16 bit genişliğindedir; dört tanesi ayrıca 8 bitlik iki yarıya bölünebilir.
- Bellek erişimi dış veri yolu üzerinden birkaç saat turu sürer; yazmaç erişimi neredeyse bedavadır.
- Geçici veriler, adresler, sayaçlar ve işlem sonuçları yazmaçlarda tutulur.
- Komutların çoğu en az bir işleneni yazmaçta ister: 8086'da bellekten belleğe MOV/ADD yoktur.
Yazmaç Kümesi
8086 Yazmaç Kümesi
Hepsi 16 bittir. Yalnızca AX, BX, CX ve DX ikiye bölünebilir (AH/AL …); SP, BP, SI, DI ve kesim yazmaçlarının 8 bitlik parçası yoktur. Bu derste AX…DI sekizlisi genel amaçlı yazmaçlar olarak sayılır.
Yazmaç Kümesi
Genel Amaçlı Yazmaçlar
Geçici verileri saklamak için kullanılırlar (general purpose registers). Çoğu komutta herhangi biri kullanılabilir; ancak bazı komutlar belirli bir yazmacı örtük olarak kullanır.
| Yazmaç | Ad | 8 bitlik yarılar | Örtük kullanım (örnek) |
|---|---|---|---|
AX | Accumulator | AH, AL | MUL, DIV, IN, OUT, LODS/STOS |
BX | Base | BH, BL | bellek adresleme [BX], XLAT |
CX | Counter | CH, CL | LOOP, REP, kaydırma sayısı CL |
DX | Data | DH, DL | MUL/DIV yüksek yarısı, port adresi |
SP | Stack Pointer | — | PUSH, POP, CALL, RET |
BP | Base Pointer | — | yığın çerçevesi [BP+n] |
SI | Source Index | — | dizgi kaynağı DS:SI |
DI | Destination Index | — | dizgi hedefi ES:DI |
Yazmaç Kümesi · Kodu adım adım çalıştır
AX = AH : AL — 8 ve 16 Bitlik Kullanım
MOV AX, 1234h ; AH=12h, AL=34h MOV AL, 0FFh ; yalnız alt yarı ADD AL, 1 ; 8 bitlik toplama MOV AX, 12FFh ADD AX, 1 ; 16 bitlik toplama
Bir 8 bitlik yarıya yazmak diğer yarıyı değiştirmez. 8 bitlik işlemin eldesi komşu yarıya geçmez, CF bayrağına gider.
AX'e 1234h yazılır: yüksek bayt AH = 12h, düşük bayt AL = 34h.
Yalnızca AL değişir; AH korunur → AX = 12FFh.
FFh + 1 = 100h, 8 bite sığmaz: AL = 00h, CF = 1, ZF = 1. Elde AH'ye geçmez; AX = 1200h.
AX yeniden 12FFh yapılır.
Bu kez işlem 16 bitlik: 12FFh + 1 = 1300h; elde AH'ye geçti, CF = 0.
Genel Amaçlı Yazmaçlar
AX — Akümülatör
- 16 bit genişliğindedir; AH (yüksek sıra) ve AL (düşük sıra) olarak 8 bitlik iki bölüme ayrılır.
- 8 bitlik komutlarda AH ve AL ayrı ayrı kullanılabilir.
- Genellikle aritmetik ve mantıksal komutlarda kullanılır.
- Bazı komutlar AX/AL'yi örtük kullanır:
MUL,DIV,IN/OUT,CBW,DAA,LODSB/STOSB. - AX ile çalışan birçok komutun makine kodu bir bayt daha kısadır (ör.
ADD AX, imm16).
ADD AX, AX ; AX = AX + AX MOV AX, 0005h ADD AX, AX ; AX = 000Ah MOV AH, 4Ch ; DOS: programı bitir INT 21h
AX'i kendisiyle toplamak, değeri 2 ile çarpmakla aynıdır.
Genel Amaçlı Yazmaçlar
BX — Taban (Base)
- 16 bit; BH ve BL olarak 8 bitlik iki yarıya ayrılır.
- Dolaylı bellek adreslemede bağıl konum (offset) değerini tutabilen tek veri yazmacıdır:
[BX],[BX+SI],[BX+4]. - Dizi ve tablo (matris) işlemlerinde başlangıç adresini tutmak için kullanılır.
[AX],[CX],[DX]biçiminde adresleme 8086'da yoktur.
MOV BL, [500h] BL'ye 500h sayısını yazmaz; DS:0500h adresindeki baytı okur. Sayıyı yazmak için köşeli parantez kullanılmaz: MOV BX, 0500h.Genel Amaçlı Yazmaçlar · Kodu adım adım çalıştır
BX ile Dolaylı Erişim
MOV BX, 0500h ; BX = adres MOV AL, [BX] ; AL = [0500h] MOV DL, [0501h] ; doğrudan adres ADD AL, DL ; AL = 25h + 17h MOV [BX+2], AL ; [0502h] = AL
BX'e 0500h sayısı yazılır; artık BX bir adres (işaretçi) olarak kullanılabilir.
[BX]: BX'in gösterdiği bayt okunur → AL = 25h.
Aynı türden erişim adres sabit verilerek de yapılabilir: DL = [0501h] = 17h.
AL = 25h + 17h = 3Ch.
[BX+2] = 0502h adresine AL yazılır. Bellek değişti, BX değişmedi.
Genel Amaçlı Yazmaçlar
CX — Sayaç (Counter)
- 16 bit; CH ve CL olarak 8 bitlik iki yarıya ayrılır.
- Döngü (
LOOP), tekrar (REP) ve sayma görevlerinde kullanılır. LOOP etiket: önce CX ← CX − 1, sonra CX ≠ 0 ise etikete atlar. Bayrakları etkilemez.- Kaydırma ve döndürme (shift/rotate) komutlarında sayı 1'den büyükse CL'de verilir:
SHL AX, CL. JCXZ: CX = 0 ise atla (boş döngüyü korur).
MOV CX, 0005h ; 5 tur DONGU: ; ... gövde ... LOOP DONGU ; CX--, CX≠0 ise atla
Genel Amaçlı Yazmaçlar · Kodu adım adım çalıştır
CX ve LOOP: 5 + 4 + 3 + 2 + 1
MOV CX, 5 ; sayaç MOV AX, 0 ; toplam TEKRAR: ADD AX, CX LOOP TEKRAR ; CX--, ≠0 ise atla MOV DX, AX ; sonuç
Döngü gövdesi CX = 5, 4, 3, 2, 1 değerleriyle çalışır; CX = 0 değeriyle çalışmaz.
CX = 5: döngü 5 kez dönecek.
Toplam AX = 0 ile başlar.
AX = AX + CX → 0 + 5 = 5.
LOOP: CX = 5 → 4; sıfır değil, TEKRAR'a atla.
AX = AX + CX → 5 + 4 = 9.
LOOP: CX = 4 → 3; sıfır değil, TEKRAR'a atla.
AX = AX + CX → 9 + 3 = 12.
LOOP: CX = 3 → 2; sıfır değil, TEKRAR'a atla.
AX = AX + CX → 12 + 2 = 14.
LOOP: CX = 2 → 1; sıfır değil, TEKRAR'a atla.
AX = AX + CX → 14 + 1 = 15.
LOOP: CX = 1 → 0; atlamaz, döngüden çıkılır.
Sonuç DX'e kopyalanır: 5+4+3+2+1 = 15 = 000Fh.
Genel Amaçlı Yazmaçlar
DX — Veri (Data)
- 16 bit; DH ve DL olarak 8 bitlik iki yarıya ayrılır.
- 16 bitlik çarpmada sonuç 32 bittir: DX yüksek sırayı, AX düşük sırayı tutar →
DX:AX. - 16 bitlik bölmede bölünen
DX:AX'tir; bölüm AX'e, kalan DX'e yazılır. - 255'ten büyük G/Ç port numaraları DX ile verilir:
OUT DX, AL. - DOS kesmelerinde (INT 21h) dizgi adresini taşır:
LEA DX, mesaj.
MUL BX → DX:AX = AX × BX. 8 bitlik MUL BL ise AX = AL × BL üretir; DX'e dokunmaz.Genel Amaçlı Yazmaçlar · Kodu adım adım çalıştır
MUL ile DX:AX
MOV AX, 1234h MOV BX, 0100h MUL BX ; DX:AX = AX*BX MOV AX, 00FFh MOV BL, 2 MUL BL ; AX = AL*BL MOV DX, 03F8h ; port adresi OUT DX, AL ; porta yaz
MUL işaretsiz çarpmadır; işaretli için IMUL kullanılır. MUL sonrası SF, ZF, PF, AF tanımsızdır.
AX = 1234h.
BX = 0100h (256).
1234h × 0100h = 00123400h → DX = 0012h, AX = 3400h. Yüksek yarı sıfır olmadığı için CF = OF = 1.
AX = 00FFh; DX'teki eski sonuç duruyor.
BL = 02h (BX = 0102h, BH değişmedi).
8 bitlik çarpım: FFh × 02h = 01FEh → AX. DX değişmez; AH ≠ 0 olduğundan CF = OF = 1.
DX bu kez port numarası: 03F8h (COM1 seri port).
AL'deki FEh, 03F8h numaralı porta gönderilir. 255'ten büyük port için DX şarttır.
İşaretçi ve İndis Yazmaçları
SP — Yığın İşaretçisi
- 16 bitlik Stack Pointer; yığının en üst öğesinin bağıl konumunu (offset) tutar.
- Adres her zaman yığın kesimine göredir: fiziksel adres
SS:SP. - Yığın LIFO yapısıdır:
PUSHile eklenir,POPile çıkarılır; 8086'da öğeler hep 16 bittir. - Yığın belleğin aşağısına doğru büyür:
PUSHönce SP'yi 2 azaltır, sonra yazar;POPönce okur, sonra SP'yi 2 artırır. - “Yığın boşken SP = FFFEh” bilgisi .COM programları içindir (DOS/emu8086 SP'yi FFFEh yapar); genel kural değildir.
İşaretçi ve İndis Yazmaçları
BP — Taban İşaretçisi
- 16 bitlik Base Pointer; yığın üzerindeki sabit bir konumu gösterir.
- BP ile yapılan bellek erişimleri varsayılan olarak SS kesimini kullanır:
[BP+4]→SS:BP+4. - Yığın üzerinden fonksiyonlara (prosedürlere) geçirilen parametrelere ve yerel değişkenlere erişmek için kullanılır.
- SP, PUSH/POP ile sürekli değişir; BP ise prosedür boyunca sabit kalır, bu yüzden parametrelerin konumu bellidir.
TOPLA PROC PUSH BP MOV BP, SP ; çerçeve tabanı MOV AX, [BP+4] ; 1. parametre POP BP RET 2 TOPLA ENDP
Klasik prosedür girişi: PUSH BP + MOV BP, SP.
İşaretçi ve İndis Yazmaçları
SI ve DI — İndis Yazmaçları
- 16 bit; veri kesiminde (DS) bağıl konumu temsil eder.
- Okunacak verinin konumunu işaret eder.
- Dizgi komutlarında kaynak:
MOVSB,CMPSB,LODSB→DS:SI. - Örnek:
MOV SI, 2000h— SI'yi bir bellek konumuna ayarlar.
- 16 bit; dizgi komutlarında ek kesimde (ES) bağıl konumu temsil eder.
- Yazılacak verinin konumunu işaret eder.
- Dizgi komutlarında hedef:
MOVSW,STOSB,SCASB→ES:DI. - Örnek:
MOV DI, 3000h— DI'yi bir bellek konumuna ayarlar.
[SI] ve [DI] sıradan indis olarak DS kesimini kullanır. Her dizgi adımından sonra SI ve DI, DF bayrağına göre 1 (bayt) ya da 2 (sözcük) artar veya azalır.İşaretçi ve İndis Yazmaçları · Kodu adım adım çalıştır
SI ve DI ile Dizgi Kopyalama
CLD ; DF=0: artan adres MOV SI, 0200h ; kaynak MOV DI, 0300h ; hedef MOV CX, 3 ; bayt sayısı REP MOVSB ; ES:[DI] ← DS:[SI]
CLD: DF = 0 → SI ve DI her adımda artacak.
SI = 0200h: kopyalanacak “ABC” dizgisinin başı.
DI = 0300h: hedef alanın başı.
CX = 3: REP en fazla 3 kez tekrarlar.
1. tur: 'A' kopyalanır; SI = 0201h, DI = 0301h, CX = 2.
2. tur: 'B' kopyalanır; SI = 0202h, DI = 0302h, CX = 1.
3. tur: 'C' kopyalanır; CX = 0 → REP biter.
İşaretçi ve İndis Yazmaçları
Kesim Yazmaçları ve IP
- CS (kod), DS (veri), SS (yığın), ES (ek): her biri 64 KB'lık bir kesimin başlangıcını tutar.
- IP (Instruction Pointer): CS içinde çalıştırılacak sonraki komutun bağıl konumu.
- IP'ye
MOVile yazılamaz; yalnızca JMP, CALL, RET, kesmeler değiştirir. - Kesim yazmacına anlık değer yüklenemez:
MOV DS, AXgerekir.
| Çift | Kullanım |
|---|---|
CS:IP | sonraki komut |
SS:SP | yığının üstü |
SS:BP | yığın çerçevesi |
DS:BX, DS:SI, DS:DI | veri |
DS:SI → ES:DI | dizgi komutları |
[BX] → 20000h + 0500h = 20500h.Bayrak Yazmacı
Bayrak Yazmacı
- Durum yazmacı (status / FLAGS) olarak da adlandırılır; 16 bitlik yazmacın 9 biti kullanılır.
- Mikroişlemcinin yürüttüğü son aritmetik/mantık komutunun sonucu hakkında bilgi içerir.
- Koşullu atlama ve dallanma komutlarının (JZ, JC, JG …) davranışını belirler.
Bayrak Yazmacı
SF — İşaret Bayrağı
- Sign Flag, işlem sonucunun negatif mi pozitif mi olduğunu belirtir.
- Sonucun en önemli biti (MSB) kopyalanır:
- MSB = 1 → sayı (işaretli yorumda) negatiftir → SF = 1.
- MSB = 0 → sayı pozitif ya da sıfırdır → SF = 0.
- 8 bitte MSB bit 7, 16 bitte bit 15'tir.
| Sonuç (8 bit) | MSB | SF |
|---|---|---|
00h … 7Fh | 0 | 0 |
80h … FFh | 1 | 1 |
35h = 0011 0101b | 0 | 0 |
C2h = 1100 0010b | 1 | 1 |
Bayrak Yazmacı
ZF ve PF
- İşlem sonucunun sıfır olup olmadığını belirtir.
- Sonuç 0 ise ZF = 1; değilse ZF = 0.
CMP AX, BXeşitlikte ZF = 1 yapar →JE/JZatlar.- Örnek:
SUB AL, AL→ AL = 00h, ZF = 1.
- Sonucun düşük 8 bitindeki 1'lerin sayısı çift ise PF = 1; tek ise PF = 0.
- 16 bitlik işlemde de yalnızca düşük bayta bakılır.
- Örnek: 03h = 0000 0011b → iki 1 → PF = 1.
- Örnek: 07h = 0000 0111b → üç 1 → PF = 0.
Bayrak Yazmacı
AF — Yardımcı Elde Bayrağı
- Auxiliary Carry Flag: işlem sırasında bit 3'ten bit 4'e elde (toplamada) ya da ödünç (çıkarmada) oluşursa AF = 1; aksi hâlde 0.
- Yani düşük nibble'dan (4 bit) taşma olup olmadığını gösterir.
- BCD (Binary Coded Decimal, her basamak 0–9) aritmetiğine özgüdür:
DAA,DAS,AAA,AASbu bayrağı kullanır.
LAHF, PUSHF ile okunabilir, SAHF, POPF ile yazılabilir.Bayrak Yazmacı
CF — Elde Bayrağı
- Carry Flag: n bitlik işlemde sonuç n bite sığmazsa (MSB'den elde çıkarsa) CF = 1; aksi hâlde 0.
- Çıkarmada ödünç (küçükten büyük çıkarma) olursa da CF = 1 olur.
- İşaretsiz sayılar için taşma göstergesidir.
- Kaydırma/döndürme komutlarında dışarı atılan bit CF'ye gider.
- Programcı da değiştirebilir:
STC(1),CLC(0),CMC(tersle). - Çok baytlı toplamada
ADCbu eldeyi bir sonraki bayta taşır.
| İşlem (8 bit) | Sonuç | CF |
|---|---|---|
FFh + 01h | 00h | 1 |
80h + 80h | 00h | 1 |
70h + 10h | 80h | 0 |
05h − 07h | FEh | 1 (ödünç) |
07h − 05h | 02h | 0 |
Bayrak Yazmacı
OF — Taşma Bayrağı
- Overflow Flag: sonuç, işaretli olarak yorumlandığında kullanılan bit sayısına sığmıyorsa OF = 1; aksi hâlde 0.
- 8 bitte işaretli aralık −128 … +127, 16 bitte −32768 … +32767'dir.
- Kural (toplama): iki pozitif toplanıp negatif, ya da iki negatif toplanıp pozitif sonuç çıkarsa OF = 1. Farklı işaretli sayıların toplamı asla taşmaz.
- Donanımca: MSB'ye giren elde ile MSB'den çıkan elde farklıysa OF = 1.
| İşlem (8 bit) | İşaretsiz yorum | İşaretli yorum | Sonuç | CF | OF |
|---|---|---|---|---|---|
05h + 03h | 5 + 3 = 8 | 5 + 3 = 8 | 08h | 0 | 0 |
7Fh + 01h | 127 + 1 = 128 | 127 + 1 ≠ −128 | 80h | 0 | 1 |
FFh + 01h | 255 + 1 ≠ 0 | −1 + 1 = 0 | 00h | 1 | 0 |
80h + 80h | 128 + 128 ≠ 0 | −128 + (−128) ≠ 0 | 00h | 1 | 1 |
CF işaretsiz taşmayı, OF işaretli taşmayı gösterir; ikisi birbirinden bağımsızdır.
Bayrak Yazmacı
DF — Yön Bayrağı
- Direction Flag, dizgi (string) komutlarında veri erişim yönünü belirler.
- DF = 0: düşük adresten yükseğe; her adımda SI/DI artar.
- DF = 1: yüksek adresten düşüğe; SI/DI azalır.
- Adım büyüklüğü bayt komutlarında 1, sözcük komutlarında 2'dir.
CLD→ DF = 0,STD→ DF = 1.- Üst üste binen alanları kopyalarken yön önemlidir: hedef kaynağın ilerisindeyse sondan başa (STD) kopyalanır.
Bayrak Yazmacı · Kodu adım adım çalıştır
Kod İzleme: DF = 1 ile Örtüşen Kopyalama
org 100h mov si, offset dizi+3 ; kaynak mov di, offset dizi+4 ; hedef mov cx, 4 std ; DF = 1 rep movsb cld ret dizi db 'KLMN', 0
“KLMN” bir sağa kaydırılacak; kaynak ve hedef örtüşüyor. SI = 0111h: kaynağın son baytı.
DI = 0112h: hedefin son baytı (bir sağda).
CX = 4 bayt kopyalanacak.
std: DF = 1; dizgi komutları SI ve DI'yi her adımda azaltacak.
MOVSB 1: [0111h] → [0112h] ('N'); SI, DI 1 azaldı, CX = 3.
MOVSB 2: [0110h] → [0111h] ('M'); SI, DI 1 azaldı, CX = 2.
MOVSB 3: [010Fh] → [0110h] ('L'); SI, DI 1 azaldı, CX = 1.
MOVSB 4: [010Eh] → [010Fh] ('K'); SI, DI 1 azaldı, CX = 0. Sonuç KKLMN: dizi doğru kaydı.
cld ile DF = 0'a dönülür. CLD ile baştan kopyalansaydı 'K' her bayta taşınır, sonuç KKKKK olurdu: örtüşen alanda hedef kaynağın ilerisindeyse geriye kopyalanır.
Bayrak Yazmacı
IF ve TF
- Dış donanım kesmeleri (INTR girişi) ile ilişkilidir.
- IF = 1: çevre birimlerinden gelen maskelenebilir kesme talepleri ele alınır.
- IF = 0: bu talepler göz ardı edilir (maskelenir).
STI→ IF = 1,CLI→ IF = 0.- NMI (maskelenemeyen kesme) ve yazılım kesmeleri (
INT n) IF'den etkilenmez.
- Yonga içi hata ayıklama için kullanılır.
- TF = 1: tek adım (single step) modu; her komuttan sonra dahili INT 1 kesmesi üretilir ve tek adım ISR'si (kesme hizmet yordamı) çalışır.
- Böylece program komut komut incelenebilir (DEBUG, emu8086 “single step”).
- TF = 0: normal çalışma.
- Doğrudan komutu yoktur;
PUSHF→ bit 8'i değiştir →POPF.
Bayrak Yazmacı
Bayrakları Değiştiren Komutlar
| Komut | Etki | Komut | Etki |
|---|---|---|---|
CLC | CF = 0 | CLD | DF = 0 |
STC | CF = 1 | STD | DF = 1 |
CMC | CF = ¬CF | CLI / STI | IF = 0 / 1 |
LAHF | AH ← SF ZF – AF – PF – CF | SAHF | AH → düşük bayrak baytı |
PUSHF | FLAGS'i yığına koy | POPF | yığından FLAGS'e yükle |
| Komut grubu | Bayraklara etkisi |
|---|---|
| ADD, ADC, SUB, SBB, CMP, NEG | CF, PF, AF, ZF, SF, OF hepsi güncellenir |
| INC, DEC | CF hariç hepsi güncellenir |
| AND, OR, XOR, TEST | CF = OF = 0; PF, ZF, SF güncellenir; AF tanımsız |
| MOV, PUSH, POP, XCHG, LEA, LOOP, JMP | bayrakları etkilemez |
Bayrak Yazmacı · Kodu adım adım çalıştır
Kod İzleme: Bayrakları Okumak ve Yazmak
org 100h mov al, 0FFh add al, 1 ; CF ZF AF PF = 1 lahf ; AH ← bayraklar cmc ; CF tersle clc ; CF = 0 stc ; CF = 1 mov ah, 0C1h ; 1100 0001b sahf ; bayraklar ← AH ret
AL = FFh. Bayrakların düşük baytı: SF ZF – AF – PF – CF.
FFh + 1 = 00h: CF = 1, ZF = 1, AF = 1 (F + 1), PF = 1 (00h'de sıfır tane 1, çift).
lahf: bayrakların düşük baytı AH'ye kopyalanır → AH = 57h = 0101 0111b (bit 1 her zaman 1).
cmc: CF tersine döner, 1 → 0. Diğer bayraklar aynı.
clc: CF = 0 (zaten 0'dı).
stc: CF = 1. Çok baytlı ADC/SBB öncesi eldeyi hazırlamak için kullanılır.
AH = C1h = 1100 0001b: bit 7 (SF), bit 6 (ZF), bit 0 (CF) = 1.
sahf: AH bayrakların düşük baytına yazılır → SF = 1, ZF = 1, CF = 1, AF = PF = 0. OF, DF, IF, TF etkilenmez.
Laboratuvar · 8086 komutları adım adım
Laboratuvar: Yazmaçlar ve Bayraklar
Özet
Özet
[BX] → DS · [BP] → SS · dizgi → DS:SI, ES:DI · port → DX.Özet
Alıştırmalar
- AX = 3A7Fh iken
MOV AL, 0ve ardındanINC AHçalışınca AX kaç olur? MOV AL, 9Ch/ADD AL, 64hsonrası AL, CF, ZF, SF, OF, PF değerlerini bulun.MOV AL, 50h/ADD AL, 50h: CF ve OF kaçtır? Neden farklılar?- SP = 0100h iken 3 PUSH ve 1 POP sonrası SP kaçtır?
MOV CX, 0ile başlayan bir LOOP döngüsü kaç kez döner?
Cevaplar
- MOV AL, 0 → 3A00h; INC AH → 3B00h.
- 9Ch + 64h = 100h → AL = 00h, CF = 1, ZF = 1, SF = 0, OF = 0 (−100 + 100 = 0), PF = 1, AF = 1.
- A0h: CF = 0 (80 + 80 = 160 ≤ 255), OF = 1 (+80 + +80 = +160 > 127).
- 0100h − 6 + 2 = 00FCh.
- 65536 kez (ilk LOOP CX'i FFFFh yapar).
Özet
Kaynaklar
- Intel, The 8086 Family User's Manual, 1979.
- Barry B. Brey, The Intel Microprocessors, 8. baskı, Pearson, 2009.
- Muhammad Ali Mazidi, Janice G. Mazidi, The x86 PC: Assembly Language, Design, and Interfacing, 5. baskı, 2010.
- emu8086 belgeleri: 8086 instructions ve Addressing modes bölümleri.
- Mehmet Bodur, Mikroişlemcilere Giriş: Assembler ile Yazılım ve Arayüz.