МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В. И. Ульянова (Ленина)
Кафедра МО ЭВМ
отчет
по лабораторной работе №5
по дисциплине «Организация ЭВМ и систем»
Тема: Знакомство с рабочей средой эмулятора Ripes для работы с процессором RISC-V. Базовый ISA, система команд, состав регистров. Разработка и выполнение простой программы на ассемблере RISC-V.
Студентка гр. 2383 |
|
Бараева Е. Н. |
Преподаватель |
|
Фирсов М. А. |
Санкт-Петербург
2023
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ
В архитектуре RISC-V в базовый набор команд входят: минимальный набор команд арифметических/битовых операций на регистрах, команд для выполнения операций с памятью (load/store), команд условной и безусловной передачи управления/ветвления, а также небольшое число служебных инструкций. Команды базового набора имеют длину 32 бита с выравниванием на границу 32-битного слова.
Операции условных переходов (ветвления) не используют каких-либо общих флагов, как результатов ранее выполненных операций сравнения, а непосредственно сравнивают свои регистровые операнды.
Базовое подмножество команд использует следующий набор регистров: специальный регистр x0 (zero), содержащий значение 0, х1 (ra) адрес возврата, х2 (sp) указатель стека, х3 (gp) глобальный указатель, х4 (tp) указатель потока, х5-х7 и х28-х31 (t0-t6) временные регистры, х8-x9 и х18-х27 (s0-s11) сохраняемые регистры, х10-х17 (a0-a7) аргументы функции.
Вся арифметико-логическая обработка данных может производиться только над регистрами, при этом в основном формате регистр-регистр используются два регистра-источника операндов Rsrc1 и Rsrc2 (далее rs1 и rs2) и регистр результата Rdest (далее rd).
Задание
1. Разработайте процедуру на ассемблере, которая для целочисленных 32-битных входных переменных x, y, z и констант a, b, c вычисляет выражение R = f (x, y, z, a, b, c), выбираемое по таблице 1 в соответствии с вашим вариантом.
2. Напишите программу, которая для двух наборов исходных данных x, y, z выполняет вычисление заданного выражения с помощью разработанной процедуры (вызывая её два раза), сохраняет в регистрах и выводит на экран результаты вычислений.
Начальные значения {x1, y1, z1} расположить в регистрах a2, a3, a4; значения {x2, y2, z2} расположить в регистрах a5, a6, a7; значения констант a, b, c расположить в регистрах s0, s1, s2. Результаты вычисления {r1, r2} записать в регистры а1, а2.
В исходном коде обязательно должны быть употреблены следующие псевдоинструкции: call (ровно 1 раз), ret (ровно 1 раз), mv (как минимум 1 раз), li (как минимум 2 раза: 1 раз – преобразующаяся в две инструкции; 1 раз – преобразующаяся в одну инструкцию).
Моделируемые вычисления (формула, входные данные, результаты) должны выводиться в консоль.
Вариант 4.
R = ((x & (-a)) ^ (y >> c)) + (z << b)
a = 20, b = 7, c = 9
R = ((x & (-20)) ^ (y >> 9)) + (z << 7)
Протокол
Отладка.
Адрес инстр. |
(Псевдо-) инстр. |
Инструкция(и) |
16-ричный код инстр. |
Содержимое регистров и ячеек памяти |
|
до вып. инструкции |
после вып. инструкции |
||||
0 |
lw a2, x1 |
auipc x12 0x10000 |
10000617 |
a2 = 0x00000000 |
a2 = 0x10000000 |
4 |
|
lw x12 0 x12 |
00062603 |
a2 = 0x10000000 |
a2 = 0x0000000a |
8 |
lw a3, y1 |
auipc x13 0x10000 |
10000697 |
a3 = 0x00000000 |
a3 = 0x10000008 |
c |
|
lw x13 -4 x13 |
ffc6a683 |
a3 = 0x10000008 |
a3 = 0x0000000f |
10 |
lw a4, z1 |
auipc x14 0x10000 |
10000717 |
a4 = 0x00000000 |
a4 = 0x10000010 |
14 |
|
lw x14 -8 x14 |
ff872703 |
a4 = 0x10000010 |
a4 = 0x00000005 |
18 |
lw a5, x2 |
auipc x15 0x10000 |
10000797 |
a5 = 0x00000000 |
a5 = 0x10000018 |
1c |
|
lw x15 -12 x15 |
ff47a783 |
a5 = 0x10000018 |
a5 = 0x00000008 |
20 |
lw a6, y2 |
auipc x16 0x10000 |
10000817 |
a6 = 0x00000000 |
a6 = 0x10000020 |
24 |
|
lw x16 -16 x16 |
ff082803 |
a6 = 0x10000020 |
a6 = 0x00000014 |
28 |
lw a7, z2 |
auipc x17 0x10000 |
10000897 |
a7 = 0x00000000 |
a7 = 0x10000028 |
2c |
|
lw x17 -20 x17 |
fec8a883 |
a7 = 0x10000028 |
a7 = 0x00000007 |
30 |
lw s0, a |
auipc x8 0x10000 |
10000417 |
s0 = 0x00000000 |
s0 = 0x10000030 |
34 |
|
lw x8 -24 x8 |
fe842403 |
s0 = 0x10000030 |
s0 = 0x00000014 |
38 |
lw s1, b |
auipc x9 0x10000 |
10000497 |
s1 = 0x00000000 |
s1 = 0x10000038 |
3c |
|
lw x9 -28 x9 |
fe44a483 |
s1 = 0x10000038 |
s1 = 0x00000007 |
40 |
lw s2, c |
auipc x18 0x10000 |
10000917 |
s2 = 0x00000000 |
s2 = 0x10000040 |
44 |
|
lw x18 -32 x18 |
fe092903 |
s2 = 0x10000040 |
s2 = 0x00000009 |
48 |
mv t0, a2 |
addi x5 x12 0 |
00060293 |
t0 = 0x00000000 |
t0 = 0x0000000a |
4c |
mv t1, a3 |
addi x6 x13 0 |
00068313 |
t1 = 0x00000000 |
t1 = 0x0000000f |
50 |
mv t2, a4 |
addi x7 x14 0 |
00070393 |
t2 = 0x00000000 |
t2 = 0x00000005 |
54 |
call func |
auipc x1 0x0 <main> |
00000097 |
ra = 0x00000000 |
ra = 0x00000054 |
58 |
|
jalr x1 x1 304 |
130080e7 |
ra = 0x00000054 |
ra = 0x0000005c |
194 |
mv t3, s0 |
addi x28 x8 0 |
00040e13 |
t3 = 0x00000000 |
t3 = 0x00000014 |
198 |
neg t3, t3 |
sub x28 x0 x28 |
41c00e33 |
t3 = 0x00000014 |
t3 = 0xffffffec |
19c |
and t3, t0, t3 |
and x28 x5 x28 |
01c2fe33 |
t3 = 0xffffffec |
t3 = 0x00000008 |
1a0 |
srl t4, t1, s2 |
srl x29 x6 x18 |
01235eb3 |
t4 = 0x00000000 |
t4 = 0x00000000 |
1a4 |
xor t5, t3, t4 |
xor x30 x28 x29 |
01de4f33 |
t5 = 0x00000000 |
t5 = 0x00000008 |
1a8 |
sll t6, t2, s1 |
sll x31 x7 x9 |
00939fb3 |
t6 = 0x00000000 |
t6 = 0x00000280 |
1ac |
add a0, t5, t6 |
add x10 x30 x31 |
01ff0533 |
a0 = 0x00000000 |
a0 = 0x00000288 |
1b0 |
ret |
jalr x0 x1 0 |
00008067 |
|
|
5c |
mv a1, a0 |
addi x11 x10 0 |
00050593 |
a1 = 0x00000000 |
a1 = 0x00000288 |
60 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000007 |
a7 = 0x00000004 |
64 |
la a0, xyz1 |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000288 |
a0 = 0x10000064 |
68 |
|
addi x10 x10 -21 |
feb50513 |
a0 = 0x10000064 |
a0 = 0x1000004f |
6c |
ecall |
ecall |
00000073 |
|
|
70 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
74 |
mv a0, a2 |
addi x10 x12 0 |
00060513 |
a0 = 0x1000004f |
a0 = 0x0000000a |
78 |
ecall |
ecall |
00000073 |
|
|
7c |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
80 |
la a0, sep |
auipc x10 0x10000 |
10000517 |
a0 = 0x0000000a |
a0 = 0x10000080 |
84 |
|
addi x10 x10 -92 |
fa450513 |
a0 = 0x10000080 |
a0 = 0x10000024 |
88 |
ecall |
ecall |
00000073 |
|
|
8c |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
90 |
mv a0, a3 |
addi x10 x13 0 |
00068513 |
a0 = 0x10000024 |
a0 = 0x0000000f |
94 |
ecall |
ecall |
00000073 |
|
|
98 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
9c |
la a0, sep |
auipc x10 0x10000 |
10000517 |
a0 = 0x0000000f |
a0 = 0x1000009c |
a0 |
|
addi x10 x10 -120 |
f8850513 |
a0 = 0x1000009c |
a0 = 0x10000024 |
a4 |
ecall |
ecall |
00000073 |
|
|
a8 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
ac |
mv a0, a4 |
addi x10 x14 0 |
00070513 |
a0 = 0x10000024 |
a0 = 0x00000005 |
b0 |
ecall |
ecall |
00000073 |
|
|
b4 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
b8 |
la a0, f |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000005 |
a0 = 0x100000b8 |
bc |
|
addi x10 x10 -145 |
f6f50513 |
a0 = 0x100000b8 |
a0 = 0x10000027 |
c0 |
ecall |
ecall |
00000073 |
|
|
c4 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000004 |
a7 = 0x00000004 |
c8 |
la a0, answer |
auipc x10 0x10000 |
10000517 |
a0 = 0x10000027 |
a0 = 0x100000c8 |
cc |
|
addi x10 x10 -91 |
fa550513 |
a0 = 0x100000c8 |
a0 = 0x1000006d |
d0 |
ecall |
ecall |
00000073 |
|
|
d4 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
d8 |
mv a0, a1 |
addi x10 x11 0 |
00058513 |
a0 = 0x1000006d |
a0 = 0x00000288 |
dc |
ecall |
ecall |
00000073 |
|
|
e0 |
mv t0, a5 |
addi x5 x15 0 |
00078293 |
t0 = 0x0000000a |
t0 = 0x00000008 |
e4 |
mv t1, a6 |
addi x6 x16 0 |
00080313 |
t1 = 0x0000000f |
t1 = 0x00000014 |
e8 |
lw t2, z2 |
auipc x7 0x10000 |
10000397 |
t2 = 0x00000005 |
t2 = 0x100000e8 |
ec |
|
lw x7 -212 x7 |
f2c3a383 |
t2 = 0x100000e8 |
t2 = 0x00000007 |
f0 |
jal func |
jal x1 148 <func> |
094000ef |
ra = 0x0000005c |
ra = 0x000000f4 |
194 |
mv t3, s0 |
addi x28 x8 0 |
00040e13 |
t3 = 0x00000008 |
t3 = 0x00000014 |
198 |
neg t3, t3 |
sub x28 x0 x28 |
41c00e33 |
t3 = 0x00000014 |
t3 = 0xffffffec |
19c |
and t3, t0, t3 |
and x28 x5 x28 |
01c2fe33 |
t3 = 0xffffffec |
t3 = 0x00000008 |
1a0 |
srl t4, t1, s2 |
srl x29 x6 x18 |
01235eb3 |
t4 = 0x00000000 |
t4 = 0x00000000 |
1a4 |
xor t5, t3, t4 |
xor x30 x28 x29 |
01de4f33 |
t5 = 0x00000008 |
t5 = 0x00000008 |
1a8 |
sll t6, t2, s1 |
sll x31 x7 x9 |
00939fb3 |
t6 = 0x00000280 |
t6 = 0x00000380 |
1ac |
add a0, t5, t6 |
add x10 x30 x31 |
01ff0533 |
a0 = 0x00000288 |
a0 = 0x00000388 |
1b0 |
ret |
jalr x0 x1 0 |
00008067 |
|
|
f4 |
mv a2, a0 |
addi x12 x10 0 |
00050613 |
a2 = 0x0000000a |
a2 = 0x00000388 |
f8 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
fc |
la a0, xyz2 |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000388 |
a0 = 0x100000fc |
100 |
|
addi x10 x10 -159 |
f6150513 |
a0 = 0x100000fc |
a0 = 0x1000005d |
104 |
ecall |
ecall |
00000073 |
|
|
108 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
10c |
mv a0, a5 |
addi x10 x15 0 |
00078513 |
a0 = 0x1000005d |
a0 = 0x00000008 |
110 |
ecall |
ecall |
00000073 |
|
|
114 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
118 |
la a0, sep |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000008 |
a0 = 0x10000118 |
11c |
|
addi x10 x10 -244 |
f0c50513 |
a0 = 0x10000118 |
a0 = 0x10000024 |
120 |
ecall |
ecall |
00000073 |
|
|
124 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
128 |
mv a0, a6 |
addi x10 x16 0 |
00080513 |
a0 = 0x10000024 |
a0 = 0x00000014 |
12c |
ecall |
ecall |
00000073 |
|
|
130 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
134 |
la a0, sep |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000014 |
a0 = 0x10000134 |
138 |
|
addi x10 x10 -272 |
ef050513 |
a0 = 0x10000134 |
a0 = 0x10000024 |
13c |
ecall |
ecall |
00000073 |
|
|
140 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
144 |
lw a0, z2 |
auipc x10 0x10000 |
10000517 |
a0 = 0x10000024 |
a0 = 0x10000144 |
148 |
|
lw x10 -304 x10 |
ed052503 |
a0 = 0x10000144 |
a0 = 0x00000007 |
14c |
ecall |
ecall |
00000073 |
|
|
150 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000001 |
a7 = 0x00000004 |
154 |
la a0, f |
auipc x10 0x10000 |
10000517 |
a0 = 0x00000007 |
a0 = 0x10000154 |
158 |
|
addi x10 x10 -301 |
ed350513 |
a0 = 0x10000154 |
a0 = 0x10000027 |
15c |
ecall |
ecall |
00000073 |
|
|
160 |
li a7, 4 |
addi x17 x0 4 |
00400893 |
a7 = 0x00000004 |
a7 = 0x00000004 |
164 |
la a0, answer |
auipc x10 0x10000 |
10000517 |
a0 = 0x10000027 |
a0 = 0x10000164 |
168 |
|
addi x10 x10 -247 |
f0950513 |
a0 = 0x10000164 |
a0 = 0x1000006d |
16c |
ecall |
ecall |
00000073 |
|
|
170 |
li a7, 1 |
addi x17 x0 1 |
00100893 |
a7 = 0x00000004 |
a7 = 0x00000001 |
174 |
mv a0, a2 |
addi x10 x12 0 |
00060513 |
a0 = 0x1000006d |
a0 = 0x00000388 |
178 |
ecall |
ecall |
00000073 |
|
|
17c |
li a7, 2500 |
lui x17 0x1 |
000018b7 |
a7 = 0x00000001 |
a7 = 0x00001000 |
180 |
|
addi x17 x17 -1596 |
9c488893 |
a7 = 0x00001000 |
a7 = 0x000009c4 |
184 |
li s3, 2490 |
lui x19 0x1 |
000019b7 |
s3 = 0x00000000 |
s3= 0x00001000 |
188 |
|
addi x19 x19 -1606 |
9ba98993 |
s3= 0x00001000 |
s3= 0x000009ba |
18c |
sub a7, a7, s3 |
sub x17 x17 x19 |
413888b3 |
a7 = 0x000009c4 |
a7 = 0x0000000a |
190 |
ecall |
ecall |
00000073 |
|
|
