Ok, ein einfaches
kla:=kla-klb;
ergibt
Code
LDS _ACCB, subtest.KLA
LDS _ACCA, subtest.KLA+1
PUSH _ACCB
PUSH _ACCA
LDS _ACCB, subtest.KLB
LDS _ACCA, subtest.KLB+1
NEG _ACCB
BRNE subtest._L0000
DEC _ACCA
subtest._L0000:
COM _ACCA
POP _ACCAHI
POP _ACCALO
ADD _ACCB, _ACCALO
ADC _ACCA, _ACCAHI
STS SUBTEST.KLA, _ACCB
STS SUBTEST.KLA+1, _ACCA
Da wird das Carry auch ohne Nulldurchgang des Ergebnisses (manchmal) gesetzt.
Ich habe das jetzt mal so gemacht:
Code
asm;
LDS _ACCA, subtest.KLa;
LDS _ACCB, subtest.KLa+1;
LDS R30, subtest.KLb;
LDS R31, subtest.KLb+1;
SUB _ACCA, R30;
SBC _ACCB, R31;
STS subtest.KLa, _ACCA;
STS subtest.KLa+1, _ACCB;
endasm;
Das klappt wie gewünscht, nur beim Nulldurchgang wird Carry gesetzt, so wie es sein soll.
Soweit ich weiß werden Register ACCA, ACCB und R30 und R31 bei Interrupts gesichert,
die kann ich also doch verwenden richtig? Oder muss ich die bei Hand-Assemblercode innerhalb einer Interruptroutine selber sichern?
Lang lang ist es her, als ich Assembler auf einem PIC gelernt habe...20 Jahre schätze ich mal..Ich bin da also leider nicht mehr so der Held, ich bitte das zu entschuldigen
Louis