· EEM332

EEM332 Mikroişlemciler: 8086 Komut Kümesi ve Örnekler (Gazi Üniversitesi, M. Ali Akcayol)

EEM332 – Mikroişlemciler · 01.01.2007 · 18.10.2026

Bu yazı, Başkent Üniversitesi EEM332 Mikroişlemciler ders arşivindeki ilgili notları ve uygulamaları bir araya getiriyor (2007–2007). 8086 komut kümesi, operandlar ve örnek assembly işlemleri; 2007 tarihli ders notu. Kaynak: Gazi Üniversitesi, M. Ali Akcayol, 2007. Belgelerin PDF arşiv kopyaları ve varsa kaynak kodları yazının sonunda ZIP olarak indirilebilir.

Bu içerik üçüncü taraf bir kaynağa aittir; arşiv ve nostalji amacıyla kaynak belirtilerek paylaşılmıştır. Hak sahibinin talebi hâlinde kaldırılır.

_8086KomutlarOrnekler

8086 KOMUT KÜMESİ VE ÖRNEKLER

Doç.Dr. M.Ali Akcayol

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

(2007)

NOT: Bu doküman başta emu8086 programının yardım dosyası olmak üzere aşağıdaki

kaynaklar kullanılarak hazırlanmıştır

Barry B. Brey, The Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro Processor, Pentium II, Pentium Ill, Pentium 4 Architecture, Programming, and Interfacing (7th edition), Prentice Hall, ISBN: 0131974076, 2006.

Walter A. Triebel, Avtar Singh, Avtar Singh, The 8088 and 8086 Microprocessors: Programming, Interfacing, Software, Hardware, and Applications (4th edition), Prentice Hall, 0130930814, 2002.

Muhammad Ali Mazidi, Janice Gillispie-Mazidi, Muhammad A. Mazidi, Janice Catherine Gillispie-Mazidi, 80X86 IBM PC and Compatible Computers: Assembly Language, Design, and Interfacing (4th edition), Prentice Hall, 2002.

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

GENEL BİLGİLER

GENEL AMAÇLI REGİSTER'LAR

AX, BX, CX, DX, SI, DI, BP, SP

OZEL AMACLI REGISTER’LAR

IP, FLAG REGISTER’LARI

SEGMENT REGISTER’LARI

CS, DS, ES, SS

OPERAND TÜRLERİ

REG : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

SREG : DS, ES, SS, CS(sadece ikinci operand).

memory _ : [BX], [BX+SI+7], degisken, vb.

immediate : 5, -24, 3Fh, 10001101b, vb.

BAYRAK DURUMLARI

1 - komut bu bayrak bitini 1 yapar.

0 - komut bu bayrak bitini O yapar.

r - bayrak değeri komutun sonucuna bağlıdır.

? - bayrak değeri tanımsızdır (1 veya 0 olabilir).

DEĞİŞKENLER

isim DB değer
isim DW değer

isim DD değer

Örnek

ORG 100h
MOV AL, varl
MOV BX, var2
RET i program durur
VARI DB 7
var2 DW 1234h

DİZİLER

a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h
b DB 'Hello', 0

... a[6] al1) a[2] a[3] a[4] a[5] b(6J b[1] b[2]

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

MOV AL, a[3]
MOV SI, 3
MOV AL, a[SI]

DUP operatörü

adet DUP ( degerler )

c DB 5 DUP (9)
c DB 9, 9, 9, 9, 9
d DB 5 DUP(1, 2)

sh 2 0

DEGISKENLER

isim EQU <ifade>
k EQU 5
MOV AX, k
MOV AX, 5

BAYRAK BİTLERİ

C - Carry Flag

Z - Zero Flag

S - Sign Flag

O - Overflow Flag P - Parity Flag

A - Auxiliary Flag | - Interrupt Flag D - Direction Flag

VERİ TRANSFER KOMUTLARI

PUSH, POP, LEA, LDS, LODS, LODSB, LODSW, STOS, STOSB, STOSW, MOVS, MOVSB, MOVSW, INS, INSB,

INSW, OUTS, OUTSB, OUTSW, XCHG, LAHF, SAHF, XLAT, IN, OUT

ARİTMETİK VE MANTIK KOMUTLARI

ADD, INC, ADC, SUB, DEC, SBB, CMP, MUL, IMULI DIV, IDIV, CBW, CWD, DAA, DAS, AAA, AAD, AAM, AAS,
AND, OR, XOR, TEST, NOT, NEG, SHL, SHR, SAL, SAR, ROL, RCL, RCR, ROR, SCAS, CMPS

PROGRAM KONTROL KOMUTLARI

JMP, JA, JAE, JB, JBE, JC, JE, JZ, JG, JGE, JL, JLE, INC, JNE, JNZ, JNC, JNE, JNZ, JNO, JNS, JNP, JPO,
JO, JP, JPE, JS, JCXZ, LOOP, CALL, RET, INT, IRET, HLT, NOP

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

GENEL BİLGİLER

KOMUT O OPERANDLAR TANIM VE ÖRNEK

5 Toplama sonrasında ASCII düzenlemesi yapar. BCD kodlarıyla çalışırken toplama sonrasında AH ve AL değerlerini

düzenler.

Algoritma

if low nibble of AL > 9 or AF = 1 then

AL = AL + 6

AH = AH +1

AF =1 CF=1 else

AF = 0

CF = 0

İki durumdada AL’nin soldaki dörtlüsü sıfırlanır.

Örnek

MOV AX, 15 ; AH = 00, AL = OFh
AAA ; AH = 01, AL = 05
RET

2 Bölme sonrasında ASCII düzenlemesi yapar. İki BCD değerini bölme için hazırlar.

Algoritma

AL = (AH * 10) + AL

AH = 0

Ornek:
MOV AX, 0105h ; AH = 01, AL = 05
AAD ; AH = 00, AL = OFh (15)
RET

c|zJsJojfJrPJA ?l)rjr|2)Jr)J2

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

arpma sonrasında ASCII düzenlemesi yapar. İki BCD değerinin çarpma sonucunu düzenler.

Algoritma

AH = AL / 10

AL = remainder

Ornek:
MOV AL, 15 ; AL = OFh
AAM ; AH = 01, AL = 05
RET

lol

N

oO} >

Çıkarma sonrasında ASCII düzenlemesi yapar. BCD kodlarıyla çalışırken çıkarma sonrasında AH ve AL değerlerini düzenler.

Algoritma

if low nibble of AL > 9 or AF - 1 then

AL = AL - 6

AH = AH - 1

AF =1 CE s1 else a (8)

CE = 0

iki durumdada AL’nin soldaki dörtlüsü sıfırlanır.

Örnek

MOV AX, O2FFh ; AH = 02, AL = OFFh

AAS ; AH = 01, AL = 09

RET

SPAS ee rj(2J2(2)J2)r

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

Toplama yapar.

Algoritma

operandi = operandi + operand2

Ornek:
MOV AL, 5; AL = 5
ADD AL, -3 ; AL = 2
RET

GEZE

rİrjrlrjrjr

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

iki operand arasında karşılıklı tüm bitlere mantıksal VE işlemi yapar ve sonucu soldaki operanda kaydeder.

Doğruluk tablosu

1 AND 1=1

1 AND 0 o

