мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
asm:lesson5 [13/10/2010 19:53] – создано arabusovasm:lesson5 [14/10/2010 15:17] (текущий) arabusov
Строка 1: Строка 1:
 ====== Урок 5 ====== ====== Урок 5 ======
 ===== Логика и организация программы ===== ===== Логика и организация программы =====
-До этой главы примеры выполнялись последовательно команда +На прошлом уроке для того, чтобы сделать задержку и считать символ с клавиатуры, мы были вынуждены использовать цикл. Сегодня мы более подробно познакомимся с непоследовательным выполнением команд. Большинство программ содержат ряд циклов, в которыхнесколько  команд  повторяются  до  достижения определенного 
-за командой. Однакопрограммируемые задачи редко бывают так +требования,  и  различные  проверки,  определяюшие какие из
-просты Большинство программ содержат ряд циклов, в которых +
-несколько  команд  повторяются  до  достижения определенного +
-требования,  и  различные  проверки,  определяюшие  какие из+
 нескольких действий  следует выполнять.  Обычным требованием нескольких действий  следует выполнять.  Обычным требованием
 является   проверка     должна   ли   программа  завершить является   проверка     должна   ли   программа  завершить
-выполнение. +выполнение. Эти требования  включают  передачу  управления  по адресу
-   Эти требования  включают  передачу  управления  по адресу+
 команды, которая не находится непосредственно за выполняемой команды, которая не находится непосредственно за выполняемой
-в текущий момент командой. Передача управления может осущест +в текущий момент командой. Передача управления может осуществляться вперед для выполнения новой группы команд  или назад
-вляться вперед для выполнения новой группы команд  или назад+
 для повторения уже выполненных команд. для повторения уже выполненных команд.
-   Некоторые команды  могут  передавать  управление, изменяя+Некоторые команды  могут  передавать  управление, изменяя
 нормальную    последовательность    шагов   непосредственной нормальную    последовательность    шагов   непосредственной
 модификацией  значения смещения в командном  указателе. Ниже модификацией  значения смещения в командном  указателе. Ниже
Строка 35: Строка 30:
 ==== Команда JMP ==== ==== Команда JMP ====
  
-Одной из команд обычно используемых  для передачи управле+Одной из командобычно используемых  для передачи управле
 ния является команда JMP.  Эта команда выполняет безусловный ния является команда JMP.  Эта команда выполняет безусловный
 переход,  т.е.  обеспечивает  передачу  управления при любых переход,  т.е.  обеспечивает  передачу  управления при любых
Строка 162: Строка 157:
 команда под пользовательским управлением. команда под пользовательским управлением.
  
-   IF (Interrupt Flag) флаг прерывания. При нулевом состоя+== IF (Interrupt Flag) == 
 +флаг прерывания. При нулевом состоя
 нии  этого  флага  прерывания  запрещены,  при  единичном  - нии  этого  флага  прерывания  запрещены,  при  единичном  -
 разрешены. разрешены.
- +== DF (DIrection  Flag) == 
-   DF (DIrection  Flag)   - флаг направления. Используется в+флаг направления. Используется в
 строковых операциях   для  определения  направления передачи строковых операциях   для  определения  направления передачи
 данных. При нулевом состоянии команда увеличивает содержимое данных. При нулевом состоянии команда увеличивает содержимое
- 
- 
- 
- 
- 
-Ассемблер для IBM PC. Глава 7                            137 
- 
- 
 регистров SI и  DI,   вызывая передачу данных слева направо, регистров SI и  DI,   вызывая передачу данных слева направо,
 при нулевом  -  уменьшает содержимое этих регистров, вызывая при нулевом  -  уменьшает содержимое этих регистров, вызывая
-передачу данных справа налево (см. гл.11).+передачу данных справа налево.
  
-   OF (Overflow Flag)  флаг переполнения. Фиксирует арифме+== OF (Overflow Flag) == 
 +флаг переполнения. Фиксирует арифме
 тическое  переполнение,  т.е. перенос в/из старшего (знаково тическое  переполнение,  т.е. перенос в/из старшего (знаково
 го) бита при знаковых арифметических операциях. го) бита при знаковых арифметических операциях.
-   В качестве примера:  команда CMP сравнивает  два операнда+В качестве примера:  команда CMP сравнивает  два операнда
 и воздействуте на флаги AF,  CF, OF, PF, SF, ZF. Однако, нет и воздействуте на флаги AF,  CF, OF, PF, SF, ZF. Однако, нет
 необходимости проверять все эти флаги по отдельности. В сле- необходимости проверять все эти флаги по отдельности. В сле-
