назад

В данной программе сравниваются числа от 0 до 9. Анализ правильности ввода (что введено именно число, а не какая–нибудь буква) не производится. Данную  проверку  возможно было бы производить по анализу кодов введённых символов. То есть, если коды введённых символов  выходят за рамки определённого диапазона (30h – 39h), то программа возвращается к вводу числа X или Y.

Примечания по использованным в программе  командам

 1). Команда MOV (пересылка данных)

 Команда MOV замещает первый операнд (приемник) вторым (источником).  При  этом исходное  значение  первого операнда  теряется.    В   зависимости   от  описания  операндов пересылается слово или байт.  Если операнды описаны  по-разному  или режим адресации не позволяет однозначно определить размер операнда,  для уточнения  размера   передаваемых  данных   в  команду  следует включить  один  из  атрибутных  операторов   byte ptr или word ptr. В зависимости от использованных режимов адресации  команда  MOV  может осуществлять пересылки следующих видов:

- из регистра общего назначения в регистр общего назначения;
- из ячейки памяти в регистр общео назначения;
- из регистра общего назначения в ячейку памяти;
- непосредственный операнд в регистр общего назначения;
- непосредственный операнд в ячейку памяти;
- из регистра общего назначения в сегментные регистры DS, ES и SS;
- из сегментного регистра в регистр общего назначения;
- из сегментного регистра в ячейку памяти.

Запрещены пересылки из ячейки памяти в ячейку памяти (для  этого  предусмотрена  команда MOVS),  а  также загрузка   сегментного   регистра   непосредственным  значением,   которое,   таким   образом,  приходится загружать через регистр общего назначения:

            mov AX, seg mem       ;Сегментный адрес ячейки mem
            mov DS, AX    ;Загрузка его в регистр DS

Нельзя  также  непосредственно  переслать содержимое одного сегментного регистра в другой.    Такого рода операции удобно выполнять с использованием стека:

            push DS                    ;
            pop  ES                     ;Содержимое DS копируется в ES

2). CMP (сравнение)

Команда CMP выполняет вычитание второго операнда из первого.  В  соответствии  с  результатом вычитания устанавливаются состояния флагов CF, PF, AF, ZF, SF и OF.  Сами операнды не изменяются.  Таким образом, если команду сравнения записать в общем виде:

            cmp  операнд_1, операнд_2

то  ее  действие можно условно изобразить следующим образом:

            операнд_1 - операнд_2 -> флаги_процессора

В   качестве   первого   операнда  можно  указывать регистр  (кроме сегментного)  или  ячейку памяти, в качестве  второго  -  регистр  (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти.  Операнды могут быть байтами или словами   и   представлять   числа  со  знаком  или  без знака.

Обычно  вслед за  командой CMP стоит одна из команд условных переходов,  анализирующих состояние флагов процессора.

3). Команды условных переходов Jcc

Команды,  обозначаемые (в книгах, не в программах!) Jcc,осуществляют переход по указанному адресу при выполнении условия,  заданного  мнемоникой команды.  Если  заданное условие  не  выполняется,  переход  не осуществляется, а выполняется команда, следующая за командой Jcc.

 Переход  может осуществляться как вперед,  так и назад в диапазоне +127...-128 байтов.

В  составе  команд  процессора  предусмотрены  следующие команды условных переходов:
--------–-------------------------------------------

Команда | Перейти, если     |  Условие перехода

--------–-------------------------------------------

ja         |выше                         |CF=0 и ZF=0
jae       |выше или равно       |CF=0
jb         |ниже                          |CF=1
jbe       |ниже или равно       |CF=1 и ZF=1
jc         |перенос                     |CF=1
jcxz      |CX=0                         |CX=0
je         |равно                         |ZF=1
jg         |больше                     |ZF=0 или SF=OF
jge       |больше или равно    |SF=OF
jl          |меньше                     |SF не равно OF
jle        |меньше или равно   |ZF=1 или SF не равно OF
jna       |не выше                    |CF=1 или ZF=1
jnae      |не выше и не равно |CF=1
jnb       |не ниже                     |CF=0
jnbe     |не ниже и не равно |CF=0 и ZF=0
jnc       |нет переноса            |CF=0
jne       |не равно                    |ZF=0
jng       |не больше                 |ZF=1 или SF не равно OF
jnge      |не больше и не равно          |SF не равно OF
jnl        |не меньше                             |SF=OF
jnle       |не меньше и не равно         |ZF=0 и SF=OF
jn         |нет переполнения                |OF=0
jnp       |нет четности                        |PF=0
jns        |знаковый бит равен 0         |SF=0
jnz        |не нуль                                  |ZF=0
jo         |переполнение                      |OF=1
jp         |есть четность                       |PF=1
jpe       |сумма битов четная             |PF=1
jpo       |сумма битов нечетная         |PF=0
js         |знаковй бит равен 1            |SF=1
jz         |нуль                                       |ZF=1
--------–-----------------------–-------------------