Лабы 1-3 / laba2_1
.docМинистерство образования и науки Российской Федерации
Федеральное агентство по образованию
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» имени В. И. Ульянова (Ленина)
Кафедра ИИСТ
Отчет по лабораторной работе № 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.
Результат, получившийся в программе не верен.