x86 Assembly - Temel Komutlar

Amy Root

Uzman üye
12 Nis 2014
1,552
0

Merhaba arkadaşlar bu bölümde Assembly dilindeki en basit ve temel komutları paylaşıcam. Assembly dilinin bu komutlardan ibaret olmadığını ve bu komutların da burada yazdığımız özelliklerinden daha fazla özelliğe sahip olduğunu bilmenizde fayda var.

mov

Bu komutla bir yazmaçtan bir yazmaca kopyalama yapılabileceği gibi bir yazmaca sabit bir değer de yazılabilir.

Kod:
mov   ah,5
mov   al,bh

Birincisinde ah yazmacına 5 yazılır. İkincisinde ise bh yazmacındaki veri al yazmacına kopyalanır. Mov komutuyla yalnızca eşit kapasitedeki yazmaçlar arasında kopyalama yapılabilir. Yani sonu x ile bitenler arasında veya sonu h veya l ile bitenler arasında kopyalama yapılabilir.

inc

Bir yazmaçtaki değeri bir artırır.

Kod:
inc   al

Burada al'nin önceki değerini 5 sayarsak artık al'nin değeri 6 olur.

mul

Belirtilen yazmaçtaki değerle al yazmacındaki değeri çarpıp sonucu ax yazmacına koyar.

Kod:
mul   cl

Burada al yazmacındaki değerle cl yazmacındaki değer çarpılıp sonuç ax yazmacına konur.

add

Herhangi bir yazmaçtaki değerle herhangi sabit bir değer veya yazmaçtaki değeri toplayıp sonuç ilk belirtilen yazmaca koyulur.

Kod:
add   al,1
add   al,cl

Birincisinde al ile 1 toplanıp sonuç al'ye atanır. Yani sonuçta al bir artırılmış olur. İkincisinde ise al ile cl toplanıp sonuç al'ye atanır. Yani sonuçta al'ye cl eklenmiş olur. Add komutu argüman olarak yalnızca eşit kapasitedeki yazmaçları alabilir. Örneğin aşağıdaki komut hatalıdır.

Kod:
add   ax,cl

sub

Herhangi bir yazmaçtan sabit bir değeri ya da başka bir yazmaçtaki değeri çıkarır.

Kod:
sub   al,10
sub   ax,cx

Birincisinde al yazmacındaki değer 10 eksilir. İkincisinde de ax yazmacındaki değer cx'teki değer kadar eksilir. Sub komutu da tıpkı add gibi eşit kapasiteli yazmaçlarla işlem yapar.

loop

Komutun argümanındaki ofset adresi ile loop komutunun bulunduğu satır arasında cx'in değeri kadar gidip gelinir. Yani bir döngü kurulmuş olur.

Kod:
14F7:100 mov   cx,5
14F7:103 inc   al
14F7:105 add   dl,al
14F7:107 loop  103
14F7:109 int   20

Burada 5 kere 103. ofset ile 107. ofset arasında gidip gelinir. Bütün yazmaçların ilk değerlerini 0 sayarsak sonuçta al'nin değeri 5, dl'nin değeri de f olur. Burada şunu gözden kaçırmamanızı öneriyorum: loop komutunun kapsama alanına giren komutlar henüz loop komutunun bulunduğu satıra gelinmeden doğal olarak bir kez çalıştırılır. Bu çalıştırılma bu bahsettiğimiz gidip gelmeye dâhildir. Öbür türlü söz konusu satırlar toplam 6 kere işletilmiş olurdu.

cmp

İki yazmaçtaki değeri ya da bir yazmaçtaki değerle sabit bir değeri kıyaslar. Tek başına bir işe yaramaz.

Kod:
14F7:100 cmp   al,bl
14F7:102 cmp   bl,5
14F7:104 cmp   5,bl
14F7:106 cmp   ax,bl

Bu komutlardan ilk ikisi çalışacak. Son ikisiyse çalışmayacak. Çünkü üçüncüsünde ilk argüman sabit bir değer. Sonuncusunda da farklı boyutlardaki yazmaçlar kıyaslanmış.

jg, jl, je, jge, jle

Kendisinden hemen önce gelen cmp komutuna göre programın akışını belirli bir ofsete yönlendirirler.

Kod:
14F7:100 cmp   al,bl
14F7:102 jl    10e

Burada eğer al'deki değer bl'den küçükse akış 10e ofsetine yönledirilecektir. Değilse program normal şekilde akışına devam edecektir. Tahmin edebileceğiniz gibi jl küçüktür anlamına geliyor. Mantığı bununla tamamen aynı olan farklı komutlar da vardır. Bunlar

jg → büyüktür.
jl → küçüktür.
je → eşittir.
jge → büyük eşittir.
jle → küçük eşittir.

jmp

Belirli bir ofsete atlamaya yarar.

Kod:
14F7:100 jmp   110

Burada programın akışı 110. ofsete yönlendirilir.



 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.