Skip to content

whiteforestever/low-level-programming-lab1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Assignment: Input/Output library in assembly


Лабораторная работа: библиотека ввода-вывода на Assembler

Реализуйте библиотеку процедур, которые будут выполнять простые действия со строками, числами и их текстовыми представлениями.

Подготовка

  • Прочитайте первые две главы "Low-level programming: C, assembly and program execution".

  • Ознакомьтесь с документацией на следующие инструкции.

    • xor
    • jmp, ja и другими командами условного перехода
    • cmp
    • mov
    • inc, dec
    • add, imul, mul, sub, idiv, div
    • neg
    • call, ret
    • push, pop

    Документация — огромный документ. В просмотрщике PDF файлов найдите панель с оглавлением документа; там ищите второй том "Instruction Set Reference", где для каждой инструкции есть отдельная страничка.

  • Прочитайте документацию на системный вызов 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 строк.

About

This is the first lab from the Programming Languages course at ITMO System and Applied Software

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •