Я получил неопределенную ссылку на 'esp' при связывании моего объектного файла.
Я записал свой код сборки в файл с именем mydc.s
Затем я создал объектный файл, используя
as --32 -march=i386 mydc.s -o mydc.o
(здесь не было ошибки)
Затем связал это с
gcc -m32 -march=i386 mydc.o -o mydc
Затем он создал сообщение об ошибке как
(. Text + 0x2a): неопределенная ссылка на 'esp'
Код следующий
.section ".text"
.globl main
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
input:
pushl $buffer
pushl $scanfFormat
call scanf
addl $8, %esp
## check if user input EOF
cmp $EOF, %eax
je quit
pushl $buffer
call isdigit
addl $4, esp
cmp $1, %eax
je if_digit
movl buffer, %eax
cmpl $'p', %eax
je if_p
cmpl $'q', %eax
je if_q
cmpl $'+', %eax
je if_plus
if_p:
movl iIndex, %eax
sall $2, %eax
addl $stack, %eax
pushl %eax
pushl $resultFormat
call printf
addl $8, %esp
jmp input
Чего я не понимаю, так это того, что esp - это не переменная или функция, а только имя регистра, и, следовательно, не должно приводить к возникновению неопределенной ошибки ссылки.
Почему это происходит и как я могу это исправить?