Skip to content

PavletsovGIT/pali_hleb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Palindrome Generator

Сборка

Для сборки используйте команду

ml64 code.asm /link /entry:start /subsystem:console kernel32.lib

Примечание: протестировано только на Win11 :)!

Алгоритм

  1. Вывод в консоль приглашения для ввода строки
  2. Чтение строки с консоли
  3. Генерация палиндрома на основе строки из п.2
  4. Вывод строки в консоль

Описания функций

start

write

Про параметры

  • RSI - адрес строки
  • RCX - длина строки
  • RAX - дескриптор файла
  • Результат - через RAX возвращаем количество записанных байтов

Описание

write собственно выполняет запись в файл. Через регистр RAX она получает дескриптор файла. Причем это может быть дескриптор консольного вывода, а может быть и дескриптор какого-то другого файла. Таким образом, мы абстрагируемся от консоли и определяем универсальную функцию записи. Через регистр RSI она получает адрес строки, а через RCX - размер строки. Внутри функции устанавливаются все необходимые регистры и вызывается внешняя функция WriteFile. Результат функции - или количество записанных байтов, которое хранится в стеке по адресу rsp+40, либо -1, если произошла ошибка. В данном случае мы никак не обыгрываем данную ситуацию, но в принципе мы можем проверить результат данной процедуры для последующих действий, например, для вывода пользователю сообщения об ошибке и т.д.

writeToConsole

Про параметры

  • Процедура вывода произвольной строки на консоль
  • Параметры
  • RSI - адрес строки
  • RCX - количество символов
  • Результат - в RAX количество записанных байтов или -1, если произошла ошибка

Описание

Непосредственно для вывода данных на консоль определена функция writeToConsole. В ней получаем дескриптор консольного вывода с помощью вызова функции GetStdHandle и сохраняем в переменную stdout. Чтобы указать, что дескриптор стандартного вывода установлен, присваиваем переменной stdoutSet. Сравнивая ее значение, мы можем определить, был ли ранее получен дескриптор. Это позволит при повторном вызове процедуры writeToConsole избежать ненужных обращений к функции GetStdHandle. После получения дескриптора передаем его процедуре write и с ее помощью собственно выполняем запись.

read

Про параметры

  • RAX - дескриптор файла,
  • RDI - буфер для считывания
  • RCX - длина буфера
  • Результат - в RAX количество записанных байтов или -1, если произошла ошибка

Описание

read получает через регистр RAX дескриптор файла (в данном случае дескриптор стандартного ввода), через регистр RDI буфер для считывания данных и через RCX - максимальное количество считываемых символов. И также возвращает либо количество считанных символов, либо число -1 - условный код ошибки.

readFromConsole

Про параметры

  • RDI - буфер для считывания
  • RCX - длина буфера
  • Результат - в RAX количество записанных байтов или -1, если произошла ошибка

Процедура readFromConsole получает дескриптор консольного ввода и вызывает процедуру read для считывания с консоли.

genPalindrome

Какое то описание...

Tasks

  • Написать функцию для считывания данных из консоли +
  • toUpper заменить на genPalindrome
  • Написать функцию для генерации палиндрома на основе методички НГТУ.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published