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

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

  1. TruPAC

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

    Joined:
    20 Dec 2007
    Messages:
    29
    Likes Received:
    6
    Reputations:
    0
    так ничего и не удалось разобрать самому. могу разве что сослаться но постоянную смену редакторов ресурсов каждым из которых двигала мания величия в виде вставки своих копирайтов в коментах и юзанием хз каких библиотек. вообщем на данный момент остановился на ResEd. поскольку у мене не получилось самому то остается один очень надежный вариант. ткните меня носом в правильны ответ.

    вот полный текст и программы и ресурсов.

    Code:
       .386
       .model flat,stdcall
       option casemap:none
    
       DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
    
       include \masm32\include\windows.inc
       include \masm32\include\user32.inc
       include \masm32\include\kernel32.inc
       includelib \masm32\lib\user32.lib
       includelib \masm32\lib\kernel32.lib
    
       .data
       ;DlgName db "MyDialog",0
       AppName db "First",0
          
    
       .data?
       hInstance HINSTANCE ?
       
       .const
       IDM_EXIT        equ 32003
       IDD_DLG2        equ  1000
       IDC_RED1                equ  1001
    
    
       .code
    
       start:
    
           invoke GetModuleHandle, NULL
           mov    hInstance,eax
           invoke DialogBoxParam, hInstance, IDD_DLG2, NULL, ADDR DlgProc, NULL
           invoke ExitProcess,eax
    
       DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
           .IF uMsg==WM_INITDIALOG
               invoke GetDlgItem, hWnd, IDC_RED1
               invoke SetFocus,eax
           .ELSEIF uMsg==WM_CLOSE
               invoke SendMessage, hWnd, WM_COMMAND, IDM_EXIT, 0
           .ENDIF
           mov eax,TRUE
    
           ret
    
       DlgProc endp
    
       end start
    
    Code:
    #define IDD_DLG2 1000
    #define IDC_RED1 1001
    IDD_DLG2 DIALOGEX 5,5,65,13
    CAPTION "IDD_DLG"
    FONT 10,"MS Sans Serif",400,0,204
    STYLE 0x10CF0000
    BEGIN
      CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63,11,0x00000200
    END
    
     
  2. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Сразу приношу извенения я только начал изучать языки програмирования не считая скриптов. Решил начать с асемблера.

    Посоветте с чего мне начать? где скачать програмное обеспечение для написания программ на асемблере?

    я скачал с http://softok.org/coding/debug/13111prog.html Turbo Assembler Shell v.3.00
    пробывал запустить простенький код
    Code:
    
    .data
    msgtext db "Hello, WORLD", 0h
    msgcap db "It is ASM!!! =)", 0h
    
    .code
    start:
    INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0
    end start
    
    конечно же неполучилось в ошибке пишут
    Оut-file not found

    какого выходного файла нету я понять немогу. вроде перед запуском проект сохранил.

    посоветте пожалусто чтонибть для совсем зелёных. заранее благодарен
     
  3. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    ZET36
    Оконная процедура должна возвращать НОЛЬ. + по событию WM_CLOSE закрываем диалог.

    CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63,11,0x00000200 - тут что-то неправильно!!!

    Для примера попробуй заменить на
    CONTROL "IDC_RED",IDC_RED1,"edit",0,1,1,63,11


    Софт для асма бери на WWW.WASM.RU -> предпочтительно MASM or FASM.
     
    #203 GlOFF, 11 Feb 2008
    Last edited: 11 Feb 2008
    2 people like this.
  4. TruPAC

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

    Joined:
    20 Dec 2007
    Messages:
    29
    Likes Received:
    6
    Reputations:
    0
    ZET36
    думаю для совсем зеленых подойдет вот этот вариант. если что то непонятно могу откоментировать. вот тут прямая ссылка на MASM. в нем я компилировал чего и вам желаю. http://wasm.ru/baixado.php?mode=tool&id=48

    Code:
     
        .386
        .model flat,stdcall
        option casemap:none
    
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\windows.inc
    
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
    
    .data
        msgtext db "Hello, WORLD", 0h
        msgcap db "It is ASM!!! =)", 0h
    
    .code
        start:
    
        invoke MessageBox, NULL, addr msgtext, addr msgcap, MB_OK
        invoke ExitProcess, NULL
    
        end start
    
    GlOFF
    хм.. где же в листинге вы нашли процедуру окна? я наконецто по лазил под отладчиком и наткнулся на то что при вызове диалоговой процедуры сначала ищется ресурс, если он не находится, то и не происходит вызова DialogBoxParam что и происходит у меня. вообщем посмотрел у Iczelion'a и нашел что у него имя ресурса задается ASCI-zero строкой. вообщем это внесло еще больше сумятицы в то что вы сказали что так нельзя. вы не могли бы довести проект до рабочего состояния, если вас не затруднит?
     
  5. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    TruPAC Вот так попробуй компильнуть ->
    PHP:
    .386
       
    .model flat,stdcall
       option casemap
    :none

       DlgProc proto 
    :DWORD,:DWORD,:DWORD,:DWORD

       
    include \masm32\include\windows.inc
       
    include \masm32\include\user32.inc
       
    include \masm32\include\kernel32.inc
       includelib 
    \masm32\lib\user32.lib
       includelib 
    \masm32\lib\kernel32.lib

       
    .data
       AppName db 
    "First",0
          

       
    .data?
       
    hInstance HINSTANCE ?
       
       .const
       
    IDM_EXIT        equ 32003
       IDD_DLG2        equ  1000
       IDC_RED1                equ  1001


       
    .code

       start
    :

           
    invoke GetModuleHandleNULL
           mov    hInstance
    ,eax
           invoke DialogBoxParam
    hInstanceIDD_DLG2NULLADDR DlgProcNULL
           invoke ExitProcess
    ,eax

    DlgProc proc hWnd
    :HWNDuMsg:UINTwParam:WPARAMlParam:LPARAM
    .IF uMsg==WM_INITDIALOG
    invoke GetDlgItem
    hWndIDC_RED1
    invoke SetFocus
    ,eax
    .ELSEIF uMsg==WM_CLOSE
    invoke EndDialog
    hWndn0
    .ENDIF
    xor 
    eaxeax
    ret

    DlgProc endp

       end start
    +

    PHP:
    #define IDD_DLG2 1000
    #define IDC_RED1 1001
    IDD_DLG2 DIALOGEX 5,5,65,13
    CAPTION 
    "IDD_DLG"
    FONT 10,"MS Sans Serif"
    STYLE 0x10CF0000
    BEGIN
      CONTROL 
    "IDC_RED",IDC_RED1,"edit",0,1,1,63,11
    END
    TruPAC DlgProc - оконная\диалоговая процедура, обслуживает сообщения приходящие к данному диалогу. Просто щас сравни листинги и найди что изменилось.
     
    1 person likes this.
  6. TruPAC

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

    Joined:
    20 Dec 2007
    Messages:
    29
    Likes Received:
    6
    Reputations:
    0
    ё маё... ну сколько ж можно... и так тоже не работает. вроде бы все нормально - проверял на чужих исходниках и все прекрасно собирается, а тут нет. у вас это точно собирается? мб ошибка не только у меня? не обижайтесь, а вдруг? вы можете приатачить файлы? я уже просто с ума схожу - 6 дней возни на стенке кашей и толку 0.

    Ps
    я всегда различал оконную и диалоговую процедуры.
     
    1 person likes this.
  7. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    TruPAC Вот мой рабочий\компилируемый вариант ->
    http://webfile.ru/1737398
     
  8. TruPAC

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

    Joined:
    20 Dec 2007
    Messages:
    29
    Likes Received:
    6
    Reputations:
    0
    GlOFF
    огромное спасибо! оказывается ошибка была в том что по какимто причинам мой линкер собирал новый вариант в папку общих документов и вместо того чтобы получить новый exe я работал со старым. сейчас я непременно посмотрю ваш вариант.
     
  9. Minimus

    Minimus New Member

    Joined:
    22 Sep 2007
    Messages:
    7
    Likes Received:
    4
    Reputations:
    0
    гуру и не гуру,дайте пожалуйста консольный пример "Hello, Wolrd" на асме,а то обыскался уже. :)
     
  10. Ky3bMu4

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

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    wasm.ru/article.php?article=1022006
     
    1 person likes this.
  11. Minimus

    Minimus New Member

    Joined:
    22 Sep 2007
    Messages:
    7
    Likes Received:
    4
    Reputations:
    0
    я до этого этот исходник компилил,но ничего не работало...оказалось дело в ключе /SUBSYSTEM:CONSOLE :) но все равно спасибо)
     
  12. Uliss

    Uliss New Member

    Joined:
    3 Mar 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    нужно написать прогу:создается файл(file1.txt) и туда из уже существуещего файла к примеру file.txt копируется текст. Написать нужно на апи используя асм. я раньше программировал на асм для контроллеров чуть-чуть, а с API познакомился совсем недавно так что не гнобите если немного чушь :)
    Code:
    .386
    .model flat, stdcall
    option casemap:none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\comdlg32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\comdlg32.lib
    
    
    .const
    
      MEMSIZE equ 65535
    
    .data
     
    memor DB "d:\file.txt"
    
    file_name DB "d:\file1.txt",0
    
    .data?
    hFile HANDLE ?
    hMemory HANDLE ?
    pMemory DWORD ?
    SizeReadWrite DWORD ?
    param HANDLE ?   
    .code
    start:
               
    invoke OpenFile,ADDR memor,NULL,OF_READWRITE 
    
    mov param,eax
    
    invoke CreateFile,ADDR file_name,\
                                   GENERIC_READ or GENERIC_WRITE ,\
                                   FILE_SHARE_READ or FILE_SHARE_WRITE,\
    
       NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
                                       NULL
                           mov hFile,eax
    
    invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE
    
                           mov  hMemory,eax
    
    invoke GlobalLock,hMemory
    
                           mov  pMemory,eax
              
    invoke SendMessage,param,WM_GETTEXT,MEMSIZE-1,pMemory
    
    invoke WriteFile,hFile,pMemory,MEMSIZE,ADDR SizeReadWrite,NULL
    
                           invoke CloseHandle,hFile
                           invoke GlobalUnlock,pMemory
                           invoke GlobalFree,hMemory
    
    end start
     
    #212 Uliss, 3 Mar 2008
    Last edited by a moderator: 29 Apr 2008
  13. bons

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

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    Проще всего так:

    Code:
    .386
    .model flat, stdcall
    option casemap:none
    
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    
    .data
    
    memor DB "d:\file.txt",0
    file_name DB "d:\file1.txt",0
    
    .code
    start:
    	invoke CopyFile, offset memor, offset file_name, 1
    	invoke ExitProcess, 0
    end start
    
     
  14. e-gral

    e-gral Banned

    Joined:
    4 Mar 2008
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Не получается ассемблировать с MASM611
    При написании в ком. строку
    > ML.EXE PROG.ASM /AT

    получаю следующую ошибку:

    Assembling PROG.ASM
    fatal error A1000: cannot open file : PROG.ASM

    Так же пробовал и на TASM

    > TASM.EXE PROG.ASM
    вот что получаю

    **Fatal** Command line: Can't locate file PROG.ASM

    file PROG.ASM находится в той же папке где и ML.EXE .
    Код взял с книги Калашникова.
    Кто поможет в чём проблема?
     
  15. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    ну допустип.... path на ML и TASM прописаны.....

    а не проще прописать полные маршруты к "сырцам"?
    Code:
    ML Fatal Error A1000
    cannot open file: filename
    
    The assembler was unable to open a source, include, or output file.
    
    One of the following may be a cause: 
    
    The file does not exist. 
    The file is in use by another process. 
    The filename is not valid. 
    A read-only file with the output filename already exists. 
    The current drive is full. 
    The current directory is the root and is full. 
    The device cannot be written to. 
    The drive is not ready. 
    
     
    #215 Delimiter, 4 Mar 2008
    Last edited: 4 Mar 2008
  16. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    читаю книжку :
    "Ввод на уровне Bios:
    для непосредственного ввода с клавиатуры используют прерывание int 16h ... "

    я не совсем понял про прерывания в защищённом режиме ....возможно читать из под обычного NT ? ( если да - то можно пример кода? )
     
    #216 Jes, 4 Mar 2008
    Last edited: 4 Mar 2008
    2 people like this.
  17. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    Нет.... низя там стоят "заглушки".... книжка явно заточена по ДОС!
    ... хотя если програмка запускается как DOS приложение под NT то туда кладутся псевдопрерывания(для совместимости) указывающие на "обработчики" нестандарта. Почему псевдо??? Потому что они так же хукаются :D
     
    #217 Delimiter, 4 Mar 2008
    Last edited: 4 Mar 2008
    2 people like this.
  18. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Jes, в винде всё - только через дрова, вроде... Ни int'ы аппаратные, ни in/out... Но где-то была библиотека, которая позволяет юзать их под виндой. Если надо - посмотри в гугле, если не найдёшь - спроси - посмотрю - у меня где-то валяется...
     
    1 person likes this.
  19. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Взялся немножко Асм по ночам учить, книгу использую Пирогова В.Ю. он транслирует проги при помощи masm.exe, но в моей версии masm.exe не наблюдается, есть ml.exe и link.exe. Суть в том что листинги прог из книги, ml.exe транслирует с ошибками и собсно ничего не получается.. Как быть? Мож есть другие книги по изучению Асма под новые версии MASM-а?
    транслировал с параметрами ml /c /coff first.asm
     
  20. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Там Дос или Вин32?