15277

Вивчити програмну модель мікропроцесора і8086

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

Информатика, кибернетика и программирование

Лабораторна робота № 2 Тема: Основи програмування мовою Асемблер. Мета роботи: Вивчити програмну модель мікропроцесора і8086. Навчитися інтерпретувати стан регістрів мікропроцесора з використанням емулятора. Засвоїти правила запису інформ

Украинкский

2013-06-11

153 KB

8 чел.

PAGE  5

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

Тема: Основи програмування мовою Асемблер.

Мета роботи: Вивчити програмну модель мікропроцесора і8086. Навчитися інтерпретувати стан регістрів мікропроцесора з використанням емулятора. Засвоїти правила запису інформації в різні типи регістрів.

  1.  Короткі теоретичні відомості

  1.  Програмна модель мікропроцесора і8086

Програмною моделлю МП називається сукупність програмно доступних регістрів, тобто тих регістрів вміст яких можна зчитати або змінити за допомогою команд. Програмну  модель МП і8086 складають регістри загального призначення (РЗП), сегментні регістри, вказівник команд і регістр прапорців. Програмна модель МП і8086 представлена на рис. 1.

Рисунок 1 - Програмна модель МП і8086

РЗП поділяються на регістри даних і регістри-вказівники. До регістрів даних відносяться 16-розхрядні регістри: AX, BX, CX, DX. Кожен із цих регістрів складається з двох   8-розрядних  регістрів,  які  можна незалежно      адресувати  іменами AH, BH, CH, DH (старші байти – Hihg) та AL, BL, CL, DL (молодші байти – Low). Регістри-вказівники SP (Stack pointer – вказівник стеку), BP (Base pointer – базовий регістр), SI (Source Index – індекс джерела), DI (Destination Index – індекс призначення) є 16-розрядними. Усі РЗП можна використати для зберігання даних, але в деяких командах допускається використання певного регістра за замовчуванням: AX – при множенні, діленні, введенні та виведенні слів;   AL -  при множенні, діленні, введенні та виведенні байтів, десятковій корекції, перетворенні байтів; AH – при множенні і діленні байтів; BX – при трансляції; CX – як лічильник циклів і вказівник довжини рядків у рядкових командах; CL – для зберігання зміщення з указанням змінної; DX – при множенні та діленні слів, при введенні та виведенні з непрямою адресацією; SP – при операціях із стеком; SI, DI – при рядкових операціях. На відміну від 8-розрядних мікропроцесорів регістр SP зберігає зміщення останньої зайнятої комірки стека.

Оперативна пам'ять МП зазвичай логічно поділяється на області коду (програмної пам’яті), даних і стеку. Для адресування до області коду використовується сегментний регістр CS, який визначає початкову адресу сегменту Seg, і вказівник команд IP, який містить зміщення EA. Для адресування до області пам’яті стеку при виконанні стекових операцій використовуються відповідно сегментний регістр SS і вказівник стеку SP. При звертаннях до області даних використовуються сегментні регістри DS і ES, які задають початкову адресу сегменту, а розташування адреси зміщення залежить від конкретної операції.

  1.  Порядок роботи з регістрами МП

Порядок роботи з регістрами МП розглянемо на прикладі команди MOV.

Команда MOV dest, sourse:

  •  копіює другий операнд (source – джерело) у перший операнд (destination - призначення);
  •  Операндом-джерелом може бути безпосереднє число, регістр загального призначення або комірка запам’ятовуючого пристрою;
  •  Операндом-призначення може бути регістр загального призначення або комірка запам’ятовуючого пристрою;
  •  Обидва операнди повинні мати однаковий розмір – байт або слово.

Нижче наведені формати застосування команди MOV:

MOV REG, memory
MOV memory, REG
MOV REG, REG
MOV memory, immediate
MOV REG, immediate ,

