ÖRNEK PROGRAM
; İlk kontroller $TITLE ( ISARETLI ÇARPMA ) $MOD51 $DATE (3.3.1998) ; ; Değişkenlerin tanymlanması: ; Isaret_flag BIT 0F0H ; SONUCUN İŞARETİ Carpan DATA 30H ; 8 bit çarpan Carpilan DATA 31H ; 8 bit çarpılan Sonuch DATA 32H ; 16 bitlik sonucun yüksek digit'i Sonucl DATA 33H ; 16 bitlik sonucun düşük digit'i ; ORG 2000h Basla: MOV CARPAN,#17 ; decimal değer MOV CARPAN,#-25 ; decimal değer CALL Isaretli_carp ;sonuç 32 h adresinde "FE" ,33 h adresinde "57"(decimal -425 )olarak ;görünecektir. ORG 2100h Isaretli_carp: CLR Isaret_flag ; işareti sıfırla MOV A,CARPAN ; çarpan'ı ACC'ye yükle JNB ACC.7,pozitif ; çarpan'ı test et CPL A ; negatif- component INC A ; pozitife çevirmek için 1 ekle SETB isaret_flag ; işaret'i set et (eksi olsun ) pozitif: MOV B,Carpilan ; çarpılanı B registerine yükle JNB B.7,carp ; çarpılanın işaretini test et XRL B, #0FFh ; negatif- component ve INC B ; pozitife çevirmek için 1 ekle CPL isaret_flag ; complement'ini al işaret_flag'nı carp: MUL AB ; işaretsiz olarak çarp isaret_test: JNB isaret_flag,tamam ; eğer pozitif ise tamam XRL B,#0FFh ; değilse her iki byte'in complementini al CPL A ; 1 ekle ( inc carry_ flag'ı değiştirmez ) JNC tamam ; eğer ADD A'yı over-flow etmişse INC B ;yüksek digit'i 1 artır tamam: MOV sonuch,B ; cevabı yükle MOV sonucl,A ; RET ; ve dön END |