Здавалка
Главная | Обратная связь

Краткие теоретические сведения



Современные системы программирования включают в себя и средства для написания и отладки ассемблерных программ - как в виде вставок в программы, так и в виде автономных модулей. При этом вставка ассемблерных фрагментов в программу выполняется с помощью директивы _asm в двух вариантах:

вариант 1: _asm mov ax, bx

_asm add ax, 33h

_asm and ax,l

вариант 2: _asm

{

movax, bx

add ax, 33h

and ax, 1

}

При этом, естественно должны соблюдаться соглашения по ис­пользованию регистров, принятые для данного компилятора и дан­ной модели памяти.

Часто ассемблерные подпрограммы оформляются в виде авто­номного программного модуля. В этой случае они размещаются в файле с расширением .asm и могут компилироваться и отлаживаться отдельно. Для упрощения программирования используется набор встроенных псевдокоманд.

 

Пример автономной программы на Ассемблере:

TITLE HELLO

CR EQU 13 ;определение констант

LF EQU 10

.MODEL TINY;генерировать .СОМ - файл

.STACK lOOh ;стек 256 байт

.DATA ;начало сегмента данных

msg DB "Hello, world.", CR, LF, "$" ; текст для вывода

.CODE ;начало кодовогосегмента

.STARTUP;инициализировать сегмент

данных и задать SS=DS

mov ah, 9h ;обращение к DOS, функция 9

mov dx, OFFSET msg ;загрузить в DS смещение

строки (сегмент уже в DS)

int 21.h ;вывести строку

.EXIT О ;выход с кодом возврата 0

end ;конец текста программы

 

При компиляции и отладке этой программы следует правильно установить режим работы QC:

Options –Make - Compiler flags - Memory model - Small

Options – Make - Linker flags - Generate COM-file

Пример оформления этой программы в виде Си-функции

 

TITLE HELLO

CR EQU 13;определение констант

LF ECU 10

.MODEL SMALL,С

.DATA ;начало сегмента данных

msg DB "Hello, world.", CR, LF, "$" ; текст для вывода

.CODE ;начало кодового сегмента

hello PROC NEAR, С ;начало процедуры

mov ah, 9h ;обращение к DOS, функция 9

mov dx, OFFSET msg ;загрузить в DS смещение

строки (сегмент уже в DS)

int 21h ;вывести строку

ret ;возврат из процедуры

hello ENDP

 

Перед компиляцией следует отключить режим генерации СОМ-файла (см. выше), поскольку QC не поддерживает эту возмож­ность.

Пример этого же фрагмента в виде ассемблерной вставки:

 

char msg[] = "Hello, world.\r\n$ ";

_asm

{

mov ah, 9h ;обращение к DOS, функция 9

movdx, OFFSET msg ;загрузить в DS смещение

строки (сегмент уже в DS)

int 21h ;вывести строку

}

При использовании таких ассемблерных вставок желательно сохранять в стеке и затем восстанавливать используемые регистры.

Методические указания

При выполнении работы можно использовать регистры AX, BX, CX, DX и регистровый и непосредственный методы адресации. Для зада­ния констант используйте директиву EQU.

При пошаговой отладке программы и подпрограмм контролиро­вать содержимое регистров можно в окне Registers, которое вклю­чается с помощью цепочки команд:

View - Windows - Register

Длясвязи ассемблерных подпрограмм с Си следует использо­вать директивы EXTRN и GLOBAL.

4. Порядок выполнения работы

4.1. Написать автономную программу на Ассемблере, выполня­ющую арифметические и логические операции над словами и байтами по вариантам согласно Заданий. Исходные данные задать с помощью директивы EQU. Результаты работы поместить в ячейки памяти. Проконтролировать правильность работы программы в пошаговом ре­жиме.

4.2. Оформить эту же программу в виде Си-функции. В ка­честве исходных данных использовать значения глобальных пере­менных из головной Си-программы. Результат работы поместить в те же глобальные переменные. Ввод и вывод данных оформить в го­ловной программе.

4.3. Оформить эту же программу в виде ассемблерного фраг­мента в головной программе. Исходные данные и результат помес­тить в локальные переменные, описанные в головной программе.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.