де:

  •  REG (регістр загального призначення): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP;
  •  memory (адреса комірки пам’яті): [BX], [BX+SI+7], змінна, і ін.;
  •  immediate (безпосереднє число): 5, -24, 3Fh, 10001101b, і ін..

Для роботи з сегментними регістрами команда MOV підтримує наступні формати:

MOV SREG, memory
MOV memory, SREG
MOV REG, SREG
MOV SREG, REG,

де:

  •  SREG (сегментний регістр): DS, ES, SS, і тільки як другий операнд: CS;
  •  REG (регістр загального призначення): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP;
  •  memory (адреса комірки пам’яті): [BX], [BX+SI+7], змінна, і ін..

При роботі з регістрами МП необхідно памятати  наступні правила:

  1.  В сегментні регістри не можуть завантажуватися безпосередньо числа;
  2.  Значення регістрів CS і IP не можуть встановлюватися командою MOV чи якоюсь іншою командою.

Нижче наведена коротка програма, що ілюструє використання команди MOV:

ORG 100h           ; директива, що вказує на початок розташування програми 

MOV AX, 0B800h     ; пересилає в регістр AX шістнадцяткове число B800h.

MOV DS, AX         ; копіює вміст регістру AX в сегментний регістр DS.

MOV CL, 'A'        ; заносить в регістрt CL код символу 'A' ASCII 41h.

MOV CH, 1101_1111b ; пересилає в регістр CH двійкове число 1101_1111b.

MOV BX, 15Eh       ; заносить в регістр BX число 15Eh.

MOV [BX], CX       ; копіює вміст регістру CX в комірку памяті B800:015E

RET                ; повернення до операційної системи.

  1.  Постановка завдання

  1.  Використовуючи середовище емулятора МП і8086, створити і налагодити проект асемблерної програми відповідно до індивідуального завдання за нижченаведеним шаблоном програми:

ORG 100h            ; директива, що вказує на початок розташування програми 

MOV R1, 00h   ;очистка регістру R1.

MOV R2, R1   ;очистка регістру R2.

MOV R3, R1   ;очистка регістру R3.

MOV R4, R1  ;очистка регістру R4.

MOV R5, CH1h ;запис числа CH1h в регістр R5.

MOV R6, R5 ;копіювання вмісту регістра R5 в регістр R6.

MOV R7, R5 ;копіювання вмісту регістра R5 в регістр R7.

MOV R9, R8 ;копіювання вмісту регістра R8 в регістр R9.

MOV R10, CH2h ;запис числа CH2h в регістр R10.

MOV R11, R10 ;копіювання вмісту регістра R10 в регістр R11.

MOV R12, R10  ;копіювання вмісту регістра R10 в регістр R12.        

MOV R13, R10 ;копіювання вмісту регістра R10 в регістр R13.

MOV R14, R13 ;копіювання вмісту регістра R13 в регістр R14.

MOV R15, CH3h ;запис числа CH3h в регістр R15.

MOV R16, R15 ;копіювання вмісту регістра R15 в регістр R16.

MOV R17, R15 ;копіювання вмісту регістра R15 в регістр R17.

MOV R18, R15 ;копіювання вмісту регістра R15 в регістр R18.

MOV R19, CS ;копіювання вмісту регістра CS в регістр R19.

MOV SP, R19 ;копіювання вмісту регістра R19 в регістр SP.

;MOV R20, CH4h ;запис числа CH4h в регістр R20. 

;MOV DS, R20      ;копіювання вмісту регістра R20 в регістр DS.   

MOV DS, CH4h    ;помилка  

MOV CL, 'X'         ;занесення в регістр CL коду заданого символу 'X' ASCII.

MOV CH, 11011111b ;запис в регістр CH двійкового числа 11011111b.

MOV BX, CH5h       ;запис в регістр BX числа CH5h.

MOV [BX], CX       ;копіювання вмісту регістра CX в комірку памяті CH1h:CH3h

