Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛРАССМБЛ№1.doc
Скачиваний:
7
Добавлен:
05.05.2019
Размер:
119.3 Кб
Скачать

Особенности разработки программ в masm

Для успешной работы с ассемблером М ASM корпорации Microsoft в современных операционных средах (Windows NT\2000\XP) необходимо иметь версию 6.13 этого продукта или выше. В него входят следующие основные программы:

  • masm.exe - ассемблер;

  • ml.exe — ассемблер и компоновщик (Masm and Link);

  • link.exe — компоновщик;

  • cv.exe — отладчик (CodeView);

  • lib.exe, implib.exe, nmake.exe, cref.exe, h2inc.exe, exehdr.exe, cvpack.exe, helpmake.exe, rm.exe, undel.exe, exp.exe — вспомогательные утилиты.

В пакете MASM изначально предпринимались попытки Совместить удобство средств программирования, свойственных языкам высокого уровня, с традицион­ными средствами машинно-ориентированных языков. Например, буква «М» в на­звании пакета означает слово «macro», то есть возможность создания макроопре­делений (или макросов), представляющих собой именованные группы команд. Их можно вставлять в программу в любом месте, указав только имя группы. Когда-то такая возможность действительно была отличительным свойством этого пакета, но сейчас этим никого не удивишь — макросредства есть во всех ассемблерах для платформы Intel (например, TASM), но, тем не менее, название осталось.

С помощью пакета MASM разработка программ выполняется традиционным для ассемблерного программирования способом — запуском отдельных программ трансляции, компоновки и отладки. Для этого используются программы masm.exe, ml.exe, link.exe и cv.exe. Во избежание путаницы необходимо отметить, что транс­ляция исходного файла может производиться двумя программами: masm.exe и ml.exe. В чем разница? До выхода MASM версии 5.1 включительно программа masm.exe была самостоятельным транслятором ассемблера. Начиная с MASM вер­сии 6.0 трансляция ассемблерного файла обычно выполняется программой ml.exe, которая кроме трансляции файла вызывает компоновщик link.exe. Это изменение сделано с целью унификации вызовов компиляторов командной строки для всех поддерживаемых этой фирмой языков программирования. К примеру, компиляцию программы на языке С из командной строки выполняет программа cl.exe. Ее задачи — компиляция исходной программы на языках C/C++ и, при отсутствии синтаксических ошибок, компоновка и формирование исполняемого модуля. Аналогичные задачи решает и программа ml.exe. Хотя в пакете MASM 6.13 допустимо использование программы masm.exe, нужно иметь в виду, что запуск link.exe в этом случае должен выполняться отдельно. Наличие программы masm.exe в пакете МASM 6.13 можно объяснить соображениями совместимости с предыдущими версиями.

Далее приведены форматы командных строк для запуска программ ml.exe, masm.exe и link.exe.

Командная строка ml.exe имеет вид

ml [ключи] исх_файл_1 [[ключи] исх_файл_2] ... [/link кпючи_link]

Ключи командной строки для ml.exe чувствительны к регистру. Командная строка masm.exe имеет вид

masm [ключи] исх_файл [, [объектный_файл] [, [файл_листинга] [ , [файл_перекрестных_ссылок] ] ] ]

Компоновщик компонует (объединяет) объектные файлы и библиотеки в ис­полняемый файл или динамически компонуемую библиотеку (DLL). Командная строка link.exe имеет вид

link [ключи] объект_файлы [ , [исполн_файл] [ , [файл_карты] [ , [файлы_библиотек] f _файл] ]]]][;]

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

  1. Напишите и отладьте программу, которая выводит на экран 64 ASCII символа, начиная с символа пробела. Исходный текст программы имеет следующий вид:

; кодовый сегмент

cseg segment 'code'

assume cs:cseg, ds:dseg, ss:sseg

mypr proc

mov ax,sseg ;в регистр ax записывается указатель

;на начало cтекового сегмента

mov ss,ax ; в сегмент стека записывается адрес

;начала стека

mov sp, offset TOS ; в указатель стека

;записывается адрес стека

mov ax,dseg ; в регистр ах записывается

;адрес сегмента данных

mov ds,ax ; адрес сегмента данных

;записывается в регистр ds

mov cx,64 ; в регистр сх записывается

;счетчик цикла - 64

mov al,' ' ; в регистр al записывается код

;пробела

mov si,0 ; в регистр si записывается 0

;(смещение в строке mes)

f1: mov mes[si],al ; содержимое регистра al

; записывается в строку mes

; (индекс в строке содержится в

;регитсре si)

inc si ; увеличение индекса строки на 1

inc al ; увеличение кода символа на 1

loop f1 ; содержимое регистра cx

;уменьшается на 1, если в сх –

;не 0, то переход на метку f1

mov ah,40h ; функция вывода на устройство

;или в файл

mov bx,1 ; вывод на экран

mov cx,64 ; число выводимых байт

mov dx,offset mes ; выводимое сообщение находится

;по адресу ds:dx

int 21h ; прерывание, функция

; прерывания находится в

; регистре ah

mov ax,4c00h ; функция завершения работы

; программы с кодом завершения

int 21h ; прерывание, функция

; прерывания находится в

; регистре ah

mypr endp

cseg ends

; сегмент данных

dseg segment

mes db 64 dup('~')

dseg ends

; сегмент стека

sseg segment

dw 30 dup(?)

TOS label word

sseg ends

end mypr

  1. Напишите программу, которая выводит на экран строку сообщения, например, сообщение «Hello, World!». Самостоятельно разберите назначение каждой команды.

Исходный текст программы имеет вид:

text segment 'code'

assume cs:text, ds:data

begin:

MOV AX, data

MOV DS,AX

MOV AH,09h

MOV DX, offset metka

INT 21h

MOV AX,4C00h

INT 21h

text ends

data segment

metka db "hello,World!",0dh,0ah,"$"

data ends

end begin

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]