|
| Problem med C kombineret med Assembler Fra : Kenneth Ahn Jensen |
Dato : 18-02-01 13:20 |
|
Jeg er ny i C programmering, og har fået et lille problem som jeg ikke
kan få has på.
Programmet skal skrives til en x86 processor.
Jeg skal addere nogle 96 bit tal på en stak, ved at kombinere 3 tal på
hver 32 bit.
Når jeg så har lagt de første 32 bit sammen, kommer der måske en mente
(carry-out), som giver en overflow.
Jeg har læst mig frem til at der er et register i cpu'en som indeholder
nogtle statusbits, deriblandt en CF, carry flag.
Nu kan jeg bare ikke finde ud af hvordan jeg får denne bit lagt over i
en variabel, 'flg'?
Jeg tænkte at jeg ville skyde en linie ind i assembler koden, lige efter
addl operationen, hvor jeg bad den om at kopiere denne bit over i en
variabel, til senere brug...
Nogen gode ideer?
Mvh
Kenneth
| |
Michael Rasmussen (18-02-2001)
| Kommentar Fra : Michael Rasmussen |
Dato : 18-02-01 13:36 |
|
adc er din ven, den fungerer som en alm. add, men den lægger en til oveni,
hvis
carry flaget er sat.
--
Michael Rasmussen
"Kenneth Ahn Jensen" <kaj@itu.dk> wrote in message
news:3A8FBDF2.36430DBB@itu.dk...
> Jeg er ny i C programmering, og har fået et lille problem som jeg ikke
> kan få has på.
> Programmet skal skrives til en x86 processor.
>
> Jeg skal addere nogle 96 bit tal på en stak, ved at kombinere 3 tal på
> hver 32 bit.
> Når jeg så har lagt de første 32 bit sammen, kommer der måske en mente
> (carry-out), som giver en overflow.
> Jeg har læst mig frem til at der er et register i cpu'en som indeholder
> nogtle statusbits, deriblandt en CF, carry flag.
> Nu kan jeg bare ikke finde ud af hvordan jeg får denne bit lagt over i
> en variabel, 'flg'?
>
> Jeg tænkte at jeg ville skyde en linie ind i assembler koden, lige efter
> addl operationen, hvor jeg bad den om at kopiere denne bit over i en
> variabel, til senere brug...
>
> Nogen gode ideer?
>
> Mvh
> Kenneth
>
>
| |
Bertel Lund Hansen (18-02-2001)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 18-02-01 15:43 |
|
Kenneth Ahn Jensen skrev:
>Jeg skal addere nogle 96 bit tal på en stak, ved at kombinere 3 tal på
>hver 32 bit.
Hvis du vil holde koden i C, er det nemmest at splitte tallene op
i 6 16-bits dele. Så kan du lave en C-algoritme med mente og det
hele.
De kan lægges i et array så det hele kan automatiseres.
--
Bertel http://lundhansen.dk/bertel/
FIDUSO: http://fiduso.dk/
| |
Dansoft Denmark (19-02-2001)
| Kommentar Fra : Dansoft Denmark |
Dato : 19-02-01 09:10 |
|
"Kenneth Ahn Jensen" <kaj@itu.dk> wrote in message
news:3A8FBDF2.36430DBB@itu.dk...
> Jeg har læst mig frem til at der er et register i cpu'en som indeholder
> nogtle statusbits, deriblandt en CF, carry flag.
> Nu kan jeg bare ikke finde ud af hvordan jeg får denne bit lagt over i
> en variabel, 'flg'?
>
> Jeg tænkte at jeg ville skyde en linie ind i assembler koden, lige efter
> addl operationen, hvor jeg bad den om at kopiere denne bit over i en
> variabel, til senere brug...
Hej
Med nedenstående assembler kode kan du på en enkel måde kopiere CPU'ens
flagregister, her i blandt Carry Flag, CF over i en variabel som du kan
bruge i dit C program.
void main()
{
char flg;
_asm{
LAHF //loads Flagsreg. into AH
MOV flg,AH
}
flg &= 0x01; // udmask Carry bit
}
Hilsen Torben
E-Mail: dansoft-denmark@dansoft-denmark
URL: http://www.dansoft-denmark.dk
| |
Kenneth Ahn Jensen (20-02-2001)
| Kommentar Fra : Kenneth Ahn Jensen |
Dato : 20-02-01 15:22 |
|
Dansoft Denmark wrote:
> Hej
> Med nedenstående assembler kode kan du på en enkel måde kopiere CPU'ens
> flagregister, her i blandt Carry Flag, CF over i en variabel som du kan
> bruge i dit C program.
Tak for det.
Jeg prøver om jeg magter det.
Kenneth
| |
|
|