Версия ассемблера - 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 или консоли, файлы временной директории удалены, а сама директория удалена.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д