![]() |
|
![]() ![]() ![]() |
|
Enchance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Здраствуйте.
Начинаю изучать ассемблер под линукс, компилятор NASM. Есть программа, которая выводит в консоль символы, которые я ввожу с клавиатуры:
Нужно модифицировать ее так, чтобы все прописные буквы преобразовывались в строчные. Насколько я понял, нужно проверить каждый вводимый символ, является ли он строчным, и если да, то от его кода нужно отнять 20h. Скажите пожалуйста, как это реализовать? Я пока знаю только основы основ. |
|||
|
||||
Enchance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
И еще, вдогонку.
В даной программе я использовал такие вещи, как: mov eax, 3 ;Вызов #3 (read) (...) mov eax, 4 ;Вызов #4 (write) (...) А где можно почитать о всех системных вызовах Linux? В гугле искал, не нашел. |
|||
|
||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
а если там будет вместо букофки цыферка и ты от нее 0x20 отнимеш то чо будет? )
а по теме 2 варианта вижу 1) проверять буфер ввода buffer: resb 10 на предмет не "букавок" и уже потом отнимать 0x20 2) подключить libc ))) -------------------- |
|||
|
||||
Enchance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Ну по таблице ASCII маленькие буковки начинаются с 61h, и заканчиваются 7Ah.
То есть проверить, вписывается ли код символа в даные границы, и если да - то отнимаем от кода символа 20h. Но вот как создать программу на асме - я хз. Причем подключать дополнительные библиотеки запрещено. |
|||
|
||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
после вызова read , eax возвратит колво принятых в буфер сиволов значит со строки 10 было бы не плоха написать test eax,eax jz строка 5 mov esi,buffer mov ecx,eax .xlp: cmp [esi],byte 0x61 jge .blabla .nax: inc esi loop .xlp jmp .gogogo .blabla: cmp [esi],byte 0x7a jg .nax sub [esi],byte 0x20 jmp .nax .gogogo: ну и тут остаток кода с выводом на экран -------------------- |
|||
|
||||
Enchance |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Компилится норм.
Компоновщик ругается:
Исполняемый файл создается, но не запускается.
Как узнать, в чем проблема? Это сообщение отредактировал(а) Enchance - 22.2.2011, 18:16 |
||||
|
|||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
ты в свой исходник вставь то что я написал
Добавлено через 7 минут и 57 секунд
все компилиться , попробуй fasm а запустить мне негде, нет линюха под рукой Добавлено через 9 минут и 57 секунд скомпиленый бинарник Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() -------------------- |
|||
|
||||
Enchance |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
fasm не вариант, нужен именно nasm.
Сорри, я не совсем то компилировал. Итак, я вставил кусок кода от 500mhz, заменил только "jz строка 5" на "jz _start" в строке 12. Компилю:
Как видите, работа программы осталась неизменна - ничего она не меняет, и есть 2 ворнинга, которые, впрочем, перешли в наследство от первоначальной программы. Вот совмещенный асм-код:
|
||||
|
|||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
я не знаю как и что вы там запускаете, вот что у меня (в линюхе естественно)
наблюдаем перевод букавок из lowercase в UPPERCASE -------------------- |
|||
|
||||
Enchance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Это уже становится несмешно...
Скачал скомпилированый бинарник - результат тот же! Ввожу буквы из клавиатуры, вижу их в консоли, но НИЧЕГО НЕ ПРЕОБРАЗОВЫВАЕТСЯ! |
|||
|
||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
немнога оффтоп )))
пробую с nasm , но так как к меня 64bit linux то ld ругаеться на 32bit obj , какие у ld параметры чтоб он понял что имеем дело с 32? -------------------- |
|||
|
||||
Enchance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Какие команды я писал, и какие ошибки выдавались - я уже описал на пару сообщений выше. Если есть еще какие-то параметры - то как их узнать?
|
|||
|
||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
-------------------- |
|||
|
||||
maxlee |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.3.2011 Репутация: нет Всего: нет |
Вот код проги провереной на NASM
Ошибка была в 11 строке. ты писал jz _start а надо было jz .blabla
|
|||
|
||||
maxlee |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.3.2011 Репутация: нет Всего: нет |
напишите плиз каменты к этим строкам , а то я полный НОЛЬ в ассемлере
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |