Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2.2.Instrukcjeprzesłańdanychorazoperacjearytmetyczne
AX(DX,AX)divarg,
EDX(EDX,EAX)modarg,
EAX(EDX,EAX)divarg.
dlar32,m32
55
2.2.6.MnożenieidzielenieliczbdziesiętnychwkodzieBCD
Procesoryrodzinyx86dostarczająmechanizmuumożliwiającegowykonywaniemnoże-
niaidzielenianieupakowanychcyfrdziesiętnych.Mnożeniecyfrdziesiętnychodbywa
sięwdwóchkrokach:
mnożeniebinarnezzastosowanieminstrukcji
MULarg(AL*argAX),
korekcjadziesiętnazapomocąinstrukcji
AAM,polegającanapodzieleniureje-
struAXprzez10iwpisaniudorejestruAHcyfrydziesiątek,adorejestruALcyfry
jednostek.
Fragmentprogramu,realizującymnożeniedwóchcyfrzapisanychwkodzieASCII,
możnaprzedstawićnastępująco:
1:
MOVAL,
.4’
2:
MOVAH,
.9’
3:
ANDAL,00001111b
4:
ANDAH,00001111b
5:
MULAH
6:
AAM
7:
ORAL,00110000h
8:
ORAH,00110000h
;Mnożnamawartość34h
;Mnożnikmawartość39h
;ALzawierawartość4
;AHzawierawartość9
;AXzawierawartość24h
;DokonaniekorekcjiwynikurejestrAXzawiera
;wartość0306h(nieupakowanaliczbadziesiętna36-
;wynikmnożenia)
;KonwersjaznieupakowanegoBCDnaASCII
;KonwersjaznieupakowanegoBCDnaASCII
;RejestrAHzawieraznak‘3’natomiastrejestrALznak‘6’
Wdzieleniusposóbdokonywaniakorekcjiwyglądatrochęinaczej.Niepodlega
korekcjiwynikdzielenia,leczprzedwywołanieminstrukcjiDIVnależywykonaćkorek-
cjędzielnej.DotegocelusłużyinstrukcjaAAD,wykonujeonabinarnąkorekcjędzielnej
zawartejwrejestrzeAX.
;Wypełnieniedzielnej:
1:
MOVAL,
.4’
2:
MOVAH,
.2’
;ALzawiera34h
;AHzawiera32h,rejestrAXzawiera
;znaki‘2’wAHoraz‘4’wAL
3:
MOVDL,
.6’
;dzielnikzawieraznak‘6’(36h)
;KonwersjaznakówASCIIzrejestruAXdopostacinieupakowanejliczbydziesiętnej:
4:
ANDAL,11001111B
;ALzawiera4h
5:
ANDAH,11001111B
;AHzawiera2h
;KonwersjaznakuASCIIdzielnikanapostaćnieupakowanejBCD:
6:
ANDDL,11001111B
;DLzawiera6h