Задачи
Критерии оценки при написании эмулятора
- Отлично - умение писать новый код, искать и исправлять ошибки в старом коде самостоятельно
- Хорошо - умение читать код и модифицировать его, уметь искать ошибки (в том числе пользоваться отладочной печатью)
- Удовлетворительно - умение читать код и реализовывать новые функции ассемблера pdp-11.
Критерии (часть про язык С) - опрашиваются ВСЕ студенты
- +1 балл - уверенное пользование структурами и работа с памятью
- -1 балл - за каждую плохо изученную тему: struct, строки, работа с памятью, указатели.
- -2 балла - за каждую плохо изученную тему: переменные, функции, циклы, массивы, условные операторы.

Критерии оценки эмулятора (устарело)
- 9 - работают jsr+rts (печать Hello, world! с использованием функций)
- 8 - br + печать символа (печать Hello, world! БЕЗ использования функций = сложение массива до 0 + печать *)
- 7 - sob, movb - сложение массива слов, сложение массива байт
- 6 - 2+3 - пройден первый тест, работают команды mov, add, halt, и первые 2 моды (быть может только для слов)
- -1 - код расположен в одном файле
- -1 - исполняемый файл подается на stdin. Надо: его имя должно указываться в аргументах командной строки (для windows можно поторговаться и забить его имя прямо в коде).
- +1 - сделана трассировка печати (реализована функция с переменным количеством аргументов)
Поурочные планы
- Сложение 2 чисел. Результат посмотреть в регистре.
- Сложение N чисел массива. Результат посмотреть в регистре.
- а. Складываем массив байт.
- *. Сложение элементов массива, пока не встретится 0. Результат посмотреть в регистре.
- а. Складываем массив байт.
- Печатаем 1 символ на экран.
- Печатаем строку символов "Hello, world"
- Печатаем строку символов, оформляя код в виде функций.
- Печать числа в бинарном виде. Код оформить в виде функции put2
- Печать числа в восьмеричном виде. Код оформить в виде функции put8
- Печать числа в шестнадцетиричном виде. Код оформить в виде функции puthex
- *. Печать числа в десятичном виде. Код оформить в виде функции put10
Задачи зачета
Удовлетворительно
У1. Просуммировать все положительные элементы массива, длинной N. У2. Просуммировать все положительные элементы массива, оканчивающегося 0 (нулем). У3. Напечатать строку наоборот. "Hello" печатаем как "olleH" У4. Найти сумму первых N чисел арифметической прогрессии. Заданы a0 и d. Очередной член прогрессии вычисляется по формуле ai = ai-1 + d. Вычислить сумму первых N членов прогрессии БЕЗ использования умножения и деления. У5. Реализовать умножение целых чисел без использования умножения (через цикл сложения). У6. Подсчитать количество буков W в строке с учетом регистра. У7. Подсчитать площадь прямоугольника по двум сторонам (целые числа). У8. Подсчитать длину отрезка АВ, заданного координатами его вершин (целые числа а и b) У9. Найти минимальное из двух чисел. У10. Вычислить координату середины отрезка АВ (с округлением вниз), заданного координатами его вершин (целые числа а и b) У11. Напечатать строку через один символ, те если задана строка "Hello, world!", напечатать надо Hlo ol! У12. Просуммировать массив чисел парами. Напечатать эти суммы. Число пар задано, массив четной длины. У13. Найти сумму четных и сумму нечетных элементов массива. У14. Найти сумму элементов массива, стоящих на четных местах и сумму элементов массива, стоящих на нечетных местах. У15. Сложить два вектора. У16. Вычесть два вектора. У17. Подсчитать длину строки. У18. Найти есть указанная буква в строке или нет. (В определенный регистр положить 1 или 0). У19. Найти индекс первого вхождения буквы в строку, иначе -1. (положить в определенный регистр). У20. Найти индекс последнего вхождения буквы в строку, иначе -1. (положить в определенный регистр). У21. Сложить два числа. Каждое число состоит из 2 слов. Y22. Дано число (слово). Сделать из него другое слово так, чтобы младший байт нового слова был старшим байтом исходного и наоборот, старший байт нового слова был младшим байтом исходного. (из АВ сделать ВА). У23. Вычислить длину строки. У24. Напечатать последний символ строки. У25. Напечатать предпоследний символ строки (гарантируется, что он есть).Хорошо
Х1. Посчитать сколько в числе единиц в бинарном виде. Х1а. Посчитать сколько в числе нулей в бинарном виде. Х2. Выяснить, является ли строка палиндромом. Т.е. "alla", "qazaq" и тп. Х3. Выяснить, является ли число бинарным палиндромом. Х4. Просуммировать все кратные 3 элементы массива длинной N. Х5. Напечатать прямоугольник из * размером N на K. Х6. Напечатать шахматную доску из * и - размером N на N. Х7. Найти сколько пар 01 есть в бинарном представлении числа. Х8. Найти сколько пар 10 есть в бинарном представлении числа. Х9. Найти сколько раз цифра 3 входит в восьмеричную запись числа. Х10. Найти сколько раз цифра 9 входит в шестнадцатиричную запись числа. Х11. Напечатать прямоугольник размером N на М в полосочку (горизонтальную) из = и | Х12. Напечатать прямоугольник размером N на М в полосочку (вертикальную) из = и | Х13. Дан 1 байт. Сделать из него слово - бинарный палиндром. Х13a. Дан 1 байт. Сделать из него слово - шестнадцатеричный палиндром. Х14. Написать функцию, которая считает площадь квадрата по заданной стороне, если длина стороны не отрицательная и возвращает -1, если длина стороны больше или равна 0. Длина стороны - целое число. X15. Для бинарного числа получить наибольшее число перестановкой цифр. X16. Для восьмеричного числа получить наибольшее число перестановкой цифр. X17. Для шестнадцатеричного числа получить наибольшее число перестановкой цифр. X18. Для десятичного числа получить наибольшее число перестановкой цифр. X19. Для бинарного числа, заданного в виде строки символов (цифр), оканчивающейся нулем, получить наибольшее число перестановкой символов. X19а. Для бинарного числа, заданного в виде строки символов (цифр), оканчивающейся нулем, получить наименьшее число перестановкой символов. X20. Для восьмеричного числа, заданного в виде строки символов (цифр), оканчивающейся нулем, получить наибольшее число перестановкой символов. X21. Для шестнадцатеричного числа, заданного в виде строки символов (цифр), оканчивающейся нулем, получить наименьшее число перестановкой символов. X22. Для десятичного числа, заданного в виде строки символов (цифр), оканчивающейся нулем, получить наименьшее число перестановкой символов. X23. Сложить два бинарных числа, заданных в виде строки.X23a. Сложить два бинарных числа, заданных в виде строки. Числа одинаковой длины.
X23b. Сложить два бинарных числа, заданных в виде строки. Реализовать сложение через стек. X24. Сложить два восьмеричных числа, заданных в виде строки. X25. Сложить два десятичных числа, заданных в виде строки. X26*. Сложить два шестнадцатеричных числа, заданных в виде строки. Х27. Напечатать средний символ строки нечетной длины. Х28. Напечатать первую половину строки. Х29. Напечатать вторую половину строки.
Отлично
О1. Найти n-тое число фибоначчи с помощью цикла. О2. Найти n-тое число фибоначчи с помощью рекурсивного вызова функций.Написать тест, проверяющий работу команды
- Модификация
- написать тест, проверяющий работу байтового варианта этой команды