Версия ассемблера - Assembler
Формулировка задачи:
Добрый вечер всем, столкунлся со следующей проблемой:
Не могу понять, какая в точности версия ассемблера мне нужна.
Вот несколько программ.
Этот пример Был взят из этой темы, большое спасибо автору.
Вот еще одна программа:
Устанавливаю под 64-разрядную Windows 7.
В программе Far Manager они должны компилироваться с помощью команд:
Значит, похоже, мне нужны некая версия Tasm? Но вопрос в том какая именно?
.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
c:\tasm\bin\tasm /z /zi /n bios,, c:\tasm\bin\tlink /v /x bios,,
Решение задачи: «Версия ассемблера»
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 )
Объяснение кода листинга программы
- Установлены переменные окружения:
tasmpath
- путь к ассемблерному компилятору TASM;dosbox
- путь к исполняемому файлу DOSBox;dos
- флаг, указывающий, что будет использоваться платформа DOS;Tparams
- параметры компиляции для TASM;Lparams
- параметры линковщика для TASM;pause
- флаг, указывающий, нужно ли приостановить выполнение после завершения компиляции;nolink
- флаг, указывающий, нужно ли пропустить линковку.
- Проверено, какой формат был передан в качестве параметра:
/dos
- компиляция для платформы DOS;/com
- компиляция для платформы DOS и создание файла с расширением.com
;/exe
- компиляция для платформы DOS и создание файла с расширением.exe
;/gui
- компиляция для платформы GUI (графический интерфейс);/con
- компиляция для платформы консоли;/dll
- компиляция для платформы DLL.
- Если выбран формат, отличный от
/dos
, создан файл с расширением.bat
, который содержит все необходимые команды для компиляции и линковки. - Если выбран формат
/dos
, созданы временные файлы для компиляции и линковки, а затем выполнен скрипт.bat
. - Если выбран формат, отличный от
/dos
, выполнен ассемблерный компилятор TASM32.EXE. - Если выбрана платформа GUI или консоли, выполнен линковщик TLINK32.EXE.
- Если выбрана платформа DOS и файл
.obj
существует, он удален. - Если выбрана платформа DOS и файл с расширением
.com
или.exe
существует, он скопирован в ту же директорию с новым именем, соответствующим имени исходного файла без расширения. - Если выбрана платформа GUI или консоли, файлы временной директории удалены, а сама директория удалена.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д