END                        ;закінчення програми.

 Примітка: в рядку з коментарем «помилка» приведений приклад неправильного застосування команди MOV. При компілюванні програми буде дане повідомлення про помилку, зміст якого необхідно занотувати, а потім виправити помилку, використовуючи команди, що знаходяться в стрічках, відокремлених  знаком «;». При цьому рядок програми, що містить помилку, видалити або відокремити знаком «;».

  1.  Використовуючи середовище емулятора скласти лістинг програми (табл..1)

Таблиця 1 Лістинг програми

Зміщення

Код (Hex)

Мнемокод команди

К-сть байт

Коментар

100

B8

MOV AX, 0000h

3

Код операції – запис числа 0000h в регістр AX

101

00

Молодший байт числа

102

00

Старший байт числа

103

8B

MOV BX, AX

2

Код операції – копіювання вмісту одного регістру (AX) в інший регістр (BX)

104

D8

Вказує на регістри, між якими відбувається пересилання даних

  1.  Використовуючи покроковий режим роботи емулятора, проаналізувати хід виконання програми. Заповнити табл..2 результатів досліджень.

  1.  Варіанти індивідуальних завдань

  1.  Варіанти індивідуальних завдань до даної лабораторної роботи наведені у табл.. 3.

  1.  Методичні вказівки

  1.  Увійти в середовище емулятора Emu8086.
    1.  Створити новий проект типу “com” під власним іменем.
    2.  У створеному проекті набрати текст програми відповідно до п.2.1 і індивідуального завдання .
    3.  Скомпілювати створений проект.
    4.  Проаналізувати повідомлення про помилки, якщо такі мають місце. Записати повідомлення у звіт до лабораторної роботи. Пояснити причини виникнення помилок і вказати шляхи їх усунення.
    5.  Після успішного завершення процедури компілювання проекту перейти до аналізу роботи створеної програми відповідно до п.п.2.2 і 2.3, використовуючи покроковий режим роботи емулятора.
    6.  В процесі аналізу роботи програми контролювати і записувати зміни вмісту регістрів, що приймають участь в роботі програми.

  1.  Зміст звіту

  1.  Назва теми.
    1.  Мета роботи.
    2.  Індивідуальне завдання.
    3.  Лістинг програми відповідно до п.2.2 з відповідними коментарями.
    4.  Результати досліджень регістрів відповідно до п.2.3.
    5.  Відповіді на контрольні запитання.
    6.  Висновки, в яких звернути увагу на особливості роботи з різними типами регістрів.

  1.  Контрольні запитання

  1.  Що називають програмною моделлю мікропроцесора?
    1.  Назвіть регістри даних МП. Вкажіть їх розрядність і особливості запису даних в них.
    2.  Назвіть регістри вказівники МП. Вкажіть їх розрядність і особливості запису даних в них.
    3.  Назвіть сегментні регістри МП. Вкажіть їх розрядність і особливості запису даних в них.
    4.  


Таблиця 2 Результати досліджень

№ кроку

IP

Команда

CS

SS

SP

BP

SI

DI

DS

ES

BX

CX

AX

DX

Коментар

H

L

H

L

H

L

H

L

0

100

MOV AX, 0000H

0B56

0B56

FFFE

0000

0000

0000

0B56

0B56

00

00

00

17

00

00

00

00

очистка регістру AX

1

103

MOV BX, AX

0B56

0B56

FFFE

0000

0000

0000

0B56

0B56

00

00

00

17

00

00

00

00

очистка регістру BX

Таблиця 3 Індивідуальні завдання до лабораторної роботи №2

№ варіанту

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15

R16

R17

R18

R19

R20

C1h

C2h

C3h

C4h

C5h

X

1

AX

BX

CX

DX

AL

AH

BH

BX

AX

BX

CX

SI

SS

DX

DI

AX

SI

DS

BX

CX

A1

A000

BF00

B800

0

A

2

BX

AX

CX

DX

BL

BH

CH

CX

BX

AX

CX

SI

