MASM32

Тема в разделе "WASM.BEGINNERS", создана пользователем Alexey_krasikov, 3 мар 2011.

  1. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    cseg segment
    begin:
    mov ax,cs
    mov ds,ax

    lea dx,mess
    mov ah,9
    int 21h

    mov ax,4c00h
    int 21h

    mess db 'Hello, world!$'
    cseg ends
    end begin

    пишет ошибку

    warning A4023: with /coff switch, leading underscore required for start address : begin

    что за ключ такой и как написать правильно, чтобы работало?
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Alexey_krasikov
    читаем уроки изалимона тут на сайте
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    MASM32 - не для ДОС, он для Win32.
    На Win32 Ваш Helloworld будет выглядеть примерно так:
    Код (Text):
    1. .386 ; 386 Processor Instruction Set
    2.  
    3. .model flat,stdcall ; Flat memory model and stdcall method
    4.  
    5. option casemap:none ; Case Sensitive
    6.  
    7. ;Libaries and Include files used in this project
    8.  
    9. ; Windows.inc defines alias (such as NULL and STD_OUTPUT_HANDLE in this code
    10. include \masm32\include\windows.inc
    11.  
    12. ; Functions that we use (GetStdHandle, WriteConsole, and ExitProcess)
    13. ; Listing of all available functions in kernel32.lib
    14. include \masm32\include\kernel32.inc
    15. ; Actuall byte code available of the functions
    16. includelib \masm32\lib\kernel32.lib  
    17.  
    18. .data
    19. ; Labels that with the allocated data (in this case Hello World!...) that are aliases to memory.
    20. output db "Hello World!", 0ah, 0h; This String Hello World! and then a the newline character \n (0ah) and then the null character 0h
    21.  
    22. .code
    23. start:
    24.  
    25. ; --------------------------------------------------------------------------------------------------------------------------------------
    26. ; Retrieves that handle to the output console
    27. ;
    28. ; ====Arguments===
    29. ;
    30. ; STD_OUTPUT_HANDLE - alias for -11 and indicates that we want the handle to
    31. ;                     write to console output
    32. ;
    33. invoke GetStdHandle, STD_OUTPUT_HANDLE
    34. ; --------------------------------------------------------------------------------------------------------------------------------------
    35.  
    36. ; --------------------------------------------------------------------------------------------------------------------------------------
    37. ; Writes the text in output (.data section) to the console
    38. ;
    39. ; ====Arguments===
    40. ;
    41. ; eax - the handle to the console buffer
    42. ;
    43. ; addr output - pass by reference the text of output (Hello World!)
    44. ;
    45. ; sizeof output - the size of the string so that the WriteConsole knows when to
    46. ;                 stop (doesn't support NULL terminated strings I guess);
    47. ;
    48. ; ebx - secondary "return" value that contains the number of bytes written (eax
    49. ;       is used for an error code)
    50. ;
    51. ; NULL - this is reserved and MSDN says just to pass NULL
    52. ;
    53. ; MSDN Link: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx
    54. ;
    55. invoke WriteConsole, eax, addr output, sizeof output, ebx, NULL
    56. ; --------------------------------------------------------------------------------------------------------------------------------------
    57.  
    58. ; --------------------------------------------------------------------------------------------------------------------------------------
    59. ; Exits the program with return code 0 (default one that usually is used to
    60. ; indicate that the program did not error
    61. ;
    62. ; ====Arguments===
    63. ;
    64. ; 0 - the exit code
    65. ;
    66. ; MSDN Link: http://msdn.microsoft.com/en-us/library/ms682658(VS.85).aspx
    67. ;
    68. invoke ExitProcess, 0
    69. ; --------------------------------------------------------------------------------------------------------------------------------------
    70.  
    71. end start
     
  4. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    А как мне именно под дос из него написать?
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    По моему это клерк :derisive:
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Никак, для этого есть MASM 6.11, или как его там.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    это Клерк из прошлого...
     
  8. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    Жми ссылку http://www.4shared.com/get/VU75K7M0/Link16.html;jsessionid=C1B2314D13E8B8BBC6617A7EC401E70F.dc209 и качай архив. Распакуй например в \masm32\bin\link16

    После этого по Зубкову создаешь asm-файл.

    Для com-файлов

    Код (Text):
    1. ; hello-1.asm
    2. ; Выводит на экран сообщение "Hello World!" и завершается
    3.         .model     tiny              ; модель памяти, используемая для СОМ
    4.         .code                        ; начало сегмента кода
    5.         org        100h              ; начальное значение счетчика - 100h
    6. start:  mov        ah,9              ; номер функции DOS - в АН
    7.         mov        dx,offset message ; адрес строки - в DX
    8.         int        21h               ; вызов системной функции DOS
    9.         ret                          ; завершение СОМ-программы
    10. message db         "Hello World!",0Dh,0Ah,'$' ; строка для вывода
    11.         end        start             ; конец программы
    и билдишь его:

    1. ml /c hello-1.asm
    2. link16 hello-1.obj,,NUL,,,

    Для exe-файлов

    Код (Text):
    1. ; hello-2.asm
    2. ; Выводит на экран сообщение "Hello World!" и завершается
    3.         .model     small             ; модель памяти, используемая для ЕХЕ
    4.         .stack     100h              ; сегмент стека размером в 256 байт
    5.         .code
    6. start:  mov        ax,DGROUP         ; сегментный адрес строки message
    7.         mov        ds,ax             ; помещается в DS
    8.         mov        dx,offset message
    9.         mov        ah,9
    10.         int        21h               ; функция DOS "вывод строки"
    11.         mov        ax,4C00h
    12.         int        21h               ; функция DOS "завершить программу"
    13.         .data
    14. message db         "Hello World!",0Dh,0Ah,'$'
    15.         end        start
    и билдишь его

    1. ml /с hello-2.asm
    2. link16 hello-2.obj
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Alexey_krasikov
    Читайте Iczeliona http://wasm.ru/publist.php?list=1 По Масму, имхо, лучше и понятней инфы нет.

    Извините за оффтоп, но Клерк не любит дос.
     
  10. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    в папке уже есть линковщик link16 и после распаковки туда всей этой хрени с заменой пакет масм вообще перестает функциклировать. не выход
     
  11. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    Нужно какое-то общее решение для создания 16-разрядных досовских файлов из пакета не прибегая к сложностям. что-то прописать, мож..
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Alexey_krasikov
    скачайте старый линкер к пакету masm32 и пользуйтесь им для создания дос прог
     
  13. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    спасибо за совет, конечно, но на этот случай у меня есть пакет masm 6.14, в котором я и писал раньше под ДОС. Хотелось бы от него избавиться и писать все в одном месте, дабы не засорять жесткий, флешки и себе мозги. ;)
     
  14. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    Меня интересует именно стандартный редактор masm32. и правильный способ его использования под ДОС
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Такого способа не существует. ДОС изначально 16 битная OS. Новый masm32 не просто так назван "32". Задумайтесь над этим.
     
  16. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    обычно во всех программах идет обратная совместимость. иожет и в масме есть. тем более, что 16-разрядный линковщик в его папке bin есть. только он почему-то не линкует
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Alexey_krasikov
    Чеж у вас тогда не работает? Ищите корень проблемы в ruki.sys. Специально проверил.
     
  18. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    Да, действительно работает. только линкер попросил стек нарисовать. после появления оного в исходнике появился и exe
     
  19. Alexey_krasikov

    Alexey_krasikov New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    38
    хотя в моем старом пакете масма и без стека компилировался
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Alexey_krasikov
    Учите матчасть.