| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Linux/Unix > Как вывести содержимое переменной на экран |
| Автор: vngrdserg 17.9.2005, 11:28 | ||
Если например у нас есть какая-то символьная строка :
то для вывода ее на экран нужно : 1 В edx записать длину строки 2 В ecx записать адрес строки 3 В ebx записать 1 4 В eax записать 4 И дернуть int $ox80 Пусть у нас имеются 4 переменных .data .equ var1, 1 .equ var2, 2 .equ var3, 3 .equ var4, 4 Мы делаем какие-то телодвижения с ними . Как в произвольный момент вывести на экран содержимое этой переменной ? |
| Автор: oleg1973 17.9.2005, 16:37 |
| я так понимаю это под линюх а что мешает использоваеть в данном случае printf ? слинковав с libc ? |
| Автор: vngrdserg 17.9.2005, 19:43 | ||||||
Вас понял Создал файл printf_message.s :
Собираю его :
Запускаю - и тут валится segmentation fault ... |
| Автор: adejneka 18.9.2005, 07:29 | ||
| Выходить из _start надо системным вызовом exit. После вызова любой сишной функции надо удалить аргументы из стека. Функция printf выполняет построчную буферизацию вывода. Поэтому надо либо сбросить буфер вызовом C-функции fflush, либо добавить в конец строки \n.
|
| Автор: vngrdserg 18.9.2005, 11:05 | ||
Спасибо , заработало Правда , я не совсем понял , зачем после каждого calll вызывать addl Без этой команды тоже все работает |
| Автор: adejneka 18.9.2005, 20:21 | ||
Функции в языке C могут принимать переменное число параметров, при этом нет встроенного способа узнать их число. В компиляторе GCC принято, что аргументы из стека удаляет вызывающая функция. Если у Вас вся программа помещается в одну функцию и не имеет циклов, стек можно и не очищать. Если Ваша функция вызывает сишную и пытается сделать RET - без чистки стека она вернется "в космос". Если сишная функция вызвается в цикле, стек без очистки может переполниться. |
| Автор: zaytsewa 23.12.2009, 14:21 | ||
| я ассемблера почти не знаю, но вот надо написать ассемблерную вставку... вот решила попробовать простенький пример, чтобы разобраться...
у меня в дебагере при пошаговом выполнении почему-то не выполняются почти все строчки, за исключением первой и последней)) и ещё команда out по идее должна вывести мне в стандартный вывод хоть что-нибудь... но она ничего не выводит я понимаю, что всё в корне неправильно, наверное, но если кто-нибудь будет так любезен сделать разбор ошибок - буду очень признательна) |
| Автор: airyashov 23.12.2009, 20:33 | ||
выполнится еще наверное
потому что с т.з. ассемблера остальное чушь какая-то |