На 8086 доступны только следующие режимы адресации:
[bx] [bx + foo]
[foo] [bp + foo]
[si] [si + foo]
[di] [di + foo]
[bx + si] [bx + si + foo]
[bx + di] [bx + di + foo]
[bp + si] [bp + si + foo]
[bp + di] [bp + di + foo]
, где foo
- это некоторое значение.Обратите внимание, что никакой режим адресации с участием cx
не существует, поэтому [cx]
не является допустимым операндом памяти.
Регистры ax, cx, dx, bx, sp, bp, si и di называются регистры общего назначения , потому что они доступны как операнды во всех инструкциях общего назначения.Это отличается от регистров специального назначения, таких как es, cs, ss, ds (регистры сегментов), ip (указатель инструкций) или регистра флагов, которые доступны только со специальными инструкциями, созданными только для этой цели.
Как видите, не все регистры общего назначения могут использоваться в качестве регистров индекса для операндов памяти.Об этом следует помнить при регистрации вашего кода.
В дополнение к этому ограничению существуют некоторые инструкции, которые неявно работают с фиксированными регистрами.Например, инструкция цикла работает исключительно на cx
, а 32-битное значение imul работает исключительно на dx:ax
.Если вы хотите эффективно использовать эти инструкции, полезно помнить о предполагаемой цели каждого регистра общего назначения.