Информатика: Методические указания к лабораторным работам. Часть 2. Ассемблер, страница 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. Стек и команды работы со стеком

Лабораторная работа № 2

ОБРАБОТКА МАССИВОВ ДАННЫХ. ИНТЕРФЕЙС С ЯЗЫКАМИ ВЫСОКОГО УРОВНЯ.

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

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

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

Ассемблер позволяет использовать различные режимы  адреса­ции  для  операндов.  Ниже показано их использование на примере команды пересылки.в регистр АХ:

table   dw 10 dup (0)      ;таблица слов

mov ax, bx                              ;регистровый операнд в Ьх

mov aх, 100                            ;непосредственный, операнд - константа

mov ax, table                        ;прямой, table = адрес операнда

mov ax, [bx]                          ;косвенно-регистровый;

                       ;bx - адрес операнда

mov ax, [Ьх+2]                      ;по базе. bх+2 = адрес операнда

mov ax, table[di]              ;прямой с индексированием,

                       ;table+di = адрес операнда

mov ax, table[bx][di]       ;по базе с индексированием,

                       ;table+bx+di = адрес операнда

Ассемблер имеет средства  для  упрощения  программирования процедур, предназначенных для вызова из Си-программ. Они позво­ляют выполнить соглашения о характеристиках  сегментов,  модели памяти, правилах передачи параметров и использовании регистров.

Оформленная таким образом ассемблерная процедураимеет вид

    .MODEL SMALL,С

func PROC NEAR USES SI DI, a:WORD, b:WORD

     LOCAL X:WORD, y:WORD

     RET

func ENDP

Функции func соответствует следующий прототип  в  Си-прог­рамме:

int func(int a, int b);