ecall

ecall

Асемблер RISC-V Посилання

lyszt.net охоплює ecall та інші інструкції RISC-V більш детально.

Опис

ecall просить середовище, у якому виконується ваша програма, виконати послугу. Асемблер може додавати й переміщати числа, але екран, клавіатура та інші пристрої належать системі, яка розміщує програму, тому код не може дістатися до них самостійно. ecall означає виклик середовища. Він зупиняє ваш код, хост виконує послугу, і керування повертається до вашого коду. Хостом є операційна система на реальному обладнанні, а в цьому симуляторі — сам симулятор.

Програма називає послугу, яку хоче. За домовленістю номер послуги поміщається в a7, будь-які дані, потрібні послузі, поміщаються в a0, а потім виконується ecall. Цей симулятор пропонує такі послуги: 1 друкує ціле число в a0, 4 друкує текст за адресою в a0, 5 зчитує число з вводу в a0, 10 завершує програму, а 32 призупиняє на a0 мілісекунд.

Щоб надрукувати число, завантажте 1 в a7, щоб вибрати послугу друку, завантажте число в a0 і виконайте ecall. Приклад робить це. Послуга 10 завершує програму, тому уроки закінчуються двома рядками нижче. Без неї процесор продовжує після останнього рядка в те, що йде далі.

li a7, 10
ecall

Посібник RISC-V стверджує, що ecall надсилає запит на послугу до середовища виконання, і що середовище вирішує, як передаються параметри, зазвичай у визначених цілочисельних регістрах. Цей симулятор є тут середовищем і визначає перелічені вище номери послуг. Посібник також зазначає, що ecall колись називався scall. Його супутник ebreak повертає керування до налагоджувача. Обидва викликають точну запитану пастку до середовища.

Повна операційна система працює так само, з довшим списком послуг.

Приклад

li a7, 1     # service 1 = print integer
li a0, 42
ecall        # prints 42