Писал только на 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" Помогите ЛАМЕРУ)))
Все, нашел в форуме... c:\programs\masm32\bin\ml.exe /c /coff /Cp /Fl hello.asm c:\programs\masm32\bin\link.exe /SUBSYSTEM:WINDOWS hello.obj
K_F_S Опаздал чуть-чуть )) C:\masm32\bin\ml /c /coff hello.asm C:\masm32\bin\link /subsystem:windows hello.obj hello.res hello.res - файл ресурсов (если есть), а если нет, то не писать его.
[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
вопрос тотже не получается с hello, я видел много вариантов вот один из них Код (Text): .model small .stack 100h .data sum DW ? .code main proc mov ax, 5 add ax, 10 add ax, 15 mov sum, ax mov ax, 4c00h int 21h main endp end main выполняю на masm32 version 9.0 так как писали выше но .exe не могу получить идут ошибки
Как с помощью masm32 version 9.0 получить .exe файл? вот код программы и мои дествия Код (Text): TITLE Hello World Program (hello.asm) .MODEL small .STACK 100h .DATA message DB "Hello, world!", 0dh,0ah, '$' .CODE main PROC MOV AX, @data MOV DS, AX MOV AH, 9 MOV DX, offset message INT 21h MOV AX, 4C00h INT 21h main ENDP END main получаю объектный файл, т.к. 16 bit то использую /c c ml Код (Text): Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\masm32\pr30.07.06>..\bin\ml /c hello.asm Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: hello.asm C:\masm32\pr30.07.06> файл hello.obj получается, следующий шаг два варианта Код (Text): Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\masm32\pr30.07.06>..\bin\ml /c hello.asm Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: hello.asm C:\masm32\pr30.07.06>..\bin\Link /SUBSYTEM:WINDOWS hello.obj Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : warning LNK4044: unrecognized option "SUBSYTEM:WINDOWS"; ignored LINK : error : Segment reference in fixup record hello.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt C:\masm32\pr30.07.06>..\bin\Link /co hello.obj Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : warning LNK4044: unrecognized option "co"; ignored LINK : error : Segment reference in fixup record hello.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt C:\masm32\pr30.07.06> не могу получить .ехе. как нужно сделать?
all_an Повеселил душу... По порядку. Ты используешь что подразумевает результатом 16bit exe'шник (не про размер файла идёт речь. Итак, чтобы получить этот самый 16-битный (родной ДОСовский исполняемый файл) необходимо использовать 16 битный линкер (link16.exe), коего ты в MASM32 не найдёшь - потому что 32!!! это, отнюдь не 16... Если что, подправишь батничек...
Спасибо за батник, скачал и поместил в отд. папку но результат не получил Код (Text): Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\dos\16>dir Том в устройстве C имеет метку SY1 Серийный номер тома: 30A9-A4AC Содержимое папки C:\dos\16 30.07.2006 16:39 <DIR> . 30.07.2006 16:39 <DIR> .. 27.07.2004 19:38 184 DOS MZ EXE.bat 30.07.2006 05:37 247 hello.asm 26.11.1993 19:21 122 371 LINK16.EXE 30.07.2006 16:12 247 tt.asm 4 файлов 123 049 байт 2 папок 5 354 024 960 байт свободно C:\dos\16>link16 /c hello.asm Microsoft (R) Segmented-Executable Linker Version 5.03 Copyright (C) Microsoft Corp 1984-1989. All rights reserved. LINK : fatal error L1001: C : option name ambiguous C:\dos\16> я не понимаю и что-то не то делаю????? В нете нашел masm 6.12, установил. все получилось Код (Text): Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\MASM611\pr30.07.06>..\bin\ml /c hello.asm Microsoft (R) Macro Assembler Version 6.11 Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: hello.asm C:\MASM611\pr30.07.06>..\bin\link /co hello.obj Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights reserved. Run File [hello.exe]: hello.exe List File [nul.map]: r.map Libraries [.lib]: Definitions File [nul.def]: nul.def Microsoft Debugging Information Compactor Version 4.01.00 Copyright(c) 1987-1992 Microsoft Corporation Line/Address size = Public symbol size = 16 Initial symbol size = Final symbol size = Global symbol size = 0 Initial type size = Compacted type size = 8 C:\MASM611\PR3007~1.06>hello.exe Hello OS DOS! C:\MASM611\PR3007~1.06> Только вот мое желание и на masm32 - это делать. Везде пишут что старое поддерживает.
Не до такой же степени старое. К примеру, 32-битный линкер поддерживает либы в OMF формате. С другой стороны, link.exe - далеко не единственный линкер и не самый универсальный, AFAIK.
Я перешел на masm 6.12. Все стало получаться. Сейчас уперся в сложне данные действительные числа. Код (Text): .286 .model tiny .data s equ 2.1E+2 t equ 3.6E+2 .code mov ax, s mov bx, ax mov ax, t adc ax, bx ;mov [s], ax end компилировал masm611 Код (Text): Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\MASM611\pr4_0806>..\bin\ml /c w4.asm Microsoft (R) Macro Assembler Version 6.11 Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: w4.asm w4.asm(9): error A2050: real or BCD number not allowed w4.asm(11): error A2050: real or BCD number not allowed C:\MASM611\pr4_0806>
all_an > mov ax,2.1E+2 Так нельзя в масме. Зато можно в фасме > adc ax,bx А это вообще нонсенс. Вещественные числа нужно складывать через fpu.
Понятно что нельзя, но как-то можно? Вопрос: как записать mov ax, 2.1E+2, чтобы работало? Да, разобрался с батником подредактировал для папки, где *.asm. Архив пользуется популярностью(10 скачиваний, только остальные молчат как у них идет работа). код файла получился Код (Text): @echo off SET PROJECT=hello SET PATH=..\BIN %PATH%\ML.EXE /c /Cp /Fl /Sa %PROJECT%.asm %PATH%\link.exe %PROJECT%.obj,,,,,
all_an Никак, т.к. 1) в асме запись 2.1E+2 означает вещественное число 2) вещественные и целые числа имеют совершенно разные двоичные представления 3) минимальный размер вещественного числа - 4 байта (single precision), поэтому в двухбайтный АХ в принципе никакое вещественное число записать нельзя В 32-битные регистры записывать синглы\флоаты можно, но складывать их как целые не имеет никакого смысла Код (Text): .data s dd 2.1E+2 ;или s REAL4 2.1E+2 - вещественные в формате single - 4 байта t dd 3.6E+2 .code mov eax,s mov ebx,t add eax,ebx ;"сложить" можно, но в результате получится аброкадабра != 5.7Е+2 ;чтобы получить 5.7Е+2 нужно складывть на FPU fld s ;загрузили s fadd t ;сложили с t fstp s ;выгрузили в s и очистили регистр FPU