ВУЗ:
Составители:
9
Специализация регистра CX - использование в качестве счетчика. Пред-
положим, мы хотим 10 раз повторить выполнение блока инструкций. Это мож-
но сделать следующим образом:
mov cx,10
Begin:
<блок инструкций, который нужно повторить>
sub cx,1
jnz Begin
:
Инструкции между меткой Begin и инструкцией JNZ будут повторяться
до тех пор, пока содержимое регистра CX не станет равным 0. Заметим, что
чтобы уменьшить содержимое CX и перейти на начало цикла Begin, если ре-
гистр CX еще не равен 0, здесь используются две инструкции - SUB CX,1 и
JNZ.
Уменьшение значения счетчика и цикл - это часто используемый эле-
мент программы, поэтому в процессоре 8086 используется специальная инст-
рукция для того, чтобы циклы выполнялись быстрее и были более компакт-
ными. Эта инструкция называется LOOP. Инструкция LOOP (инструкция цик-
ла) вычитает 1 из значения регистра CX и выполняет переход, если содержи-
мое регистра CX не равно 0 (все это в одной инструкции). Для приведенного
выше примера можно записать такой эквивалент:
:
mov cx,10
Begin:
<блок инструкций, который нужно повторить>
:
loop Begin
:
Регистр CX можно интерпретировать, как два 8-разрядных регистра -
CH и CL.
Регистр DX - это единственный регистр, которые может использоваться
в качестве указателя адреса ввода-вывода в инструкциях IN и OUT. Фактиче-
ски, кроме использования регистра DX нет другого способа адресоваться к пор-
там ввода-вывода с 256 по 65535. Например, в следующем фрагменте програм-
мы в порт 878h (LPT) записывается значение 62:
:
mov al,62
mov dx,878h
out dx,al
:
Другие уникальные качества регистра DX относятся к операциям деле-
ния и умножения. Когда вы делите 32- или 16-битовый делитель, старшие 16
бит делимого должны быть помещены в регистр DX. После выполнения деле-
ния остаток также сохраняется в DX. (Младшие 16 бит делимого должны
быть помещены в AX. Частное от деления также будет записано в AX.) Ана-
Специализация регистра CX - использование в качестве счетчика. Пред- положим, мы хотим 10 раз повторить выполнение блока инструкций. Это мож- но сделать следующим образом: mov cx,10 Begin: <блок инструкций, который нужно повторить> sub cx,1 jnz Begin : Инструкции между меткой Begin и инструкцией JNZ будут повторяться до тех пор, пока содержимое регистра CX не станет равным 0. Заметим, что чтобы уменьшить содержимое CX и перейти на начало цикла Begin, если ре- гистр CX еще не равен 0, здесь используются две инструкции - SUB CX,1 и JNZ. Уменьшение значения счетчика и цикл - это часто используемый эле- мент программы, поэтому в процессоре 8086 используется специальная инст- рукция для того, чтобы циклы выполнялись быстрее и были более компакт- ными. Эта инструкция называется LOOP. Инструкция LOOP (инструкция цик- ла) вычитает 1 из значения регистра CX и выполняет переход, если содержи- мое регистра CX не равно 0 (все это в одной инструкции). Для приведенного выше примера можно записать такой эквивалент: : mov cx,10 Begin: <блок инструкций, который нужно повторить> : loop Begin : Регистр CX можно интерпретировать, как два 8-разрядных регистра - CH и CL. Регистр DX - это единственный регистр, которые может использоваться в качестве указателя адреса ввода-вывода в инструкциях IN и OUT. Фактиче- ски, кроме использования регистра DX нет другого способа адресоваться к пор- там ввода-вывода с 256 по 65535. Например, в следующем фрагменте програм- мы в порт 878h (LPT) записывается значение 62: : mov al,62 mov dx,878h out dx,al : Другие уникальные качества регистра DX относятся к операциям деле- ния и умножения. Когда вы делите 32- или 16-битовый делитель, старшие 16 бит делимого должны быть помещены в регистр DX. После выполнения деле- ния остаток также сохраняется в DX. (Младшие 16 бит делимого должны быть помещены в AX. Частное от деления также будет записано в AX.) Ана- 9
Страницы
- « первая
- ‹ предыдущая
- …
- 7
- 8
- 9
- 10
- 11
- …
- следующая ›
- последняя »