Один из комментаторов обсуждения 16-ти битных моделей вызова хотел узнать, почему у 8086 так мало регистров (перевод только поста).
Процессор 8086 был просто 16-ти битной версией ещё более старого процессора 8080, который имел семь восьмибитовых регистров с именами A, B, C, D, E, H и L. Регистры могли использоваться парами для создания трёх 16-ти битных псевдо-регистров BC, DE и HL. Но это ещё не всё: вы могли положить 16-ти битный адрес в регистр HL и использовать псевдо-регистр "M" для его разыменования. Поэтому, например, вы могли написать "MOV B, M" и это означало бы загрузку в регистр B 8-ми битного значения, на которое указывает адрес, записанный в HL.
Процессор 8086 брал регистры 8080-го и маппил их примерно так:
- A -> AL
- H -> BH, L -> BL; HL -> BX; M -> [BX]
- B -> CH, C -> CL; BC -> CX
- D -> DH, E -> DL; DE -> DX
До сих пор это всё были довольно официальные слова. Набор инструкций для 8086 был выбран обратно совместимым с 8080, что способствовало переходу существующего 8-ми битного кода на 16-ти битный процессор. Даже вызовы функций MS-DOS были спроектированы, чтобы упростить машинный переход.
Что насчёт регистров SI и DI? Я подозреваю, что их идея возникла из регистров IX и IY машины Z-80 - конкурента 8080, который взял набор инструкций 8080 и расширил его новыми регистрами. Z-80 позволял вам разыменовывать указатель через [IX] и [IY], поэтому 8086 позволял вам разыменовывать через [SI] и [DI].
А что насчёт регистра BP? Я подозреваю, что его изобрели в процессе проектирования, чтобы упростить передачу параметров через стек. Заметьте, что регистр BP - единственный из регистров 8086, который привязан к сегменту SS и, следовательно, может использоваться для доступа к памяти стека напрямую.
Почему нельзя было добавить ещё больше регистров, как, например, делают современные процессоры с их палитрой из 16-ти или даже 128-ю регистров? Зачем нужно было ограничивать 8086 только восемью регистрами (AX, BX, CX, DX, SI, DI, BP, SP)? Ну, тогда - это тогда, а сейчас - это сейчас. В те времена процессоры не имели много регистров. Например, 68000 имел целых 16 регистров, но если вы посмотрите на них более внимательно, то увидите, что только одна половина из них может использоваться в арифметических операциях, а вторая половина - только для доступа к памяти.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.