Если учитывать регистр символов то туть можно через хеш: Code: _1 db 'Lamia',0 _2 db 'lamia',0 title db 'Слова разные',0 _title db 'Слова одинаковые',0 entry $ xor esi,esi mov edi,_1 next: mov eax, edi xor edx, edx hash: rol edx, 3 xor dl, byte [eax] inc eax cmp byte [eax], 0 jnz hash cmp esi,0 je @ cmp esi,edx je f@ invoke MessageBox,0,title,0,0 jmp exit @: mov esi,edx mov edi,_2 jmp next f@: invoke MessageBox,0,_title,0,0 exit: ret
Инструкиця INT xx делает следующее: 1) Если она выполняется в реальном режиме, то ее псевдокод такой: pushf push cs push ip // из слова 0:[xx<<4] берется сегмент, из слова 0:[xx<<4 + 2] берется смещение и выполняется дальний переход на этот адрес - обработчик прерывания. 2) Если она выполняется в защищенном режиме, то ее псевдокод такой: pushfd push cs push eip // проверка защиты // смена уровня привилегий если нужно // прыжок на адрес, задаваемый селектором IDT[xx].Selector и смещением IDT[xx].Offset В двух словах оно нужно для передачи управления некоторой фиксированной системной процедуре для выполнения определенного действия. В DOS/Windows системные апи реализованы в виде прерываний (в Windows только до XP, дальше идет другой механизм). BIOS устанавливает свои обработчики для аппаратных сервисов. Еще кроме программных прерываний есть аппаратные прерывания. Например: 1 или 3. Процессор генерирует их сам, если произойдет определенное событие.
scrat я полагаю тебя интересует вин? Винда работает в пмоде, так что тебе нужен пункт 2, привиденный гритом. Кстати, про перывания есть множество статей, если хочешь узнать про них больше - поищи на васме например. >>в Windows только до XP, дальше идет другой механизм sysenter имеешь ввиду?
на счёт поиска подстроки - лучше юзать repe cmps. у зубкова написано. есть специальная фича для сравнения строк - cmpS. но и просто байтово можно через cmpb вроде. карочу зубкова есть хорошая глава про префикс повторения и команды сравнения. ну а дальше тока вшений цикл, который сдвигает смещение в строке, в которой ищется подстрока.
inv Говорит неизвестная функция InitCommonControls - т.к. мы не подключили библиотеку comctl32.lib, т.е. include \masm32\include\comctl32.inc includelib \masm32\lib\comctl32.lib Это с первой ошибкой, а со второй попробуй сам - есть в masm такая фича C:\masm\liblist.exe - она показывает в какой библиотеке какая функция, т.е. какие библиотеки нужно подключать, такого не было!
я вместо comctl подключил comdlg (я просто редактировал предыдущий пример и туториала и сразу не заметил разницы) Я уже нашел ошибку=\и потер пост,все оставшиеся ошибки были по той же причине. За liblist спс
inv Я бы для начала посоветовал книжку - http://forum.antichat.ru/showthread.php?p=409909 3 или 10 пост! Я думаю книга продуктивнее туториала для начала будет... ИМХО
У меня крупник в книжном варианте=\есть,собственно с него я и начинал, В туториале конкретно по асме мало что есть,но мне нужно именно то что там изложено.
Видел для с++ книгу, сборник различных задач ( и ответы на них) , может кто знает что-то подобное для асма? для повышения квалификации ( и просто тернировки мозга)
2 !_filin_! Лучший способ это напистаь чтонить более менее сложноватое. Когда придумываешь чтото свое то быстро научишься нежеле по всяким книгам.
!_filin_! Повторяюсь хорошие книги по асму предложены здесь http://forum.antichat.ru/showthread.php?p=409909 я бы посоветовал там поглядеть из 3 или 10 поста!
спасибо, почему то незамечал топик, вижу по содержанию что книга неплохая, но всё таки нет практических задач?
!_filin_! Именно практических задач и много -> книга учит синтаксису + неплохим начальным знаниям по общему устройству masma .... ИМХО
Вопросец есть один...как включить в масме режим чтения бинарных файлов? Нужно,чем раньше будет ответ,тем лучше. Искал везде...в делфях включается режим FileMode:=0 а в асме как?.
NeXArmAor В масме думаю нет понятия бинарное чтение или чтение строк к примеру, т.к. нет библиотек типа MFC и VCL -> поэтому чтение осуществяется с помощью WinAPI функций, в частности: invoke ReadFile, hFile, addr Buffer, nCount, addr dwTemp, 0 где hFile - хендл файла, из которого читать (получаем после вызова CreateFile) Buffer - буфер, может быть обьявлен как "Buffer db 1024 dup(?)"; nCount - это число, т.е. сколько байт считать dwTemp - это переменная, куда будет записано, сколько байт реально считаны было 0 - этот параметр используется для синхронизации потоков ввода\вывода, нам не нужен!