Собрать 16-битный исполняемый файл на Windows 10 64 bits

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

Метки:
  1. alexandersivak

    alexandersivak New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2020
    Сообщения:
    10
    Я скачал masm32 editor.
    Код программый, которую я собираю, приведён ниже.

    Код (Text):
    1. ;###############################################################################################
    2.  
    3.         .MODEL  SMALL
    4.         .386
    5.  
    6. ;###############################################################################################
    7.  
    8.         .DATA
    9.  
    10. X       db 3
    11.  
    12. ;###############################################################################################
    13.  
    14.         .CODE
    15.  
    16. ;***********************************************************************************************
    17.  
    18. _main   PROC    FAR
    19.  
    20.         mov     ax,@data
    21.         mov     ds,ax
    22.  
    23.         MOV     AL,5
    24.         ADD     AL,X
    25.  
    26.         mov     ah,4Ch
    27.         int     21h
    28.  
    29. _main   ENDP
    30.  
    31. ;###############################################################################################
    32.  
    33.         END     _main
    В терминале выполняю следующие команды

    C:\masm32\tutorial\console\demo1>C:\masm32\bin\ml.exe /c /coff hello.asm
    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
    Assembling: hello.asm
    ***********
    ASCII build
    ***********

    C:\masm32\tutorial\console\demo1>C:\masm32\bin\link16.exe /SUBSYSTEM:WINDOWS /OPT:NOREF hello.obj
    Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
    Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
    LINK : warning L4017: /SUBSYSTEM : unrecognized option name; option ignored
    LINK : warning L4017: /OPT : unrecognized option name; option ignored
    Run File [hello.exe]:
    List File [nul.map]:
    Libraries [.lib]:
    Definitions File [nul.def]:
    hello.obj : fatal error L1101: invalid object module
    Object file offset: 1 Record type: 4c

    Как видите, линкую в 16-разрядный исполняемый файл, но получаю ошибку. Почему и как это правильно делается?
     
  2. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    создание DOS COM-файлов
    Код (Text):
    1. C:\masm32\bin\ml /Cp /AT hello.asm
    2. C:\masm32\bin\link16 /T hello.obj ,,,,,
    создание DOS EXE-файлов
    Код (Text):
    1. C:\masm32\bin\ml /Cp /c hello.asm
    2. C:\masm32\bin\link16 hello.obj ,,,,,
    Код (ASM):
    1. .286
    2. .MODEL  SMALL
    3. .DATA
    4. X       db 3
    5. .CODE
    6. _main:
    7.        mov     ax,@data
    8.         mov     ds,ax
    9.         MOV     AL,5
    10.         ADD     AL,X
    11.         mov     ah,4Ch
    12.         int     21h
    13. end _main
    В 64-разрядных Windows программы написанные для DOS работать не будут. Начинайте писать программы для Win64 не тратьте своё время на программную некрофилию палеонтологию :negative:

     

    Вложения:

  3. GRAFik

    GRAFik Active Member

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

    P.S. Mikl___, если не секрет, у вас какая Windows ( 7, 8, 10? ) установлена там где вы компилируете на MASM64?
     
    Последнее редактирование: 22 окт 2020
  4. alexandersivak

    alexandersivak New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2020
    Сообщения:
    10
    Два вопроса.
    При сборке получаю ошибку
    Код (Text):
    1. error A2117: /AT switch requires the TINY memory model
    Вы имели в виду, что следовало бы скачать masm64?
     
  5. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    GRAFik,
    у меня 64-разрядная Windows 7
    alexandersivak,
    я имею ввиду, что нужно учиться писать программы под 32/64 разрядные Windows/Linux либо писать программы для микроконтроллеров. Во вложении ml.exe и link16.exe
     

    Вложения:

    • dos.zip
      Размер файла:
      350,8 КБ
      Просмотров:
      295
    Последнее редактирование: 22 окт 2020
  6. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Забыл совсем про TINY-вариант. Тоже ведь 16-бит. Ну теперь все встало на свои места - все зависит от ключей компилятора и линковщика. )) Забываю постоянно про все эти MASM'овские варианты.))
     
  7. alexandersivak

    alexandersivak New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2020
    Сообщения:
    10
    Она, конечно, не запустилась у меня на Windows 10 64 бита. Прерывания работают только под DOS? Другими словами, на современных Windows их просто нет?
     
  8. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    absolutely right! :good3:
     
  9. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    КК тоже был примерно такого же мнения, ну тут уж сколько людей столько и мнений. Мне вот, например, кажется, что начинать изучение ассемблера с 64-битного варианта - это неправильно. Тут бывалые-то ассемблерщики теряются в 64-битной теории, когда пытаются перейти с 32-битного варианта, а что уж про новичков говорить.
    Что каасаетя всех этих DOS'ов, то с одной стороны, это вроде устаревшая архаика, но с другой стороны, там все гораздо проще устроено и проще разобраться. Ну да немного все по-другому принципу работает, но все равно ведь похоже. Ту же главное понять принцип, а дальше уж дело техники и времени. ))
     
  10. НетРегистрации

    НетРегистрации Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    72
  11. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Под вынь 3.11 надо писать. Вот где истинный дзен :crazy:
     
  12. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    вот с этим однозначно соглашусь.

    а вот с палеонтологией лишь частично - застревать на 16бит realmode не рекомендуется, но эти знания все равно фундаментальны, без них нормально что в 32 что в 64 тем более, никак.

    опять же, некоторые задачи, если не рассматривать институтские, где все никак от Турбопаскаль7 не уйдут (исключение Белорусский БГУИР, https://vk.com/godblessonoshko) вполне годны для досовского досбокса, и не зачем тащить виндовый гуи и тем более 64 бит.

    КК (если речь идет о КрисКасперски) "зажигал" на трехсотом целероне и вин2к.

    чтобы досовский (и также NE 16bit) код запускать под 64, есть некоторые варианты, вплоть до патча ntvdm 64 разрядного, в котором ЕСТЬ, но закомментирована (заNOPлена), обработка 16 бит. речь разумеется не о том, что это попытка "по настоящему" запустить 16бит код в 64бит режиме, но ntvdm также содержит эмулятор, т.к. разрабатывался не только для х86 архитектур, и когда Мягкософт его купила у другой компании, они просто заNOPили это. пруфов сейчас не подвезу, увы.

    также есть кастомные "пускалки" 16битовых исполнимых файлов под 64, да так, что прямо двумя щелчками запускается из проводника.

    прерываний под виндоус нет - тут лукавство, а как же Int2e и прочие Exceptions? тут как раз знания про инты и IDT и пригождаются, из реалмода.

    так то, вы NE EXE ничем не отладите нормально ) http://uncomputable.blogspot.com/2014/09/reversing-16-bit-ne-file-part-1-clumsy.html
    --- Сообщение объединено, 22 окт 2020 ---
    под дос вы в реальном режиме, какую разрядность хотите, такую и используете (миксовать в коде 16 и 32 разряда это обычное дело). правда для модных 64бит придется в лонгмод64 переходить.
    --- Сообщение объединено, 22 окт 2020 ---
    хотя, даже для микроконтроллеров асм редко используется, тут уже Си, и не приведи, JS (с аппаратной поддержкой оного).
     
    Последнее редактирование: 22 окт 2020
    DOSAsm386 нравится это.
  13. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    TDW же.
     
  14. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Начал читать П. Абеля и понимаю, что откомпилировать-собрать решение не получится. У меня установлена windows 10 x64, есть виртуальная машина, но на ней, например проги с FPU не запускаются, да с диском, памятью не поработаешь, насколько я понял.... Короче говоря книга хорошая, а вот как с ней работать.... голая теория не есть хорошо. Читая тему я так и не понял, есть возможность нормально поработать в ОС без вирткалки с кодом из книги Абеля, хотелось бы ещё и с masm компилятором. )
     
  15. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Andrey_59,
    читай Пирогова, Юрова, Iczelion'a и т.д. Начинай с программирования для Windows в 64-разрядном masm
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    _edge,

    > Белорусский БГУИР

    Я там был, ты наверно ценник не знаешь сколько там стоит быть. Сестра дешевле в Оксфорд ездила по каким то языковым курсам.
     
    Последнее редактирование: 31 янв 2022
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Черти паганые, забрали калькуляторы пришлось вычислять эти углы поганую тригонометрию ряды Маклорен-Тейлор. Это на столько плохо считать, это десятичные дроби сложение и умножение, короче ряды. До этого были платные курсы, где эти задачи порешали.
     
  18. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    462
    Лёгкий вариант - DosBox, для которого найти какой нибудь TASM 90-х годов и фигачить. Доступа к диску не будет, но DOS-программы вполне можно писать. Недавно так ностальгировал в QuickBasic и Borland C++ 4.5 :lol:
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    aa_dav,

    QB чушь какая то, пока ты не будещь знать дифференциалку. не будешь знать ничего.
     
  20. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    603
    Ещё раз про рекламирую эмуляторы старых x86 машин, от 5150 до Pentium MMX тут зависит от мощности камня, насколько он сможет в рилтайме эмулировать старый пень 586.
    https://www.old-games.ru/forum/threads/pcem-ehmuljator-pc.68711/
    PCem - эмулятор PC. PCem — Old-Games.RU Wiki
    86Box (старое название PCEM-X) - альтернативная ветка развития. Отличается от PCem большим количеством эмулируемого железа. О различиях в политике разработки PCem и 86Box.
    VARCem - в свою очередь ответвление от 86Box. Заточен на потактовую точность эмуляции, и ориентирован на эмуляцию совсем старых железок уровня XT и AT. Имеется локализация на несколько языков, в комплекте с инстолятором идут все нужные ромы, конфиги, масса заготовок старых машин с предустановленным DOS.