Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 20:40   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Простая программа

Здравствуйте.
Решил вспомнить AT&T-синтаксис ассемблера. Последний раз писал на нем около года назад. Книжку, как всегда, читать было лень, решил вспоминать постепенно, на практике. Написал программу, но она дает Segmentation fault.
Вот код:
Код:
.data
a:
	.space 4
b:
	.space 4
pleaseinput:
	.string "Input a,b: "
scanfformat:
	.string "%d %d"
printformat:
	.string "Result: %d"
.text
.globl main
main:
        pushl $pleaseinput
        call printf
        pushl $b
	pushl $a
	pushl $scanfformat
	call scanf
	movl a, %eax
	mull b
	pushl %eax
	pushl $printformat
	call printf
	ret
В gdb говорит, что рушится на вызове scanf. И действительно, если убрать scanf, то программа все равно рушится, но уже на втором printf.
Есть несколько предположений, но они глупы. Что можете посоветовать?(использовать системные вызовы прошу не советовать, так как хотелось бы использовать scanf и printf )
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 27.11.2010, 22:45   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Рушится потому что не восстанавливаете указатель стека после этих функций.
С АТиТ синтаксисом не работал, но возможно сработает:
Код:
.data
a:
	.space 4
b:
	.space 4
pleaseinput:
	.string "Input a,b: "
scanfformat:
	.string "%d %d"
printformat:
	.string "Result: %d"
.text
.globl main
main:
        pushl $pleaseinput
        call printf
        addl 4,%esp
        pushl $b
	pushl $a
	pushl $scanfformat
	call scanf
        addl 12,%esp
	movl a, %eax
	mull b
	pushl %eax
	pushl $printformat
	call printf
        addl 8,%esp
	ret
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 27.11.2010, 22:52   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Спасибо, оно. Вспомнил
Только не 4, а $4 и т.д.
Спасибо ещё раз.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 27.11.2010, 22:52   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

К удалению.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна простая программа на дельфи. TerminalHead Фриланс 4 12.10.2010 02:43
Простая программа для дизайна интерьера Mixasik Софт 1 26.12.2009 13:16
Простая программа с работой строки и редактированием её. Sergey_O Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.12.2009 12:38
Простая программа с циклом на с++ Olya90 Помощь студентам 3 23.03.2009 20:32
Простая программа Distr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.11.2007 08:27