Käännellessäni C-kielistä ohjelmaani GCC valittaa:
Assembler messages:
Error: suffix or operands invalid for 'lcall'
Ohjelmani näyttää kyseiseltä kohdin tältä:
void TimerHandler() {
Counter++;
OriginalTicks+=TicksPerCall;
if(OriginalTicks>=65536) {
OriginalTicks-=65536;
__asm__ __volatile__ ("
pushfl
lcall %0
"
:
: "g" (OldTimerHandler));
} else {
outportb(0x20, 0x20);
}
}Onko koodissa joku virhe vai eikö kääntäjä vain ymmärrä?
Kuinka saan korjattua virheen?
Koodi on pöllitty suoraan laamatutista, ja kiinnostaisi tietää onnistuuko muilla tuon timertst.c:n kääntäminen ilman aiemmin mainittua virheilmoitusta?
Komentoriviltä käännän komennolla:
gcc timer.c timertst.c -o timertst.exe
Itselläni ei ole oikein edes käsitystä, mitä funktion pitäisi tehdä, joten sitä minulta on turha kysyä.
Laamatutin EXAMPLES-hakemiston 'README.EXP'-tiedostosta:
lainaus:
Lisäksi timertst.exe pitää kääntää:
gcc -Wall -s timer.c timertst.c -o timertst.exe
lainaus:
Lisäksi timertst.exe pitää kääntää:
gcc -Wall -s timer.c timertst.c -o timertst.exe
GCC antaa aiemmin kertomani virheilmoituksen myös koittaessani tuota komentoa.
Käännät siis DJGPP:llä?
Kyllä vain.
Aihe on jo aika vanha, joten et voi enää vastata siihen.