Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ОргЭВМ 2023 / Baraeva_Elizaveta_lb5.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
266 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе 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)

Протокол

  1. Отладка.

Адрес инстр.

(Псевдо-) инстр.

Инструкция(и)

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

Соседние файлы в папке Лабы по ОргЭВМ 2023