вопрос ламера

Тема в разделе "WASM.BEGINNERS", создана пользователем K_F_S, 28 июл 2006.

  1. K_F_S

    K_F_S New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2006
    Сообщения:
    2
    Писал только на FASM.
    Поставил MASM, как там файлы компилить то? ))

    Есть hello.asm

    Делаю: cmd.exe
    C:\programs\masm32\bin\ml.exe hello.asm

    Пишет:
    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

    Assembling: hello.asm
    Microsoft (R) Incremental Linker Version 5.12.8078
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

    /z2
    "hello.obj"
    "hello.exe"
    NUL
    LINK : warning LNK4044: unrecognized option "z2"; ignored
    hello.obj : warning LNK4033: converting object format from OMF to COFF
    LINK : fatal error LNK1181: cannot open input file "hello.exe"

    Помогите ЛАМЕРУ)))
     
  2. K_F_S

    K_F_S New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2006
    Сообщения:
    2
    Все, нашел в форуме...
    c:\programs\masm32\bin\ml.exe /c /coff /Cp /Fl hello.asm
    c:\programs\masm32\bin\link.exe /SUBSYSTEM:WINDOWS hello.obj
     
  3. AB_Celitel

    AB_Celitel New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2005
    Сообщения:
    72
    Адрес:
    Россия, г.Иваново
    K_F_S

    Опаздал чуть-чуть :)))

    C:\masm32\bin\ml /c /coff hello.asm
    C:\masm32\bin\link /subsystem:windows hello.obj hello.res
    hello.res - файл ресурсов (если есть), а если нет, то не писать его.
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    [GUI]
    *.bat

    @echo off

    SET PROJECT=1
    SET RESOURCE=rsrc
    SET PATH=Bin

    %PATH%\ml.exe /c /coff /Cp /Fl /Sa /Sc %PROJECT%.asm
    %PATH%\link.exe /subsystem:windows /opt:REF /map %PROJECT%.obj %RESOURCE%.res

    if exist %PROJECT%.obj del %PROJECT%.obj
     
  5. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    вопрос тотже не получается с hello, я видел много вариантов
    вот один из них
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4. sum DW ?
    5. .code
    6. main proc
    7.  
    8. mov ax, 5
    9. add ax, 10
    10. add ax, 15
    11. mov sum, ax
    12. mov ax, 4c00h
    13. int 21h
    14. main endp
    15. end main
    выполняю на masm32 version 9.0 так как писали выше
    но .exe не могу получить идут ошибки
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    all_an
    Выше в этом топики примеры 32-битного экзешника, т.е. PE32, а у Вас 16-битный код.
     
  7. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    Как с помощью masm32 version 9.0 получить .exe файл?
    вот код программы и мои дествия
    Код (Text):
    1. TITLE Hello World Program (hello.asm)
    2. .MODEL small
    3. .STACK 100h
    4. .DATA
    5. message DB "Hello, world!", 0dh,0ah, '$'
    6. .CODE
    7. main PROC
    8. MOV AX, @data
    9. MOV DS, AX
    10. MOV AH, 9
    11. MOV DX, offset message
    12. INT 21h
    13. MOV AX, 4C00h
    14. INT 21h
    15. main ENDP
    16. END main
    получаю объектный файл, т.к. 16 bit то использую /c c ml
    Код (Text):
    1. Microsoft Windows XP [Версия 5.1.2600]
    2. (С) Корпорация Майкрософт, 1985-2001.
    3.  
    4. C:\masm32\pr30.07.06>..\bin\ml /c hello.asm
    5. Microsoft (R) Macro Assembler Version 6.14.8444
    6. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    7.  
    8.  Assembling: hello.asm
    9.  
    10. C:\masm32\pr30.07.06>
    файл hello.obj получается, следующий шаг два варианта
    Код (Text):
    1. Microsoft Windows XP [Версия 5.1.2600]
    2. (С) Корпорация Майкрософт, 1985-2001.
    3.  
    4. C:\masm32\pr30.07.06>..\bin\ml /c hello.asm
    5. Microsoft (R) Macro Assembler Version 6.14.8444
    6. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    7.  
    8.  Assembling: hello.asm
    9.  
    10. C:\masm32\pr30.07.06>..\bin\Link /SUBSYTEM:WINDOWS hello.obj
    11. Microsoft (R) Incremental Linker Version 5.12.8078
    12. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    13.  
    14. LINK : warning LNK4044: unrecognized option "SUBSYTEM:WINDOWS"; ignored
    15. LINK : error : Segment reference in fixup record
    16. hello.obj : fatal error LNK1123: failure during conversion to COFF: file invalid
    17.  or corrupt
    18.  
    19. C:\masm32\pr30.07.06>..\bin\Link /co hello.obj
    20. Microsoft (R) Incremental Linker Version 5.12.8078
    21. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    22.  
    23. LINK : warning LNK4044: unrecognized option "co"; ignored
    24. LINK : error : Segment reference in fixup record
    25. hello.obj : fatal error LNK1123: failure during conversion to COFF: file invalid
    26.  or corrupt
    27.  
    28. C:\masm32\pr30.07.06>
    не могу получить .ехе. как нужно сделать?
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    all_an
    Повеселил душу... :)
    По порядку. Ты используешь
    что подразумевает результатом 16bit exe'шник (не про размер файла идёт речь;). Итак, чтобы получить этот самый 16-битный (родной ДОСовский исполняемый файл) необходимо использовать 16 битный линкер (link16.exe), коего ты в MASM32 не найдёшь - потому что 32!!! это, отнюдь не 16...
    Если что, подправишь батничек...
     
  9. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    Спасибо за батник, скачал и поместил в отд. папку
    но результат не получил
    Код (Text):
    1. Microsoft Windows XP [Версия 5.1.2600]
    2. (С) Корпорация Майкрософт, 1985-2001.
    3.  
    4. C:\dos\16>dir
    5.  Том в устройстве C имеет метку SY1
    6.  Серийный номер тома: 30A9-A4AC
    7.  
    8.  Содержимое папки C:\dos\16
    9.  
    10. 30.07.2006  16:39    <DIR>          .
    11. 30.07.2006  16:39    <DIR>          ..
    12. 27.07.2004  19:38               184 DOS MZ EXE.bat
    13. 30.07.2006  05:37               247 hello.asm
    14. 26.11.1993  19:21           122 371 LINK16.EXE
    15. 30.07.2006  16:12               247 tt.asm
    16.                4 файлов        123 049 байт
    17.                2 папок   5 354 024 960 байт свободно
    18.  
    19. C:\dos\16>link16 /c hello.asm
    20.  
    21. Microsoft (R) Segmented-Executable Linker  Version 5.03
    22. Copyright (C) Microsoft Corp 1984-1989.  All rights reserved.
    23.  
    24. LINK : fatal error L1001: C : option name ambiguous
    25.  
    26. C:\dos\16>
    я не понимаю и что-то не то делаю?????
    В нете нашел masm 6.12, установил. все получилось
    Код (Text):
    1. Microsoft Windows XP [Версия 5.1.2600]
    2. (С) Корпорация Майкрософт, 1985-2001.
    3.  
    4. C:\MASM611\pr30.07.06>..\bin\ml /c hello.asm
    5. Microsoft (R) Macro Assembler Version 6.11
    6. Copyright (C) Microsoft Corp 1981-1993.  All rights reserved.
    7.  
    8.  Assembling: hello.asm
    9.  
    10. C:\MASM611\pr30.07.06>..\bin\link /co hello.obj
    11.  
    12. Microsoft (R) Segmented Executable Linker  Version 5.31.009 Jul 13 1992
    13. Copyright (C) Microsoft Corp 1984-1992.  All rights reserved.
    14.  
    15. Run File [hello.exe]: hello.exe
    16. List File [nul.map]: r.map
    17. Libraries [.lib]:
    18. Definitions File [nul.def]: nul.def
    19. Microsoft Debugging Information Compactor  Version 4.01.00
    20. Copyright(c) 1987-1992 Microsoft Corporation
    21.  
    22. Line/Address size   =
    23. Public symbol size  =       16
    24. Initial symbol size =
    25. Final symbol size   =
    26. Global symbol size  =        0
    27. Initial type size   =
    28. Compacted type size =        8
    29.  
    30. C:\MASM611\PR3007~1.06>hello.exe
    31. Hello OS DOS!
    32.  
    33. C:\MASM611\PR3007~1.06>
    Только вот мое желание и на masm32 - это делать. Везде пишут
    что старое поддерживает.
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Не до такой же степени старое. К примеру, 32-битный линкер поддерживает либы в OMF формате. С другой стороны, link.exe - далеко не единственный линкер и не самый универсальный, AFAIK.
     
  11. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    Я перешел на masm 6.12. Все стало получаться. Сейчас уперся в сложне данные действительные числа.
    Код (Text):
    1. .286
    2. .model tiny
    3.  
    4. .data
    5. s equ 2.1E+2
    6. t equ 3.6E+2
    7.  
    8. .code
    9. mov ax, s
    10. mov bx, ax
    11. mov ax, t
    12. adc ax, bx
    13. ;mov [s], ax
    14. end
    компилировал masm611
    Код (Text):
    1. Microsoft Windows XP [Версия 5.1.2600]
    2. (С) Корпорация Майкрософт, 1985-2001.
    3.  
    4. C:\MASM611\pr4_0806>..\bin\ml /c w4.asm
    5. Microsoft (R) Macro Assembler Version 6.11
    6. Copyright (C) Microsoft Corp 1981-1993.  All rights reserved.
    7.  
    8.  Assembling: w4.asm
    9. w4.asm(9): error A2050: real or BCD number not allowed
    10. w4.asm(11): error A2050: real or BCD number not allowed
    11.  
    12. C:\MASM611\pr4_0806>
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    all_an
    > mov ax,2.1E+2
    Так нельзя в масме. Зато можно в фасме :)

    > adc ax,bx
    А это вообще нонсенс. Вещественные числа нужно складывать через fpu.
     
  13. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    Понятно что нельзя, но как-то можно?
    Вопрос: как записать mov ax, 2.1E+2, чтобы работало?

    Да, разобрался с батником подредактировал для папки, где
    *.asm. Архив пользуется популярностью(10 скачиваний, только остальные молчат как у них идет работа). код файла получился
    Код (Text):
    1. @echo   off
    2.  
    3. SET PROJECT=hello
    4. SET PATH=..\BIN
    5.  
    6. %PATH%\ML.EXE /c  /Cp /Fl /Sa %PROJECT%.asm
    7. %PATH%\link.exe     %PROJECT%.obj,,,,,
     
  14. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В 32 бит можно так:
    mov eax,43520000h
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    all_an
    Никак, т.к.
    1) в асме запись 2.1E+2 означает вещественное число
    2) вещественные и целые числа имеют совершенно разные двоичные представления
    3) минимальный размер вещественного числа - 4 байта (single precision), поэтому в двухбайтный АХ в принципе никакое вещественное число записать нельзя
    В 32-битные регистры записывать синглы\флоаты можно, но складывать их как целые не имеет никакого смысла
    Код (Text):
    1. .data
    2.   s dd 2.1E+2  ;или s REAL4 2.1E+2 - вещественные в формате single - 4 байта
    3.   t dd 3.6E+2
    4. .code
    5.   mov eax,s
    6.   mov ebx,t
    7.   add eax,ebx ;"сложить" можно, но в результате получится аброкадабра != 5.7Е+2
    8.   ;чтобы получить 5.7Е+2 нужно складывть на FPU
    9.   fld s    ;загрузили s
    10.   fadd t  ;сложили с t
    11.   fstp s  ;выгрузили в s и очистили регистр FPU
     
  16. all_an

    all_an New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2006
    Сообщения:
    10
    Спасибо за разяснения leo.
    Этим буду заниматься, когда перейду на 32.