Ассемблер. Задание вводится два числа k и f, необходимо первое число k циклически сдвинуть вправо, на f. Циклически сдвинуть, то есть выпадающие биты справа закидывать в старшие входные биты.
Скачать 94.78 Kb.
|
Задание: вводится два числа k и f, необходимо первое число k циклически сдвинуть вправо, на f. Циклически сдвинуть, то есть выпадающие биты справа закидывать в старшие входные биты. Пример для 8 битного числа 11010010, сдвигаем на 2 вправо, получается 10110100. У тебя же будут 32-битные числа. Использовать только базовый набор инструкций. Ввод числа делать константой. Решение: Для выполнения задания создаётся программа, состоящая из трёх секций: 1) Секция с датой, т.е. с данными, где они объявляются и резервируются; 2) Секция с кодом, в которой записывается программа; 3) Секция с таблицей импорта, где импортируются библиотеки и методы из библиотек и им даются псевдонимы, чтобы обращаться к ним из секции с кодом. В секции с кодом с метки Start начинается программа. Для записи 32-битных чисел используется регистр eax. Для начала необходимо обнулить регистр eax, используя команду xor, т.к. складывая по модулю 2 регистр с им же самим-он обнуляется. Следом, в младший байт младшего слова записывается 32-битное число k. Для циклического сдвига вправо используем команду ror и записываем число f, на которое будет сдвигаться число k. Сдвигаемые вправо биты записываются в тот же операнд слева. Следом, в стек заносится весь регистр eax и выводится на экран, что в нём находится. Тело кода:
Проверка: |