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

Команда loop позволяет организовывать циклы, состоящие из небольшого количества команд. В общем случае вначале или внутри цикла проверяется некоторое условие и, если оно не выполнено, производится выход из цикла. В конце цикла ставится оператор перехода JMP на начало цикла. В следующем ниже примере с клавиатуры вводится шестнадцатеричное число.

Пример. Введенное с клавиатуры шестнадцатеричное число записывается в регистр BX.

<1> code   segment

<2>        assume          cs:code

<3> start:

<4>        mov  bx,0        ;очистить bx

<5> input:

<6>        mov  ah,1        ;ввод символа

<7>        int  21h         ;с клавиатуры в AL

<8>        cmp  al,’0’      ;переход, если al ниже,

<9>        jb   atof        ;чем ‘0’

<10>        cmp  al,’9’      ;переход, если

<11>        ja   atof        ;al выше, чем ‘9’

<12>        sub  al,’0’      ;превратить код цифры в значение

<13> digit:

<14>        shl  bx,1 

<15>        shl  bx,1        ;умножение bx

<16>        shl  bx,1        ;на 16

<17>        shl  bx,1

<18>        xor  ah,ah

<19>        add  bx,ax       ;bx=16*bx+al

<20>        jmp  input

<21> atof:  cmp   al,’a’      ;если введенный

<22>        jb   exit        ;символ отличен

<23>        cmp  al,’f’      ;цифры или символов

<24>        ja   exit        ;a,b,c,d,e,f, то выход из цикла

<25>        sub  al,’a’-10   ;al=(al-‘a’)+10

<26>        jmp  digit

exit: mov   ax,4c00h    ;выход

<1>

<2>        int  21h

<3> code   ends

<4>        end  start

Здесь символ с клавиатуры принимается в AL с помощью функции 1 прерывания 21h.