Bellek üzerinde byte, word ve double word gibi farklı büyüklükteki işlemleri yapmayı mümkün kılar. Bu komutlar genel olarak tekrarlamalı işlemleri gerçekleştirmek için kullanılırlar. İşlemlerin tekrarlama sayısı cx de tutulur. Bu guruptaki komutlar df ile işlem yönünü belirler. df 0 ise si artar, 1 ise si azalır. 8086 mimarisinde bu komutları kullanabilmek için es tanımı yapmamız gerekir. Bu tanımı aşağıdaki gibi yapabiliriz.
mov ax,@data
mov ds,ax
mov es,ax
Bu komut cx 0 değilse kendinden sonra gelen diğer komutların tekrarlanmasını sağlar. her tekrarlamada cx değerini bir azaltır. Diğer kullanım şekilleri aşağıdaki gibidir.
REP | cx 0 olana kadar işlemi sürdürür |
REPE | cx 0 değilse ve eşitlik tekrar ettiği sürece tekrarlamayı sürdürür |
REPZ | cx 0 değilse ve zf 1 ise tekrarlamayı sürdürür |
REPNE | cx 0 değilse ve eşitsizlik varsa tekrarlamayı sürdürür |
REPNZ | cx 0 değilse ve zf 0 ise tekrarlamayı sürdürür |
si registerinde gösterilen adresten di registerinde gösterilen adrese kopyalama yapmayı sağlayan bir komuttur. Bu komutun diğer kullanım şekilleri aşağıdaki gibidir.
MOVSB | byte bazında kopyalama yapar |
MOVSW | word bazında aktarma yapar |
MOVSD | double word bazında kopyalama yapar |
Bu komutların kullanımı aşağıdaki gibidir. Aşağıda isim değişkeninde bulunan veriyi kopyala değişkeninin gösterdiği adrese kopyalıyoruz.
.model small
.stack 32
.data
kopyala db 10 dup(?)
isim db "muraterdem"
.code
mov ax,@data
mov ds,ax
mov es,ax
mov cx,10
lea si,isim
lea di,kopyala
rep movsb
hlt
.exit
end
Bu komut si ile di registerlerinde bulunan bellek adreslerindeki değeri karşılaştırmak için kullanılır. normal cmp komutu gibi çalışır sonuçtan flaglar etkilenir. Kullanım şekilleri aşağıdaki gibidir.
CMPSB | byte bazında karşılaştırma yapar |
CMPSW | word bazında karşılaştırma yapar |
CMPSD | double word bazında karşılaştırma yapar |
CMPS komutunun kullanımı ile aşağıdaki örneğe bakacak olursak, srt_1 ile str_2 değişkenini farklılık olana kadar karşılaştıracaktır.
.model small
.stack 32
.data
str_1 db "muraterdem"
str_2 db "muratERDEM"
.code
mov ax,@data
mov es,ax
mov ds,ax
mov cx,10
lea si,str_1
lea di,str_2
repe cmpsb
hlt
.exit
end
Bu komut genel olarak arama işlemi gibi çalışır, ax registerine atanan değer ile di registerinde adresi bulunan değeri karşılaştırır. Sonuçtan bayraklar etkilenir. Kullanım şekilleri aşağıdaki gibidir.
SCASB | byte bazında karşılaştırma yapar |
SCASW | word bazında karşılaştırma yapar |
SCASD | double word bazında karşılaştırma yapar |
Kullanımına aşağıdaki verilen örnekte isim değişkenin içerisinde “d” harfi aranmaktadır ascii tablosunda “d” harfinin karşılığı 16lık tabanda 64 e karşılık gelmektedir.
.model small
.stack 32
.data
isim db "muraterdem"
.code
mov ax,@data
mov es,ax
mov ds,ax
mov ax,64h
mov cx,10
lea di,isim
repne scasb
hlt
.exit
end
Bu komut ax registerine si de gösterilen adresteki değeri yükler. Genel olarka döngüler ile birlikte kullanılır. Farklı kullanımları aşağıdaki gibidir.
LODSB | byte bazında al registerine atama yapar |
LODSW | word bazında ax registerine atama yapar |
LODSD | double word bazında eax registerine atama yapar |
Aşağıdaki örnekte “m” harfini al registerine atama yapacaktır.
.model small
.stack 32
.data
isim db "muraterdem"
.code
mov ax,@data
mov es,ax
mov ds,ax
mov ax,0
lea si,isim
lodsb
hlt
.exit
end
AX registerinde bulunan değeri di registerinde belirtilen adrese yükler. kullanım şekilleri aşağıdaki gibidir.
STOSB | byte bazında al registerinden atama yapar |
STOSW | word bazında ax registerinden atama yapar |
STOSD | double word bazında eax registerinden atama yapar |
Aşağıdaki örnekte “muraterdem” stringinin ilk harfini “M”ile değiştirerek “Muraterdem” stringine çevirecektir.
.model small
.stack 32
.data
isim db "muraterdem"
.code
mov ax,@data
mov es,ax
mov ds,ax
mov ax,4dh
lea di,isim
stosb
hlt
.exit
end
Bu komut msb bitini ah deki bütün bitlere yazar.
mov al,10001001b
cbw
#ax= 11111111 10001001
AX in msb si ile dx registerini doldurur.
cwd
AX in msb bitini eax boyunca genişletir.
cwde