diff --git a/Labs/04. Primitive programmable device/Индивидуальное задание/README.md b/Labs/04. Primitive programmable device/Индивидуальное задание/README.md index 40564c0..ab132bc 100644 --- a/Labs/04. Primitive programmable device/Индивидуальное задание/README.md +++ b/Labs/04. Primitive programmable device/Индивидуальное задание/README.md @@ -138,7 +138,6 @@ 9. После того, как вы написали программу, её необходимо проверить. Для этого сперва необходимо преобразовать её к формату, принимаемому памятью инструкций с помощью программы [`cyberconverter`](#cyberconverter). При необходимости, заменить данные в файле, инициализирующем память инструкций актуальными данными. 10. Если ваша программа использует данные с внешних устройств, нужно выставить проверяемое вами значение в модуле `testbench` на вход `sw_i` в месте подключения модуля `CYBERcobra`. 11. Проверка работы программы осуществляется аналогично проверке модуля `CYBERcobra` — вы достаете внутренние сигналы модуля, и смотрите за поведением сигналов: `PC`, `read_data` памяти инструкций, `flag` АЛУ, содержимым регистрового файла. Проверяете, что в конце на выходе `out_o` размещено корректное значение. -12. В случае, если вы не успели довести свой процессор до работоспособного состояния, вы можете проверить программу на готовом процессоре из ветки [`Я-не-смог`](https://github.com/MPSU/APS/tree/%D0%AF-%D0%BD%D0%B5-%D1%81%D0%BC%D0%BE%D0%B3). ## cyberconverter @@ -176,6 +175,10 @@ cyberconverter принимает до двух аргументов. Поряд ## Индивидуальные задания +В приведенных ниже заданиях под `a` будет подразумеваться некоторое число, заданное в программе (например в программе прописано `a=10`), под `sw_i` — вход с внешних устройств. "Вывести в `out_o`" — означает, что в конце программы необходимо реализовать бесконечный цикл, с указанием в `RA1` адреса регистра, хранящего результат (см. пункт 8 раздела "[Написание программы под процессор CYBERcobra](#написание-программы-под-процессор-cybercobra)"). + +В случае, если задание используется для написания программы на ассемблере, `sw_i` будет обозначать еще одно число, заданное в программе (как и `a`), а под "Вывести в `out_o`" — запись результата в регистр `x10` (в назначение этого регистра входит возврат результата функции) в конце выполнения программы. + 1. Вычислить [циклический сдвиг](https://ru.wikipedia.org/wiki/Битовый_сдвиг#Циклический_сдвиг) вправо `a >> sw_i`. Пример: `a = 0...01011`, `sw_i = 0...010`. Результат вычислений: `out_o = 110...010`. @@ -195,6 +198,7 @@ cyberconverter принимает до двух аргументов. Поряд 5. Вычислить приблизительное значение длины вектора `(a;sw_i)`. Вычисляется как `max + min/2`, где `max` и `min` — это большее и меньшее из чисел `a` и `sw_i` соответственно. Пример: `a = 0...011`, `sw_i = 0...0100`. Результат вычислений: `out_o = 0...0101`. + --- 6. Вычислить `a * sw_i` посредством суммы `sw_i` значений `a`. Вывести результат в `out_o`.