Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для Linux/Unix > Замена строчных букв на прописные |
Автор: Enchance 22.2.2011, 15:53 | ||
Здраствуйте. Начинаю изучать ассемблер под линукс, компилятор NASM. Есть программа, которая выводит в консоль символы, которые я ввожу с клавиатуры:
Нужно модифицировать ее так, чтобы все прописные буквы преобразовывались в строчные. Насколько я понял, нужно проверить каждый вводимый символ, является ли он строчным, и если да, то от его кода нужно отнять 20h. Скажите пожалуйста, как это реализовать? Я пока знаю только основы основ. |
Автор: Enchance 22.2.2011, 16:24 |
И еще, вдогонку. В даной программе я использовал такие вещи, как: mov eax, 3 ;Вызов #3 (read) (...) mov eax, 4 ;Вызов #4 (write) (...) А где можно почитать о всех системных вызовах Linux? В гугле искал, не нашел. |
Автор: 500mhz 22.2.2011, 16:24 |
а если там будет вместо букофки цыферка и ты от нее 0x20 отнимеш то чо будет? ) а по теме 2 варианта вижу 1) проверять буфер ввода buffer: resb 10 на предмет не "букавок" и уже потом отнимать 0x20 2) подключить libc ))) |
Автор: Enchance 22.2.2011, 17:12 |
Ну по таблице ASCII маленькие буковки начинаются с 61h, и заканчиваются 7Ah. То есть проверить, вписывается ли код символа в даные границы, и если да - то отнимаем от кода символа 20h. Но вот как создать программу на асме - я хз. Причем подключать дополнительные библиотеки запрещено. |
Автор: 500mhz 22.2.2011, 17:30 |
после вызова 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 22.2.2011, 18:15 | ||||
Компилится норм. Компоновщик ругается:
Исполняемый файл создается, но не запускается.
Как узнать, в чем проблема? |
Автор: 500mhz 22.2.2011, 18:25 | ||
ты в свой исходник вставь то что я написал Добавлено через 7 минут и 57 секунд
все компилиться , попробуй fasm а запустить мне негде, нет линюха под рукой Добавлено через 9 минут и 57 секунд скомпиленый бинарник |
Автор: Enchance 22.2.2011, 21:06 | ||||
fasm не вариант, нужен именно nasm. Сорри, я не совсем то компилировал. Итак, я вставил кусок кода от 500mhz, заменил только "jz строка 5" на "jz _start" в строке 12. Компилю:
Как видите, работа программы осталась неизменна - ничего она не меняет, и есть 2 ворнинга, которые, впрочем, перешли в наследство от первоначальной программы. Вот совмещенный асм-код:
|
Автор: 500mhz 22.2.2011, 22:37 | ||
я не знаю как и что вы там запускаете, вот что у меня (в линюхе естественно)
наблюдаем перевод букавок из lowercase в UPPERCASE |
Автор: Enchance 23.2.2011, 00:25 |
Это уже становится несмешно... Скачал скомпилированый бинарник - результат тот же! Ввожу буквы из клавиатуры, вижу их в консоли, но НИЧЕГО НЕ ПРЕОБРАЗОВЫВАЕТСЯ! |
Автор: 500mhz 23.2.2011, 01:37 |
немнога оффтоп ))) пробую с nasm , но так как к меня 64bit linux то ld ругаеться на 32bit obj , какие у ld параметры чтоб он понял что имеем дело с 32? |
Автор: Enchance 24.2.2011, 03:21 |
Какие команды я писал, и какие ошибки выдавались - я уже описал на пару сообщений выше. Если есть еще какие-то параметры - то как их узнать? |
Автор: 500mhz 24.2.2011, 03:50 |
http://www.lxhp.in-berlin.de/lhpsysc1.html |
Автор: maxlee 17.3.2011, 03:17 | ||
Вот код проги провереной на NASM Ошибка была в 11 строке. ты писал jz _start а надо было jz .blabla
|
Автор: maxlee 17.3.2011, 03:35 | ||
напишите плиз каменты к этим строкам , а то я полный НОЛЬ в ассемлере
|