Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet.docx
Скачиваний:
29
Добавлен:
15.04.2015
Размер:
132.41 Кб
Скачать

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

«РЯЗАНСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Отчет

О лабораторной работе по АСВТ

«Изучение команд микропроцессора i8086»

Выполнил

Студент гр. 242

Кабанова А.В.

Рязань 2013

Цель работы.

Ознакомление с принципами микропрограммной эмуляции ЭВМ с программным управлением, микропрограммирование машинных команд микропроцессора i8086 (МП-86).

Описание основных этапов выполнения команд в процессоре.

Задание.

Преобразовать 4-разрядное положительное десятичное число в двоичное по формуле B=((D1*10+D2)*10+D3)*10+D4, где Di - тетрады числа, начиная со старшей.

Схема алгоритма решаемой задачи.

Схема представлена с использованием переменных в абстрактном виде, без приложения к конкретной архитектуре. D – исходное число в BCD-коде.

Программа решаемой задачи на языке ассемблера.

Программа реализована с помощью ассемблерных вставок ИСР MS Visual Studio 2012 C++.

Код программы:

// ЛР АСВТ АСМ.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])

{

_asm {

//Инициализация/////////////////////////////////

MOV CX, 4; //Счетчик циклов

MOV SI, 0; //Общая сумма

MOV BX, 0x1235;

//Начало цикла//////////////////////////////////

cycle: //Метка начала цикла.

MOV AX, BX;

MOV DI, CH;

XCHG DI,CX;

SHR AX,CX; //Сдвиг результата до младшей тетрады.

SHL BX, 4;

MOV DX, SI; //Копирование её же в EBX.

SHL SI, 1; //}

SHL DX, 3; //} Умножение общей суммы на 10.

ADD SI, DX; //}

ADD SI, AX; // Запись общей суммы.

LOOP cycle;

NOP;

}

return 0;

}

Кодирование команд.

Команда

Формат

Код команды в двоичном виде

Код команды в

16-ричном виде

MOV reg1, reg2

RRM

1000.1011. 11 XX.X XXX

8B XX

SHR reg1, 12

RM

1101.0001. 11 10.1 XXX

D1E X

SHL reg1, 1

RM

1101.0001. 11 10.0 XXX

D1E X

ADD reg1, reg2

RRM

0000.0011.11 XX.X XXX

03 XX

LOOP disp

1110.0010. XXXX.XXXX

E2 XX

HALT

1111.1111.0000.0000

FF00

Конечная программа в шестнадцатеричном виде.

Распределение регистров согласно тексту ассемблерной реализации.

ADDR

00

02

04

06

08

0A

0C

WORD

8BC3

D1E8

D1E3

D1E3

D1E3

D1E3

8BD6

0E

10

12

14

16

18

1A

1C

D1E6

D1E2

D1E2

D1E2

03F2

03F0

E2E4

FF00

Сдвиги производятся на фиксированное для команды число разрядов по причине занятости регистра CX, единственно используемого в данной команде в силу ограничений программы-эмулятора, в команде LOOP. Что, в свою очередь, влечет последовательное использование нескольких команд сдвига, за исключением ЛС вправо, всегда сдвигающего на 12 разрядов, поскольку он не применяется для иного способа работы.

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