Строка 202: Строка 191:
 нулевой  признак,  команда  передает  управление  на  адрес, нулевой  признак,  команда  передает  управление  на  адрес,
 указанный в ее операнде, т.е. на метку B50. указанный в ее операнде, т.е. на метку B50.
- +В предыдущих  примерах  было  показано,  что команда LOOP
-КОМАНДЫ УСЛОВНОГО ПЕРЕХОДА +
------------------------------------------------------------- +
- +
-   В предыдущих  примерах  было  показано,  что команда LOOP+
 уменьшает на единицу содержимое регистра CX и проверяет его: уменьшает на единицу содержимое регистра CX и проверяет его:
 если не ноль, то управление передается по адресу, указанному если не ноль, то управление передается по адресу, указанному
Строка 215: Строка 200:
 регистра.  Например,  при сравнении  содержимого  двух полей регистра.  Например,  при сравнении  содержимого  двух полей
 последующий переход зависит от значения флага. последующий переход зависит от значения флага.
-   Команду LOOP в программе на рис.7.2 можно заменить на две+Команду LOOP в программе на рис.7.2 можно заменить на две
 команды:  одна  уменьшает содержимое  регистра  CX, а другая команды:  одна  уменьшает содержимое  регистра  CX, а другая
 выполняет условный переход: выполняет условный переход:
Строка 230: Строка 215:
 ренном примере команда LOOP хотя и имеет огпаниченное исполь ренном примере команда LOOP хотя и имеет огпаниченное исполь
 зование, но более эффективна, чем две команды: DEC и JNZ. зование, но более эффективна, чем две команды: DEC и JNZ.
- +Аналогично  командам  JMP и LOOP  операнд  в  команде JNZ
- +
- +
-Ассемблер для IBM PC. Глава 7                            138 +
- +
- +
-   Аналогично  командам  JMP и LOOP  операнд  в  команде JNZ+
 cодержит  значение  расстояния  между концом  команды  JNZ и cодержит  значение  расстояния  между концом  команды  JNZ и
 адресом  A20,  которое прибавляется  к командному указателю. адресом  A20,  которое прибавляется  к командному указателю.
Строка 244: Строка 223:
 цы перехода). цы перехода).
  
-   Знаковые и беззнаковые данные. +==== Знаковые и беззнаковые данные ==== 
- +Рассматривая назначение команд условного перехода следует
-   Рассматривая назначение команд условного перехода следует+
 пояснить характер их использования.  Типы данных, над которы пояснить характер их использования.  Типы данных, над которы
 ми выполняются арифметические операции и  операции сравнения ми выполняются арифметические операции и  операции сравнения
Строка 257: Строка 235:
 отрицательное.  Многие  числовые  значения  могут  быть  как отрицательное.  Многие  числовые  значения  могут  быть  как
 положительными так и отрицательными. положительными так и отрицательными.
-   В качестве примера предположим,  что регистр  AX содержит+В качестве примера предположим,  что регистр  AX содержит
 11000110, а BX - 00010110. Команда 11000110, а BX - 00010110. Команда
  
Строка 266: Строка 244:
 меньше. меньше.
  
-   Переходы для беззнаковых данных.+==== Условные переходы ====
  
-Мнемоника      Описание                 Проверяемые флаги+=== Переходы для беззнаковых данных ===
  
-JE/JZ     Переход, если равно/нуль                ZF +  Мнемоника      Описание                 Проверяемые флаги
-JNE/JNZ   Переход, если не равно/не нуль          ZF +
-JA/JNBE   Переход, если выше/не ниже или равно    ZF,CF +
-JAE/JNB   Переход, если выше или равно/не ниже    CF +
-JB/JNAE   Переход, если ниже/не выше или равно    CF +
-JBE/JNA   Переход, если ниже или равно/не выше    CF,AF+
  
-   Любую проверку можно кодировать одним из  двух мнемоничес+  JE/JZ     Переход, если равно/нуль                ZF 
 +  JNE/JNZ   Переход, если не равно/не нуль          ZF 
 +  JA/JNBE   Переход, если выше/не ниже или равно    ZF,CF 
 +  JAE/JNB   Переход, если выше или равно/не ниже    CF 
 +  JB/JNAE   Переход, если ниже/не выше или равно    CF 
 +  JBE/JNA   Переход, если ниже или равно/не выше    CF,AF 
 + 
 +Любую проверку можно кодировать одним из  двух мнемоничес
 ких  кодов.  Например,  JB и JNAE  генерирует один и  тот же ких  кодов.  Например,  JB и JNAE  генерирует один и  тот же
 объектный код,  хотя положительную проверку JB легче понять, объектный код,  хотя положительную проверку JB легче понять,
 чем отрицательную JNAE. чем отрицательную JNAE.
  
