Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы 1-3 / laba2_1

.doc
Скачиваний:
33
Добавлен:
18.05.2014
Размер:
104.45 Кб
Скачать

Министерство образования и науки Российской Федерации

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

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» имени В. И. Ульянова (Ленина)

Кафедра ИИСТ

Отчет по лабораторной работе № 2 по дисциплине «Микропроцессорные средства в ИИТ»

Изучение основ построения программных модулей

микропроцессорных систем

Выполнили ст. гр. 6587

Балыкина Е.А.

Горбунова А.Е.

Бригада № 2

Проверил: Королев П. Г.

Санкт-Петербург

2010

Цель работы: Изучение основ построения программных модулей микропроцессорных систем.

Задание:

1. Переслать в ячейки регистрового файла числа в соответствии с номером бригады.

Если оба операнда помещаются в 1 байт, обрабатывать их байтовыми командами.

2. Выполнить арифметические операции над числами в соответствии с номером бригады.

3. Получить дополнительный код от заданного числа.

4. Получить обратный код от заданного числа.

5. Сложить число с его дополнительным кодом.

6. Сложить число с его обратным кодом.

7. Перемножить два числа.

8. Поделить результат, полученный в П.7 на заданное число.

9. Сохранить число во внешней памяти

Используемые данные:

Номер пункта задания

1

2

3

4

7

8

9

126 и 2

32778 и 12

5Fh и F4h

4Fh и F5h

Сложение

Вычитание

Лог. И-НЕ

Искл. ИЛИ

2

2

6586 и 1941

11

остаток

Распределение памяти:

0030 R1: dsb 1

0031 r2: dsb 1

0032 R3: dsw 1

0034 r4: dsb 1

0035 R5: dsb 1

0036 R7: dsb 1

0038 R8: dsl 1

Листинг программы

MCS-96 MACRO ASSEMBLER FIRST_LAB 03/02/11 16:37:40 PAGE 1

DOS 7.10 (046-N) MCS-96 MACRO ASSEMBLER, V1.3

SOURCE FILE: d:\mcs96\6587_2\lab2.a96

OBJECT FILE: d:\mcs96\6587_2\lab2.obj

CONTROLS SPECIFIED IN INVOCATION COMMAND: <none>

LOC OBJECT STMT SOURCE STATEMENT

1 First_lab MODULE main

2 ;Горбунова А.Е.,Балыкина Е.А.

3 ;Функция:

4 ;

5 $nolist; подавление листинга

71 ;

72 ; внутренние параметры

73 ;

0030 74 rseg at (30h); сегмент региcтров (неперемещаемый)

0030 75 R1: dsb 1

0031 76 r2: dsb 1

0032 77 R3: dsw 1

0034 78 r4: DSB 1

0035 79 R5: dsb 1

0036 80 R7: dsb 1

0038 81 R8: DSl 1

82 ;

83 ;ввод:

84 ;вывод:

85 ;

8100 86 cseg at 8100h; сегмент кода программы

8100 B17E30 87 ldb R1,#126

8103 A10A8032 88 ld R3,#32778

8107 B15F35 89 LDb R5,#5Fh

810A B14F36 90 LDb R7,#4Fh

810D B10231 91 ldb r2,#2

8110 B10234 92 ldb r4,#2

8113 A1BA1938 93 ld r8,#6586

8117 750230 94 ADDB R1,#2; R1:=R1+2

811A 690C0032 95 SUB R3,#12; R3:=R3-12

811E 71F435 96 ANDb R5,#0F4h; R5:=R5&F4h

8121 1235 97 NOTb R5; inverR5

8123 95F536 98 XORb R7,#0F5h; R7:=-R7+mod2(F5h)

8126 1231 99 NOTB r2; обратный код числа

8128 1334 100 Negb r4; дополнительный код числа

812A 750234 101 ADDB R4,#2; R4:=R4+2

812D 750231 102 ADDB R2,#2; R2:=R2+2

8130 6D950738 103 MULU r8,#1941; r8:=r8*1941

8134 8D0B0038 104 divu r8,#11; r8:=r8/11

8138 C3013E813A 105 st r8+2,ost

106 ;

107

813D F0 108 ret; необходима для корректного завершения программы пользователя

813E 0000 109 ost: dcw 0 ;

110

8140 111 END

Работа в отладчике

Адрес команды

Мнемоническая запись

Адрес операнда назначения

Результат операции

Слово состояния процессора PSW

Z

N

V

C

1

8100h

ldb

30h

7E

1

0

0

0

2

8103h

ld

32h

800A

1

0

0

0

3

8107h

ldb

35h

5F

1

0

0

0

4

810Ah

ldb

36h

4F

1

0

0

0

5

810Dh

ldb

31h

02

1

0

0

0

6

8110h

ldb

34h

02

1

0

0

0

7

8113h

ld

38h

19BA

1

0

0

0

8

8117h

addb

30h

80

1

0

0

0

9

811Ah

sub

32h

7FFE

0

0

1

0

10

811Eh

andb

35h

54

0

1

1

1

11

8121h

notb

