Прошу помощи в MASM для 16 бит

Тема в разделе "WASM.BEGINNERS", создана пользователем GRAFik, 17 мар 2020.

  1. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Эх, похоже, на этом форуме из серьезных и ответственных людей - только я один. :)

    Никто не поможет с батниками для 16 бит. MASM кода? Нужны release и debug версии.
    Для 16 бит. MASM кода такое же, вроде, возможно? ( ml ; link16 )
    Код (ASM):
    1. ;============================ MASM ============================
    2. ;==============================================================
    3. .model tiny
    4. CSEG segment
    5. assume CS:CSEG
    6. org 7c00h  
    7.            
    8. start:
    9.         cli
    10.         xor ax,ax  
    11.         mov ds,ax
    12.         mov es,ax  
    13.         mov ss,ax  
    14.         mov sp,07C00h  
    15.         sti
    16.        
    17.        
    18.         mov al, 02h
    19.         mov ah, 00h
    20.         int 10h
    21.        
    22.         call GetCursorPos  
    23.                                
    24.         mov bp, offset msg          
    25.         mov cx, 15
    26.         call print                
    27.        
    28.         add dh,1  
    29.         call SetCursorPos
    30.         mov bp, offset Con          
    31.         mov cx, 23
    32.         call print
    33.        
    34.         mov dx,1701h
    35.         call SetCursorPos
    36.         mov bp,offset Off
    37.         mov cx,30
    38.         call print
    39.        
    40.         mov bp, offset Copyright
    41.         mov cx,30
    42.         add dh,01h
    43.         call SetCursorPos
    44.         call print
    45.                
    46.         call Char_in
    47.                
    48.         cmp al,'o'
    49.         jz Turn_Off
    50.         cmp al,'r'
    51.         jz Restart
    52.        
    53.         jmp $
    54.        
    55. ;===================================================================================================
    56.   print:                            
    57.         mov bl,04h                
    58.         mov ax,1301h
    59.         int 10h
    60.         ret
    61.         ;----------------------------------
    62.   GetCursorPos:
    63.                        
    64.         mov ah,3h
    65.         xor bh,bh
    66.         int 10h
    67.         ret
    68.         ;----------------------------------
    69.   SetCursorPos:      
    70.         mov ah,2h
    71.         xor bh,bh
    72.         int 10h
    73.         ret
    74.       ;----------------------------------
    75.   Char_in:            
    76.          mov ah,10h
    77.          int 16h
    78.          ret
    79.         ;----------------------------------
    80.   Turn_Off:            
    81.         mov ax,5301h
    82.         sub bx,bx
    83.         int 15h
    84.         jb stop
    85.         mov ax,530eh
    86.         sub bx,bx
    87.         int 15h
    88.         jb stop
    89.         mov ax,5307h
    90.         mov bx,0001h
    91.         mov cx,0003h
    92.         int 15h
    93.    stop:
    94.         ret
    95.   Restart:
    96.         jmp dword ptr reboot
    97.            
    98.         ;=====================================================================
    99.         msg db 'Hello All...',0    
    100.         Off db   'r --restart       o --turn off',0
    101.         Copyright db 'Copyright ',1,' abcd1234, 2020',0
    102.         Con db 'Press Enter to Continue',0
    103.        
    104.         reboot dd 0ffff0000h
    105.          
    106.     ;----------------------------------
    107. codeend:
    108. db 510-(codeend-start) dup (0)
    109. db 055h,0AAh
    110. CSEG ends
    111. end start
    112.  
    113.  
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    extravert,
    что вы хотите собрать? СОМ? ЕХЕ?
    Код (Text):
    1. cls
    2. set filename=%1
    3. set masm_path= путь к твоему каталогу
    4. if exist %filename%.exe del %filename%.exe
    5. if exist %filename%.com del %filename%.com
    6.  . . . .
    7. :masmdoscom
    8. %masm_path%\bin\ml /AT /c %filename%.asm
    9. %masm_path%\bin\link16 /T %filename%.obj,,,,,
    10. goto :m1
    11.  . . . .
    12. :masmdosexe
    13. %masm_path%\bin\ml /c %filename%.asm
    14. %masm_path%\bin\link16 %filename%.obj,,,,,
    15. :m1
    16. if exist %filename%.map del %filename%.map
    17. if exist %filename%.obj del %filename%.obj
    18. exit
    1. FAQ для раздела Assembler, MASM, TASM описание ключей ml.exe
    2. Компиляция файлов .asm с помощью компилятора ml.exe
    3. Дневники чайника. Подробное описание 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

    а дальше вставляешь текст в гугл-переводчик и разбираешься с тем, что тебе перевела автоматика
     
  3. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    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, может ее нужно использовать? В общем, немного запутался. :)


    [​IMG]
     
    Последнее редактирование модератором: 18 мар 2020
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    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,,,,,
     
  5. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, еще раз спасибо! Теперь, вроде, должен быть порядок, т.к. присутствует ключ /debug. :) Буду пробовать. Интересно почему у меня в инфе по link16 не был показан ключ /debug? Может гранаты не той системы (как недавно писал в комментариях не буду говорить кто :) ) ?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    extravert,
    а для чего отладочные символы? обычно программы короткие и достаточно комментариев в asm-файле
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    или как обычно - невнимательность. А так же нежелание разобраться самим.
    Код (Text):
    1.  
    2. masm32\bin>link.exe
    3. Microsoft (R) Incremental Linker Version 5.12.8078
    4. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    5.  
    6. usage: LINK [options] [files] [@commandfile]
    7.  
    8.    options:
    9.  
    10.       /ALIGN:#
    11.       /BASE:{address|@filename,key}
    12.       /COMMENT:comment
    13.       /DEBUG
    14.       /DEBUGTYPE:{CV|COFF}
    15.       /DEF:filename
    16.       /DEFAULTLIB:library
    17.       /DLL
    18.       /DRIVER[:{UPONLY|WDM}]
    19.       /ENTRY:symbol
    20.       /EXETYPE:DYNAMIC
    21.       /EXPORT:symbol
    22.       /FIXED[:NO]
    23.       /FORCE[:{MULTIPLE|UNRESOLVED}]
    24.       /GPSIZE:#
    25.       /HEAP:reserve[,commit]
    26.       /IMPLIB:filename
    27.       /INCLUDE:symbol
    28.       /INCREMENTAL:{YES|NO}
    29.       /LARGEADDRESSAWARE[:NO]
    30.       /LIBPATH:dir
    31.       /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}
    32.       /MAP[:filename]
    33.       /MAPINFO:{EXPORTS|FIXUPS|LINES}
    34.       /MERGE:from=to
    35.       /NODEFAULTLIB[:library]
    36.       /NOENTRY
    37.       /NOLOGO
    38.       /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
    39.       /ORDER:@filename
    40.       /OUT:filename
    41.       /PDB:{filename|NONE}
    42.       /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
    43.       /PROFILE
    44.       /RELEASE
    45.       /SECTION:name,[E][R][W][S][D][K][L][P][X]
    46.       /STACK:reserve[,commit]
    47.       /STUB:filename
    48.       /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]
    49.       /SWAPRUN:{CD|NET}
    50.       /VERBOSE[:LIB]
    51.       /VERSION:#[.#]
    52.       /VXD
    53.       /WARN[:warninglevel]
    54.       /WINDOWSCE:{CONVERT|EMULATION}
    55.       /WS:AGGRESSIVE
    56.  
    Mikl___,
    Да видимо он хочешь в IDA видеть символы своих сорцов.
     
    Mikl___ и Ronin_ нравится это.
  8. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, да на всякий случай на перспективу. Если бы дело было только в этих коротких программах - я бы, скорее всего, не заморачивался. У меня были пара случаев, когда я разбирался в чужом MASM коде (32х битном), так с отладочными версиями было проще разбираться.

    Тут на форуме проскакивала ссылка на GlukOS, может там пригодится отладочная версия, если осмелюсь замахнуться на ее изучение в учебных целях.

    Не знаю, может когда-нибудь тоже приду к выводу, что отладочные версии для ассемблерного кода не особо и нужны. Когда будет опыта побольше. )
    --- Сообщение объединено, 18 мар 2020 ---
    Кстати к вам это тоже относится. :) Вы версии линкеров мою и вашу сравните. Следовательно мне нужна, видимо, будет еще и другая версия линкера. Ну, а кто обещал хорошей жизни? :)
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    extravert,
    давайте, так, вам советуют, а вы не хамите :negative:. Ваше обучение целиком в ваших руках, пробуйте, не получается, читаете документацию и пробуете снова. Как-то так...
     
  10. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    P.S. Извиняюсь, поторопился с выводами. Там у вас вообще в примере 32 битный линкер, а разговор шел про 16 битный код. :)
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    extravert,
    link для создания и 16-разрядных и 32-разрядных программ, всё зависит от ключей, а вот СОМ он уже собирать не может, тут нужны более старые версии или NASM, FASM
     
  12. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, да я же не хамил, а просто поправил. Увидел небольшую нестыковку и поправил.
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    extravert,
    проехали :) судя по ключу /DEBUGTYPE:{CV|COFF} тут еще и от дебаггера зависит, для CODEVIEW одно, для дебаггера, который работает с файлами типа COFF другое, тут пробовать нужно, экспериментировать, или в инете искать информацию
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Странно , что вы здесь делаете выводы уже после того, как вам показали пример вывода . Сразу не додуматься было , что у микла видимо "другая версия линкера". Так нет, обязательно нужно сказать, что я не такая, я жду трамвая у меня нет таких опций.
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    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В-файла.
     
  16. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, огромное вам спасибо за информацию и не сбрасывайте пожалуйста со счетов, того факта, что вы этим занимаетесь, скорее всего, не десять и даже, наверное, не пятнадцать лет. :)

    TermoSINteZ, Mikl___, извиняюсь за занудство, но у меня к вам такой вопрос: я могу еще раз обратиться за помощью на форум или мне уже вынесен вердикт тупого, невнимательного и нежелающего разбираться во всем самому?

    //тут был злой модератор и поскипал лишнее, во избежании флуда.
     
  17. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, не то, чтобы я хочу поумничать, а так сказать, ради торжества относительной истины.
    link - для создания 32-битных файлов,
    а link16 - для создания 16-битных файлов.
    Ну, или ткните меня носом, в пример создания link'ом - 16-битного файла (под файлами я подразумеваю exe и dll).