главы 8–9
RISC-V: настоящий набор команд
Учебная ЭВМ показывает принцип. Настоящий процессор RISC-V устроен так же — выборка, декодирование, выполнение, — только регистров 32, команды 32-битные и форматов шесть. Ниже работающий ассемблер и эмулятор: программы из листингов книги собираются в машинный код и выполняются по шагам, с системными вызовами Linux.
RISC и CISC
| RISC (RISC-V, ARM) | CISC (x86) | |
|---|---|---|
| Длина команды | фиксированная, 32 бита | от 1 до 15 байт |
| Работа с памятью | только load/store | почти любая команда |
| Регистров общего назначения | 32 | 16 |
| Декодер | простой | сложный, команды разбиваются на микрооперации |
Внутри современный x86 тоже превращает сложные команды в простые RISC-подобные микрооперации — как учебная ЭВМ превращает ADD в последовательность микрокоманд.
Форматы команд
Ассемблер и эмулятор
Выберите программу из листингов, соберите её и выполняйте по шагам. Исходный текст можно менять.
Как это запускают по книге: QEMU и тулчейн
$ sudo apt install qemu-system-riscv64 u-boot-qemu opensbi # раздел 8.3.2
$ qemu-system-riscv64 -machine virt -cpu rv64 -m 2G -nographic \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-device virtio-blk-device,drive=hd0 -drive file=ubunturv.img,format=raw,id=hd0 …
# внутри гостевой Ubuntu для RISC-V:
$ as -o HelloWorld.o HelloWorld.S # ассемблер → объектный файл
$ ld -o HelloWorld HelloWorld.o # компоновщик → исполняемый ELF
$ ./HelloWorld
Hello RISC-V World!
$ gdb ./HelloWorld → break _start, run, stepi, info registers # листинг 8.11