Для домашнего задания нам было предложено отсканировать номер, увеличить его на единицу и напечатать ответ. Однако код имеет тенденцию давать ошибку сегментации.Я продолжаю получать ошибки сегментации. Как стек используется в IA-32 с использованием AT & T?
.global main
mystring: .asciz "Assignment 3: inout\n"
string: .asciz "%d"
main: pushl $mystring
call printf
jmp inout
end: pushl $0
call exit
Это в основном то, что мы делаем. Выполнение кода, подобного этому, не работает. Проблема заключается в методе inout
inout: subl $0, %esp ;what is happening here
leal -4(%ebp), %eax ;what am i doing here
pushl %ebp ;why do i need to push the base pointer
movl %esp, %ebp
pushl %eax
pushl $string
call scanf
incl %eax
pushl %eax
pushl $string
call printf
Это не работает. Я также не знаю, что означает начало (выражение, адресная вещь), см. Комментарий к дальнейшим вещам. Заранее спасибо!
Кроме того, 'scanf' возвращает количество элементов, считанных в'% eax', а не число 'scanf'ed. Приращение '% eax' не даст результата, который вы ищете. –