1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Собрать 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.202
    создание 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 Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    199
    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.202
    GRAFik,
    у меня 64-разрядная Windows 7
    alexandersivak,
    я имею ввиду, что нужно учиться писать программы под 32/64 разрядные Windows/Linux либо писать программы для микроконтроллеров. Во вложении ml.exe и link16.exe
     

    Вложения:

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

    GRAFik Member

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

    alexandersivak New Member

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

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

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

    GRAFik Member

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

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

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

    ormoulu Active Member

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

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    632
    Адрес:
    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
  13. ormoulu

    ormoulu Active Member

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