ЛР6. Исправление программы и микроархитектуры

В программе осуществлялся невыровненный доступ в память, использовался
непонятный лейбл, инструкция ветвления прыгала на следующую инструкцию,
что затруднит проверку результата ветвления.
В микроархитектуре была ошибка с генерацией разрешения записи в
регистровый файл.
This commit is contained in:
Andrei Solodovnikov
2023-09-08 11:19:57 +03:00
parent a3cf97621e
commit 64483f7080
4 changed files with 25 additions and 19 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

@@ -77,20 +77,21 @@
08: add x3, x1, x2 08: add x3, x1, x2
0C: and x4, x1, x2 0C: and x4, x1, x2
10: sub x5, x4, x3 10: sub x5, x4, x3
14: mul x6, x3, x4 // неподдерживаемая инструкция 14: mul x6, x3, x4 // неподдерживаемая инструкция
18: jal x15, jlr 18: jal x15, 0x00034 // прыжок на адрес 0x4C
1C: jalr x15, 0x0(x6) 1C: jalr x15, 0x0(x6)
20: slli x7, x5, 31 20: slli x7, x5, 31
24: srai x8, x7, 1 24: srai x8, x7, 1
28: srli x9, x8, 29 28: srli x9, x8, 29
2C: sw x1, 0x0(x5) 2C: sw x1, 0x0(x4)
30: lw x10, 0x0(x5) 30: lw x10, 0x0(x4)
34: lui x11, 0xFFF80 34: lui x11, 0xFFF80
38: auipc x12, 0x00004 38: auipc x12, 0x00004
3C: bne x3, x4, 0x04 3C: bne x3, x4, 0x08 // перескок через
40: jal x13, 0x00004 40: // нелегальную нулевую инструкцию
44: jalr x14, 0x0(x13) 44: jal x13, 0x00004
48: jalr x15, 0x4(x15) 48: jalr x14, 0x0(x13)
4C: jalr x15, 0x4(x15)
``` ```
Теперь в соответствии с кодировкой инструкций переведем программу в машинные коды: Теперь в соответствии с кодировкой инструкций переведем программу в машинные коды:
@@ -102,19 +103,20 @@
0C: 0000000 00001 00010 111 00100 0110011 0C: 0000000 00001 00010 111 00100 0110011
10: 0100000 00011 00100 000 00101 0110011 10: 0100000 00011 00100 000 00101 0110011
14: 0000001 00011 00100 000 00110 0110011 14: 0000001 00011 00100 000 00110 0110011
18: 00000011000000000000 01111 1101111 18: 00000011010000000000 01111 1101111
1C: 000000000000 00110 000 01111 1100111 1C: 000000000000 00110 000 01111 1100111
20: 0000000 11111 00101 001 00111 0010011 20: 0000000 11111 00101 001 00111 0010011
24: 0100000 00001 00111 101 01000 0010011 24: 0100000 00001 00111 101 01000 0010011
28: 0000000 11101 01000 101 01001 0010011 28: 0000000 11101 01000 101 01001 0010011
2C: 0000000 00001 00101 010 00000 0100011 2C: 0000000 00001 00100 010 00000 0100011
30: 000000000000 00101 010 01010 0000011 30: 000000000000 00100 010 01010 0000011
34: 11111111111110000000 01011 0110111 34: 11111111111110000000 01011 0110111
38: 00000000000000000100 01100 0010111 38: 00000000000000000100 01100 0010111
3C: 0000000 00011 00100 001 00100 1100011 3C: 0000000 00011 00100 001 01000 1100011
40: 00000000010000000000 01101 1101111 40: 00000000 00000000 00000000 00000000
44: 000000000000 01101 000 01110 1100111 44: 00000000010000000000 01101 1101111
48: 000000000100 01111 000 01111 1100111 48: 000000000000 01101 000 01110 1100111
4C: 000000000100 01111 000 01111 1100111
``` ```
Данная программа, представленная в шестнадцатиричном формате находится в файле [program.txt](program.txt). Данная программа, представленная в шестнадцатиричном формате находится в файле [program.txt](program.txt).

View File

@@ -24,7 +24,7 @@ b3
02 02
ef ef
07 07
00 40
03 03
e7 e7
07 07
@@ -43,11 +43,11 @@ d4
d4 d4
01 01
23 23
a0 20
12 12
00 00
03 03
a5 25
02 02
00 00
b7 b7
@@ -59,9 +59,13 @@ ff
00 00
00 00
63 63
92 94
41 41
00 00
00
00
00
00
ef ef
06 06
40 40