Для пользователей Линукса: у меня этот тренажёр запускается через программу wine.
В архиве с ЛамПанелью в папке examples лежат примеры, которые были рассмотрены на лекции. Мы рассмотрели следующее:
начало: simplest arithmetics табло: e97 infinite loop-ror labels: array-mul строки: array-to-low stack: stack call: call-div-mod system: invert
Задание сдаётся по почте: к письму прикладывайте архив с текстами программ. Каждая задача стоит 7 баллов.
Задача 1: массив и цикл
Напишите программу, которая находит минимум массива двухбайтовых чисел. Массив чисел определяется несколькими командами data после метки array. В комментариях в программе укажите: вы интерпретируете числа как знаковые или как беззнаковые (это вообще важно?).
Задача 2: вложенные циклы
Напишите программу, которая двумя вложенными циклами считает сумму 1! + 2! + ... + 7!. Результат вычисления оставьте в регистре r0.
Задача 3: заполнение экрана
Напишите программу, которая как-нибудь интересно динамически заполняет экран из лампочек. Например, на исходно черном экране по одной зажигает лампочки по спирали. В программе должен быть какой-нибудь содержательный цикл и какие-нибудь нужные битовые операции.
Задача 4 (необязательная): работа со стеком, рекурсия
Напишите программу, которая считает сумму 1! + 2! + ... + 7!, используя функцию вычисления факториала. Функция вычисления факториала принимает один аргумент на стеке - число n, и возвращает ответ в регистре r0. Функция не должна изменять значения регистров r1, r2 и r3: регистры можно использовать, но тогда их значения сначала надо сохранить на стеке, а после использования значения регистров надо восстановить со стека. Функция вычисления факториала должна быть рекурсивной.
Задача 5 (необязательная): строки, переменное число аргументов
Напишите и вызовите функцию конкатенации нескольких строк. Функция принимает количество строк, которое требуется склеить, адреса первых символов строк в памяти и адрес для складывания ответа. Все параметры - количество и адреса - передаются в функцию через стек. Каждая строка - это последовательность байтов с кодами от 1 до 255, которая заканчивается символом с кодом 0.