Professional Documents
Culture Documents
Вежбе 2
Наставак архитектуре RISC-V и
адресирање меморије 1. део (линкер)
Листа предмета:
ir2os1@lists.etf.rs
Оперативни системи 1, ЕТФ 2022. 1
Архитектура RISC-V - наставак
ret_a
s0_a
uint64 pc;
void a() {
asm volatile("mv %0, ra" : "=r“ (pc));
}
void b() {
asm volatile("mv ra, %0" : :"r“ (pc));
}
void main() {
a();
__putc('a');
__putc('\n');
b();
}
5
Оперативни системи 1, ЕТФ 2022.
Задатак 3.
• Написати програм за процесор RISC-V који треба да
изврши неки потпрограм, али тако да се нигдe у коду
не види позив тог потпрограма.
void f() {
__putc('a');
__putc('\n');
void dispatch() {
asm volatile("mv %0, ra" : "=r" (pc));
asm volatile("mv ra, %0" : :"r" (f));
}
call interrupt
uint64 timer = 0;
extern "C" void interruptvec();
extern "C" void interrupt() {
uint64 scause;
asm volatile("csrr %0,scause":"=r"(scause));
if (scause == 0x8000000000000001UL) {
timer++;
if (timer >= 50) {
__putc('a');
__putc('\n');
timer = 0;
}
uint64 sip;
asm volatile("csrr %0, sip" : "=r" (sip));
sip &= ~2;
asm volatile("csrw sip, %0" : : "r" (sip));
}
console_handler(); Оперативни системи 1, ЕТФ 2022. 13
}
void main() {
asm volatile("csrw stvec, %0" : : "r" (interruptvec));
uint64 sstatus;
asm volatile("csrr %0, sstatus" : "=r" (sstatus));
sstatus |= 1 << 1;
asm volatile("csrw sstatus, %0" : : "r" (sstatus));
while(1);
}