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