Вивчення команди DAA
DAA |Десятичная| + + + + + | Преобразование содержимого аккумулятора в
|коррекция | | двоично-десятичный код.
37 | DAA | 2-10 коррекция | +++ ++ | 1 | 4 | Десятичная коррекция.
procedure TestComDAA;
var RgA,RgF : integer;// àäðåñ â ïàìÿòè
{27}Procedure daa;Var tmp1,tmp2:Integer;
const f_A=16; f_C=1;
const flags: array [0..256]of Byte=(
70,2,2,6,2,6,6,2,2,6,6,2,6,2,2,6,2,6,6,2,6,2,2,6,6,2,2,6,2,6,6,2,2,6,6,2,6,2,2,
6,6,2,2,6,2,6,6,2,6,2,2,6,2,6,6,2,2,6,6,2,6,2,2,6,2,6,6,2,6,2,2,6,6,2,2,6,2,6,6,
2,6,2,2,6,2,6,6,2,2,6,6,2,6,2,2,6,6,2,2,6,2,6,6,2,2,6,6,2,6,2,2,6,2,6,6,2,6,2,2,
6,6,2,2,6,2,6,6,2,130,134,134,130,134,130,130,134,134,130,130,134,130,134,134,130,
134,130,130,134,130,134,134,130,130,134,134,130,134,130,130,134,134,130,130,134,130,
134,134,130,130,134,134,130,134,130,130,134,130,134,134,130,134,130,130,134,134,130,
130,134,130,134,134,130,134,130,130,134,130,134,134,130,130,134,134,130,134,130,130,
134,130,134,134,130,134,130,130,134,134,130,130,134,130,134,134,130,130,134,134,130,
134,130,130,134,134,130,130,134,130,134,134,130,134,130,130,134,130,134,134,130,130,
134,134,130,134,130,130,134,0);
begin tmp1:=0; if (((RgF and f_C)<>0) or (RgA>$99)) then
begin tmp1:=(tmp1 or $60);end;
if(((RgF and f_A)<>0) or ((RgA and $0F)>$09)) then
begin tmp1:=(tmp1 or $06);end;tmp2:=RgA+tmp1;
RgF:=flags[tmp2 and $FF];
if (((tmp2 xor RgA xor tmp1) and $10)<>0)then
begin RgF:=(RgF or f_A); end; if (tmp2>$FF) then
begin RgF:=(RgF or f_C);end;RgA:=tmp2 and $FF;{PEAC;}end;
var Res1:TSStr1m; C1,CodeSym:Cardinal;
begin
InitSStr(Res1);
for c1:=0 to 255 do begin
RgF:= RgF and 16;
RgF:= RgF and 1; //f_A=16; f_C=1;
RgA:=c1;
addSStr(Res1,IntToStr(RgA)+' = ');
daa;
addSStr(Res1,IntToStr(RgA)+#13+#10);
end;
for c1:=0 to 255 do begin
RgF:= RgF and 16;
RgF:= RgF and 1; //f_A=16; f_C=1;
RgA:=c1;
addSStr(Res1,IntToHEX(RgA,2)+' = ');
daa;
addSStr(Res1,IntToHEX(RgA,2)+#13+#10);
end;
WriteFileSStr('DAA.txt',Res1);
end;