34 lines
1.2 KiB
Markdown
34 lines
1.2 KiB
Markdown
# L08 · Subroutines and ABI
|
|
|
|
Karta pokazuje, co musi wydarzyć się przy wywołaniu funkcji. Uczeń oblicza
|
|
cel oraz adres powrotu dla `JAL/JALR`, klasyfikuje wszystkie rejestry według
|
|
ABI RV32I i obserwuje dwa zagnieżdżone wywołania na małym stosie powrotów.
|
|
|
|
## Taski
|
|
|
|
| Task | PASS |
|
|
| --- | --- |
|
|
| `task01_link_address` | JAL: `target=0x118 link=0x104`; JALR: `target=0x200` |
|
|
| `task02_abi_registers` | 8 argumentów, 12 saved, 7 temporaries, 5 fixed |
|
|
| `task03_call_stack` | powroty `0x204`, `0x104`, underflow po trzecim return |
|
|
|
|
```bash
|
|
stemctl card use rv32i-asm L08
|
|
stemctl test native-amd64 rv32i-asm L08 1
|
|
stemctl test hazard3-sim rv32i-asm L08 2
|
|
stemctl debug hazard3-sim rv32i-asm L08 3
|
|
```
|
|
|
|
Model AMD64 i RTL są niezależne. `debug` generuje VCD. Wyniki należy zapisać
|
|
w [answers/subroutines-abi-evidence.md](answers/subroutines-abi-evidence.md).
|
|
|
|
Inwarianty:
|
|
|
|
- link zawsze wskazuje `pc+4`;
|
|
- `JALR` zeruje bit 0 celu;
|
|
- `x10..x17` to argumenty, `x8..x9` oraz `x18..x27` są callee-saved;
|
|
- wywołanie odkłada link, return zdejmuje ostatni link (LIFO);
|
|
- overflow i underflow są jawne i nie uszkadzają głębokości stosu.
|
|
|
|
L09 wykorzysta zasady adresowania do pełnej semantyki load/store.
|