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

Discussion in 'WASM.BEGINNERS' started by Geddricko, Nov 21, 2008.

  1. Geddricko

    Geddricko New Member

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    попробуй масм 6.1
     
  3. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    Geddricko
    замени MAIN на _MAIN и все зароботает
     
  4. Geddricko

    Geddricko New Member

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    32
    Msoft

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

    Geddricko New Member

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    32
    О! Спасибо большое Meduza! Всё сработало. А можно объяснить причину? Учиться-то надо.
     
  6. shoo

    shoo New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2003
    Messages:
    1,537
    Location:
    Ukraine
    это дос приложение. убери ключ /coff, a линковать все равно придется со старым линкером.

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

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

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    32
    А как убирается эта опция в Масм32 v10 ? Я там вообще ни настоек ни строк для ввода\редактирования ключей не нашёл.
     
  9. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    ты как компилируешь и линкуешь?
     
  10. Geddricko

    Geddricko New Member

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    32
    Я через кнопку в самой среде : project->assemble или linc. Я иначе не умею.
     
  11. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    Geddricko
    тогда лучше воспользуйся одним из двух первых предложенных вариантов решений
     
  12. Geddricko

    Geddricko New Member

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

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    твой исходник должен компилироваться в .com!
     
  14. Geddricko

    Geddricko New Member

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

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    Geddricko
    блин, только щас заметил - у тебя "org 100" написано. Надо "org 100h" ! Исправь.
     
  16. Clear_Energy

    Clear_Energy Алексей

    Blog Posts:
    0
    Joined:
    Nov 3, 2008
    Messages:
    375
    И учи английский :)
     
  17. Geddricko

    Geddricko New Member

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

    Geddricko New Member

    Blog Posts:
    0
    Joined:
    Nov 13, 2008
    Messages:
    32
    Clear_Energy

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

    Clear_Energy Алексей

    Blog Posts:
    0
    Joined:
    Nov 3, 2008
    Messages:
    375
    - Хреновый адрес входа. Говорит очём-нибудь? Вроде org100h? :)
     
  20. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    в тасме так:
    tasm x.asm
    tlink x.obj /t /x