Версия ассемблера - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый вечер всем, столкунлся со следующей проблемой: Не могу понять, какая в точности версия ассемблера мне нужна. Вот несколько программ.
.MODEL SMALL
.STACK 100h
.DATA
    HelloMessage DB 'Hello World',13,10,'$'
.CODE
START:
    mov ax,@data
    mov ds,ax
    mov ah,9
    mov dx,OFFSET HelloMessage
    int 21h
    mov ah,4ch
    int 21h
END START
Этот пример Был взят из этой темы, большое спасибо автору. Вот еще одна программа:
.model small
.data
num1   db   2
num2   db   3
.stack 100h
.CODE
start:
       mov ax, @data
       mov ds, ax
       mov ah, num1
       add ah, num2
mov AX, 4c00h
int 21h
end start
Устанавливаю под 64-разрядную Windows 7. В программе Far Manager они должны компилироваться с помощью команд:
c:\tasm\bin\tasm /z /zi /n bios,,
c:\tasm\bin\tlink /v /x bios,,
Значит, похоже, мне нужны некая версия Tasm? Но вопрос в том какая именно?

Решение задачи: «Версия ассемблера»

textual
Листинг программы
@echo off
setlocal EnableExtensions

echo.

if [%1] == [] (
  echo Usage:
  echo TASM source.asm /dos^|/exe^|/com^|/gui^|/con^|/dll [/nolink] [/pause] [link_params]
  exit /b
)

set tasmpath=D:\Lang\Asm\tasm
set dosbox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"

set dos=0
set Tparams=
set Lparams=
if /i [%2] == [/dos] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/t /3 /x&shift /2) else (
 if /i [%2] == [/com] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/t /3 /x&shift /2) else (
  if /i [%2] == [/exe] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/3 /x&shift /2) else (
   if /i [%2] == [/gui] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpe /aa /c /x /L%tasmpath%\lib&shift /2) else (
    if /i [%2] == [/con] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpe /ap /c /x /L%tasmpath%\lib&shift /2) else (
     if /i [%2] == [/dll] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpd /aa /c /x /L%tasmpath%\lib&shift /2) else (
      echo TASM: Please specify platform/format!
      exit /b
))))))

set pause=0
set nolink=0
:nextparam
if /i [%2] == [/nolink] (set nolink=1) else (
 if /i [%2] == [/pause] (set pause=1) else goto go
)
shift /2
goto nextparam

:go
if %dos% == 1 (
  if not exist %tasmpath%\dbox$cmp.tmp md %tasmpath%\dbox$cmp.tmp
  copy /b "%~dp1*.*" %tasmpath%\dbox$cmp.tmp\ > nul
  echo @echo off > %tasmpath%\dbox$cmp.bat
  echo cd dbox$cmp.tmp >> %tasmpath%\dbox$cmp.bat
  echo c:\bin\tasm %Tparams% %~nxs1 >> %tasmpath%\dbox$cmp.bat
  if %nolink% == 0 echo if exist %~ns1.obj c:\bin\tlink %Lparams% %~ns1.obj %2 %3 %4 %5 %6 %7 %8 %9 >> %tasmpath%\dbox$cmp.bat
  if %pause% == 1 (echo pause >> %tasmpath%\dbox$cmp.bat) else (echo if errorlevel 1 pause >> %tasmpath%\dbox$cmp.bat)
  %dosbox% %tasmpath%\dbox$cmp.bat -exit -noautoexec
  if %nolink% == 0 (
    if exist %tasmpath%\dbox$cmp.tmp\%~ns1.com (copy %tasmpath%\dbox$cmp.tmp\%~ns1.com "%~dpn1.com" > nul) else if exist %tasmpath%\dbox$cmp.tmp\%~ns1.exe copy %tasmpath%\dbox$cmp.tmp\%~ns1.exe "%~dpn1.exe" > nul
  ) else (
    if exist %tasmpath%\dbox$cmp.tmp\%~ns1.obj copy %tasmpath%\dbox$cmp.tmp\%~ns1.obj "%~dpn1.obj" > nul
  )
  del %tasmpath%\dbox$cmp.bat > nul
  del /q %tasmpath%\dbox$cmp.tmp\* > nul
  rd %tasmpath%\dbox$cmp.tmp > nul
) else (
  %tasmpath%\bin\tasm32.exe %Tparams% %1
  if %nolink% == 0 (
    if exist "%~dpn1.obj" (
      %tasmpath%\bin\tlink32.exe "%~dpn1.obj" %Lparams% %2 %3 %4 %5 %6 %7 %8 %9
      del "%~dpn1.obj"
    )
  )
  if %pause% == 1 pause
)

Объяснение кода листинга программы

  1. Установлены переменные окружения:
    • tasmpath - путь к ассемблерному компилятору TASM;
    • dosbox - путь к исполняемому файлу DOSBox;
    • dos - флаг, указывающий, что будет использоваться платформа DOS;
    • Tparams - параметры компиляции для TASM;
    • Lparams - параметры линковщика для TASM;
    • pause - флаг, указывающий, нужно ли приостановить выполнение после завершения компиляции;
    • nolink - флаг, указывающий, нужно ли пропустить линковку.
  2. Проверено, какой формат был передан в качестве параметра:
    • /dos - компиляция для платформы DOS;
    • /com - компиляция для платформы DOS и создание файла с расширением .com;
    • /exe - компиляция для платформы DOS и создание файла с расширением .exe;
    • /gui - компиляция для платформы GUI (графический интерфейс);
    • /con - компиляция для платформы консоли;
    • /dll - компиляция для платформы DLL.
  3. Если выбран формат, отличный от /dos, создан файл с расширением .bat, который содержит все необходимые команды для компиляции и линковки.
  4. Если выбран формат /dos, созданы временные файлы для компиляции и линковки, а затем выполнен скрипт .bat.
  5. Если выбран формат, отличный от /dos, выполнен ассемблерный компилятор TASM32.EXE.
  6. Если выбрана платформа GUI или консоли, выполнен линковщик TLINK32.EXE.
  7. Если выбрана платформа DOS и файл .obj существует, он удален.
  8. Если выбрана платформа DOS и файл с расширением .com или .exe существует, он скопирован в ту же директорию с новым именем, соответствующим имени исходного файла без расширения.
  9. Если выбрана платформа GUI или консоли, файлы временной директории удалены, а сама директория удалена.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5