Помогите новичку

Тема в разделе "WASM.ASSEMBLER", создана пользователем ni11, 9 дек 2008.

  1. ni11

    ni11 New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2008
    Сообщения:
    1
    есть программа,но нужно объяснить её по каждой строкке....если кто может помочь,плиз помогите
    intel_syntax noprefix
    global my_strcat
    type my_strcat,@ function
    my_strcat
    mov edx,[esp+4]
    find_end:
    mov al,BYTE PTR[edx]
    inc edx
    cmp al,0
    jne find_end
    prepare:
    mov ecx,edx
    mov edx,[esp+8]
    copy:
    mov al,BYTE PTR[edx]
    inc edx
    mov BYTE PTR[ecx-1],al
    inc ecx
    cmp al,0
    jne copy
    exit:
    mov eax,[esp+4]
    ret
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    IMHO
    Код (Text):
    1. Сам не знаю чей это синтаксис.
    2.  
    3. intel_syntax noprefix
    4. global my_strcat
    5. type my_strcat,@ function   ;Что-то очень похожее на объявление функции(процедуры, под программы)
    6. my_strcat           ;Функция  добавляет к строке другую строку.
    7.  
    8.     mov edx,[esp+4]     ;Первый параметр переданый в функию. Указатель на ASCIIZ строку.
    9.     ;<Поиск конца строки(нуля).
    10. find_end:
    11.     mov al,BYTE PTR[edx]    ;Читаем символ из памяти по адресу заданому в edx
    12.     inc edx         ;Увеличиваем на 1 edx. Переходим к следующему символу
    13.     cmp al,0            ;Проверим на признак конца строки(ноль).
    14.     jne find_end        ;Если не конец переходим к началу поиска
    15.     ;>
    16. prepare:
    17.     mov ecx,edx         ;В ecx запишем адрес байта следующего после ASCIIZ строки(НУЛЯ).
    18.     mov edx,[esp+8]     ;Второй параметр переданый в функию. Указатель на ASCIIZ строку.
    19.     ;<Собственно добавление строки
    20. copy:
    21.     mov al,BYTE PTR[edx]    ;Читаем символ со строки которую нужно добавить
    22.     inc edx         ;Увеличиваем на 1 edx. Переходим к следующему символу, откуда читать
    23.     mov BYTE PTR[ecx-1],al  ;Добавим символ в строку. [ecx-1] потому, что у нас в ecx на 1 больше.
    24.     inc ecx         ;Увеличиваем на 1 ecx. Переходим к следующему символу, куда писать
    25.     cmp al,0            ;Проверка на конец второй строки
    26.     jne copy            ;Если не конец переходим к началу добавления строки
    27.     ;>
    28. exit:
    29.     mov eax,[esp+4]     ;Вернем указатель на начало строки. ASCIIZ_1 + ASCIIZ_2
    30.     ret             ;Выход из функции (процедуры, под программы)
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    S_Alex
    Судя по BYTE PTR синтаксис masm или tasm
     
  4. OxBADC0DE

    OxBADC0DE Олег aka Executioner

    Публикаций:
    0
    Регистрация:
    6 дек 2008
    Сообщения:
    11
    Адрес:
    SPb
    Скорее TASM
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Похоже на масм.
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Mikl___ & OxBADC0DE & Clerk
    Причем тут tasm/masm? Обратите внимание на "intel_syntax noprefix".
    Что касается BYTE PTR'а, то он вообще не нужен, ибо один из операторов - байтовый регистр.

    ni11
    Букварь по ассемблеру в руки.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    q_q
    Опкод то и там и там одинаковый, но вот один компилятор скомпилет, другой будет ругатсо, вот и при том выбор.
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Clerk
    Bla-bla ptr нужна компилятору в тех командах, в которых он не может определить размер операндов, например
    Код (Text):
    1. mov byte ptr [ebx],0
    В коде #1 все предельно ясно.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    q_q
    Вопрос в том, для какого компилятора этот кодес :)
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Clerk
    GNU assembler
     
  11. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    GAS это.
    BYTE PTR это часть синтаксиса Intel.
    По крайней мере в gcc 3.x и gas от него есть поддержка ассемблера с синтаксисом Intel.