0 AND 1 = 0

0 AND 0 = 0

Ornek:
MOV AL, 'a' ; AL = 01100001b
AND AL, 11011111b ; AL = 01000001b ('A')
RET

ae O|P olr|/r/ojr

procedure name etiket 4-byte adres

Bir prosedürü çağırır ve dönüş adresini (IP) stack'a push eder. 4 byte adres kullanılarak çağırma yapılabilir. 1234h:5678h adresinde ilk değer segment ikinci değer offset adresini belirtir. Bu far çağırmadır ve IP ile birlikte CS stack'a push edilir.

Örnek

make, COM$

ORG 100h Oo; for COM file.
CALL pl
ADD AX, 1
RET ; return to DOS.
pl PROC i procedure declaration.
MOV AX, 1234h
RET 7; return to caller.

pl ENDP

C[z{s[o[PlA degismez

Byte degeri word’e cevirir.

Algoritma

if high bit of AL = 1 then AH = 255 (OFFh)

else

AH = 0

Ornek:
MOV AX, 0 ; AH = 0, AL = 0
MOV AL, -5 ; AX = 000FBh (251)

CBW } AX = OFFFBh (-5)

RET

C[z{s[o[PlA degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

. Taşma bayrağı (Carry flag) sıfırlanır.

Algoritma

CE = 0

Cc

  • Direction bayrağı (Direction flag) sıfırlanır. SI ve DI register'ları CMPSB,

CMPSW, LODSB, LODSW,

MOVSB, MOVSW, STOSB, STOSW komutlarıyla ardarda yapılan

işlemlerde artırılır.

Algoritma

DF = 0

D

s Interrup etkinleştirme bayrağı (Interrupt enable flag) sıfırlanır. Bu donanım interrupt'larını etkisiz yapar.

Algoritma

IF -0

I

i Taşma bayrağı (Carry flag) terslenir(complement).

Algoritma

if CF - 1 then CF - 0 if CF = 0 then CF - 1

Cc

R

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

Karşılaştırma yapar. Soldaki operand’1 sağdakinden çıkartır ancak operandlar değişmez sadece bayrak bitleri değişir.

Algoritma

öperandi - operand2

OF, SF, ZF, AF,PF, CF bayrakları sonuca göre yeniden düzenlenir.

Örnek

MOV AL, 5
MOV BL, 5
CMP AL, BL ; AL=5, ZF=1 Çeşit)
RET

GSE

rİrjrlrjrjr

ES: [DI] ile DS:JSIJ arasında bir byte karşılatırır.

Algoritma

DS:1SIJ — ES: [DI]

OF, SF, ZF, AF, PF, CF bayrakları sonuca göre yeniden düzenlenir. if DF = 0 then

SI =sI+1

DI =DI+1

SI=st-1 DI =DI-1

Z(s|o r[re[r[r[r[r

ES:[DI] ile DS:[SI] arasında bir word karşılatırır.

Algoritma

DS: [SI] - ES: [DI]

OF, SF, ZF, AF, PF, CF bayrakları sonuca göre yeniden düzenlenir. if DF = 0 then

SI = SI + 2

DI = DI +2

SI = SI - 2

DI = DI - 2

Z{[s[o rİrjrirjrjr

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

. İşaretli sayılarda word boyutunu doubleword boyutuna genişletir.

Algoritma

if high bit of AX = 1 then DX = 65535 (OFFFFh)

else

DX = 0

Ornek:
MOV DX, 0 ; DX = 0
MOV AX, 0 ; AX = 0
MOV AX, —5 ; DX AX = 00000h:0FFFBh

CWD ; DX AX = OFFFFh:0FFFBh

RET

CIZISTOJPTA

değişmez

2 Toplamadan sonra ondalık düzenlemesi yapar. İki BCD değerinin toplam sonucunu düzenler.

Algoritma

if low nibble of AL > 9 or AF - 1 then

AL = AL + 6

AF =1

if AL > 9Fh or CF = 1 then AL = AL + 60h

CF =1

Ornek:
MOV AL, OFh } AL = OFh (15)
DAA AE Gia
RET

a O|P

3 Çıkarmadan sonra ondalık düzenlemesi yapar. İki BCD değerinin çıkarma sonucunu düzenler.

Algoritma

if low nibble of AL > 9 or AF - 1 then

AL = AL - 6

AF =1

if AL > 9Fh or CF = 1 then AL = AL — 60h

Cr Si

Ornek:
MOV AL, OFFh ; OFFh (<1)
DAS 7 99h, CF -1
RET

c|zJsJoJPJA rİrjrirjrjr

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

REG Azaltma işlemi yapar. memory

Algoritma

operand = operand - 1

Ornek:
MOV AL, 255 ; AL = OFFh (255 or -1)
DEC AL ; AL = OFEh (254 or -2)
RET

c|zJsJofJPJA rİrjirirjrjr

CF değişmez! REG İşaretsiz bölme yapar. memory

Algoritma

operand byte ise

AL - AX / operand AH - remainder (kalan)

operand word ise

AX = (DX AX) / operand DX = remainder (kalan)

Ornek:

‘MOV AX, 203 ; AX = 00CBh

MOV BL, 4
DIV BL 7 AL = 50 (32h), AH = 3
RET

cj|zjsJofJPJA

İNENENENENE

  • Program kapatılır.

Örnek

MOV AX, 5
HLT

c(zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG İşaretli bölme yapar. memory

Algoritma

operand byte ise

AL = AX / operand

AH = remainder (kalan)

operand word ise

AX = (DX AX) / operand

DX = remainder (kalan)

Ornek:
MOV AX, -203 ; AX = OFF35h
MOV BL, 4

IDIV BL ; AL = -50 (0CEh), AH = -3 (OFDh)

RET

c/zJsJojJrPJA

Tl?l?l?7 lel?

REG isaretli çarpma yapar. memory

Algoritma

operand byte ise

AX = AL * operand

operand word ise

(DX AX) = AX * operand

Ornek:
MOV AL, -2
MOV BL, -4

IMUL BL ; AX = 8

RET

cj(zJsJojJrPJA r|2(/2(r|J2)(2

Sonuç operandan taşmazsa CF=OF=0 sıfır olur.

AL, im.byte AL veya AX'e porttan giriş alır. AL, DX ikinci operand port numarasidir. AX, im.byte AX, DX Second operand is a port number. Eğer 255 üstündeki portlara erişim gerekiyorsa DX register’1 kullanılır.

Ornek:
IN AX, 4 ; get status of traffic lights.
IN AL, 7 ; get status of stepper-motor.

cj|zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG Artırma işlemi yapar. memory

Algoritma

operand = operand + 1

Ornek:
MOV AL, 4
INC AL ; AL
RET

" a

SJOJPJA

r[r[r[r[r

CF degismez!

immediate byte Operandla verilen interrupt’) çalıştırır.

Algoritma

Stack’a push et

bayrak register'ları cs

IP

IF=0 Program akışını interrupt prosedürüne atlatır

Örnek

MOV AH, OBh ; teletype.
MOV AL, 'A'
INT 10h ; BIOS interrupt.
RET

Ci[z[s[o[P[A degismez 0

2 Overflow bayrağı 1 ise interrupt 4'ü çalıştır.

Algoritma

if OF = 1 then INT 4

Ornek:

} -5 - 127 = -132 (not in -128..127)

; the result of SUB is wrong (124),
ji so OF = 1 is set:
MOV AL, -5
SUB AL, 127 ; AL = 7Ch (124)

INTO ; process error.

RET

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

Interrupt dönüşü.

Algoritma

Stack'tan pop et

IP

cs flags register

c(zJsJoJPJA

pop edilir

etiket

Eğer birinci operand ikinciden büyükse kısa atlama (short jump yapar). İşaretsiz karşılaştırma yapar.

Algoritma

if (CF = 0) and (ZF = 0) then jump

Örnek

include ‘emu8086.inc'

make_COM#

ORG 100h
MOV AL, 250
CMP AL, 5
JA etiketi

PRINT 'AL 5'ten büyük degil'

JMP exit
etiketi:

PRINT 'AL 5’ten büyük"

exit

RET

CIZ[S[oO[P[A degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer birinci operand ikinciden büyük veya eşitse kısa atlama (short

jump yapar). İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 0 then jump

Ornek:
include 'emu8086.inc"

make_COM# ‘ORG 100h

MOV AL, 5
CMP AL, 5
JAE etiketli

PRINT 'AL is not above or equal to 5'

JMP exit

etiketi; PRINT 'AL is above or egual to 5'

exit

RET

c(zJsJoJPJA değişmez

etiket Eğer birinci operand ikinciden küçükse kısa atlama (short jump yapar). İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 1 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 1
CMP AL, 5
JB etiketl

PRINT 'AL is not below 5!

JMP exit
etiketi:

PRINT 'AL is below 5'

exit

RET

CELLE

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket

Eğer birinci operand ikinciden küçük veya eşitse kısa atlama (short

jump yapar). İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 1 or ZF = 1 then jump

Ornek:
include 'emu8086.inc"

make_COM#

‘ORG 100h

MOV AL, 5

‘CMP AL, 5

JBE etiketli

PRINT 'AL is not below or equal to 5' IMP exit

etiketi

PRINT 'AL is below or egual to 5'

exit

RET

c(zJsJoJPJA değişmez

etiket

Taşma bayrak biti 1 ise kısa atlama yapar.

Algoritma

if CF = 1 then jump

Örnek

include 'emu8086.inc'

make_COM#

‘ORG 100h

MOV AL, 255
ADD AL, 1
JC etiketi

PRINT 'taşma yok"

JMP exit
siiketli:

PRINT “taşma var'

exit

RET

cizJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket CX register’! 1 ise kısa atlama yapar.

Algoritma

if CX = 0 then jump

Örnek

include "emu8086.inc"

make_COM#

ORG 100h
MOV CX, 0
JCXZ etiket1

PRINT 'CX sıfır de§ildir.' IMP exit

etiketl

PRINT 'CX sıfırdır.'

exit

RET

CIZ[s[O[P[A degismez

etiket Eger birinci operand ikinci operanda esitse kisa atlama (short jump yapar). İşaretli veya işaretsiz karşılaştırma yapar.

Algoritma

if 2F = 1 then jump

Örnek

include 'emu8086.inc'

make COM#

ORG 100h
MOV AL, 5
CMP AL, 5
JE etiketl

PRINT 'AL 5’e eşit değil." UMP exit

etiketli

PRINT 'AL 5’e eşit.' exits

RET

CI[Z[S[O][P[A

degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket

Eğer birinci operand ikinciden büyük veya eşitse kısa atlama (short

jump yapar). İşaretli karşılaştırma yapar.

Algoritma

if (ZF = 0) and (SF = OF) then jump

Örnek

include 'emu8086.inc"

make_COM# ‘ORG 100h

MOV AL, 5
CMP AL, -5
JG etiketli

PRINT 'AL -5'ten büyük değildir.'

JMP exit

etiketi; PRINT ' AL -5'ten büyüktür."

exit

RET

c(zJsJoJPJA değişmez

etiket

Eğer birinci operand ikinciden büyük veya eşitse kısa atlama (short

jump yapar). İşaretli karşılaştırma yapar.

Algoritma

if SF - OF then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 2
CMP AL, -5
JGE etiketli
JMP exit
etiketi:

exit

RET

CELLE

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket

Eğer birinci operand ikinciden küçükse kısa atlama (short jump yapar). İşaretli karşılaştırma yapar.

Algoritma

if SF <> OF then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, -2
CMP AL, 5
JL etiketli

UMP exit etiketi;

exit

RET

c(zJsJoJPJA değişmez

etiket

Eğer birinci operand ikinciden küçük veya eşitse kısa atlama (short

jump yapar). İşaretli karşılaştırma yapar.

Algoritma

if SF <> OF or ZF - 1 then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, -2
CMP AL, 5
JLE etiketli
JMP exit
etiketi:

exit

RET

CELLE

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket 4-byte adres

Şartsız atlama yapar. . 4-byte adres 1234h:5678h seklinde girilebilir. ilk deger segment ikinci offset adrestir.

Algoritma

always jump

Ornek:
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, 5

UMP etiket1 ; jump over 2 lines! PRINT ‘Not Jumped!"

MOV AL, 0

etiketi

PRINT 'Got Here!

RET

c(zJsJoJPJA değişmez

etiket

Eğer birinci operand ikinciden büyük değilse kısa atlama (short jump) yapar. İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 1 or ZF = 1 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 2
CMP AL, 5
JNA etiketli

PRINT 'AL is above 5."

JMP exit

etiket lc

PRINT 'AL is not above 5."

exit

RET

CIZISTOJPTA

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket

Eğer birinci operand ikinciden büyük değilse ve eşit değilse kısa atlama (short jump) yapar. İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 1 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 2
CMP AL, 5
JNAE etiketi
JMP exit

etiketi;

exit

RET

c(zJsJoJPJA değişmez

etiket

Eğer birinci operand ikinciden küçük değilse kısa atlama (short jump) yapar. İşaretsiz karşılaştırma yapar.

Algoritma

if CF = 0 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 7
CMP AL, 5
JNB etiket1
JMP exit
etiketi:

exit

RET

CELLE

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer birinci operand ikinciden küçük değilse ve eşit değilse kısa atlama (short jump) yapar. İşaretsiz karşılaştırma yapar.

Algoritma

if (CF = 0) and (ZF = 0) then jump

Ornek:
include 'emu8086.inc"

make_COM# ‘ORG 100h

MOV AL, 7
CMP AL, 5
JNBE etiketi
JMP exit

etiketi;

exit

RET

c(zJsJoJPJA değişmez

etiket Taşma bayrak biti (carry flag) O ise kısa atlama (short jump) yapar.

Algoritma

if CF = 0 then jump

Ornek:
include 'emu8086.inc'

make_COM# ‘ORG 100h

MOV AL, 2
ADD AL, 3
JNC etiketli

PRINT ‘has carry.' UMP exit etiketi; PRINT 'no carry.'

exit

RET

cizJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer birinci operand ikinciye eşit değilse kısa atlama (short jump) yapar. İşaretli veya işaretsiz karşılaştırma yapar.

Algoritma

if ZF = 0 then jump

Ornek:
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, 2
CMP AL, 3

INE etiketi

IMP exit etiketlik PRINT 'Al <> 3.'

exit

RET

CIZ[S[O[P[A

degismez

etiket Eger birinci operand ikinciden büyük değilse kısa atlama (short jump) yapar. İşaretli karşılaştırma yapar.

Algoritma

if (ZF = 1) and (SF <> OF) then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 2
CMP AL, 3

ING etiket1

JMP exit
etiketi:

PRINT 'Al <= 3."

exit

RET

CIZJISToJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer birinci operand ikinciden büyük değilse ve eşit değilse kısa atlama (short jump) yapar. İşaretli karşılaştırma yapar.

Algoritma

if SF <> OF then jump

Örnek

include 'emu8086.inc"

make_COM# ‘ORG 100h

MOV AL, 2
CMP AL, 3
JNGE etiketli
JMP exit

etiketi; PRINT 'Al < 3.'

exit

RET

c(zJsJoJPJA değişmez

etiket Eğer birinci operand ikinciden küçük değilse kısa atlama (short jump) yapar. İşaretli karşılaştırma yapar.

Algoritma

if SF - OF then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 2
CMP AL, -3
JNL etiketli
JMP exit

etiketi

PRINT 'Al >= -3.'

exit

RET

CELLE

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer birinci operand ikinciden küçük değilse ve eşit değilse kısa atlama (short jump) yapar. İşaretli karşılaştırma yapar.

Algoritma

if (SF - OF) and (ZF - 0) then jump

Örnek

include 'emu8086.inc"

make_COM#

‘ORG 100h

MOV AL, 2
CMP AL, -3

İNLE etiketi

JMP exit
etiketi:

PRINT 'Al > -3.'

exit

RET

c(zJsJoJPJA değişmez

etiket Overflow bayrak biti 0 ise kısa atlama (short jump) yapar.

Algoritma

if OF = 0 then jump

Ornek:

-5 - 2 = -7 (inside -128..127) the result of SUB is correct,

so OF = 0

include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, -5
SUB AL, 2 ; AL = 0F9h (-7)
JNO etiketli

PRINT 'overflow!' IMP exit etiketlik PRINT 'no overflow."

exit

RET

c(zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket Parity (eşlik) bayrak biti 0 ise (odd-tek) kısa atlama (short jump) yapar. Sadece en düşük öneme sahip 8 bit kontrol edilir. CMP, SUB, ADD,

TEST, AND, OR, XOR komutları set eder.

Algoritma

if PF = 0 then jump

Ornek:
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.

INP etiket1

PRINT 'parity even.'

JMP exit

etiketi

PRINT 'parity odd.'

exit

RET

cj|zJsJoJPJAa değişmez

etiket İşaret bayrak (signed) biti 1 değilse (pozitif) kısa atlama (short jump) yapar. CMP, SUB, ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if SF = 0 then jump

Ornek:
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.

ONS etiket1 PRINT 'signed.' UMP exit

etiketl

PRINT 'not signed.’

exit

RET

C[z{s[o[PlA degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Sıfır bayrak (ZF) biti O ise (pozitif) kısa atlama (short jump) yapar.

CMP, SUB, ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if ZF = 0 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 00000111b ; AL=7
OR AL, 0 ; just set flags.
JNZ etiket1

PRINT 'zero.'

UMP exit

etiketi;

PRINT 'not zero.'

exit

RET

c(zJsJoJPJA değişmez

etiket Overflow bayrak (OF) biti 1 ise kısa atlama (short jump) yapar.

Algoritma

if OF - 1 then jump

Örnek

e iye 132 (ice in 128127)

; the result of SUB is wrong (124),

i so OF = 1 is set

include 'emu8086.inc'

make_COM#

org 100h
MOV AL, -5
SUB AL, 127 ; AL = 7Ch (124)
JO etiketi

PRINT 'no overflow.'

IMP exit

etiketii

PRINT 'overflow!'

exit

RET

C[Z[S[O[P[A

degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket

Parity (eşlik) bayrak biti 1 ise (even-çift) kısa atlama (short jump) yapar. Sadece en düşük öneme sahip 8 bit kontrol edilir. CMP, SUB,

ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if PF = 1 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 00000101b ; AL = 5
OR AL, 0 ; just set flags.
JP etiketl

PRINT 'parity odd.'

UMP exit

etiketi

PRINT 'parity even."

exit

RET

cj|zJsJoJPJAa değişmez

etiket

Parity çift ise (even) kısa atlama (short jump) yapar. Sadece en düşük öneme sahip 8 bit kontrol edilir. CMP, SUB, ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if PF = 1 then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 00000101b ; AL = 5
OR AL, 0 ; just set flags.
JPE etiket1

PRINT 'parity odd.'

JMP exit

etiketli

PRINT 'parity even.'

exit

RET

c(zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Parity tek ise (odd) kısa atlama (short jump) yapar. Sadece en düşük öneme sahip 8 bit kontrol edilir. CMP, SUB, ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if PF = 0 then jump

Ornek:
include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.
JPO etiketli

PRINT 'parity even.'

UMP exit

etiketi

PRINT 'parity odd.'

exit

RET

cj|zJsJoJPJAa değişmez

etiket Sign bayrak biti 1 ise (negatif) kısa atlama (short jump) yapar. CMP,

SUB, ADD, TEST, AND, OR, XOR komutları set eder.

Algoritma

if SF = 1 then jump

Ornek:
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AL, 10000000b ; AL = -128
OR AL, 0 ; just set flags.
JS etiketi

PRINT 'not signed.' UMP exit

etiketl

PRINT 'signed.'

exit

RET

C[z{s[o[PlA degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket Eğer sıfır ise (ZF-1) kısa atlama (short jump) yapar. CMP, SUB, ADD,

TEST, AND, OR, XOR komutları set eder.

Algoritma

if ZF = 1 then jump

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV AL, 5
CMP AL, 5
JZ etiketi

PRINT 'AL is not equal to 5.' UMP exit

etiketi;

PRINT 'AL is equal to 5.'

exit

RET

c(zJsJoJPJA değişmez

2 AH register’ina bayrak register’inin (flags register) en düşük öneme sahip 8 bit’ini yükler.

Algoritma

AH = flags register AH: 7 6 5 4 3 2 1 te)

(SF) [ZF] [0] [AF] [0] [PF] [1] [CF]

1, 3, 5 bitleri ayrılmıştır.

CIZ[S[oO[P[A degismez

REG, memory Hafizadan alınan doubleword datayı hedef operand register’a ve DS’ye yükler.

Algoritma

REG = first word DS = second word

Ornek:

make_COM#

ORG 100h

LDS AX, m

RET
m DW 1234h

DW 5678h

END

AX is set to 1234h, DS is set to 5678h.

cJzJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG, memory Efektif adres yükler.

Algoritma

REG = adres of memory (offset)

Örnek

make_COM#

ORG 100h
LEA AX, m
RET
m DW 1234h
END

AX’e 0104h degeri atanir.

LEA komutu 3 byte, RET komutu 1 byte’tir. 0100h adresinden

başlandığı icin m’nin adresi 0104h olur.

CIZJSJOJPJA

değişmez

REG, memory Hafızadan alınan doubleword datayı hedef operand register'a ve ES'ye yükler.

Algoritma

REG = first word ES = second word

Ornek:

make COM$#

ORG 100h

LES AX, m

RET
m DW 1234h

DW 5678h

END

AX register’inin değeri 1234h olur ve ES register’inin değeri 5678h olur.

CIZJSJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

. AL register’ina DS:[SI] adresinden bir byte yükler. SI değeri güncellenir (1 artırılır (D=0), 1 azaltılır (D=1))

Algoritma

AL = DS:1SI)J

if DF = 0 then Sr = Si + 1 else

Seki sl

Örnek

make_COM#

ORG 100h
LEA SI, al
MOV CX, 5
MOV AH, OEh
m: LODSB
INT 10h
LOOP m
RET
al DB 'H', 'e', Cl, '1!, to!

CiZ[s[o[P[A degismez

i AX register'ına DS:[SI] adresinden bir word yükler. SI değeri güncellenir (2 artırılır (D=0), 2 azaltılır (D=1))

Algoritma

AX = DS:(SIJ

if DF = 0 then Su = si 2 else

Sh ei = 2

Ornek:

make_COM#

ORG 100h
LEA SI, al
MOV CX, 5
REP LODSW ; finally there will be 555h in AX.
RET
al dw 1lih, 222h, 333h, 444h, 555h

CIZJSJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

etiket CX bir azaltılır ve CX sıfır değilse etikete atlanır.

Algoritma

ex sGX-1

if CX <> 0 then

jump

else

no jump, continue

Örnek

include 'emu8086.inc"

make_COM#

ORG 100h
MOV CX, 5

etiker ik

PRININ 'loop!'

LOOP etiket1
RET

CI[Z[S[O][P[A

degismez

etiket CX bir azaltilir ve CX sifir degilse ve esitlik varsa (verilen iki operand arasinda) (ZF=1) etikete atlar.

Algoritma

xx =

if (CX <> 0) and (ZF = 1) then

jump

else

no jump, continue

Ornek:
; Loop until result fits into AL alone,
; or 5 times. The result will be over 255
; on third loop (100+100+100),
; so loop will exit.
include 'emu8086.inc’

make_COM#

ORG 100h
MOV AX, O
MOV CX, 5

etiketi

PUTC '*'

ADD AX, 100
CMP AH, 0
LOOPE etiket1l
RET

C[Z[S[O[Pl/A degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket CX bir azaltılır ve CX sıfır değilse ve eşitlik yoksa (verilen iki operand arasında) (ZF=0)

Algoritma

EK =x

if (CX <> 0) and (ZF = 0) then

jump

else

no jump, continue

Ornek:
; Loop until '7' is found,
; or 5 times.
include 'emu8086.inc'

make_COM#

ORG 100h
MOV SI, 0
MOV CX, 5

etiketi

PUTC '4!

MOV AL, v1[SI]
INC SI ; next byte (SI=SI+1).
CMP AL, 7
LOOPNE etiketl
RET
vl db 9, 8, 7, 6, 5

cizJsJoJPJA değişmez

etiket CX bir azaltılır ve CX sıfır değilse ve ZF=0 ise etikete atlar.

Algoritma

CX = CX -— 1

if (CX <> 0) and (ZF = 0) then

jump

else

no jump, continue

Ornek:
; Loop until '7' is found,

7 or 5 times.

include 'emu8086.inc!

make_COM#

ORG 100h
MOV SI, 0
MOV CX, 5

etiketl

rege) Tet

MOV AL, v1[SI]
INC SI ; next byte (SI=SI+1).
CMP AL, 7
LOOPNZ etiketli
RET
vl db 9, 8, 7, 6, 5

cj|zJsJoJPJAa değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

etiket CX bir azaltılır ve CX sıfır değilse ve ZF=1 ise etikete atlar.

Algoritma

cece

if (CX <> 0) and (ZF = 1) then

jump

else

no jump, continue

Ornek:
; Loop until result fits into AL alone,
; or 5 times. The result will be over 255
; on third loop (100+100+100),
; so loop will exit.
include 'emu8086.inc'

make_COM#

ORG 100h
MOV AX, 0
MOV CX, 5

etiketi

Eyre 1 #

ADD AX, 100
CMP AH, 0
LOOPZ etiketl
RET

CIZ[S[O[P[A

degismez

MOV REG, memory İkinci operand birinci operanda kopyalanır.
memory, REG

REG, REG MOV komutuyla

memory, * CS ve IP register'larına değer atanamaz. immediate * İki segment register'i arasında değer aktarılamaz (önce genel REG, immediate amaçlı register'a aktarılmalıdır). SREG, memory

memory, SREG Algoritma

REG, SREG operandl = operand2

SREG, REG

Ornek:

make_COM#

ORG 100h
MOV AX, OB800h ; set AX = B800h (VGA memory).
MOV DS, AX ; copy value of AX to DS.
MOV CL, 'A' ; CL = 41h (ASCII code).
MOV CH, 01011111b ; CL = color attribute.
MOV BX, 15Eh ; BX = position on screen.
MOV [BX], CX ; w.[0B800h:015Eh] = CX.
RET ; returns to operating system.

cj|zJsJoJPJAa değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

. DS:(SIJ adresinden ES:(DIJ adresine bir byte kopyalar. SI ve DI register'ları güncellenir.

Algoritma

ES:(DIJ = DS:[SI]

if DF = 0 then SE = Si 4 1 DI =DI+1

SI=st-1

DI = DI-1

Ornek:

make_COM#

ORG 100h
LEA SI, al
LEA DI, a2
MOV CX, 5
REP MOVSB
RET

ai Bel, 2, 3,475

a2 DB 5 DUP (0)

c(zJsJoJPJA değişmez

. DS:(SIJ adresinden ES: [DI] adresine bir word kopyalar. SI ve DI register'ları güncellenir.

Algoritma

ES:(DI] = DS:(SIJ

if DF = 0 then

SI = SI + 2

DI = DI + 2

SI = SI -2

DI = DI - 2

Ornek:

make_COM#

ORG 100h
LEA SI, al
LEA DI, a2
MOV CX, 5
REP MOVSW
RET
al DW 1,2,3,4,5
a2 DW 5 DUP(0)

CIZ[s[O[P[A degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG

memory

İşaretsiz çarpma yapar.

Algoritma

operand byte ise

AX - AL * operand.

operand word ise

(DX AX) = AX * operand.

Ornek:
MOV AL, 200 ; AL = 0C8h
MOV BL, 4
MUL BL ; AX = 0320h (800)
RET

C{[Z{[s[O[PlA cl? [?[r[?[?

CF=OF=0 when high section of the result is zero.

REG

memory

Bir sayının işaretini tersler (ikinin tümleyeni).

Algoritma

Invert all bits of the operand

Add 1 to inverted operand
Ornek:
MOV AL, 5 ; AL = 05h

NEG AL ; AL = OFBh (-5) NEG AL ; AL = 05h (5)

RET

c|zJsJo rİrjrirjrjr

İşlem yapmaz.

Algoritma

Do nothing

Örnek

; do nothing, 3 times:
NOP
NOP
NOP
RET

cizJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG Operandaki her bit terslenir (birin tümleyeni). memory

Algoritma

if bit is 1 turn it to 0. if bit is 0 turn it to 1.

Ornek:
MOV AL, 00011011b
NOT AL ; AL = 11100100b
RET

CIZ[sS[O[P[A

degismez REG, memory İki operandaki karşılıklı her bit için mantıksal veya işlemi yapar. memory, REG

REG, REG Doğruluk tablosu

memory, 1OR1=1

immediate 1 oR 0 REG, immediate OORI

Örnek

MOV AL, 'A' ; AL = 01000001b
OR AL, 00100000b ; AL = 01100001b ('a')
RET

c|zJsJojfJrPJA olr|r/ojJrfJ2

OUT im.byte, AL AL veya AX register’1 verilen porta gönderilir.

im.byte, AX İlk operand port numarasıdır. Eğer 255'in üstündeki portlara erişim DX, AL gerekirse DX register’) kullanılır.

DX, AX

Örnek

MOV AX, OFFEh ; Turn on all
OUT 4, AX ; traffic lights.
MOV AL, 100b ; Turn on the third
OUT 7, AL ; magnet of the stepper-motor.

cj|zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG

SREG

memory

Stack’tan 16 bit değer alır ve operanda aktarır.

Algoritma

operand = SS:[SP] (stack'ın en üstü)

SP - SP 42

Örnek

MOV AX, 1234h
PUSH AX
POP DX ; DX = 1234h
RET

cj|zJsJoJPJAa değişmez

Bütün genel amaçlı register'ları (DI, SI, BP, SP, BX, DX, CX, AX) stack’tan pop eder. SP değeri gözardı edilir.

Not: Bu komut sadece 80186 ve üstü lişlemcilerde kullanılır.

Algoritma

POP DI
POP SI
POP BP
POP xx (SP gözardı edilir)
POP BX
POP DX
POP CX
POP AX

cj|zJsJoJPJA değişmez

Flag register’ina stack’tan değer pop edilir.

Algoritma

flags = SS:(SPJ (top of the stack)

SP = SP + 2

C[Z[s[oO[PlA

Pop edilir

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

REG

SREG

memory immediate

16 bit değer stack'a saklanır. Store 16 bit value in the stack.

Not: PUSH immediate sadece 80186 ve üstü işlemcilerde kullanılır.

Algoritma

e

SS:[SP] (top of the stack) = operand

Ornek:
MOV AX, 1234h
PUSH AX
POP DX ; DX = 1234h
RET

CIZJSJOJPJA

değişmez

Tüm genel amaçlı register'ları (AX, CX, DX, BX, SP, BP, SI, DI) stack’a push eder. SP register’in1 PUSHA komutundan önceki değeri kullanılır.

Not: Bu komut sadece 80186 ve üstü işlemcilerde kullanılır.

Algoritma

PUSH AX
PUSH CX
PUSH DX
PUSH BX
PUSH SP
PUSH BP
PUSH SI
PUSH DI

c(zJsJoJPJA değişmez

Flag register’ stack'a saklar.

Algoritma

SP = SP - 2

SS:[SP] (top of the stack) = flags

cj|zJsJoJPJAa değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

memory, immediate

REG, immediate memory, CL

REG, CL

Birinci operandi taşma bayrağı (carry flag) üzerinden sola döndürür. Bit olarak dönme sayısı ikinci operandla belirtilir.

Algoritma

shift all bits left, the bit that goes off is set to CF and

previous value of CF is inserted to the right-most position.

Örnek

STC ; set carry (CF=1).

MOV AL, 1Ch ; AL = 00011100b
RCL AL, 1 ; AL = 00111001b, CF=0.
RET
clo
rjr

OF-0 olur eğer birinci operand işaretini korursa.

memory, immediate

REG, immediate memory, CL

REG, CL

Birinci operandi taşma bayrağı (carry flag) üzerinden sağa döndürür. Bit olarak dönme sayısı ikinci operandla belirtilir.

Algoritma

shift all bits right, the bit that goes off is set to

CE

and previous value of CF is inserted to the left-most
position.

Örnek

STC ; set carry (CF=1).

MOV AL, 1Ch ; AL = 00011100b
RCR AL, 1 ; AL = 10001110b, CF=0.
RET
clo
rir

OF=0 olur eger birinci operand isaretini korursa.

tekrarlanacak komut

MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW komutlarim CX defa
tekrarlar.

Algoritma

check_cx

if CX <> 0 then

do following chain instruction cX = CX - 1

go back to check_cx

else

exit from REP cycle

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

tekrarlanacak komut

CMPSB, CMPSW, SCASB, SCASW komutlarını ZF-1 olduğu sürece (sonuç eşit olur) ve en fazla CX değeri kadar tekrarlar.

Algoritma

check, cx

if CX <> 0 then

do following chain instruction

CX = CX -— 1

if ZF = 1 then

m go back to check_cx else

m exit from REPE cycle else

exit from REPE cycle

tekrarlanacak komut

CMPSB, CMPSW, SCASB, SCASW komutlarını ZF=0 olduğu sürece (sonuç eşit değil) ve en fazla CX değeri kadar tekrarlar.

Algoritma

check cx

if CX <> 0 then

do following chain instruction CX = cx -1

if ZF = 0 then

go back to check_cx else

m exit from REPNE cycle else

exit from REPNE cycle

tekrarlanacak komut

CMPSB, CMPSW, SCASB, SCASW komutlarını ZF=0 olduğu sürece (sonuç sıfır değil) ve en fazla CX değeri kadar tekrarlar.

Algoritma

check cx

if CX <> 0 then

do following chain instruction cX = CX -1

if ZF = 0 then

m go back to check_cx else

m exit from REPNZ cycle else

exit from REPNZ cycle

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

tekrarlanacak CMPSB, CMPSW, SCASB, SCASW komutlarını ZF-1 olduğu sürece (sonuç komut sıfır ) ve en fazla CX değeri kadar tekrarlar.

Algoritma

check, c if CX <> 0 then

do following chain instruction

CX = CX -— 1

if ZF = 1 then

go back to check_cx

else

exit from REPZ cycle

else

exit from REPZ cycle

z Near prosedürden dönüş yapar.

Algoritma

Pop from stack:

IP

if immediate operand is present: SP = SP + operand

Ornek:

make_COM#

ORG 100h ; for COM file.
CALL pl
ADD AX, 1
RET ; return to OS.
pl PROC ; procedure declaration.
MOV AX, 1234h
RET ; return to caller,

pl ENDP

CIZJSJOJPJA

değişmez

5 Far prosedürden dönüş yapar.

Algoritma

Pop from stack:

IP

cs

if immediate operand is present: SP = SP + operand

c(zJsJoJPJA değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

memory, immediate

REG, immediate memory, CL

REG, CL

Birinci operandi sola döndürür. Bit olarak dönme sayısı ikinci operandla belirtilir.

Algoritma

shift all bits left, the bit that goes off is set to CF and

the same bit is inserted to the right-most position.

Ornek:
MOV AL, 1Ch ; AL = 00011100b
ROL AL, 1 ; AL = 00111000b, CF=0.
RET
o
rir

OF-0 olur eğer birinci operandi işaretini korursa.

memory, immediate REG, immediate memory, CL

REG, CL

Birinci operandı sağa döndürür. Bit olarak dönme sayısı ikinci operandla belirtilir.

Algoritma

shift all bits right, the bit that goes off is set to

CE

and the same bit is inserted to the left-most
position.

Örnek

MOV AL, 1Ch ; AL = 00011100b
ROR AL, 1 ; AL = 00001110b, CF=0.
RET
o
tier

OF=0 olur eğer birinci operandi işaretini korursa.

AH register'ına flag register'inın en az öneme sahip 8 bit'inin değerini yükler.

Algoritma

flags register = AH

AH bit:7 6 5 4 2 Cs 1 o

(SF] [ZF] [0] [AF] [0] [PF] [1] [CF]

1, 3, 5 bitler ayrilmistir.

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

memory, immediate

REG, immediate memory, CL

REG, CL

Birinci operandi sola aritmetik kaydırır. Kaydırma sayısı ikinci operandla belirtilir.

Algoritma

Shift all bits left, the bit that goes off is set to Cr.

Zero bit is inserted to the right-most position.

Ornek:
MOV AL, OEOh ; AL = 11100000b
SAL AL, 1 ; AL = 11000000b, CF=1.
RET

o rjr

OF=0 eğer birinci operand işaretini korursa.

memory, immediate REG, immediate memory, CL

REG, CL

Birinci operandı sağa aritmetik kaydırır. Kaydırma sayısı ikinci operandla belirtilir.

Algoritma

Shift all bits right, the bit that goes off is set to

CE.

The sign bit that is inserted to the left-most position

has the same value as before shift.

Örnek

MOV AL, OEOh ; AL = 11100000b
SAR AL, 1 ; AL = 11110000b, CF=0.
MOV BL, 4Ch ; BL = 01001100b
SAR BL, 1 ; BL = 00100110b, CF=0.
RET
clo
rir

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

Ödünç bitiyle çıkarma işlemi yapar.

Algoritma

operandi = operandi - operand2 - CF

Örnek

sTC

MOV AL, 5

SBB AL, 3;AL-5-3-1-1

RET

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

AL ile ES:(DIJ adresindeki değeri karşılaştırır.

Algoritma

ES:(DI] - AL

set flags according to result

OF, SF, ZF, AF, PF, CF

if DF = 0 then

DI = DI +1

else

DI=DI-1

c|zJsJo rİririririr

AX ile ES:[DI] adresindeki değeri karşılaştırır.

Algoritma

ES:(DIJ - AX

set flags according to result

OF, SH, ZE, AR, PE, CE

if DF = 0 then

DI = DI + 2

else

DI = DI - 2

Gebimak rİririririr

memory, immediate REG, immediate memory, CL

REG, CL

Birinci operandı sola kaydırır. Kaydırma sayısı ikinci operanla belirtilir.

Algoritma

Shift all bits left, the bit that goes off is set to

EE.

Zero bit is inserted to the right-most position.

Örnek

MOV AL, 11100000b
SHL AL, 1 ; AL = 11000000b, CF=1.
RET
clo
rir

OF=0 eğer birinci operand işaretini korursa.

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

memory, immediate

REG, immediate memory, CL

REG, CL

Birinci operandi sağa kaydırır. Kaydırma sayısı ikinci operanla belirtilir.

Algoritma

Shift all bits right, the bit that goes off is set to

CE.

Zero bit is inserted to the left-most position.

Örnek

MOV AL, 00000111b
SHR AL, 1 ; AL = 00000011b, CF=1.
RET
clo
rir

OF=0 eğer birinci operand işaretini korursa.

Taşma bayrağı (carry flag) set edilir.

Algoritma

GE s1

Yön bayrağı (direction flag) set edilir. CMPSB, CMPSW, LODSB, LODSW,

MOVSB, MOVSW, STOSB, STOSW komutları tarafından SI ve DI azaltılır

(D=1) veya artırılır (D-0).

Algoritma

DE = 1

Kesme bayrağı (interrupt flag) set edilir. Bu donanım interrupt’ larini etkin yapar.

Algoritma

TE -İ

in

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

AL register’inin değerini ES:[DI] adresine kopyalar. DI güncellenir.

Algoritma

ES: [DI]

if DF =

DI = DI

else

DI = DI

AL

then

+ ol

Ornek:

make_COM#

ORG 100h
LEA DI, al
MOV AL, 12h
MOV CX, 5
REP STOSB
RET
al DB 5 dup(0)

CI[Z[S[O][P[A

degismez

AX register’inin değerini ES:[DI] adresine kopyalar. DI güncellenir.

Algoritma

ES:(DI] = AX

if DF = 0 then

DI = DI + 2

else

DI = DI - 2

Örnek

make_COM#

ORG 100h
LEA DI, al
MOV AX, 1234h
MOV CX, 5
REP STOSW
RET
al DW 5 dup(0)

CIZISTOJPTA

değişmez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

Cikarma yapar.

Algoritma

operandi = operand1 — operand2

Örnek

MOV AL, 5
SUB AL, 1; AL < 4
RET

c|zJsJo rİrjirirjrjr

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

İk operand arsında karşılıklı bitlerin hepsine e işlemi uygular. Operandların değeri değişmez ZF, SF ve PF bayrak bitleri değişir.

Doğruluk tablosu

1 AND 1 =1

1 AND

0 AND

0 AND

ore
coo
Ornek:
MOV AL, 00000101b
TEST AL, 1 ; ZF = 0.
TEST AL, 10b ; ZF 1.
RET
İİ

olr|/rJojr

REG, memory memory, REG

REG, REG

İki operandın değerlerini yer değiştirir.

Algoritma

operandl < — > operand2

Örnek

MOV AL, 5
MOV AH, 2
XCHG AL, AH ; AL = 2, AH =
XCHG AL, AH ; AL = 5, AH = 2
RET

" a

C[z{s[o[PlA degismez

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

Tablo kullanarak bir byte çevirir. DS:(BX*işaretsiz AL] adresinden bir byte bilgiyi AL register'ına kopyalar.

Algoritma

AL = DS:(BX + unsigned AL]

Ornek:

make_COM#

ORG 100h
LEA BX, dat
MOV AL, 2

XLATB ; AL = 33h

RET
dat DB 11h, 22h, 33h, 44h, 55h

CIZ[S[oO[P[A degismez

REG, memory memory, REG

REG, REG

memory, immediate REG, immediate

İki operandın karşılıklı bitlerine XOR işlemi yapılır. Sonuç birinci operanda saklanır.

Doğruluk tablosu

1 XOR 1 = 0

1X0RO-1

0 XOR1=1

0 XOR 0 = 0

Örnek

MOV AL, 00000111b
XOR AL, 00000010b ; AL = 00000101b
RET

CIZJSJoJPJA olr|r/ojJrfJ2

Gazi Üniversitesi Bilgisayar Mühendisliği Bol

ÖRNEKLER

hafizada yeralan ve herbirisi 20 rakamdan olusan 16'lik tabandaki iki sayinin toplamini yapar. ilk sayi 0100h-0109h

ikinci sayi 010Ah-0113h

sonuc 0114h-011Dh

m.ali akcayol

org 0100h
mov (0100h),8A76h
mov [0102h],6557h
mov [0104h],1A98h
mov [0106h],713Eh
mov [0108h],8797h
mov [010Ah],2587h
mov [010Ch],8B96h
mov [010Eh],2588h
mov [0110h],46D1h
mov [0112h],9854h
mov si, 0108h ; 1.sayinin en sagdaki 4 rakam (1 word) aliniyor
mov bx, [si]
add bx, [si+000Ah] ; 2.sayinin en sagdaki 4 rakami ile toplaniyor
mov [sit+0014h],bx ; sonuc hafizaya yaziliyor
jne atlal ; carry=0 ise atla
mov dx,1 ; sub isleminden once carry dx'e saklaniyor
atlal:
sub si,2 ; sola dogru 4 rakam (1 word) gidiliyor
dongu:
mov bx, [si]
add bx, [si+000Ah]
add bx, dx
xor dx,dx
mov [sit+0014h],bx

1.sayinin onceki 4 rakami (1 word) aliniyor 2.sayinin onceki 4 rakami ile toplaniyor varsa carry ekleniyor

saklanan carry degeri sifirlaniyor

sonuc hafizaya yaziliyor

inc atla2 ; carry=0 ise atla
mov di,1
atla2:
sub si,2 sola dogru 4 rakam (1 word) gidiliyor
cmp si, 0100h
jae dongu
call mesajyaz

hit

mesajyaz proc
mov dx, offset mesajvar
mov ah, 9
int 21h
ret

en sola gelindimi? gelinmediyse basa doner

mesajvar db "toplama islemi tamamlandi... $"

mesajyaz endp

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

NNNNNNNNNN

hafizada yeralan toplam 100 karakterden ADET ile belirtilen kadarini kendi

=

BRA RRR Be BS

BEBE

yerinde siralayan algoritma - bubblesort

m.ali akcayol

org 0100h
diziO0 db 'v','a',
dizil db 'v','a',
dizi2 db 'v','a',
dizi3 db 'v','a',
dizi4 db 'v','a',
dizi5 db 'v','a',
dizi6 db 'v','a',
dizi7 db 'v','a',
dizi8 db 'v','a',
dizi9 db 'v','a',
ADET dw 9
mov dx, ADET
call ekranayazdir

dongu

mov cx,0
icdongu:
mov si,cx
mov al, [dizid+si]
mov bl, [dizid+sit1]
cmp al,bl
jbe devam
call degistir
devam:
inc cx
cmp cx,dx
jnb icdongusonu
jmp icdongu
icdongusonu:
dec dx
cmp dx, 0
je bitir
jmp dongu
bitir:
call ekranayazdir
hit
degistir proc
mov [dizid+si],bl
mov [dizi0+si+1],al
ret

degistir endp

ekranayazdir proc
push dx
mov cx, 0
mov ah, 2
tekrar:

ilk 10

eleman

karakter siralanir

sayisi-1

toplam eleman sayisi kadar tekrar siralanmamis eleman sayisi kalan eleman sayisi kadar tekrar

soldaki sagdaki

soldaki soldaki

eleman eleman

kucukse degistrme yapma buyukse degistir

siralanmamis elemanlarda bir artir siralanmamis elemanlarin sonuna geldimi siralanmamis elemanlarin sonu siralanmamis eleman devam ediyor

ic dongude siralanmamis eleman kalmadi

sirasiz sirasiz sirasiz sirasiz

kalan eleman sayisini bir azalt eleman sayisi 0 mi?

eleman sayisi 0 ise bitir eleman varsa basa git

sirali yazdir program bitisi

yanyana

iki karakter yer degistirir

dl ye deger atanacak karakter sayaci

int 21,

ah=2, ekrana karakter yazdir

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

mov
mov
int
inc
cmp
ja cikis

siyvex

dl, 21h cx cx,

jmp tekrar
cikis:
mov
int
mov
int
pop
ret

dl, 21h dı, 21h dx

ODh

OAh

[dizidtsi]

ADET

ekranayazdir endp

int 21, ah=2, ekrana karakter yazdir
return

yeni satir

dl nin eski degeri alindi

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

; binary search ---

sirali bir dizide en cok log(2)sayiadedi kadar kontrolle aranan sayinin olup olmadigini bulur m.ali akcayol

bolen aranan sayi

en kucuk adres en buyuk adres

eleman sayisi hesaplaniyor

ortadaki sayi bulunuyor

kalan atiliyor

ortadaki sayinin adresi
; ortadaki sayi arananla karsilastiriliyor
; kucukse saga gidilir
; buyukse sola gidilir

esitse bulunmustur

; eleman sayisi hesaplaniyor
; ortadaki sayi bulunuyor
; kalan atiliyor
org 0100h
mov (0100h), 1
mov (0101h), 2
mov [0102h], 3
mov [0103h], 4
mov [0104h], 6
mov [0105h], 8
mov [0106h], 9
mov [0107h], 10
mov [0108h], 11
mov [0109h], 13
mov [010Ah], 14
mov [010Bh], 15
mov [010Ch], 16
mov [010Dh], 17
mov [010Eh], 19
mov [010Fh], 20
mov [0110h], 22
mov [0111h], 23
mov [0112h], 25
mov [0113h], 27
mov [0114h], 28
mov [0115h], 30
mov dl,2 ;
mov dh, 28 ;
mov bx,0100h ;
mov cx,0115h ;
mov si,0100h
mov ax,cx ;
dec bx
sub ax,bx
div dl ;
xor ah,ah i
add si,ax i
dongu:
cmp [si],dh
jb sagtaraf
ja soltaraf
je bulundu
sagtaraf:
mov bx,si
mov ax,cx
sub ax,bx
div dl
cmp al,0
jz kalanall
xor ah,ah
add si,ax

} ortadaki sayinin adresi

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

jmp

dongu

kalanall

xchg al,ah
add si,ax
cmp [si],dh
je bulundu
jne sayiyok

soltaraf

mov
mov
sub
div
cmp

cx, si ax,cx ax, bx dl al,0

jz kalanal2
xor
sub
jmp

ah,ah si,ax dongu

kalanal2

xchg al,ah
sub si,ax
cmp [si],dh
je bulundu
jne sayiyok
; yazdirma islemleri

bulundu

mov dx,
mov ah,
int 21h
ret

basa don son kalan eleman kontrol ediliyor

eleman sayisi hesaplaniyor

ortadaki sayi bulunuyor

kalan atiliyor

ortadaki sayinin adresi

basa don

son kalan eleman kontrol ediliyor

offset mesajvar

mesajvar db "sayi bulundu $"
jmp cikis

sayiyok

mov dx,
mov ah,
int 21h
ret

offset mesajyok

mesajyok db "sayi yok $"

cikis

hit

Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

_8086KomutlarOrnekler: sayfa 5, devre, tablo ve şekiller
_8086KomutlarOrnekler, sayfa 5.
_8086KomutlarOrnekler: sayfa 12, devre, tablo ve şekiller
_8086KomutlarOrnekler, sayfa 12.

Not: PDF’in metin katmanı bozuk olduğundan metin görsellerden OCR ile aktarılmıştır; komut ve sembollerin kesin yazımı için PDF esas alınmalıdır.

Not: Kapakta yalnız 2007 yılı bulunduğundan arşiv sıralaması için 1 Ocak 2007 kullanılmıştır; bu tarih kesin hazırlanma günü değildir.

eem332-gazi-ornekler.zip

ZIP arşivi · 275 KB · 01.01.2007

⬇ (275 KB)