Список заданий и контрольные сроки сдачи
Я вижу и запоминаю,
Я делаю и понимаю.
Конфуций,
Мыслитель
и философ,
5 в до н.э.
Всего заданий: 7 основных и 4 бонуса(описание и сроки приведены ниже). Каждую неделю отставания от срока сдачи приводит к уменьшению максимального балла в 2 раза.
ПМиИ, ИСиТ: Для допуска к зачету необходимо выполнить минимум пять заданий. В случае сдачи 7 заданий (40 балла) без нарушения сроков зачет ставится по результатам выполнения лабораторных работ ("автоматом"), при сдаче задания с нарушением срока рекомендуется выполнить доп.задания. Формат проведения зачета: при очном проведении - письменный (от 35 баллов возможно устное собеседование).
ПрИн: Для допуска к экзамену необходимо выполнить минимум пять заданий. Формат проведения экзамена: устный.
- Студенты сдавшие 7 заданий и набравшие 40+ баллов могут получить оценку 5 после короткого собеседования.
- Студенты сдавшие 6 заданий и набравшие 34+ баллов могут получить оценку 4 по результатам выполнения лабораторных работа.
- Студенты сдавшие 5 заданий и набравшие 28+ баллов могут получить оценку 3 по результатам выполнения лабораторных работа.
- Студенты не набравшие баллов (или желающие повысить оценку на один балл) сдают экзамен в общем порядке, по билетам, в устной форме.
- Студенты у кого сдано меньше 5 задач к экзамену не допускаются.
Внимание! бонусные задания принимаются только в срок.
Задание 1
- Создать рабочий каталог pr1 (для работы в отладчике Kdbg в названии каталогов не должно быть кирилицы), скопировать в рабочий каталог программу task1.c, получить исполняемый файл task1-exe-c согласно инструкции в программе, запустить его в отладчике (kdbg task1-exe-c), отобразить значения переменных в окне локальных переменных (Вид/Locals или Вид/Watched expressions), выполнить программу пошагово, объяснить ее работу.
- Скопировать программу task1.S и файл my-macro в рабочий каталог. Пользуясь конспектом лекций и комментариями в программе изучить алгоритм и работу команд.
-
Изучить команды ассемблирования as и редактирования связей ld из файла task1.S,
добиться отсутствия синтаксических
ошибок, получить файл листинга task1.lst. Для редактирования и
компиляции рекомендуется использовать emacs.
Образец файла task1.lst - Внимательно ознакомиться со всеми деталями файла листинга, при необходимости записать пояснения инструктора.
- Понять и записать структуру и функции макроопределения и макровызова Finish.
- Выполнить команду ld из файла task1.S, добиться отсутствия сообщений об ошибках.
-
Запустить отладчик kdbg, научиться управлять ходом
выполнения программы, устанавливать контрольные точки,
активировать окно Registers (меню
Вид/Registers), просматривать
значения переменных в окне Watched expressions (меню Вид/Watched
expressions) или Locals (меню Вид/Locals).
Внимание! Файлы имя которых содержит символы кириллицы или начинается с цифры могут некорректно обрабатываться отладчиком kdbg.
Зачет: самостоятельно получить выполняемый файл (с другим именем), запустить его под управлением отладчика, создать окна отображения регистров и переменных программы, выполнить программу в шаговом режиме, правильно поясняя изменения регистров и переменных. Объяснить работу макрокоманды Finish.
Срок сдачи: 14.09.2025Баллы: без баллов - зачтено
Задание 2
- Скопировать в рабочий каталог, получить выполняемый файл и запустить в отладчике программу task2.S.
- С помощью отладчика восстановить алгоритм работы программы.
- Ввести в текст программы содержательные комментарии.
- Разработать программу, решающую ту же задачу на языке C.
- Сравнить исполняемые файлы обоих программ.
Срок сдачи: 28.09.2025
Баллы: 4
Задание 3
- Скопировать в рабочий каталог программу task3.S и my-macro (изменен по сравнению с предыдущими заданиями), разобраться в коде обоих файлов, выполнить программу в отладчике вводя цифры со стандартного ввода. При этом необходимо отображать буфер ввода в отладчике.
- Объяснить инструктору работу макровызова Getchar.
- Объяснить инструктору на какое значение отличается значение кода цифрового символа от числового значения этой цифры.
- Модифицировать программу таким образом, чтобы при нажатии на клавишу Enter в регистр eax записывалось числовое значение цифры, которая была введена перед нажатием клавиши Enter.
- Модифицировать программу таким образом, чтобы при достижении счетчиком значения равного размеру буфера, программа завершала свою работу с сообщением о завершении места в буфере.
Срок сдачи: 5.10.2025
Баллы: 8
Задание 4
Используя текст программы task1.S из задания 1, текст программы task3.S и версию файла my-macro из задания 3 разработать программу вычисления и вывода (в стандартный вывод) суммы одноцифровых чисел.
Для хранения суммы необходимо использовать область памяти размером 2 байта. Программа должна обнаруживать переполнение при суммировании и выводить сообщение. Числа должны поступать из файла стандартного ввода, суммирование нужно прекращать по достижении конца файла.
Числом должно считаться числовое значение цифрового символа, код которого во входном файле предшествует коду клавиши Enter. Остальные коды должны игнорироваться.
Значение накопленной суммы нужно перевести в десятичную систему, записать в виде последовательности соответствующих цифровых символов и вывести с помощью системного вызова write.
При сдаче этого задания необходимо быть готовым используя отладчик и файл листинга подробно объяснить инструктору директивы определения данных и процесс выполнения команд программы d-t-over.S, приведенной в примере "Директивы определения данных и обнаружения переполнения".
Срок сдачи: 26.10.2025
Баллы: 8
Дополнительное задание 4.1
Значение накопленной суммы нужно представить в восмеричной и двоичной системе и вывести результат преобразования в поток стандартного вывода.
За это задание можно получить дополнительные баллы.
Срок сдачи: 02.11.2025
Баллы: 2
Дополнительное задание 4.2
Вводимые числа могут быть как положительными так и отрицательными. При суммировании необходимо учитывать знаковое переполнение.
Числом должно считаться числовое значение цифрового символа, код которого во входном файле предшествует коду клавиши Enter. Знак числа определяется по наличию символа '-' перед соответствующим цифровым символом.
Задание принимается только после выполнения задания 4.1.
За это задание можно получить до 4 баллов.
Срок сдачи: 02.11.2025
Баллы: 4
Задание 5.
Используя файл примера "Демонстрация режимов адресации", раздел "Базово-индексная адресация со смещением", разработать программу, получающую вектор, элементы которого вычисляются по формуле b(i) = A(k,i) + A(i,l), где A - квадратная матрица размером 6x6. Четырехбайтовые элементы матрицы определить директивой .long. Значения k и l вводить из файла стандартного ввода. Уточнение: вектор результат вывести на экран.
Срок сдачи: 09.11.2025
Баллы: 8
Задание 6
Запустить в отладчике программу из примера организации функций (func.S). Вывести в область памяти отладчика содержимое архитектурного стека, а в область Watched Expression содержимое массива Numbers. Выполняя пошагово (или по блокам) программу, подробно и полно объяснить инструктору смысл и размещение параметров, работу функций, выполнение команд соглашения о связях, используемые режимы адресации.
В примере, в функции Read_Sym определяется локальная переменная в стеке, которая не используется. Модифицировать программу таким образом, чтобы она накапливала в этой локальной переменной количество обнаруженных в массиве Symbols байтов, коды которых не являются кодами цифр. Полученное значение должно быть возвращено в вызывающую программу. Кроме того, такие символы не должны передаваться в функцию Trans_Sym.
Срок сдачи: 30.11.2025
Баллы: 8
Дополнительное задание 6.1
Разработать программу для вычисления факториала заданного числа с использованием рекурсивного вызова функции. Число вводится из потока стандартного ввода. Результат выводится в стандартный поток вывода в десятичной системе исчисления.
Срок сдачи: 30.11.2025
Баллы: 4
Задание 7
Разобрать пример вызова из программы на языке С функций на языке ассемблера (call-as.c, func-for-c.S, Makefile), объяснить его работу инструктору, используя отладчик.
Используя результаты задания 6 и "Пример вызова из программы на языке С функций на языке ассемблера" разработать и реализовать на языке ассемблера функцию подсчета суммы одноцифровых чисел, помещаемых в массив Numbers в предыдущей задаче. Вызывать эту функцию из программы на языке С вслед за функцией Read_Sym. Правильность суммирования доказать инструктору с помощью отладчика.
Срок сдачи: 14.12.2025
Баллы: 4
Задание 7.1
Если вы сдаете задание 7.1, то задание 7 сдавать необязательно.
На основе программ заданий 4, 7 и примера раздельной трансляции разработать программу вычисления суммы много-цифровых чисел. Завершением ввода цифр числа считать нажатие клавиши Enter. Для хранения суммы необходимо использовать область памяти размером 2 байта. Числа должны поступать из стандартного ввода, суммирование нужно прекращать по достижении конца файла.
Вводимые числа могут быть как положительными так и отрицательными. Программа должна обрабатывать знаковое переполнение слагаемых и суммы. Необходимо предусмотреть естественные разумные реакции на переполнение и ввод нецифровых символов. Значение накопленной суммы нужно перевести в десятичную систему и вывести в стандартный вывод.
Программу необходимо реализовать в виде нескольких модулей: главной программы и, как минимум, двух функций, вызываемых по стандартным соглашениям о связях. Хотя бы один из модулей должен быть реализован на языке C. Обязательно, должен быть реализован и разработан на языке C модуль, реализующий функцию, эквивалентную функции Read_Sym из задания 7.
Каждый модуль должен быть реализован в отдельном исходном файле и раздельно оттранслирован в соответствующий объектный файл. Исполняемый файл должен быть собран при помощи gcc.
Компиляция:
as --32 -gstabs+ -o <asm_module_name>.o <asm_module_name>.S
Редактирование связей:
gcc -m32 -gstabs+ -o <prog_name> <c_module_name>.c <asm_module_name>.o
Срок сдачи: 14.12.2025
Баллы: 8