DS

DX

DI

BX

SI

ES

AX

CX

B2

A100

BE00

B810

10

B

3

CX

AX

BX

DX

CL

CH

DH

DX

CX

AX

BX

SI

ES

DX

DI

CX

SI

SS

AX

BX

C3

A200

BD00

B820

20

C

4

DX

AX

BX

CX

DL

DH

AH

AX

DX

AX

BX

SI

SS

CX

DI

DX

SI

ES

AX

BX

D4

A300

BC00

B830

30

D

5

AX

DX

CX

BX

AH

AL

BL

BX

AX

DX

CX

DI

DS

BX

SI

AX

DI

SS

DX

CX

E5

A400

BB00

B800

40

E

6

BX

DX

CX

AX

BH

BL

CL

CX

BX

DX

CX

DI

ES

AX

SI

BX

DI

DS

DX

CX

F6

A500

BA00

B810

50

F

7

CX

DX

BX

AX

CH

CL

DL

DX

CX

DX

BX

DI

SS

AX

SI

CX

DI

DS

DX

BX

A7

A600

B900

B820

60

G

8

DX

CX

BX

AX

DH

DL

AL

AX

DX

CX

BX

DI

DS

AX

SI

DX

DI

ES

CX

BX

B8

A700

B800

B830

70

H

9

AX

CX

BX

DX

AL

AH

DH

DX

AX

CX

BX

SI

ES

DX

DI

AX

SI

SS

CX

BX

C9

A800

B700

B800

80

I

10

BX

CX

AX

DX

BL

BH

AH

AX

BX

CX

AX

SI

SS

DX

DI

BX

SI

ES

CX

AX

DA

A900

B600

B810

90

J

11

CX

BX

AX

DX

CL

CH

BH

BX

CX

BX

AX

SI

DS

DX

DI

CX

SI

SS

BX

AX

EB

AA00

B500

B820

100

K

12

DX

BX

AX

CX

DL

DH

CH

CX

DX

BX

AX

SI

ES

CX

DI

DX

SI

DS

BX

AX

FC

AB00

B400

B830

110

L

13

AX

BX

DX

CX

AH

AL

DL

DX

AX

BX

DX

DI

SS

CX

SI

AX

DI

DS

BX

DX

AD

AC00

B300

B800

120

M

14

BX

AX

DX

CX

BH

BL

AL

AX

BX

AX

DX

DI

DS

CX

SI

BX

DI

ES

AX

DX

BE

AD00

B200

B810

130

N

15

CX

AX

DX

BX

CH

CL

BL

BX

CX

AX

DX

DI

ES

BX

SI

CX

DI

SS

AX

DX

CD

AE00

B100

B820

140

O

16

DX

AX

CX

BX

DH

DL

CL

CX

DX

AX

CX

DI

SS

BX

SI

DX

DI

ES

AX

CX

D0

AF00

B000

B830

150

P


  1.  Яке призначення вказівника команд ІР?
    1.  Чим відрізняється сегментний регістр CS від інших сегментних регістрів?

  1.  Джерела інформації

  1.  Ю.І. Якименко, Т.О. Терещенко, Є.І. Сокол та ін. Мікропроцесорна техніка: Підручник. – Київ. – ІВЦ «Видавництво «Політехніка». – 2004. – 439 с.
    1.  Юров В., Хорошенко С. Assembler: учебный курс – СПб: Питер Ком, 1999. – 672 с.

PAGE  2


PAGE  3


 

А также другие работы, которые могут Вас заинтересовать

35134. Альтернативная программная реализация выборки и модификации данных в базе данных Interbase 34.5 KB
  Конфигурируется ODBCисточник реализующий доступ к БД Interbse. В DBE dministrtor настраивается псевдоним БД доступной через BDE и представляющей собой в данном случае ODBCисточник. В отличие от 3го способа являющегося усовершенствованным подходом BDE 1й способ является более универсальным и более ресурсоемким в первую очередь по критерию времени поскольку представляет собой использование промежуточного уровня BDE и промежуточного уровня ODBC а 2й – менее универсальным и менее ресурсоемким поскольку предполагает использование...
