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

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

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

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

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

textual
Листинг программы
  1. @echo off
  2. setlocal EnableExtensions
  3.  
  4. echo.
  5.  
  6. if [%1] == [] (
  7. echo Usage:
  8. echo TASM source.asm /dos^|/exe^|/com^|/gui^|/con^|/dll [/nolink] [/pause] [link_params]
  9. exit /b
  10. )
  11.  
  12. set tasmpath=D:\Lang\Asm\tasm
  13. set dosbox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"
  14.  
  15. set dos=0
  16. set Tparams=
  17. set Lparams=
  18. if /i [%2] == [/dos] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/t /3 /x&shift /2) else (
  19. if /i [%2] == [/com] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/t /3 /x&shift /2) else (
  20. if /i [%2] == [/exe] (set dos=1&set Tparams=/m /ic:\include&set Lparams=/3 /x&shift /2) else (
  21. if /i [%2] == [/gui] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpe /aa /c /x /L%tasmpath%\lib&shift /2) else (
  22. if /i [%2] == [/con] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpe /ap /c /x /L%tasmpath%\lib&shift /2) else (
  23. if /i [%2] == [/dll] (set Tparams=/m /mx /i%tasmpath%\include&set Lparams=/Tpd /aa /c /x /L%tasmpath%\lib&shift /2) else (
  24. echo TASM: Please specify platform/format!
  25. exit /b
  26. ))))))
  27.  
  28. set pause=0
  29. set nolink=0
  30. :nextparam
  31. if /i [%2] == [/nolink] (set nolink=1) else (
  32. if /i [%2] == [/pause] (set pause=1) else goto go
  33. )
  34. shift /2
  35. goto nextparam
  36.  
  37. :go
  38. if %dos% == 1 (
  39. if not exist %tasmpath%\dbox$cmp.tmp md %tasmpath%\dbox$cmp.tmp
  40. copy /b "%~dp1*.*" %tasmpath%\dbox$cmp.tmp\ > nul
  41. echo @echo off > %tasmpath%\dbox$cmp.bat
  42. echo cd dbox$cmp.tmp >> %tasmpath%\dbox$cmp.bat
  43. echo c:\bin\tasm %Tparams% %~nxs1 >> %tasmpath%\dbox$cmp.bat
  44. 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
  45. if %pause% == 1 (echo pause >> %tasmpath%\dbox$cmp.bat) else (echo if errorlevel 1 pause >> %tasmpath%\dbox$cmp.bat)
  46. %dosbox% %tasmpath%\dbox$cmp.bat -exit -noautoexec
  47. if %nolink% == 0 (
  48. 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
  49. ) else (
  50. if exist %tasmpath%\dbox$cmp.tmp\%~ns1.obj copy %tasmpath%\dbox$cmp.tmp\%~ns1.obj "%~dpn1.obj" > nul
  51. )
  52. del %tasmpath%\dbox$cmp.bat > nul
  53. del /q %tasmpath%\dbox$cmp.tmp\* > nul
  54. rd %tasmpath%\dbox$cmp.tmp > nul
  55. ) else (
  56. %tasmpath%\bin\tasm32.exe %Tparams% %1
  57. if %nolink% == 0 (
  58. if exist "%~dpn1.obj" (
  59. %tasmpath%\bin\tlink32.exe "%~dpn1.obj" %Lparams% %2 %3 %4 %5 %6 %7 %8 %9
  60. del "%~dpn1.obj"
  61. )
  62. )
  63. if %pause% == 1 pause
  64. )

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут