Мнемонические обозначения регистров
В силу того, что в ЭВМ все регистры имеют безликие двоичные обозначения, программисты предпочитают использовать мнемонические названия регистров. Регистры общего назначения, каждый из которых может складывать, вычитать и просто хранить данные, а некоторые – умножать и делить, обозначают следующими именами: AX, BX, CX, DX. Для обеспечения многообразия форматов данных каждый из них разбит на две части по 8 бит каждая (биты нумеруются немного непривычно справа налево, начиная с нуля):
AX | AH | AL | |||
BX | BH | BL | |||
CX | CH | CL | |||
DX | DH | DL | |||
16 бит | |||||
Каждый из регистров AH, AL, BH, BL, CH, CL, DH и DL может быть использован как самостоятельный регистр, на которых возможно выполнять операции сложения и вычитания.
Существуют также четыре регистра SI, DI, SP и BP, которые также могут использоваться для проведения сложения и вычитания, но уже не делятся на половинки:
15 0 | |
SI | |
DI | |
SP | |
BP | |
16 бит |
В основном эти четыре регистра используются как индексные, т.е. на них храниться положение конкретного элемента в некотором массиве.
Кроме перечисленных выше регистров программист имеет дело с регистром IP (instruction pointer), который называется счётчиком адреса и содержит адрес следующей исполняемой команды (точнее, содержит смещение относительно начала кодового сегмента, адрес начала этого сегмента, как мы уже знаем, равен значению сегментного регистра CS, умноженному на 16).
16 бит | |
IP |
И, наконец, как уже упоминалось, архитектурой изучаемой ЭВМ предусмотрен регистр флагов FLAGS. Он содержит шестнадцать одноразрядных флагов, например, ранее упоминавшиеся флаги CF и OF. Конкретные номера битов, содержащих тот или иной флаг, для понимания архитектуры несущественны, и приводиться здесь не будут.
16 бит | |||||
FLAGS | … | CF | … | OF | … |
Все биты в регистрах пронумерованы справа налево: в шестнадцатибитных – от 0 до 15, в восьмибитных – от 0 до 7.
Все упомянутые имена регистров являются служебными в языке Ассемблера. Как и в языке Паскаль, в языке Ассемблера принято соглашение по синтаксису имён: регистр символов не различается, таким образом, AX,Ax,aX и ax обозначают один и тот же регистр.
Рассмотрим теперь способ хранения чисел в памяти ЭВМ. Запишем, например, шестнадцатеричное число 1234h в какой-нибудь 16-тиразрядный регистр (каждая шестнадцатиричная цифра занимает по 4 бита):
Теперь поместим это число в память в ячейки с номерами, например, 100 и 101. Так вот: в ячейку с номером 100 запишется число 34h, а в ячейку 101 – число 12h. Говорят, что число представлено в основной памяти (в отличие от регистров) в перевёрнутом виде. Это связано с тем, что в младших моделях ЭВМ при каждом обращении к памяти читался один байт. Чтобы считать слово, было необходимо дважды обратиться к памяти, поэтому было удобно (например, для проведения операция сложения "в столбик") получать сначала младшие цифры числа, а затем – старшие. В современной архитектуре за одно обращение из памяти получают сразу 4, 8 или 16 байт, но из-за совместимости моделей семейства пришлось оставить перевёрнутое представление чисел. Заметим, что в отличие от чисел, команды хранятся в памяти в обычном (не перевернутом) виде.
Дата добавления: 2015-10-05; просмотров: 1038;