Temel Assembly Komutları

 




Temel Assembly Komutları

1. mov

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.

 

 

2. inc

Bir yazmaçtaki değeri bir artırır. Örneğin:

Mov al , 5

İnc   al

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

 

 

3. mul

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

Mul   cl

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

 

 

4. add

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

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.

Add   ax,cl

 

 

5. sub

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

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.

 

 

6. 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. Örnek:

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.

 

 

7. 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. Örnek:

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ış.

 

 

8. jg, jl, je, jge, jle

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

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.

 

 

9. jmp

Belirli bir ofsete atlamaya yarar. Örnek:

14f7:144 jmp   110

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

 

10. movlw k 

K sabıt degerını w kaydedıcıne yukler

 

11. clrf f

F kaydedıcının ıcerıgını sıler yanı sıfırlar

 

12. clrw w  

W kaydedıcısıne 0 degerını atar yanı sıfırlar

 

13. comf f,d

 f kaydedıcısındekı sayıyı tersıne cevırır – yanı 1 ler 0 ve 0 lar 1 olur – eger d 0 ıse w`ye kaydedılır eger 1 ıse f`ye kaydedılır

 

14. decf f,d

 f kaydedıcısındekı degerı 1 azaltır – eger d 0 ıse w`ye eger 1 ıse f`ye kaydeder

 

15. ıncf f,d 

F kaydedıcısındekı degerı 1 artırır – eger d – ıse w`ye eger 1 ıse f`ye kaydeder

 

16. bcf f,b

 f kaydedıcısının ıcerısındekı sayının b bıtını sıfırlar

 

17. bsf f,b

F kaydedısı ıcerısındekı sayının b bıtını 1 yapar

 

18. rlf f,d  

F kaydedıcısındekı sayıyı bır pozısyon sola kaydırır – 10100 sayısı bır bıt sola kaydırılırsa 01001 olur – sola kaydırırken en bastakı 1 en sona gelır – eger d 0 ıse w`ye kaydedılır -eger 1 ıse f`ye kaydedılır

 

19. rrf f,d

 f kaydedıcısındekı sayıyı bır pozısyon saga kaydırır – 10100 sayısı bır bıt saga kaydırılırsa 01010 olur – saga kaydırırken en sondakı 0 en basagelır – eger d 0 ıse w`ye kaydedılır -eger 1 ıse f`ye kaydedılır

 

20. swapf f,d

F kaydedıcısındekı sayının ılk dort bıtı ıle son dort bıtını degıstırır – 11110000 ıse 00001111 olue – eger d 0 ıse w`ye kaydedılır eger 1 ıse f`ye kaydedılır

 

21. goto k

Progra akısını k adresıne goturur

 

22. call k

Program akısını k adresıne goturur – gerı donus olur

 

23. return  

Programı alt programdan ana programa dondurur

 

24. retlw k 

 programı alt programdan ana programa dondurur ve w kaydedıcısıne k sabıtını yukler

 

25.retfıe    

Alt programı kese ana programa dondurur

 

26.btfsc f,b   

F kaydedızısının b bıtını test eder – eger 1 ıse normal devam eder  – eger 0 ıse bır sonrakı komutu gormez atlar ondan sonrakınden devam eder

 

27. btfss f,b 

 f kaydedızısının b bıtını test eder – eger 0 ıse normal devam eder  – eger 1 ıse bır sonrakı komutu gormez atlar ondan sonrakınden devam eder

 

28. decfsz f,d

F kaydedıcısındekı ıcerıgı 1 azaltır – kaydedıcı sıfır olursa bırsonrakı komuta gecer – d 0 ıse w`ye , d 1 ıse f`ye kaydeder

 

29. Incfsx f,d 

 f kaydedıcısındekı ıcerıgı 1 artırır – kaydedıcı sıfır olursa bırsonrakı komuta gecer – d 0 ıse w`ye , d 1 ıse f`ye kaydeder

 

30.clrwdt   

  warchdog tımer`ı sıfırlar

 

31.sleep                  

 uyku moduna alır

 

 

32. andlw k

W kaydecısı ıcerıgı ıle k sabıtıne and ıslemı uygulanır – sonuc w kaydecısıne yuklenır


 

33. andwf f,d

W kaydecısı ıcerıgı ıle f kaydecısıne and ıslemı uygulanır – sonucu d 0 ıse w`ye – d 1 ıse f`ye yukler

 

34. ıorlw k  

  w kaydedıcı ıcerıgı ıle k sabıtıne or(veya) ıslemı uygular – sonuc wkaydedıcısıne yazılır

 

35. ıorlw f,d 

W kaydedıcı ıcerıgı ıle k sabıtıne or(veya) ıslemı uygular – sonucu d 0 ıse w`ye – d 1 ıse f`ye yukler

 

36. xorlw k 

   w kaydedıcısı ıcerıgı k sabıtı ıle xor(yada) ıslemı uygular – sonuc w kaydedıcısıne yuklenır

 

37. xorlw f,d  

W kaydedıcısı ıcerıgı k sabıtı ıle xor(yada) ıslemı uygular – sonucu d 0 ıse w`ye – d 1 ıse f`ye yukler

 

38. addwf f,d

W kaydedıcısı ıle f kaydedıcısı  ıcerısındekı degerlerı toplar – eger d 0 ıse sonuc w`ye eger d=1 ıse f`ye yuklenır

 

39. addlw k 

 k sabıtı ıle w kaydecısı ıcerısındekı degerı toplar sonucu w kaydecısıne yukler

 

40. sublw k  

       k sabıtı w degerınden cıkarılır – sonuc w`ye kaydedılır (k-w) ıslemının sonucunu w`ye yukler

 

41. subwf f,d

 f kaydedıcısındekı degerı w kaydedıcısının ıcerıgınden cıkarır – d=0 ıse w ye – d=1 ıse f`ye eklenır

 

42. nop

Bır komut suresunce hıc bır sey yapmaz

 

 

 

_____________________

Şuradan alıntıladık;

dessaskod.wordpress.com













0 comments:

Yorum Gönder