Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/candygoose/assembler_io_library_py3
Lab I/O Library in assembler with python 3 tests
https://github.com/candygoose/assembler_io_library_py3
Last synced: 8 days ago
JSON representation
Lab I/O Library in assembler with python 3 tests
- Host: GitHub
- URL: https://github.com/candygoose/assembler_io_library_py3
- Owner: CandyGoose
- Created: 2023-09-19T15:31:08.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-09-20T11:05:46.000Z (about 1 year ago)
- Last Synced: 2024-06-04T23:05:10.161Z (6 months ago)
- Language: Python
- Size: 87.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Assignment: Input/Output library in assembly
---
Лабораторная работа: библиотека ввода-вывода на Assembler### :triangular_flag_on_post: Python 2 в тестах был изменен на Python 3
Реализуйте библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.
# Подготовка
* Прочитайте первые две главы "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).
- `xor`
- `jmp`, `ja` и другими командами условного перехода
- `cmp`
- `mov`
- `inc`, `dec`
- `add`, `imul`, `mul`, `sub`, `idiv`, `div`
- `neg`
- `call`, `ret`
- `push`, `pop`
Документация — огромный документ. В просмотрщике PDF файлов найдите панель с оглавлением документа; там ищите второй том "Instruction Set Reference", где для каждой инструкции есть отдельная страничка.![](./img/outline.png)
* Прочитайте документацию на системный вызов `read` с помощью `man`. Его номер (который кладётся в `rax`) 0.
# Написание
- Впишите в `lib.inc` код вместо заглушек функций. По возможности переиспользуйте уже реализованные функции.
- Используйте `test.py` чтобы протестировать работу.Скрипт `test.py` будет генерировать исполняемый файл с тестом для каждой функции, вы можете отладить его; также см. Appendix A в "Low-level programming: C, assembly and program execution".
# Список распространённых ошибок- Для строки размером `n` байт необходимы `n+1` байт из-за нуль-терминатора.
- Метки функций должны быть глобальными, остальные — локальными.
- Регистры не хранят ноль "по умолчанию".
- Если вы используете 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 строк.