diff --git a/.pic/Labs/lab_06_dp/fig_01.drawio.png b/.pic/Labs/lab_06_dp/fig_01.drawio.png index 192f2ad..0874e6e 100644 Binary files a/.pic/Labs/lab_06_dp/fig_01.drawio.png and b/.pic/Labs/lab_06_dp/fig_01.drawio.png differ diff --git a/.pic/Labs/lab_06_dp/fig_02.drawio.png b/.pic/Labs/lab_06_dp/fig_02.drawio.png index 5b368d9..094118a 100644 Binary files a/.pic/Labs/lab_06_dp/fig_02.drawio.png and b/.pic/Labs/lab_06_dp/fig_02.drawio.png differ diff --git a/Labs/06. Datapath/README.md b/Labs/06. Datapath/README.md index 83868b4..1526595 100644 --- a/Labs/06. Datapath/README.md +++ b/Labs/06. Datapath/README.md @@ -77,20 +77,21 @@ 08: add x3, x1, x2 0C: and x4, x1, x2 10: sub x5, x4, x3 -14: mul x6, x3, x4 // неподдерживаемая инструкция -18: jal x15, jlr +14: mul x6, x3, x4 // неподдерживаемая инструкция +18: jal x15, 0x00034 // прыжок на адрес 0x4C 1C: jalr x15, 0x0(x6) 20: slli x7, x5, 31 24: srai x8, x7, 1 28: srli x9, x8, 29 -2C: sw x1, 0x0(x5) -30: lw x10, 0x0(x5) +2C: sw x1, 0x0(x4) +30: lw x10, 0x0(x4) 34: lui x11, 0xFFF80 38: auipc x12, 0x00004 -3C: bne x3, x4, 0x04 -40: jal x13, 0x00004 -44: jalr x14, 0x0(x13) -48: jalr x15, 0x4(x15) +3C: bne x3, x4, 0x08 // перескок через +40: // нелегальную нулевую инструкцию +44: jal x13, 0x00004 +48: jalr x14, 0x0(x13) +4C: jalr x15, 0x4(x15) ``` Теперь в соответствии с кодировкой инструкций переведем программу в машинные коды: @@ -102,19 +103,20 @@ 0C: 0000000 00001 00010 111 00100 0110011 10: 0100000 00011 00100 000 00101 0110011 14: 0000001 00011 00100 000 00110 0110011 -18: 00000011000000000000 01111 1101111 +18: 00000011010000000000 01111 1101111 1C: 000000000000 00110 000 01111 1100111 20: 0000000 11111 00101 001 00111 0010011 24: 0100000 00001 00111 101 01000 0010011 28: 0000000 11101 01000 101 01001 0010011 -2C: 0000000 00001 00101 010 00000 0100011 -30: 000000000000 00101 010 01010 0000011 +2C: 0000000 00001 00100 010 00000 0100011 +30: 000000000000 00100 010 01010 0000011 34: 11111111111110000000 01011 0110111 38: 00000000000000000100 01100 0010111 -3C: 0000000 00011 00100 001 00100 1100011 -40: 00000000010000000000 01101 1101111 -44: 000000000000 01101 000 01110 1100111 -48: 000000000100 01111 000 01111 1100111 +3C: 0000000 00011 00100 001 01000 1100011 +40: 00000000 00000000 00000000 00000000 +44: 00000000010000000000 01101 1101111 +48: 000000000000 01101 000 01110 1100111 +4C: 000000000100 01111 000 01111 1100111 ``` Данная программа, представленная в шестнадцатиричном формате находится в файле [program.txt](program.txt). diff --git a/Labs/06. Datapath/program.txt b/Labs/06. Datapath/program.txt index 34e7d4b..3f4ffbe 100644 --- a/Labs/06. Datapath/program.txt +++ b/Labs/06. Datapath/program.txt @@ -24,7 +24,7 @@ b3 02 ef 07 -00 +40 03 e7 07 @@ -43,11 +43,11 @@ d4 d4 01 23 -a0 +20 12 00 03 -a5 +25 02 00 b7 @@ -59,9 +59,13 @@ ff 00 00 63 -92 +94 41 00 +00 +00 +00 +00 ef 06 40