Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka.doc
Скачиваний:
9
Добавлен:
27.03.2015
Размер:
122.88 Кб
Скачать

Новосибирский государственный технический университет

Кафедра автоматики

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторным работам по курсу "Информатика" для студентов 2 курса дневного отделения факультета автоматики

Часть 4. Ассемблер

Новосибирск – 1996

Лабораторная работа N 1

ТЕХНОЛОГИЯ РАБОТЫ С ПРОГРАММАМИ НА ЯЗЫКЕ АССЕМБЛЕРА В СИСТЕМЕ ПРОГРАММИРОВАНИЯ QUICK-C. ЭЛЕМЕНТАРНЫЕ ОПЕРАЦИИ.

1. Цель работы

Ознакомиться с технологией написания и отладки программ на языке Ассемблера. Ознакомиться с простейшими операциями: пере­сылки, арифметические операции, поразрядные операции.

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

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

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

_asm add ax, 33h

_asm and ax,1

вариант 2: _asm

{

mov ax, bx

add ax, 33h

and ax, 1

}

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

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

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

TITLE HELLO

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

LF EQU 10

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

.STACK 1OOh ;стек 256 байт

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

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

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

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

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

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

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

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

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

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

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

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

Options – Make - Compiler flags - Memory model - Small

Options – Make - Linker flags - Generate COM-file

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

TITLE HELLO

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

LF EQU 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

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

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

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

}

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

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

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

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

View - Windows - Register

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

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

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

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

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

Задания к лабораторной работе.

Исходные данные:

А = 2438Н - двоично - десятичное число

В = 1329Н - двоично - десятичное число

С = -157 - двоичное слово со знаком

D = 100 - двоичный байт без знака

Вариант 1.

1. Переставить 1-ю и 3-ю тетрады в слове А

2. Сложить А и В в двоично-десятичном виде

3. Выделить 2-ю и 4-ю тетрады в слове В и сложить их, как 2 двоичных числа

4. Умножить А на D, в старшем слове выделить два младших разряда и объединить по "ИЛИ" с результатом п.2

Вариант 2.

1. Переставить 2-ю и 4-ю тетрады в слове А

2. Сложить младшие байты А и В в двоичном виде

3. Выделить 1-ю и 3-ю тетрады в В и сложить их как два двоично-десятичных числа

4. Умножить В на D, в младшем слове выделить 1-5 разряды и объединить их по "И" с результатом п.3

Вариант 3.

1. Поменять местами 0-2 разряды младшего и старшего байтов в слова А

2. Сложить С и D в двоичном виде

3. Выделить старший байт А и младший байт В и сложить их как два двоично-десятичных числа

4. Разделить А на D и остаток от деления объединить по "исключающему ИЛИ" с результатом п.3

Вариант 4.

1. Поменять местами 0-2 и 5-7 разряды младшего байта в слове А

2. Вычесть из В значение С в двоичном виде

3. Выделить старшие байты А и В и сложить их как два дво­ично-десятичных числа

4. Разделить В на С и 3 младших разряда целой части объ­единить по "ИЛИ" с результатом п.1.

Вариант 5.

1. Поменять местами 0-2 разряди старшего байта и 5-7 разряды младшего байта в слове А

2. Вычесть из В значение О в двоично-десятичной виде

3. Младший и старший Байты А сложить их как два двоичных числа

4. Разделить В на С и 3 старших разряда целой части объединить по "И" с результатом п.3

Вариант 6.

1. Поменять местами 0-3 разряды старшего байта А и 0-3 разряды младшего байта В

2. Вычесть из А значение В в двоичном виде

3. Младший байт А и старший байт В сложить как два двоично-десятичных числа

4. Разделить С на D и объединить по "ИЛИ" частное и оста­ток от деления. Выделить три младших разряда полученного числа.

5. Контрольные вопросы

1. Правила оформления ассемблерной программы

2. Директивы ассемблера

3. Форматы данных: двоичные, двоично-десятичные, знаковые и беззнаковые представления чисел

4. Особенности команд умножения и деления

5. Стек и команды работы со стеком

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