Эх, похоже, на этом форуме из серьезных и ответственных людей - только я один. Никто не поможет с батниками для 16 бит. MASM кода? Нужны release и debug версии. Для 16 бит. MASM кода такое же, вроде, возможно? ( ml ; link16 ) Код (ASM): ;============================ MASM ============================ ;============================================================== .model tiny CSEG segment assume CS:CSEG org 7c00h start: cli xor ax,ax mov ds,ax mov es,ax mov ss,ax mov sp,07C00h sti mov al, 02h mov ah, 00h int 10h call GetCursorPos mov bp, offset msg mov cx, 15 call print add dh,1 call SetCursorPos mov bp, offset Con mov cx, 23 call print mov dx,1701h call SetCursorPos mov bp,offset Off mov cx,30 call print mov bp, offset Copyright mov cx,30 add dh,01h call SetCursorPos call print call Char_in cmp al,'o' jz Turn_Off cmp al,'r' jz Restart jmp $ ;=================================================================================================== print: mov bl,04h mov ax,1301h int 10h ret ;---------------------------------- GetCursorPos: mov ah,3h xor bh,bh int 10h ret ;---------------------------------- SetCursorPos: mov ah,2h xor bh,bh int 10h ret ;---------------------------------- Char_in: mov ah,10h int 16h ret ;---------------------------------- Turn_Off: mov ax,5301h sub bx,bx int 15h jb stop mov ax,530eh sub bx,bx int 15h jb stop mov ax,5307h mov bx,0001h mov cx,0003h int 15h stop: ret Restart: jmp dword ptr reboot ;===================================================================== msg db 'Hello All...',0 Off db 'r --restart o --turn off',0 Copyright db 'Copyright ',1,' abcd1234, 2020',0 Con db 'Press Enter to Continue',0 reboot dd 0ffff0000h ;---------------------------------- codeend: db 510-(codeend-start) dup (0) db 055h,0AAh CSEG ends end start
extravert, что вы хотите собрать? СОМ? ЕХЕ? Код (Text): cls set filename=%1 set masm_path= путь к твоему каталогу if exist %filename%.exe del %filename%.exe if exist %filename%.com del %filename%.com . . . . :masmdoscom %masm_path%\bin\ml /AT /c %filename%.asm %masm_path%\bin\link16 /T %filename%.obj,,,,, goto :m1 . . . . :masmdosexe %masm_path%\bin\ml /c %filename%.asm %masm_path%\bin\link16 %filename%.obj,,,,, :m1 if exist %filename%.map del %filename%.map if exist %filename%.obj del %filename%.obj exit FAQ для раздела Assembler, MASM, TASM → описание ключей ml.exe Компиляция файлов .asm с помощью компилятора ml.exe Дневники чайника. Подробное описание ml.exe (до версии 7.10) информацию по опциям компилятора/линкера можно получить самому, если в каталоге, где находится ml.exe набрать в командной строке ml.exe /? > 1.txt содержимое файла 1.txt ML [ /options ] filelist [ /link linkoptions ]/AT Enable tiny model (.COM file) /nologo Suppress copyright message/Bl<linker> Use alternate linker /Sa Maximize source listing/c Assemble without linking /Sc Generate timings in listing/Cp Preserve case of user identifiers /Sf Generate first pass listing/Cu Map all identifiers to upper case /Sl<width> Set line width/Cx Preserve case in publics, externs /Sn Suppress symbol-table listing/coff generate COFF format object file /Sp<length> Set page length/D<name>[=text] Define text macro /Ss<string> Set subtitle/EP Output preprocessed listing to stdout /St<string> Set title/F <hex> Set stack size (bytes) /Sx List false conditionals/Fe<file> Name executable /Ta<file> Assemble non-.ASM file/Fl[file] Generate listing /w Same as /W0 /WX/Fm[file] Generate map /WX Treat warnings as errors/Fo<file> Name object file /W<number> Set warning level/FPi Generate 80x87 emulator encoding /X Ignore INCLUDE environment path/Fr[file] Generate limited browser info /Zd Add line number debug info/FR[file] Generate full browser info /Zf Make all symbols public/G<c|d|z> Use Pascal, C, or Stdcall calls /Zi Add symbolic debug info/H<number> Set max external name length /Zm Enable MASM 5.10 compatibility/I<name> Add include path /Zp[n] Set structure alignment/link <linker options and libraries> /Zs Perform syntax check only а дальше вставляешь текст в гугл-переводчик и разбираешься с тем, что тебе перевела автоматика
Mikl___, спасибо. На всякий случай, лучше если будет и то, и другое. А образцы в батнике, это же релизные версии не отладочные? Вот какая инфа есть у меня: Батник на 32х битную debug версию файла (ключ /debug расположен в линковщике (LINK) !!! ) https://ibb.co/V2fHgFM Файл ML https://ibb.co/yFC9mc3 Файл LINK https://ibb.co/j4rKxFs Файл LINK16 https://ibb.co/6FGS9P2 Внимание тупой вопрос: из каких опций составить батник, чтобы получить 16 битные отладочные версии файлов СОМ и ЕХЕ? В 16 битном линковщике (LINK16) есть опция /CODEVIEW, может ее нужно использовать? В общем, немного запутался.
extravert, так пока сам не сделаешь не поймешь СОМ %masm_path%\bin\ml /AT /c /Zi %filename%.asm %masm_path%\bin\link16 /T /codeview %filename%.obj,,,,, ЕХЕ %masm_path%\bin\ml /c /Zi %filename%.asm %masm_path%\bin\link /debug /debugtype:cv %filename%.obj,,,,,
Mikl___, еще раз спасибо! Теперь, вроде, должен быть порядок, т.к. присутствует ключ /debug. Буду пробовать. Интересно почему у меня в инфе по link16 не был показан ключ /debug? Может гранаты не той системы (как недавно писал в комментариях не буду говорить кто ) ?
extravert, а для чего отладочные символы? обычно программы короткие и достаточно комментариев в asm-файле
или как обычно - невнимательность. А так же нежелание разобраться самим. Код (Text): masm32\bin>link.exe Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. usage: LINK [options] [files] [@commandfile] options: /ALIGN:# /BASE:{address|@filename,key} /COMMENT:comment /DEBUG /DEBUGTYPE:{CV|COFF} /DEF:filename /DEFAULTLIB:library /DLL /DRIVER[:{UPONLY|WDM}] /ENTRY:symbol /EXETYPE:DYNAMIC /EXPORT:symbol /FIXED[:NO] /FORCE[:{MULTIPLE|UNRESOLVED}] /GPSIZE:# /HEAP:reserve[,commit] /IMPLIB:filename /INCLUDE:symbol /INCREMENTAL:{YES|NO} /LARGEADDRESSAWARE[:NO] /LIBPATH:dir /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4} /MAP[:filename] /MAPINFO:{EXPORTS|FIXUPS|LINES} /MERGE:from=to /NODEFAULTLIB[:library] /NOENTRY /NOLOGO /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98} /ORDER:@filename /OUT:filename /PDB:{filename|NONE} /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]} /PROFILE /RELEASE /SECTION:name,[E][R][W][S][D][K][L][P][X] /STACK:reserve[,commit] /STUB:filename /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]] /SWAPRUN:{CD|NET} /VERBOSE[:LIB] /VERSION:#[.#] /VXD /WARN[:warninglevel] /WINDOWSCE:{CONVERT|EMULATION} /WS:AGGRESSIVE Mikl___, Да видимо он хочешь в IDA видеть символы своих сорцов.
Mikl___, да на всякий случай на перспективу. Если бы дело было только в этих коротких программах - я бы, скорее всего, не заморачивался. У меня были пара случаев, когда я разбирался в чужом MASM коде (32х битном), так с отладочными версиями было проще разбираться. Тут на форуме проскакивала ссылка на GlukOS, может там пригодится отладочная версия, если осмелюсь замахнуться на ее изучение в учебных целях. Не знаю, может когда-нибудь тоже приду к выводу, что отладочные версии для ассемблерного кода не особо и нужны. Когда будет опыта побольше. ) --- Сообщение объединено, 18 мар 2020 --- Кстати к вам это тоже относится. Вы версии линкеров мою и вашу сравните. Следовательно мне нужна, видимо, будет еще и другая версия линкера. Ну, а кто обещал хорошей жизни?
extravert, давайте, так, вам советуют, а вы не хамите . Ваше обучение целиком в ваших руках, пробуйте, не получается, читаете документацию и пробуете снова. Как-то так...
P.S. Извиняюсь, поторопился с выводами. Там у вас вообще в примере 32 битный линкер, а разговор шел про 16 битный код.
extravert, link для создания и 16-разрядных и 32-разрядных программ, всё зависит от ключей, а вот СОМ он уже собирать не может, тут нужны более старые версии или NASM, FASM
extravert, проехали судя по ключу /DEBUGTYPE:{CV|COFF} тут еще и от дебаггера зависит, для CODEVIEW одно, для дебаггера, который работает с файлами типа COFF другое, тут пробовать нужно, экспериментировать, или в инете искать информацию
Странно , что вы здесь делаете выводы уже после того, как вам показали пример вывода . Сразу не додуматься было , что у микла видимо "другая версия линкера". Так нет, обязательно нужно сказать, что я не такая, я жду трамвая у меня нет таких опций.
extravert, в интернете пишут ml.exe /Zi Создать полную отладочную информацию. Используется на этапе отладки программы. Транслятор включает в объектный файл всю отладочную информацию, из которой link.exe (с ключом /DEBUG) сформирует отладочный pdb-файл (program database) и свяжет его с исполняемым модулем. С таким файлом в отладчике можно будет видеть исходник и имена функций, переменных, меток и так далее /Zf Сделать доступными только идентификаторы. Используется для обеспечения сторонних программистов отладочной информацией (например для SDK). Транслятор включает в объектный файл отладочную информацию об идентификаторах, из которой link.exe сформирует отладочный pdb-файл и свяжет его с исполняемым модулем. С таким pdb-файлом в отладчике можно будет видеть имена функций, переменных, меток, но не исходник /Zd В отладочной информации будут только номера строк исходника Используется для совместимости со старыми отладчиками link.exe /DEBUG Создает отладочную информацию для ЕХЕ- и DLL-файлов. Отладочная информация помещается в pdb-файл. /DEBUGTYPE:{CV|COFF|BOTH} CV — отладочная информация в формате Microsoft, COFF — отладочная информация в формате COFF (Common Object File Format), BOTH — создаются оба вида отладочной информации. /PDB: {filename|NONE} Определить имя файла, содержащего информацию для отладки. /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]} Определяет тип PDВ-файла.
Mikl___, огромное вам спасибо за информацию и не сбрасывайте пожалуйста со счетов, того факта, что вы этим занимаетесь, скорее всего, не десять и даже, наверное, не пятнадцать лет. TermoSINteZ, Mikl___, извиняюсь за занудство, но у меня к вам такой вопрос: я могу еще раз обратиться за помощью на форум или мне уже вынесен вердикт тупого, невнимательного и нежелающего разбираться во всем самому? //тут был злой модератор и поскипал лишнее, во избежании флуда.
Mikl___, не то, чтобы я хочу поумничать, а так сказать, ради торжества относительной истины. link - для создания 32-битных файлов, а link16 - для создания 16-битных файлов. Ну, или ткните меня носом, в пример создания link'ом - 16-битного файла (под файлами я подразумеваю exe и dll).