Странности бытия в MASM32

Тема в разделе "WASM.BEGINNERS", создана пользователем Geddricko, 21 ноя 2008.

  1. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Народ, я ещё новичок. Изучаю асм по статьям Serrqio. В одной из них он приводит листинг следующего содержания:
    ;-[блок 2]--------------------------
    CODESG segment
    assume CS:CODESG
    org 100

    ;-[блок 3]--------------------------
    MAIN proc
    xor AL,AL
    mov BH,10h
    mov CH,5
    mov CL,10h
    mov DH,10h
    mov DL,3Eh
    mov AH,6
    int 10h
    call WINDOW
    call WINDOW
    call WINDOW
    call WINDOW
    int 20h
    MAIN endp

    WINDOW proc
    ADD BH,10h
    ADD CH,1
    ADD CL,1
    SUB DH,1
    SUB DL,1
    INT 10h
    RET
    WINDOW endp

    ;-[блок 4]--------------------------
    CODESG ends

    end MAIN

    Я набрал его в МАСМ32 , он сомпилится, но выдаёт предупреждение:
    warning A4023: with /coff switch, leading underscore required for start address : MAIN
    И потом не линкуется.
    Не знаю по неопытности, что это за предупреждение, и что не так.
    Помогите, кто знает.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    попробуй масм 6.1
     
  3. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Geddricko
    замени MAIN на _MAIN и все зароботает
     
  4. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Msoft

    А где его взять?
     
  5. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    О! Спасибо большое Meduza! Всё сработало. А можно объяснить причину? Учиться-то надо.
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    это дос приложение. убери ключ /coff, a линковать все равно придется со старым линкером.

    может, эта ссылка еще живая: http://win32assembly.online.fr/files/Lnk563.exe

    - это дос саморапаковывающийся (без предупреждений в текущи каталог!) архив
     
  7. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Geddricko
    Когда masm'ом компилишь в coff, имя стартового адреса должно начинаться с подчеркивания.
    Вообще есть 3 варианта решения:
    1. как уже говорил, добавить подчеркивание к имени точки входа
    2. в начало файла можно написать ".model tiny, stdcall" (если .com, как у тебя)
    3. компилить в omf, а не в coff, т.е. при ассемблировании убрать у ml опцию "/coff"

    з.ы. а вообще, если пишешь 16-битные проги под дос, рекомендую использовать tasm вместо masm'а - геморроя меньше. (Хотя я бы использовал nasm).
     
  8. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    А как убирается эта опция в Масм32 v10 ? Я там вообще ни настоек ни строк для ввода\редактирования ключей не нашёл.
     
  9. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    ты как компилируешь и линкуешь?
     
  10. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Я через кнопку в самой среде : project->assemble или linc. Я иначе не умею.
     
  11. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Geddricko
    тогда лучше воспользуйся одним из двух первых предложенных вариантов решений
     
  12. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Теперь новая проблема. Всё нармально компилится и линцуется, но при запуске из-под Far-а вылетает и не работает. Я эту же штуку в dZebuge до этого делал - там всё работает. Не нахожу я пока общий язык с компилятором. Что с новой проблемой делать?
    И кроме того - получается всё равно .exe - файл.
     
  13. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    твой исходник должен компилироваться в .com!
     
  14. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Загружаю этот код в tasm 2.0 с ключом /t , а он мне в ответ выплёвывает дословно следующее:
    Error: cannot generate COM file: invalid initial entry point address
    И что с этим делать? Подскажите кто-нибудь!
    Что нужно чтобы COM файл получился?
     
  15. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Geddricko
    блин, только щас заметил - у тебя "org 100" написано. Надо "org 100h" ! Исправь.
     
  16. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    И учи английский :)
     
  17. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Ну наконец-то! Теперь всё заработало!
    Спасибо Meduza!
    Но подытоживая, что всё-таки надо для того, чтобы сом-файл получился?
     
  18. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Clear_Energy

    Я нормально знаю английский - я логического смысла не улавливаю. ;)
     
  19. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    - Хреновый адрес входа. Говорит очём-нибудь? Вроде org100h? :)
     
  20. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    в тасме так:
    tasm x.asm
    tlink x.obj /t /x