Skip to content

Commit fbf1a11

Browse files
committed
feat(pl): ✨ add labs
1 parent 0a992f5 commit fbf1a11

File tree

145 files changed

+12879
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+12879
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# This file is for unifying the coding style for different editors and IDEs
2+
# editorconfig.org
3+
4+
root = true
5+
6+
[*]
7+
charset = utf-8
8+
trim_trailing_whitespace = true
9+
insert_final_newline = true
10+
indent_style = space
11+
indent_size = 2
12+
13+
[*.md]
14+
trim_trailing_whitespace = false
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
set disassembly-flavor intel
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# IDEs
2+
.vscode
3+
.idea
4+
*.iml
5+
6+
# Python
7+
__pycache__
8+
9+
# Tests
10+
/parse_*
11+
/read_*
12+
/print_*
13+
/string_*
14+
/report.xml
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
image: generic-c
2+
3+
stages:
4+
- test
5+
6+
test:
7+
stage: test
8+
script:
9+
- python3 test.py
10+
artifacts:
11+
when: always
12+
reports:
13+
junit: report.xml
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Assignment: Input/Output library in assembly
2+
---
3+
Лабораторная работа: библиотека ввода-вывода на Assembler
4+
5+
6+
Реализуйте библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.
7+
8+
# Подготовка
9+
10+
* Прочитайте первые две главы "Low-level programming: C, assembly and program execution".
11+
12+
* Ознакомьтесь с [документацией на следующие инструкции](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2021/main/-/blob/main/docs/intel-manual.pdf).
13+
14+
- `xor`
15+
- `jmp`, `ja` и другими командами условного перехода
16+
- `cmp`
17+
- `mov`
18+
- `inc`, `dec`
19+
- `add`, `imul`, `mul`, `sub`, `idiv`, `div`
20+
- `neg`
21+
- `call`, `ret`
22+
- `push`, `pop`
23+
24+
Документация — огромный документ. В просмотрщике PDF файлов найдите панель с оглавлением документа; там ищите второй том "Instruction Set Reference", где для каждой инструкции есть отдельная страничка.
25+
26+
![](./img/outline.png)
27+
28+
29+
* Прочитайте документацию на системный вызов `read` с помощью `man`. Его номер (который кладётся в `rax`) 0.
30+
31+
# Написание
32+
33+
- Впишите в `lib.inc` код вместо заглушек функций. По возможности переиспользуйте уже реализованные функции.
34+
- Используйте `test.py` чтобы протестировать работу.
35+
36+
37+
Скрипт `test.py` будет генерировать исполняемый файл с тестом для каждой функции, вы можете отладить его; также см. Appendix A в "Low-level programming: C, assembly and program execution".
38+
39+
# Список распространённых ошибок
40+
41+
- Для строки размером `n` байт необходимы `n+1` байт из-за нуль-терминатора.
42+
- Метки функций должны быть глобальными, остальные — локальными.
43+
- Регистры не хранят ноль "по умолчанию".
44+
- Если вы используете callee-saved регистры, вы должны сохранить их значения.
45+
- Если вы используете caller-saved регистры, вы должны сохранить их значения перед `call` и затем восстанавливать.
46+
- Не используйте буферы в секции `.data`. Вместо этого аллоцируйте место в стеке, уменьшая значение `rsp`.
47+
- Функции принимают аргументы в `rdi`, `rsi`, `rdx`, `rcx`, `r8` и `r9`.
48+
- Не выводите числа символ за символом. Сформируйте строку в памяти и вызовите `print_string`.
49+
- Проверьте, что `parse_int` и `parse_uint` корректно устанавливают `rdx` (очень важно для следующего задания)
50+
- Проверьте, что функции `parse_int`, `parse_uint` и `read_word` правильно работают когда ввод завершается с помощью `Ctrl-D`.
51+
- При использовании стека надо не забывать уменшать `rsp`.
52+
- Обратные кавычки позволяют использовать специальные символы в С-стиле (`\n`, `\t`).
53+
54+
Код решения занимает порядка 250 строк.
55+
84.1 KB
Loading

0 commit comments

Comments
 (0)