помогите, пожалуйста, решить задачи на языке ассемблер. дедлайн 14 октября в 23:59. по всем вопросам пишите по номеру 89282415011 или в телеграмм https://t.me/Diluc_Strawberry:
Задача 1:
Программе на стандартный вход подаются две текстовые строки в кодировке ASCII, обе из которых завершаются символом перевода строки ('\n', код 10). Строки имеют длину не более 200 символов. Программа должна проверить, являются ли строки анаграммами друг друга (то есть можно ли одну из них получить перестановкой символов в другой), и напечатать ответ YES или NO, завершив вывод символом перевода строки.
При проверке учитывать все символы, кроме пробела (' ', код 32), регистр латинских букв игнорировать.
Для считывания строк используйте функцию int getchar().
Решение должно работать за O(n), где n - максимальная из длин строк.
Программа должна соблюдать стандартное соглашение о вызовах (в том числе иметь пролог и эпилог).
Для вывода используйте функцию int puts(const char *str) с одним аргументом - адресом си строки ответа.
Подробнее о стандартных функциях си можно узнать через man man
Examples
Input
Anagram.
Nag a ram.
Output
YES
Input
Go?
Go!
Output
NO
Задача 2:
Напишите функцию unsigned long long ackermann(unsigned long long m, unsigned long long n) вычисляющую значение функции Аккермана в точке m, n.
Функция определена следующим образом:
n + 1, если m = 0
ackermann(m - 1, 1), если m > 0, n = 0
ackermann(m - 1, ackermann(m, n - 1)), если m > 0, n > 0
Никаких оптимизаций и быстрых вычислений не требуется
Examples
Input
1 1
Output
3
Задача 3:
Студент Миша ошибся при написании своей функции process и забыл добавить пролог. При этом с прологом его функция корректна и возвращает некоторое число. Но вот незадача - переписать его исходный код вы не можете.
Напишите программу, которая вызовет функцию int process(); ровно один раз и выведет возвращаемое число.
Функция process скомпилирована в отдельной единице трансляции и не является статичной.
Для вывода используйте printf("%d\n", number);
Не используйте call process
Например, если Мишина функция такова:
mov rax, 4
mov rsp, rbp
pop rbp
ret
то ваша программа должна вывести число 4.
Не забывайте что при call стек должен быть выровнен по 16 байт
Задача 4:
Напишите подпрограмму print_tb, которая печатает стек вызовов от самой себя до main.
Вызывающая программа содержит подпрограммы main (точка входа), foo и bar, поддерживающие стандартный стековый кадр. Каждая из подпрограмм расположена в памяти непрерывно, начиная с меток foo, bar и main соответственно. Известно, что цепочка вызовов от main до print_tb не содержит других подпрограмм, кроме foo и bar (которые, возможно, рекурсивно вызывают себя и друг друга).
Для вывода используйте функцию puts("function_name") (функция puts принимает единственный аргумент — адрес начала нуль-терминированной строки, которую нужно напечатать).
Пример: для такой вызывающей программы:
void foo() {
print_tb();
}
void bar() {
foo();
}
int main() {
bar();
}
вывод должен быть таким:
print_tb
foo
bar
main
Отладочной информации в вызывающей программе нет. Использование функции backtrace(3) и аналогов запрещено.
Задача 5:
Подпрограмма qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *)), реализующая алгоритм быстрой сортировки, принимает 4 параметра:
адрес начала массива,
количество элементов массива,
размер (в байтах) одного элемента массива и
адрес подпрограммы-компаратора.
Компаратор принимает два параметра — адреса двух различных элементов массива — и возвращает:
число меньше нуля, если первый элемент предшествует второму,
число больше нуля, если второй элемент предшествует первому,
нуль, если элементы эквивалентны.
Напишите подпрограмму sort_by_abs, которая принимает два параметра:
адрес начала массива знаковых 16-битных чисел и
количество элементов в массиве
и вызывает qsort так, чтобы элементы массива оказались отсортированы по возрастанию их абсолютного значения.
Например, если подпрограмме передали адрес начала и размер такого массива:
-4 -2 0 1 3
то после завершения работы подпрограммы в массиве должно быть
0 1 -2 3 -4
https://linux.die.net/man/3/qsort
Вопрос на подумать: а можно ли в этой задаче обойтись без инструкции call?
Максим
Тульский государственный университет
Спасибо огромное за помощь! Все правильно, красиво, аккуратно! Рекомендую
Регина
Башкирский государственный педагогический университет имени М. Акмуллы
очень быстро помогла Сабина с заданием и охотно ответила на мои дополнительные вопросы, вс...
Александра
СПбГУ
Огромное спасибо,все правильно и понятно,советую очень хороший исполнитель.
Анастэйша
РУДН
Работа была решена досрочно. Сама заметила конечно некоторые небольшие несоответствия, но ...