Commit 0beb4a0d authored by Igor Zhirkov's avatar Igor Zhirkov
Browse files

Update README.md

parent eeff2625
# Assignment №1: Input/Output library in assembly
# Assignment: Input/Output library in assembly
---
Лабораторная работа №1 : библиотека ввода-вывода на Assembler
Лабораторная работа: библиотека ввода-вывода на Assembler
В этом задании вы реализуете библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.
Реализуйте библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.
# Подготовка
* Прочитайте первые две главы "Low-level programming: C, assembly and program execution".
* Ознакомьтесь с [документацией на следующие инструкции](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/blob/master/docs/intel-manual.pdf).
* Ознакомьтесь с [документацией на следующие инструкции](https://gitlab.se.ifmo.ru/low-level-programming/programming-languages-fall-2021/main/-/blob/master/docs/intel-manual.pdf).
- `xor`
- `jmp`, `ja` и другими командами условного перехода
......@@ -30,20 +30,20 @@
- Используйте `test.py` чтобы протестировать работу.
В [материалах к первой практике](https://gitlab.se.ifmo.ru/low-level-programming/classes/-/tree/master/practice-1) есть базовая инструкция по использованию `gdb`, благодаря которой вы можете исполнять программу по шагам; `test.py` будет генерировать исполняемый файл с тестом для каждой функции, и вы можете отладить его; также см. Appendix A в "Low-level programming: C, assembly and program execution".
Скрипт `test.py` будет генерировать исполняемый файл с тестом для каждой функции, вы можете отладить его; также см. Appendix A в "Low-level programming: C, assembly and program execution".
# Список распространённых ошибок
- Для строки размером `n` байт необходимы `n+1` байт из-за нуль-терминатора.
- Метки функций должны быть глобальными, остальные -- локальными
- Регистры не хранят ноль "по умолчанию"
- Если вы используете callee-saved регистры, вы должны сохранить их значения
- Если вы используете caller-saved регистры, вы должны сохранить их значения перед `call` и затем восстанавливать
- Не используйте буферы в секции `.data`; аллоцируйте место в стеке, уменьшая значение `rsp`
- Метки функций должны быть глобальными, остальные — локальными.
- Регистры не хранят ноль "по умолчанию".
- Если вы используете callee-saved регистры, вы должны сохранить их значения.
- Если вы используете caller-saved регистры, вы должны сохранить их значения перед `call` и затем восстанавливать.
- Не используйте буферы в секции `.data`. Вместо этого аллоцируйте место в стеке, уменьшая значение `rsp`.
- Функции принимают аргументы в `rdi`, `rsi`, `rdx`, `rcx`, `r8` и `r9`.
- Не выводите числа символ за символом. Сформируйте строку в памяти и вызовите `print_string`.
- Проверьте, что `parse_int` и `parse_uint` корректно устанавливают `rdx` (очень важно для следующего задания)
- Проверьте, что функции `parse_int`, `parse_uint` и `read_word` правильно работают когда ввод завершается с помощью `Ctrl-D`.
Код решения занимает порядка 250 строк
Код решения занимает порядка 250 строк.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment