Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
готовые (нету 52 ,54,28,27,25,24,23,32.).doc
Скачиваний:
7
Добавлен:
20.04.2019
Размер:
199.68 Кб
Скачать

18) Опишите вычисление арифметических выражений в языке Ассемблер. Приведите примеры?

Преобразования типов:cbw,cwd,cwde,cbq,movsx,movzxДвоичной арифметики:Сложение:add,adc,inc;Вычитание:sub,sbb,dec.Умножение:imul,mul.Деление: idiv.divИзменение знака:LnegДесятичной арифметики:Коррекция сложения :Laaa.Ldaa

Коррекция вычитания :aas.das.Коррекция умножения:Laam:Коррекция деления:aadВспомогательные команды:bswap.Прочие команды с арифметическим принципом действия:сmр.cmpxchg.set cc.xadd

19)Опишите логические команды и команды сдвига.

Команды сдвига: shl/shr- логический сдвиг влево/вправо, rcr|rcl- циклический сдвиг вправо|влево через флаг переноса. ror|rol– циклический сдвиг вправо|влево,shld/shrd -сдвиг влево/вправо двойной точности.Логические команды:and- операция логического умножения,or-операция логического сложения, xоr- операция логического исключающего сложения,test-операция проверки (способом логического умножения)- not- операция логического отрицания.

20.)Опишите применение условных и безусловных переходов в языке Ассемблер. Приведите примеры.

Опишите применение условных и безусловных переходов.Переходы разделяются на безусловные, когда передача управления в другую точку программы осуществляется в безусловном порядке, независимо ни от каких обстоятельств, и условные, осуществляемые или не осуществляемые в зависимости от тех или иных условий: результатов сравнения, анализа, поиска и т.п. Безусловные переходы подразделяются на собственно переходы (без возврата в точку перехода) и вызовы подпрограмм (с возвратом после завершения подпрограммы).Безусловные переходы осуществляются с помощью команды jmp, которая может использоваться в 5 разновидностях. Переход может быть: прямым коротким, прямым ближним, прямым дальним, косвенным ближним, косвенным дальним. Условные переходы.Микропроцессор имеет 18 команд условного перехода . Эти команды позволяют проверить: отношение между операндами со знаком, отношение между операндами без знака, состояния арифметических флагов zf, sf, cf, of, pf.Команды условного перехода имеют одинаковый синтаксис: jccметка_перехода.Как видно, мнемокод всех команд начинается с “j” — от слова jump (прыжок), cc — определяет конкретное условие, анализируемое командой. Что касается операнда метка_перехода, то эта метка может находится только в пределах текущего сегмента кода, межсегментная передача управления в условных переходах не допускается. В связи с этим отпадает вопрос о модификаторе, который присутствовал в синтаксисе команд безусловного перехода.

21)Опишите организацию работы циклов в языке Ассемблер. Перечислите особенности использования оператора loop. Приведите примеры

Организация циклов

Цикл, как известно, представляет собой важную алгоритмическую структуру, без использования которой не обходится, наверное, ни одна программа. Организовать циклическое выполнение некоторого участка программы можно, к примеру, используя команды условной передачи управления или команду безусловного перехода jmp. При такой организации цикла все операции по его организации выполняются “вручную”. Но, учитывая важность такого алгоритмического элемента, как цикл, разработчики микропроцессора ввели в систему команд группу из трех команд, облегчающую программирование циклов. Эти команды также используют регистр ecx/cx как счетчик цикла.

Дадим краткую характеристику этим командам: loop метка_перехода (Loop) — повторить цикл. Работа команды заключается в выполнении следующих действий:

-декремента регистра ecx/cx;

- сравнения регистра ecx/cx с нулем:

-если (ecx/cx) > 0, то управление передается на метку перехода;

-если (ecx/cx) = 0, то управление передается на следующую после loop команду.

loope/loopz метка_перехода (Loop till cx <> 0 or Zero Flag = 0) — повторить цикл, пока cx <> 0 или zf = 0.

Команды loope и loopz — абсолютные синонимы, поэтому используйте ту команду, которая вам больше нравиться. Работа команд заключается в выполнении следующих действий:

-декремента регистра ecx/cx;

-сравнения регистра ecx/cx с нулем;

-анализа состояния флага нуля zf:

-если (ecx/cx) > 0 и zf = 1, управление передается на метку перехода;

-если (ecx/cx) = 0 или zf = 0, управление передается на следующую после loop команду.

loopne/loopnz метка_перехода (Loop till cx <> 0 or Not Zero flag=0) — повторить цикл пока cx <> 0 или zf = 1.

Команды loopne и loopnz также абсолютные синонимы. Работа команд заключается в выполнении следующих действий:

-декремента регистра ecx/cx;

-сравнения регистра ecx/cx с нулем;

-анализа состояния флага нуля zf:

-если (ecx/cx) > 0 и zf = 0, управление передается на метку перехода;

-если (ecx/cx)=0 или zf=1, управление передается на следующую после loop команду.

22)Приведите основные принципы организации и обработки массивов в языке Ассемблер. Приведите примеры?

массив - структурированный тип данных, состоящий из некоторого числа элементов одного типа. Используя директивы label и rept. Пара этих директив может облегчить описание больших массивов в памяти и повысить наглядность такого описания. Директива rept относится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между директивой и строкой endm. К примеру, определим массив байт в области памяти, обозначенной идентификатором mas_b. В данном случае директива label определяет символическое имя mas_b, аналогично тому, как это делают директивы резервирования и инициализации памяти. Достоинство директивы label в том, что она не резервирует память, а лишь определяет характеристики объекта. В данном случае объект — это ячейка памяти. Используя несколько директив label.