35135. Пример реализации трехзвенной архитектуры 39.5 KB
  Два разрабатываемых при этом программных компонента – это сервер приложений и клиент взаимодействующие по протоколу DCOM. Разработка сервера приложений Основные шаги создания сервера приложений: Создание удаленного модуля данных Remote Dt Module. Однократный запуск программы с целью регистрации сервера приложений в реестре Windows. Для распределенного использования разработанных клиентского и серверного приложений требуется установка некоторых дополнительных программных компонент.
35136. Пример реализации обмена данными с Microsoft Excel 45.5 KB
  Создание новой книги Vrint MSBooks; MSBooks = MSExcel. Создание нового листа книги. Сохранение книги. Создание нового листа книги.
35137. Изучение формата баз данных Visual FoxPro 549.5 KB
  После заголовка таблицы следует цепочка 32байтовых описаний полей таблица 4.fmp Fp 01 1 YY Год последнего обновления таблицы Все 02 1 MM Месяц последнего обновления таблицы Все 03 1 DD День последнего обновления таблицы Все 04 4 RecordsCount Количество записей в таблице Все 08 2 HederSize Размер заголовка в байтах Все 10 2 RecordSize Размер записи в байтах Все 12 2 0x000x00 Зарезервировано Все 14 1 0x01 Начало транзакции D4 D5 0x00 Конец транзакции D4 D5 0x00 Игнорируется FS D3 Fb Fp CL 15 1 0x01 Закодировано D4 D5 0x00 Нормальная...
35138. Разработка файл-серверной информационной системы с использованием технологий Borland 47.5 KB
  Программное использование БД Простейший случай Для обращения к таблицам используются невизуальные компоненты TTble и TDtSource закладки Dt ccess и BDE палитры компонентов и ряд визуальных: TDBGrid TDBEdit TDBLookupComboBox и т. В компоненте TTble устанавливаются свойства TbleNme TbleType. В последнем случае псевдоним БД указывается в свойстве DtbseNme объекта TTble. В компоненте TDtSource устанавливается свойство DtSet как указатель на TTble.
35139. Поддержка сложных запросов в файл-серверной информационной системе с использованием технологий Borland 59.5 KB
  Способным работать независимо от того отсутствуют ли требуемые таблицы или наличествуют и заполнены данными. Например: SELECT fio FROM stud; – выборка поля fio из всех записей таблицы stud SELECT fio n_spect FROM stud; – выборка полей fio n_spect из таблицы stud SELECT FROM stud; – выборка всех полей из таблицы stud SELECT s. FROM stud S s; – выборка всех полей из таблицы stud с присваиванием таблице псевдонима s SELECT s.n_spect S spect FROM stud S s; – выборка из таблицы stud полей fio и n_spect с присваиванием им...
35140. Использование встроенных средств SQL-сервера InterBase для создания и использования базы данных 127 KB
  оздание БД интерфейсными средствами WISQL. Выполняется путем использования функции WISQL File Create Database. Диалог создания БД показан на рисунке 1. В поле Location Info устанавливается переключатель Local Engine
35142. Программная реализация выборки и модификации данных в базе данных Interbase 56.5 KB
  При этом сохранение результатов редактирования выполняется путем вызова рассмотренной ранее функции pplyUpdtes класса TBDEDtSet и всех его потомков например компонента Query содержимое выборки которого редактируется и кэшируется которая выполняет отправку в БД закэшированных на клиентской стороне изменений. Пример реализации функции обработки события OnUpdteRecord: void __fstcll TDtModule1::Query1UpdteRecordTDtSet DtSet TUpdteKind UpdteKind TUpdtection Updtection { switch UpdteKind { cse ukModify: brek; cse ukInsert:...