Никак не могу разобраться в чем проблема. Компилирую проект. Запускаю бинарник. Первый раз нажимаю на кнопку - все нормально, но потом программа зависает. Может быть взгляд со стороны подскажет в чем проблема?
Исходники:
Показать
Программа зависает после выполнения следующего кода:
ни чё не понял oO , где связь первого куска со вторым ? , чё за функции (void)generate(); и (void)graph(); , как ваще это работаетдолжно работать по задумке ? oO
Функция generate() представлена в коде. Функция graph() реализована в другом ассемблерном модуле (работает нормально, поэтому код не приводил).
gramozeka написал:
где связь первого куска со вторым ?
[console]gcc ./mouse.c ./generate.s ./graph.s -lgpm[/console]
Так у меня всегда все нормально работало
gramozeka написал:
как ваще это работаетдолжно работать по задумке ?
Задание лабораторной все то же.
Вывод текста и фона реализовать записью в видеопамять. Реализовать поддержку мыши. При нажатии на одну кнопку в интерфейсе программы - сформировать новый массив псевдослучайных чисел и вывести его, на вторую - обработать массив и вывести результат, на третью - выйти из программы.
Собственно ничего сложного. Проблемка возникла только в этом.
~/asm$ gcc ./mouse.c ./generate.s -lgpm
./generate.s: Assembler messages:
./generate.s:16: Error: bad register name `%rbp'
./generate.s:17: Error: bad register name `%rsp'
./generate.s:19: Error: bad register name `%rdi'
./generate.s:20: Error: bad register name `%rax'
./generate.s:22: Error: bad register name `%rax'
./generate.s:25: Error: bad register name `%rbx'
./generate.s:28: Error: bad register name `%rdx'
./generate.s:29: Error: bad register name `%rcx'
./generate.s:30: Error: bad register name `%rcx'
./generate.s:31: Error: bad register name `%rbx)'
./generate.s:32: Error: bad register name `%rbx'
./generate.s:33: Error: bad register name `%rbx'
./generate.s:36: Error: bad register name `%rdi'
./generate.s:37: Error: bad register name `%rsi'
./generate.s:38: Error: bad register name `%rax'
./generate.s:40: Error: bad register name `%rax'
./generate.s:42: Error: bad register name `%rsi'
./generate.s:43: Error: bad register name `%rdx'
./generate.s:46: Error: bad register name `%rbx'
./generate.s:48: Error: bad register name `%rbx)'
./generate.s:50: Error: bad register name `%rbx)'
./generate.s:51: Error: bad register name `%rsi'
./generate.s:52: Error: bad register name `%rdx'
./generate.s:54: Error: bad register name `%rbx'
./generate.s:55: Error: bad register name `%rdx'
./generate.s:57: Error: bad register name `%rsi'
./generate.s:59: Error: bad register name `%rsi'
./generate.s:60: Error: bad register name `%rdx'
./generate.s:62: Error: bad register name `%rsi'
./generate.s:63: Error: bad register name `%rdx'
./generate.s:65: Error: bad register name `%rsi'
./generate.s:67: Error: bad register name `%rbx'
./generate.s:68: Error: bad register name `%rbx'
./generate.s:71: Error: bad register name `%rbp'
./generate.s:72: Error: bad register name `%rbp'
В amd64 передача параметров идет через регистры. Функция возвращает значение через регистр %rax. Для того, чтобы данный регистр ни на что не повлиял, я и решил использовать (void)function_name().