|
|
|
vngrdserg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Если например у нас есть какая-то символьная строка :
то для вывода ее на экран нужно : 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 |
|
|||
asm fanat Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
я так понимаю это под линюх
а что мешает использоваеть в данном случае printf ? слинковав с libc ? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
vngrdserg |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Вас понял Создал файл printf_message.s :
Собираю его :
Запускаю - и тут валится segmentation fault ... |
||||||
|
|||||||
adejneka |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Выходить из _start надо системным вызовом exit.
После вызова любой сишной функции надо удалить аргументы из стека. Функция printf выполняет построчную буферизацию вывода. Поэтому надо либо сбросить буфер вызовом C-функции fflush, либо добавить в конец строки \n.
|
|||
|
||||
vngrdserg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Спасибо , заработало Правда , я не совсем понял , зачем после каждого calll вызывать addl Без этой команды тоже все работает |
|||
|
||||
adejneka |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Функции в языке C могут принимать переменное число параметров, при этом нет встроенного способа узнать их число. В компиляторе GCC принято, что аргументы из стека удаляет вызывающая функция. Если у Вас вся программа помещается в одну функцию и не имеет циклов, стек можно и не очищать. Если Ваша функция вызывает сишную и пытается сделать RET - без чистки стека она вернется "в космос". Если сишная функция вызвается в цикле, стек без очистки может переполниться. |
|||
|
||||
zaytsewa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
я ассемблера почти не знаю, но вот надо написать ассемблерную вставку...
вот решила попробовать простенький пример, чтобы разобраться...
у меня в дебагере при пошаговом выполнении почему-то не выполняются почти все строчки, за исключением первой и последней)) и ещё команда out по идее должна вывести мне в стандартный вывод хоть что-нибудь... но она ничего не выводит я понимаю, что всё в корне неправильно, наверное, но если кто-нибудь будет так любезен сделать разбор ошибок - буду очень признательна) |
|||
|
||||
airyashov |
|
|||
Опытный Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: нет Всего: 6 |
выполнится еще наверное
потому что с т.з. ассемблера остальное чушь какая-то -------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
1IMMORTAL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 8.9.2006 Репутация: нет Всего: нет |
Эта команда НЕ ДОЛЖНА ничего выводить на стандартный вывод. Пожалуйста, не портите себе нервы и не ломайте мозг - почитайте справочники, учебники. Я Вам по этому вопросу уже ответил на другом сайте Либо закажите кому-нибудь эту задачу за деньги... Это сообщение отредактировал(а) 1IMMORTAL - 21.1.2010, 22:34 |
|||
|
||||
Правила форума "Asm для Linux/Unix" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Linux/Unix | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |