Лабораторная работа: библиотека ввода-вывода на Assembler
Лабораторная работа 1: библиотека ввода-вывода на Assembler
Реализуйте библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.
...
...
@@ -9,7 +9,7 @@
* Прочитайте первые две главы "Low-level programming: C, assembly and program execution".
* Ознакомьтесь с [документацией на следующие инструкции](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2021/main/-/blob/main/docs/intel-manual.pdf).
* Ознакомьтесь с [документацией на следующие инструкции](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2024/main/-/blob/main/docs/intel-manual.pdf) и [Документацией по Linux ABI](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2024/main/-/blob/main/docs/x86_64-abi-0.99.pdf).
-`xor`
-`jmp`, `ja` и другими командами условного перехода
...
...
@@ -26,15 +26,14 @@

* Прочитайте документацию на системный вызов `read` с помощью `man`. Его номер (который кладётся в `rax`) 0.
* Прочитайте документацию на системный вызов `read` с помощью `man`. Его номер (который кладётся в `rax`) 0. Информацию о регистрах, используемых для передачи параметров в системные вызовы можно найти в [таблице](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2024/main/-/blob/main/docs/system-calls.md).
# Написание
- Впишите в `lib.inc` код вместо заглушек функций. По возможности переиспользуйте уже реализованные функции.
- Впишите в `lib.asm` код вместо заглушек функций. По возможности переиспользуйте уже реализованные функции.
- Используйте `test.py` чтобы протестировать работу.
Скрипт `test.py` будет генерировать исполняемый файл с тестом для каждой функции, вы можете отладить его; также см. Appendix A в "Low-level programming: C, assembly and program execution".
Скрипт `test.py` будет генерировать набор исполняемых файлов с тестами для каждой функции, вы можете отладить их по-отделенности; также см. Appendix A в "Low-level programming: C, assembly and program execution". При выполнении тестов проверяется соответствие кода соглашениям о вызовах и выравнивание стека кратно 16 перед всеми вызовами `call`.
# Список распространённых ошибок
...
...
@@ -49,7 +48,8 @@
- Проверьте, что `parse_int` и `parse_uint` корректно устанавливают `rdx` (очень важно для следующего задания)
- Проверьте, что функции `parse_int`, `parse_uint` и `read_word` правильно работают когда ввод завершается с помощью `Ctrl-D`.
- При использовании стека надо не забывать уменшать `rsp`.
- Перед каждым вызовом `call` необходимо выравнивать стек кратно 16.
- Вызовы `syscall` могут изменить значения регистров `rax`, `rcx` и `r11`.
- Обратные кавычки позволяют использовать специальные символы в С-стиле (`\n`, `\t`).