Сегодня я попробую реализовать функцию, которая будет превращать строку в число. Число будет хранится в слове, а строка будет последовательностью байт, завершенных нулем, в которой могу присутствовать символы A, B, C, D, E, F. Я буду применять команду LODSB для загрузки байта из памяти в регистр AL.

CYXHHWtw Gk ассемблер, строки
Для создания такой функции нам потребуется функция, которая будет возвращать длину строки, итак…Вот функция strlen (возвращает длину в ECX)

strlen PROC szStr:PTR BYTE
        PUSH ESI
        PUSH EAX

        MOV ESI,szStr
        CLD
        L1:
                LODSB
                CMP AL,0
        JNZ L1
        MOV ECX,ESI
        SUB ECX,szStr
        DEC ECX

        POP EAX
        POP ESI
        RET
strlen ENDP

Здесь мы просто загружаем адрес строки в ESI, а дальше читаем из строки и сравниваем с нулем. Как только обнаружим 0, так сразу загрузим текущий адрес в ECX и вычтем адрес начала строки. Далее скорректируем на единичку. Вот и вся махонькая функция. Дальше посмотрим на реализацию основной функции (принимает адрес строки и адрес результирующей переменной):

StrToInt PROC szStr:PTR BYTE,wNum:PTR WORD
        PUSHAD
        MOV EDI,wNum

        MOV ESI,szStr
        INVOKE strlen,ESI

        L1:
                XOR AX,AX
                CLD
                LODSB

                CMP AX,65
                JB next
                CMP AX,70
                JA next

                        SUB AX,55
                        ADD WORD PTR [EDI],AX
                        JMP L2

                next:

                        AND AX,0000000000001111b
                        ADD WORD PTR [EDI],AX
                L2:
                DEC ECX
                JZ Q
                SHL WORD PTR [EDI],4
        JMP L1
        Q:
        POPAD
        RET
StrToInt ENDP

Здесь мы сначала узнаем длину, затем проверяем принадлежит ли байт множеству {A,B,C,D,E,F}. Принадлежит — корректируем и прибавляем, не принадлежит — значит это циферка и опять же корректируем ее. Вот вроде бы и все. В качестве бонуса, процедура реверса строки:

revers PROC szStr:PTR BYTE

        PUSHAD

        MOV ESI,szStr
        MOV EDI,ESI
        INVOKE strlen,szStr
        ADD EDI,ECX
        DEC EDI
        SHR ECX,1

        L1:

                MOV AL,BYTE PTR [ESI]
                XCHG AL,BYTE PTR [EDI]
                MOV BYTE PTR [ESI],AL

                INC ESI
                DEC EDI

        DEC ECX
        JNZ L1

        POPAD

        RET
revers ENDP

Она не очень запутана, так что мой совет — возьмите отладчик и пройдитесь по этому коду. Вот вроде бы и все…

tt twitter big4 ассемблер, строки tt digg big4 ассемблер, строки tt facebook big4 ассемблер, строки tt gmail big4 ассемблер, строки tt myspace big4 ассемблер, строки tt reddit big4 ассемблер, строки

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++