35h

AC

0

0

0

0

12

8123h

xorb

36h

BA

0

1

0

0

13

8126h

notb

31h

FE

0

1

0

0

14

8128h

negb

34h

FD

0

1

0

0

15

812Ah

addb

34h

FF

0

1

0

0

16

812Dh

addb

31h

00

1

0

0

1

17

8130h

mulu

38h

C30F42

0

1

0

0

18

8134h

divu

38h

11BB91

0

1

0

0

19

8138h

st

813Eh

16BC

0

1

1

0

Порядок работы программы

Мнемонический код команды

Функция, выполняемая командой

1

ldb R1, #126

Загрузка значения 126 в ячейку R1, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки R1

2

ld R2, #32778

Загрузка значения 32778 в ячейку R3, получили соответствующее значение в шестнадцатеричной системе счисления

3

ldb R5,#5Fh

Загрузка значения 5Fh в ячейку R5, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки R5

4

ldb R7,#4Fh

Загрузка значения 4Fh в ячейку R7, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки R7

5

ldb r2,#2

Загрузка значения 2 в ячейку r2, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки r2

6

ldb r4,#2

Загрузка значения 2 в ячейку r4, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки r4

7

ld r8,#6586

Загрузка значения 6586 в ячейку r8, получили соответствующее значение в шестнадцатеричной системе счисления в зарезервированном адресе ячейки r8

8

addb R1,#2

Сложение значения, находящегося в ячейке R1 и значения 2, результат операции получили по адресу, зарезервированной ячейкой R1

9

sub R3,#12

Вычитание значения, находящегося в ячейке R3 из значения 12, результат операции получили по адресу, зарезервированной ячейкой R3

10

andb R5,#0F4h

Выполнение логической операции “И” между значением, записанным в ячейке R5 и значением F4h

11

notb R5

Выполнение логической операции ”НЕ” со значением, полученным в результате предыдущей операции.

12

xorb R7,#0F5h

Выполнение логической операции “Искл. ИЛИ” между значением, записанным в ячейке R7 и значением F5h

13

notb r2

Получение обратного кода от значения, записанного в ячейке r2 с помощью команды поразрядной инверсии

14

negb r4

Получение дополнительного кода от значения, записанного в ячейке r4, с помощью операции увеличения (инкремент)

15

addb r4,#2

Выполнение операции сложения дополнительного кода, полученного в предыдущем шаге выполнения программы с заданным числом

16

addb r2,#2

Выполнение операции сложения обратного кода, полученного в 13 шаге выполнения программы, с заданным числом

17

mulu r8,#1941

Выполнение операции перемножения заданного значения со значением, записанным в ячейке r8, результат перемножения сохраняется в ячейке r8

23

div r8,#11

Выполнение операции деления над значением, сохраненном в ячейке r8 на заданное значение. Результат деления сохраняется в ячейке r8.

24

st r8+2,ost

Сохранение результата (остатка от деления, выполненного в предыдущем шаге программы) во внешней памяти.

Анализ выполнения операций программой:

Сложение

addb R1,#2

12610 +210 = 12810 = 1000 00002 =8016

Операция выполнена верно

Вычитание

sub R3,#12

3277810 -1210 = 3276610 = 0111 1111 1111 11102 =7FFE16

Операция выполнена верно

Логическая операция И-НЕ

andb R5,#0F4h

5F16 &F416 = 101 11112 & 1111 01002= 1 0101 00112 =15316

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

notb R5

NOT 15310 = 1010 11002 =AC16

Операция выполнена верно

Логическая операция Искл. ИЛИ

xorb R7,#0F5h

4F16 +F516 = -(0100 11112 ) ^ 1111 01012= 1011 10102 =BA16

Операция выполнена верно

Получение обратного кода

notb r2

210 = 0000 00102 =1111 11012 =FD 16

Операция выполнена верно

Получение дополнительного кода

negb r4

1111 11012 + 12=1111 11102=FE16

Операция выполнена верно

Сложение обратного кода с числом

addb r2,#2

1111 11012 +0000 00102 = 1111 11112 =FF16

Операция выполнена верно

Сложение дополнительного кода с числом

addb r4,#2

1111 11102+0000 00102 = 1 0000 00002 =10016

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

Умножение

mulu r8,#1941

658610 *194110 = 12 783 42610 = 1100 0011 0000 1111 0100 00102 =С3 0F4216

Операция выполнена верно

Деление

divu r8,#11

1278342610 /1110 = 116212910 = 1 0001 1011 1011 1001 00012 =11BB9116.

В результате по адресу 38h мы получили значение . Старшее слово – остаток от деления. Младшее слово 16BC – частное. Деление выполнено неверно. Это происходит по следующей причине: (6586*1941)/11=1162129. Частное от деления 1162129> 32768 (максимального числа представляемого словом при работе со знаковыми числами, т.е. частное не помешается в старшую часть двойного слова, отведенного под результат)

Так как результат не помещается в слово, устанавливается флаг V.

Результат, получившийся в программе не верен.

Соседние файлы в папке Лабы 1-3