İki 16- Bitlik X ve Y tamsayılarının toplama işlemi (X=X+Y).
Bu byte’ların saklayıcılarda aşağıda verildiği gibi saklandığını düşünelim.
--------------------------------------------
Byte Saklayıcı
--------------------------------------------
XL 78H
XH 79H
YL 7AH
YH 7BH
--------------------------------------------
X=1234h ve Y=12EFh tamsayılarını bu hafıza hücrelerine yükleyen program parçası:
MOV 78h, 34h ; XL
MOV 79h, 12h ; XH
MOV 7Ah, 0Efh ; YL
MOV 7Bh, 12h ; YH
XL=XL+YL Toplamını gerçekleştiren program kodu:
MOV A, 78h ; A=XL
ADD A, 7Ah ; A=XL+YL
MOV 78H, A ; XL=A
Yapılan işlemin bu noktasında , 78h adresli hücre 23h değerini içermektedir ve C bayrağı 1’lenmiştir. Şimdi XH=XH+YH+C işlemini gerçekleştiren program parçasına bakalım:
MOV A, 79h ; A=XH
ADDC A, 7BH ; A=XH+YH+C
MOV 79H, A ; XH=A
Bu programın çalıştırılması sonucu,dahili saklayıcı hücreleri 78h ve 79h’ta 2523h değeri doğru olarak saklanır.
Çıkarma işlemi SUBB de ,ACC’yi ilk operand olarak kullanılır.Doğrudan, dolaylı,saklayıcı veya ivedi adresleme modları ile belirtilen ikinci operand, ACC’den çıkartılır ve sonuç yine ACC’ye yerleştirilir.
C bayrağı,uzun tamsayı çıkarma işlemlerinde, toplama işlemine benzer şekilde kullanılır. Çıkarma işlemi,bir ödünç almaya ihtiyaç duyar ise, C bayrağı 1’lenir.
Eğer bir çıkarma işleminden önce, C 1’lenmiş ise,yapılan çıkarma sonucunda bir eksiltilir. Bu sayede, birden fazla byte uzunluğunda olan tamsayıların çıkarma işlemi, en düşük değerli byte’lardan başlayıp yüksek değerli byte’lara doğru, peş peşe byte çıkartma işlemi şeklinde yapılır. Bu durumda , ilk çıkarma işleminden önce C bayrağının sıfırlanması gerekmektedir.
Aşağıda verilen program örneği, iki 16-bit X ve Y tamsayılarının çıkarma işlemini (X=X-Y) göstermektedir. Her iki sayı , 8-bit düşük(XL ve YL) ve yüksek değerlikli (XH ve YH) byte’lar olarak işleme alınmaktadır.
C
_
İki 16- Bitlik X ve Y tamsayılarının çıkarma işlemi (X=X-Y).
X=1234h ve Y=1135h tamsayılarını hafızaya yükleyen program parçası:
MOV 78h, 34h ; XL
MOV 79h, 12h ; XH
MOV 7Ah, 35h ; YL
MOV 7Bh, 11h ; YH
CLR C ; C bayrağını temizle
XL=XL-YL çıkarma işlemini gerçekleyen program parçası:
MOV A, 78h ; A=XL
SUBB A, 7Ah ; A=XL-YL-0
MOV 78H, A ; XL=A
Bu noktada 78h adresli hücre FFh değerini içermektedir ve C bayrağı 1’lenir. Şimdi XH=XH-YH-C işlemini gerçekleştiren program parçasına bakalım:
MOV A, 79h ; A=XH
SUBB A, 7BH ; A=XH-YH-C
MOV 79h, A ; XH=A
Bu programın çalıştırılması sonucu , dahili saklayıcı hücreleri 78h ve 79h’ta 00FFh değeri doğru olarak saklanır.
Arttırma ve azaltma komutları
Bu komutlar,çevirim sayaçlarını veya veri işaretçilerini arttırma veya azaltma işlemlerinde faydalıdırlar.
Aşağıda verilen bu komutların kullanıldığı bu örnekte,dahili veri hafızada bulunan X veya Y vektörleri (veri blokları) toplanmaktadır.(X=X+Y).Bu programda X ve Y vektörlerinin uzunlukları R3 saklayıcısında olduğu ve ayrıca, X vektörüne R0 Y vektörüne R1 saklayıcılarının işaret ettikleri varsayılmaktadır.
LOOP:
MOV A, @R0 :X ten bir byte oku.
ADD A, @R1 :Y byte'ı topla.
MOV @R0,A :sonucu X e yerleştir.
INC R0 :bir sonraki X byte'ına işaret et.
INC R1 :Bir sonraki Y byte'ına işaret et.
DJNZ R3 , LOOP
http://www.supermp3.org/images/smilies/biggrin.giföngü sayacını azalt.sayaç sıfır
:değil ise,LOOP etiketine dallan.
Çarpma bölme komutları
8051 ailesinin üyeleri donanım çarpma ve bölme birimlerine sahiptir.Bu komutlar,4 makine çevrimi ile en uzun zamanı alır.Çarpma ve bölme komutları,saklayıcı-özel komutlar olup ACC ve B saklayıcılarını kullanır.
MUL AB
Komutu,ACC ve B saklayıcılarındaki iki işaretsiz tamsayıyı çarpar.16-bit çarpma sonucunun düşük byte 'ı ACC de ve yüksek byte'ı B saklayıcısında bulunur.Sonuç FFFFh'tan büyük olamaz.Yani C bayrağı hiçbir zaman 1'lenmez.eğer sonuç FFh'tan büyük ise,taşma bayrağı 0V 1'lenir.0V bayrağının sıfırlanması,B saklayıcısının 0 olduğu anlamına gelir.