Команда 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.