Intel 8080, который был первым «основным» микропроцессором, имел семь основных 8-битных регистров (A, B, C, D, E, H и L). Поскольку адреса памяти были 16 битами, инструкции, которые должны были использовать непостоянный операнд памяти, использовали бы пару регистров (чаще всего H и L, но иногда B и C или D и E) для формирования адреса. Поскольку регистры в вышеупомянутых парах часто использовались вместе для представления 16-битных значений, было несколько инструкций, которые могли бы работать с парами регистров как 16-битные величины. Инструкция по добавлению BC в HL будет выполнять сложение путем добавления C к L, а затем путем добавления B к H (плюс перенос, если необходимо). Я недостаточно знаком с 4004 или 8008 (двумя предшественниками 8080), чтобы знать, делал ли кто-либо из них что-то похожее по своей архитектуре.
Когда Intel выпустила 8088, они включили 16-разрядный арифметический модуль, но хотели, чтобы код, написанный для 8080, был легко преобразован в их новую архитектуру. На 8080 большая часть кода была написана для «ручного» формирования адресов из 8-битных частей, поскольку это часто выполнялось намного быстрее, чем использование 16-битных инструкций для выполнения математических вычислений. Например, если нужно получить доступ к некоторой указанной таблице из 256 записей с индексом, хранящимся в A, можно было бы сделать что-то вроде (нотация Zilog покажите, но у 8080 были те же инструкции):
ld hl,(baseOfTable) ; 16-bit address
ld c,a
ld b,#0
add hl,bc
ld a,(hl)
но если бы можно было убедиться, что таблица выровнена по границе 256 байт, можно значительно упростить код:
ld l,a
ld a,(tableBaseMSB) ; Just load the MSB--assume the LSB is zero
ld h,a
ld a,(hl)
С набором инструкций 8088 было бы ужасно часто бесполезно для кода, написанного «с нуля», отдельно обращаться к верхней и нижней частям регистров, но для 8080 было написано много кода, который использовал такие методы. и Intel хотела, чтобы люди могли легко конвертировать такой код для использования на 8088. В этом отношении было полезно создать регистры из 8-битных фрагментов.
Кстати, у архитектуры Intel было еще одно преимущество: поскольку она включала четыре 16-разрядных регистра и четыре регистра, которые можно было использовать как одну 16-разрядную или две 8-разрядные части, это позволило сохранить код 12 значений в регистрах, если восемь из них были 255 или меньше, или одиннадцать значений, если шесть из них были 256 или меньше, и т. Д. При использовании архитектур с большим количеством регистров выбор дополнительного регистра здесь и там не так уж важен, но на 8088 это часто было очень полезно.