Meghatározatlan szimbólum hiba történt mov át változó, amely meghatározott C kódban szerelvény

szavazat
1

Próbálom futtatni kódban benne C kód (a Clion). Azt definiált változó x külső szerelvény betét és megpróbálta mov egy számot, de azt mondja, fordítóprogram x definiált. Nem értem, hogyan lehet azt látni változókat. Szintén azt kell használni intel szintaxist.

int main(int argc, char** argv) {
short int x = 0;
__asm__ (
.intel_syntax noprefix\n\t
mov eax, 0x02\n\t
mov x, eax\n\t
.att_syntax prefix\n\t
);
printf(%d, x);
}


És van hiba

[ 50%] Building CXX object CMakeFiles/ass_lab_2.dir/main.cpp.o
[100%] Linking CXX executable ass_lab_2
/usr/bin/ld: CMakeFiles/ass_lab_2.dir/main.cpp.o: relocation R_X86_64_32S against undefined symbol `x' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
...
A kérdést 13/02/2020 23:51
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
3

A fő kérdés az, hogy xvan egy helyi változót. Meg kell majd használni kiterjesztett szerelvény , hogy módosítsa azt (és használja -masm=intelaz Intel szintaxis):

int main(void)
{
    short int x = 0;
    __asm__("mov %0, 0x02\n\t" : "=r"(x));
    printf("%d", x);
}

Is, akkor az AT & T szintaxis. Úgy fog kinézni:

int main(void)
{
    short int x = 0;
    __asm__("mov $0x02, %0\n\t" : "=r"(x));
    printf("%d", x);
}

Mert én vagyok a =rkényszer itt, ez fogja tárolni a nyilvántartásban; Ezért nem kell a használatát eax(ami kell ax, az úton) közbenső tároló helyen kell tárolni az értéket.

Válaszolt 14/02/2020 01:34
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more