Assembly String İşlemleri

ChangeForGiving

Yasaklı Üye
Katılım
2 Ara 2019
Mesajlar
278
Tepkime puanı
1
Puanları
18
Konum
REALİTY KİNGDOM
String (karakter dizisi) komutları bellekte blok halinde byte , word ve doubleword verileri üzerinde çalışmada kullanılır.

Bir dizi verinin string olabilmesi için belli özelliklerde tanımlanması gerekir. Tek bir veri string olarak kullanılamaz.

Dizi DB 200 DUP (‘*’)

Liste DW 10 DUP (0)

Text DW ‘Bilgisayar Muhendisligi’

Bos DW ‘ ‘

String tanımlanırken byte ve word (üst işlemcilerde doubleword) tanımlaması yapılabilir.

MOVSB/MOVSW Bellekteki byte/word veriyi bir yerden başka bir yere kopyalar.

LODSB/LODSW Bellekten byte olarak AL’ye, word olarak AX’e veri yüklemeye yarar.

STOSB/STOSW AL veya AX’teki veriyi bellekte saklamaya yarar.

CMPSB/CMPSW Bellekteki byte/word verileri karşılaştırmaya yarar.

SCASB/SCASW AL veya AX’teki değeri bir bellek içeriğiyle karşılaştırmaya yarar.

MOVSB/MOVSW komutu bellekteki bir gurup verinin başka bir yere kopyalanmasını sağlarken, aynı sırada kopyalanmasını sağlar. Yani veriler soldan sağa veya sağdan sola alınarak aynı sırada başka bir yere kopyalanır

String komutları genellikle iki operanda ihtiyaç duyar, fakat burada operand komutun bir parçası gibi düşünülmez. Bunun yerine işlemci otomatik olarak değerleri belirli kaydediciler üzerinde kullanır. Kaydedici olarak AL ve AX (32bitlik işlemcide EAX), kaynak veya hedef bellek alanı olarak SI ve DI indis kaydedicileri kullanılır.

Tekrarlama Takıları
String işlemlerinde kullanılan bazı komutlar kullanıldıklarında sayıcı olarak CX’in kullanılması gerekir. REP ile başlayan bu takılar komutun önünde kullanıldıklarında, CX kaydedicisinin değeri otomatik olarak azalarak komutun tekrarlanmasını sağlarlar. Tekrarlama takıları kullanılırken ZF (sıfır bayrağı) etkilenir.

REP

REP ön takısı string komutlarının hemen önüne konularak o komutun CX=0 olana dek işlemesini sağlarlar.

MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW komutlarının önünde kullanılır, komutlar her işlediğinde CX değeri 1 azalır. İşlem CX=0 olana dek devam eder.

REPE/REPZ

REP gibi işlem yapar, CMPSB, CMPSW, SCASB, SCASW komutlarıyla beraber kullanılır. CX=0 olana dek ZF=1 olduğu sürece devam eder.

REPNE/REPNZ

REP gibi işlem yapar, CMPSB, CMPSW, SCASB, SCASW komutlarıyla beraber kullanılır. CX=0 olana dek ZF=0 olduğu sürece devam eder.

Yön Bayrağının Ayarlanması

String komutlarında stringin okunup kaydedilmesinde DF’nin (Direction Flag-Yön bayrağı) değeri önemlidir. DF’nin değerine göre SI ve DI indis kaydedicileri her tekrarda ya artacak ya da azalacaktır. Bu nedenle DF’nin işlemden önce set edilmesi gerekebilir. Bu durumda DF’yi set eden komutlar kullanılır.

CLD DF=0 yapar, CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB, STOSW komutlaryla birlikte her tekrarda SI ve DI indisçileri artarak devam edecektir.

STD DF=1 yapar, CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB, STOSW komutlaryla birlikte her tekrarda SI ve DI indisçileri azalarak devam edecektir.
 
Üst Alt