[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. Lamia

    Lamia Elder - Старейшина

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    Если учитывать регистр символов то туть можно через хеш:
    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
     
    #101 Lamia, 19 Aug 2007
    Last edited by a moderator: 29 Apr 2008
  2. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    что делает инструкция int?
     
    1 person likes this.
  3. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    прерывание
     
  4. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Инструкиця 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. Процессор генерирует их сам, если произойдет определенное событие.
     
    1 person likes this.
  5. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    scrat я полагаю тебя интересует вин? Винда работает в пмоде, так что тебе нужен пункт 2, привиденный гритом. Кстати, про перывания есть множество статей, если хочешь узнать про них больше - поищи на васме например.
    >>в Windows только до XP, дальше идет другой механизм
    sysenter имеешь ввиду?
     
    #105 Ni0x, 20 Aug 2007
    Last edited: 20 Aug 2007
  6. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    именно
     
  7. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    на счёт поиска подстроки - лучше юзать repe cmps. у зубкова написано. есть специальная фича для сравнения строк - cmpS. но и просто байтово можно через cmpb вроде. карочу зубкова есть хорошая глава про префикс повторения и команды сравнения. ну а дальше тока вшений цикл, который сдвигает смещение в строке, в которой ищется подстрока.
     
  8. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    inv Говорит неизвестная функция InitCommonControls - т.к. мы не подключили библиотеку comctl32.lib, т.е.

    include \masm32\include\comctl32.inc
    includelib \masm32\lib\comctl32.lib

    Это с первой ошибкой, а со второй попробуй сам - есть в masm такая фича C:\masm\liblist.exe - она показывает в какой библиотеке какая функция, т.е. какие библиотеки нужно подключать, такого не было!
     
    3 people like this.
  9. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    я вместо comctl подключил comdlg (я просто редактировал предыдущий пример и туториала и сразу не заметил разницы)
    Я уже нашел ошибку=\и потер пост,все оставшиеся ошибки были по той же причине.
    За liblist спс
     
    1 person likes this.
  10. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    inv Я бы для начала посоветовал книжку - http://forum.antichat.ru/showthread.php?p=409909 3 или 10 пост! Я думаю книга продуктивнее туториала для начала будет... ИМХО
     
  11. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    У меня крупник в книжном варианте=\есть,собственно с него я и начинал,
    В туториале конкретно по асме мало что есть,но мне нужно именно то что там изложено.
     
    1 person likes this.
  12. !_filin_!

    !_filin_! Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    86
    Likes Received:
    40
    Reputations:
    16
    Видел для с++ книгу, сборник различных задач ( и ответы на них) , может кто знает что-то подобное для асма? для повышения квалификации ( и просто тернировки мозга)
     
    1 person likes this.
  13. !_filin_!

    !_filin_! Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    86
    Likes Received:
    40
    Reputations:
    16
    спасибо за содержательный ответ,а поподробней можно?
     
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 !_filin_! Лучший способ это напистаь чтонить более менее сложноватое.
    Когда придумываешь чтото свое то быстро научишься нежеле по всяким книгам.
     
    1 person likes this.
  15. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    !_filin_! Повторяюсь хорошие книги по асму предложены здесь
    http://forum.antichat.ru/showthread.php?p=409909 я бы посоветовал там поглядеть из 3 или 10 поста!
     
    2 people like this.
  16. !_filin_!

    !_filin_! Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    86
    Likes Received:
    40
    Reputations:
    16
    спасибо, почему то незамечал топик, вижу по содержанию что книга неплохая, но всё таки нет практических задач?
     
  17. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    !_filin_! Именно практических задач и много -> книга учит синтаксису + неплохим начальным знаниям по общему устройству masma .... ИМХО :)
     
    1 person likes this.
  18. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Практика? Учебники по алгебре с 8 по 11, решай задачи с максимальной оптимизацией алгоритма.
     
    1 person likes this.
  19. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    Вопросец есть один...как включить в масме режим чтения бинарных файлов? Нужно,чем раньше будет ответ,тем лучше. Искал везде...в делфях включается режим FileMode:=0 а в асме как?.
     
    1 person likes this.
  20. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    NeXArmAor В масме думаю нет понятия бинарное чтение или чтение строк к примеру, т.к. нет библиотек типа MFC и VCL -> поэтому чтение осуществяется с помощью WinAPI функций, в частности:
    invoke ReadFile, hFile, addr Buffer, nCount, addr dwTemp, 0
    где hFile - хендл файла, из которого читать (получаем после вызова CreateFile)
    Buffer - буфер, может быть обьявлен как "Buffer db 1024 dup(?)";
    nCount - это число, т.е. сколько байт считать
    dwTemp - это переменная, куда будет записано, сколько байт реально считаны было
    0 - этот параметр используется для синхронизации потоков ввода\вывода, нам не нужен!
     
    1 person likes this.