ÖRNEK PROGRAM

Abar.gif (12011 bytes)

;8 bit'lik iki sayının çarpılması ( işaretli ) Bu rutin çarpılan ve çarpan ;adresteki işaretli sayıların alınıp,sonucun 16 bit olarak sonuch ve sonucl ;adreslerine yerleştirilmelerini sağlar.Bu rutinde kullanılan sayılar ;maximum +127, minumum -127 olmalıdır. Bu rutinde A,B ve ;PSW registerleri ;kullanılmaktadır.

; İ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