- •1. Обработка символьной информации
- •Команды префикса повторения.
- •Примеры программ, реализующих действия со строками.
- •Практическая часть.
- •Контрольные вопросы и задания.
- •Передача параметров в процедуру.
- •1. Передача через регистры: программа перед вызовом заносит входные параметры в некоторые регистры процессора, а после возврата выбирает из регистров значения результатов.
- •Модульная структура программ на языке Ассемблера.
- •Работа с командой прерываний int.
- •Практические задания.
- •Синтаксис:
- •Команды сдвига.
- •Команды логического сдвига shl и shr.
- •Команды арифметического сдвига sal и sar.
- •Команды циклического сдвига: rol и ror, rcl и rcr.
- •Использование логических и арифметических команд сдвига.
- •1. Команды логического сдвига. Используются для выполнения быстрого умножение и деление целых чисел на степени двойки, на 2 k.
- •Литература
Практические задания.
В приведенных ниже вариантах заданий используется стандартное представление строк ASCII. Зациклите программу по вводу, признаком окончания работы считать ввод пустой строки.
1. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то, начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает, содержится ли одна из них в другой и сколько раз.
2. Разработать подпрограмму, которая подсчитывает, сколько раз заданный символ встречается в строке. Разработать программу, которая вводит с клавиатуры строку, вводит число N и выдает список символов, которые встречаются в строке не менее чем N раз.
. Разработать две подпрограммы, одна из которых соединяет две строки в одну, а другая обрезает строку до заданной длины (или дополняет пробелами, если длина строки меньше заданной).
. Разработать программу, которая вводит с клавиатуры число N, затем вводит несколько строк (конец ввода - пустая строка) и формирует новую строку, состоящую из первых N символов каждой введенной строки.
. Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры несколько строк (конец ввода - пустая строка) и сортирует их в лексикографическом порядке.
. Разработать подпрограмму, которая разбивает заданную строку на две части: первое слово строки (до первого пробела) и остаток строки (пробелы после первого слова отбрасываются). Разработать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.
. Разработать подпрограмму, которая переставляет символы заданной строки в обратном порядке. Разработать программу, которая вводит с клавиатуры строку и переставляет в обратном порядке символы в каждом слове (слова разделяются пробелами).
. Разработать подпрограмму, которая вставляет подстроку в строку, начиная с заданной позиции.
. Разработать программу, которая вводит с клавиатуры исходную строку, вводит подстроку и позицию вставки, вставляет подстроку в строку.
. Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая - преобразует букву в строчную.
. Разработать программу, которая вводит с клавиатуры строку и заменяет первые буквы всех слов на заглавные, а остальные буквы - на строчные.
12. Дано натуральное число п. Вывести на экран все простые числа из отрезка [1, п].
13. Вычислить b=53 +(а+1)-1. Для вычисления хn использовать процедуру возведения в степень через умножение.
. Описать процедуру sum (x, y, z), которая присваивает вектору z сумму векторов х и у. Использовать ее для вычисления d=a+b+c.
. Описать процедуру mах (х, у), которая присваивает х большее из целых чисел х и у, а у - меньшее.
. *Даны три натуральных числа. Определить их наибольший общий делитель.
3. Битовые операции
Цель: Рассмотреть приемы использования битовых операций при программировании на языке ассемблер.
Задачи:
Изучить синтаксис и приемы использование логические команды: отрицания - NOT, конъюнкции - AND, дизъюнкции - OR, исключающая ИЛИ - XOR и проверки - TEST.
Изучить синтаксис и использование команд:
o логических сдвигов влево и вправо - SHL и SHR;
o арифметических сдвигов влево и вправо - SAL и SAR;
o циклических сдвигов влево и вправо - ROL и ROR;
o циклических сдвигов влево и вправо через перенос - RCL и RCR;
Научиться производить вычисления логических выражений.
Логические команды.
Наряду со средствами арифметических вычислений, система команд микропроцессора имеет также средства логического преобразования данных. Под логическими понимаются такие преобразования данных, в основе которых лежат правила формальной логики: отрицание (НЕ), конъюнкцию (И) и дизъюнкцию (ИЛИ).
Логическим командам присущ ряд общих черт:
1. Они реализуют поразрядные операции: i-й разряд результата зависит только от i-х разрядов операндов. При этом одна и та же операция выполняется сразу над всеми разрядами операндов одновременно, параллельно.
2. Формальная логика работает на уровне утверждений истинно и ложно. Во всех логических командах бит 1 трактуется как «истина», а бит 0 - как «ложь». Именно при такой трактовке эти команды и реализуют логические операции отрицания, конъюнкции и дизъюнкции.
. Эти команды меняют все флаги условий, но интерес обычно вызывает только флаг нуля ZF. Другие флаги в основном предназначены для работы с числами и в логических операциях малоинформативны.
. Операндами логических команд должны быть либо байты, либо слова, но не то и другое одновременно.
Логические команды:
NOT - меняет значение каждого бита операнда на противоположное. Результат записывается на место операнда;
AND - производит поразрядное логическое умножение двух операндов и помещает результат в первый операнд;
OR - производит поразрядное логическое сложение двух операндов. и помещает результат в первый операнд;
XOR - производит поразрядное логическую операцию исключающего ИЛИ над двумя операндами и помещает результат в первый операнд;
TEST - аналог команды AND, выполняет поразрядно логическую операцию AND над битами операндов. Состояние операндов остается прежним, изменяются только флаги нуля ZF, знака SF, и четности PF, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния. Результат логического умножения никуда не записывается.