- •Оглавление
- •Вопрос №3
- •Вопрос №4
- •Вопрос №5
- •Вопрос №6 Системы исчисления
- •Вопрос №7
- •Вопрос №8
- •Вопрос №9
- •Вопрос №10
- •Вопрос №11
- •Вопрос №12
- •Вопрос №13
- •Вопрос №14
- •Вопрос №15
- •Вопрос №16
- •Вопрос №17
- •Вопрос №18
- •Вопрос №19
- •Вопрос №20
- •Вопрос 21
- •Вопрос 22
- •Вопрос 23
- •Вопрос №24
- •Вопрос № 25
- •Вопрос № 26
- •Вопрос №27
- •Вопрос №28
- •1. Команда пересылки данных.
- •Вопрос №29
- •Вопрос №30
- •Вопрос №31
- •Вопрос №32
- •Вопрос №33
- •Вопрос №33(Краткая версия)
- •1) Команда вызова процедуры.
- •2) Команда возврата управления.
- •Вопросы №34
- •Вопросы №35
- •Вопрос №36
- •1) Команда организации цикла.
- •2) Команда перехода по обнуленному счетчику.
- •3) Команды организации цикла с условием.
- •Вопрос №37
- •Вопросы №38
- •Вопрос №39
- •Вопрос №40
Вопрос №33(Краткая версия)
1) Команда вызова процедуры.
CALL <адрес процедуры>
осуществляет передачу управления по указанному адресу, предварительно записав в стек адрес возврата.
При указании адреса процедуры так же как и при указании адреса перехода в командах безусловного перехода, возникает необходимость определить удаленности процедуры от места вызова:
а) если процедура удалена не более чем на -128...127 байт, то специальных указаний не требуется;
б) если процедура удалена в пределах 32 килобайт, то перед адресом процедуры необходимо указать near ptr,
в) если процедура подпрограмма удалена более, чем на 32 килобайта, то перед адресом процедуры необходимо записать far ptr.
Например:
call near ptr p - вызов подпрограммы "р".
Текст процедуры должен быть оформлен в виде:
< имя процедуры> ргос < указатель удаленности>
... тело процедуры ...
<имя процедуры> end
Здесь указатель удаленности также служит дли определения длины адресов, используемых при обращении к процедуре: near - при использовании двухбайтовых адресов, far - при использовании четырехбайтовых адресов.
2) Команда возврата управления.
RET [<число>]
извлекает из стека адрес возврата и передает управление по указанному адресу.
Если в команде указано значение счетчика, то после восстановления адреса возврата указанное число добавляется к содержимому регистра-указателя стека. Последний вариант команды позволяет удалить из стека параметры, передаваемые в процедуру через стек.
Вопросы №34
Процессор поддерживает 18 команд условного перехода, позволяющих проверить:
отношение между операндами со знаком (больше или меньше);
отношение между операндами без знака (выше или ниже);
состояниями арифметических флагов ZF, SF, CF, OF, PF.
Команды условного перехода имеют одинаковый синтаксис:
jcc метка_перехода
метка_перехода определяет переход, который может находиться только в пределах текущего сегмента кода:
сmр операнд_1,операнд_2
Так как команды условного перехода не изменяют флагов, то после команды EMP могут следовать несколько переходов
Вопросы №35
Команды сравнения:
CMP– выполняет вычитание операндов, и по результатам сравнения устанавливаются флаги.
CMP опер.1, опер.2.
В качестве примера применения команды CMP рассмотрим фрагмент программы, который обнуляет поле pole_m длиной п байт:
Так как команды условного перехода не изменяют флагов, то после одной команды СМР вполне могут следовать несколько команд условного перехода. Это может быть сделано для того, например, чтобы исследовать каждую из альтернативных ветвей: больше, меньше или равно.
.data
mas db dup (?)
.code
………………
cmp mas [si], 5
je egl
jl low
jggrt
egl:
………………..
Low
Вопрос №36
В качестве счетчика цикла во всех командах циклической обработки используется содержимое регистра cx.
1) Команда организации цикла.
LOOP < адрес перехода >
при каждом выполнении уменьшает содержимое регистра cx на единицу и передает управление по указанному адресу, если cx не равно 0:
mov cx, loop_count ; загрузка счетчика
begin_loop:
; ... тело цикла ...
loopbegin_loop