-   Переходыдля знаковых данных+=== Переходы для знаковых данных ===
  
-Мнемоника      Описание                 Проверяемые флаги+  Мнемоника      Описание                 Проверяемые флаги
  
-JE/JZ     Переход, если равно/нуль                  ZF +  JE/JZ     Переход, если равно/нуль                  ZF 
-JNE/JNZ   Переход, если не равно/не нуль            ZF +  JNE/JNZ   Переход, если не равно/не нуль            ZF 
-JG/JNLE   Переход, если больше/не меньше или равно  ZF,SF,OF +  JG/JNLE   Переход, если больше/не меньше или равно  ZF,SF,OF 
- +  JGE/JNL   Переход, если больше или равно/не меньше     SF,OF 
- +  JL/JNGE   Переход, если меньше/не больше или равно     SF,OF 
- +  JLE/JNG   Переход, если меньше или равно/не больше  ZF,SF,OF 
-Ассемблер для IBM PC. Глава 7                            139 +Команды перехода для условия равно или ноль (JE/JZ)  и не
- +
- +
-JGE/JNL   Переход, если больше или равно/не меньше     SF,OF +
-JL/JNGE   Переход, если меньше/не больше или равно     SF,OF +
-JLE/JNG   Переход, если меньше или равно/не больше  ZF,SF,OF +
- +
-   Команды перехода для условия равно или ноль (JE/JZ)  и не+
 равно  или не  ноль  (JNE/JNZ)  присутствуют в обоих списках равно  или не  ноль  (JNE/JNZ)  присутствуют в обоих списках
 для беззнаковых   и  знаковых  данных. Состояние  равно/нуль для беззнаковых   и  знаковых  данных. Состояние  равно/нуль
 происходит вне зависимости от наличия знака. происходит вне зависимости от наличия знака.
  
-   Специальныеарифметическиепроверки +=== Специальные арифметические проверки ===
- +
-Мнемоника      Описание                 Проверяемые флаги+
  
-     JS   Переход, если есть знак (отрицательно)       SF +   Мнемоника      Описание                 Проверяемые флаги
-     JNS  Переход, если нет знака(положительно)        SF +
-     JC   Переход, если есть перенос (аналогично JB)   CF +
-     JNC  Переход, если нет переноса                   CF +
-     JO   Переход, если есть переполнение              OF +
-     JNO  Переход, если нет переполнения               OF +
-     JP/JPE Переход, если паритет четный               PF +
-     JNP/JP Переход, если паритет нечетный             PF+
  
-   Еще  одна  команда условного перехода  проверяет равно ли+  JS     Переход, если есть знак (отрицательно)       SF 
 +  JNS    Переход, если нет знака(положительно)        SF 
 +  JC     Переход, если есть перенос (аналогично JB)   CF 
 +  JNC    Переход, если нет переноса                   CF 
 +  JO     Переход, если есть переполнение              OF 
 +  JNO    Переход, если нет переполнения               OF 
 +  JP/JPE Переход, если паритет четный                 PF 
 +  JNP/JP Переход, если паритет нечетный               PF 
 +Еще  одна  команда условного перехода  проверяет равно ли
 содержимое  регистра  CX  нулю.  Эта  команда  необязательно содержимое  регистра  CX  нулю.  Эта  команда  необязательно
 должна pасполагаться непосредственно  за командой арифметики должна pасполагаться непосредственно  за командой арифметики
Строка 323: Строка 295:
 начало  цикла,  где она  проверяет  содержит  ли  регистр CX начало  цикла,  где она  проверяет  содержит  ли  регистр CX
 ненулевое значение. ненулевое значение.
-   Не спешите пока заучивать эти команды наизусть. Запомните+Не спешите пока заучивать эти команды наизусть. Запомните
 только,  что для беззнаковых данных есть  переходы по состоя только,  что для беззнаковых данных есть  переходы по состоя
 ниям  равно,  выше  или ниже,  а  для беззнаковых  -  равно, ниям  равно,  выше  или ниже,  а  для беззнаковых  -  равно,