@korak
Definisite mi kako MMA uzima LO HI oblik iz dvobajtne i iz visebajtnih varijabli, kako bih kasnije pisao kod ispravnom sintaksom. Ovde sam podelio varijablu GODINA u LO_GODINA i HI_GODINA.
if GODINA > konstante 2008 (HI-7, LO-216) then inc else dec
if GODINA > 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : sublw $07;
$0101 : btfsc STATUS,Z;
$0102 : goto $0107;
$0103 : btfsc STATUS,C;
$0104 : goto $010B;
$0105 : incf [$31],W;
$0106 : goto $010C;
$0107 : movf LO_GODINA,W;
$0108 : sublw $D8;
$0109 : btfss STATUS,C;
$010A : goto $0105;
$010B : decf [$31],W;
$010C : nop;
if GODINA < konstante 2008 (HI-7, LO-216) then inc else dec
if GODINA < 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$0101 : movlw $07;
$0102 : subwf HI_GODINA,W;
$0103 : btfsc STATUS,Z;
$0104 : goto $0109;
$0105 : btfsc STATUS,C;
$0106 : goto $010D;
$0107 : incf [$31],W;
$0108 : goto $010E;
$0109 : movlw $D8;
$010A : subwf LO_GODINA,W;
$010B : btfss STATUS,C;
$010C : goto $0107;
$010D : decf [$31],W;
$010E : nop;
if GODINA >= konstante 2008 (HI-7, LO-216) then inc else dec
if GODINA >= 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : sublw $07;
$0101 : btfsc STATUS,Z;
$0102 : goto $0107;
$0103 : btfsc STATUS,C;
$0104 : goto $010B;
$0105 : incf [$31],W;
$0106 : goto $010C;
$0107 : movlw $D8;
$0108 : subwf LO_GODINA,W;
$0109 : btfsc STATUS,C;
$010A : goto $0105;
$010B : decf [$31],W;
$010C : nop;
if GODINA <= konstante 2008 (HI-7, LO-216) then inc else dec
if GODINA <= 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$0101 : movlw $07;
$0102 : subwf HI_GODINA,W;
$0103 : btfsc STATUS,Z;
$0104 : goto $0109;
$0105 : btfsc STATUS,C;
$0106 : goto $010D;
$0107 : incf [$31],W;
$0108 : goto $010E;
$0109 : movf LO_GODINA,W
$010A : sublw $D8;
$010B : btfsc STATUS,C;
$010C : goto $0107;
$010D : decf [$31],0;
$010E : nop;
if GODINA == konstanta 2008 (HI-7, LO-216) then inc else dec
if GODINA == 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : xorlw $07;
$0101 : btfss STATUS,Z;
$0102 : goto $0109;
$0103 : movf LO_GODINA,W;
$0104 : xorlw $D8;
$0105 : btfss STATUS,Z;
$0106 : goto $0109;
$0107 : incf [$31],W;
$0108 : goto $010A;
$0109 : decf [$31],W;
$010A : nop;
if GODINA <> konstante 2008 (HI-7, LO-216) then inc else dec
if GODINA <> 2008 then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : xorlw $07;
$0101 : btfss STATUS,Z;
$0102 : goto $0107;
$0103 : movf LO_GODINA,W;
$0104 : xorlw $D8;
$0105 : btfsc STATUS,Z;
$0106 : goto $0109;
$0107 : incf [$31],W;
$0108 : goto $010A;
$0109 : decf [$31],W;
$010A : nop;
A sada konstanta i dvobajtna neoznacena varijabla (word).
if konstanta 2008 < GODINA then inc else dec
if 2008 < GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : sublw $07;
$0101 : btfsc STATUS,Z;
$0102 : goto $0107;
$0103 : btfsc STATUS,C;
$0104 : goto $010B;
$0105 : incf [$31],W;
$0106 : goto $010C;
$0107 : movf LO_GODINA,W;
$0108 : sublw $D8;
$0109 : btfss STATUS,C;
$010A : goto $0105;
$010B : decf [$31],W;
$010C : nop;
if konstanta 2008 > GODINA then inc else dec
if 2008 > GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$0101 : movlw $07;
$0102 : subwf HI_GODINA,W;
$0103 : btfsc STATUS,Z;
$0104 : goto $0109;
$0105 : btfsc STATUS,C;
$0106 : goto $010D;
$0107 : incf [$31],W;
$0108 : goto $010E;
$0109 : movlw $D8;
$010A : subwf LO_GODINA,W;
$010B : btfss STATUS,C;
$010C : goto $0107;
$010D : decf [$31],W;
$010E : nop;
if konstanta 2008 <= GODINA then inc else dec
if 2008 <= GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : sublw $07;
$0101 : btfsc STATUS,Z;
$0102 : goto $0107;
$0103 : btfsc STATUS,C;
$0104 : goto $010B;
$0105 : incf [$31],W;
$0106 : goto $010C;
$0107 : movlw $D8;
$0108 : subwf LO_GODINA,W;
$0109 : btfsc STATUS,C;
$010A : goto $0105;
$010B : decf [$31],W;
$010C : nop;
if konstanta 2008 >= GODINA then inc else dec
if 2008 >= GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$0101 : movlw $07;
$0102 : subwf HI_GODINA,W;
$0103 : btfsc STATUS,Z;
$0104 : goto $0109;
$0105 : btfsc STATUS,C;
$0106 : goto $010D;
$0107 : incf [$31],W;
$0108 : goto $010E;
$0109 : movf LO_GODINA,W;
$010A : sublw $D8;
$010B : btfsc STATUS,C;
$010C : goto $0107;
$010D : decf [$31],W;
$010E : nop;
if konstanta 2008 == GODINA then inc else dec
if 2008 == GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : xorlw $07;
$0101 : btfss STATUS,Z;
$0102 : goto $0109;
$0103 : movf LO_GODINA,W;
$0104 : xorlw $D8;
$0105 : btfss STATUS,Z;
$0106 : goto $0109;
$0107 : incf [$31],W;
$0108 : goto $010A;
$0109 : decf [$31],W;
$010A : nop;
if konstanta 2008 <> GODINA then inc else dec
if 2008 <> GODINA then
begin
incf [49],W;
end
else
begin
decf [49],W;
end
nop;
$00FF : movf HI_GODINA,W;
$0100 : xorlw $07;
$0101 : btfss STATUS,Z;
$0102 : goto $0107;
$0103 : movf LO_GODINA,W;
$0104 : xorlw $D8;
$0105 : btfsc STATUS,Z;
$0106 : goto $0109;
$0107 : incf [$31],W;
$0108 : goto $010A;
$0109 : decf [$31],W;
$010A : nop;
Svi kodovi su pisani iz glave (uz par prepisivanja), i nisu simulirani. Veoma je moguce da se potkrao neki bag. On ce se ipak lakse otkriti kasnije, kada se rutine ubace u MMA, i pojedinacno testiraju.