Сколько регистров существует в 8086/8088? - PullRequest
7 голосов
/ 03 февраля 2012

Я прошел курс «Архитектура компьютера» и понял, что процессор имеет 32 регистра по 32 бита. Сейчас я изучаю курс компьютерной архитектуры, в котором я прочитал, что 8086 имеет 8 регистров только . Но книга, которую я прочитал, и этот веб-сайт показывают много регистров. Я запутался по поводу регистров в 8086 и 8088. Пожалуйста, помогите мне. Спасибо

Примечание:

У меня хорошее понимание разных размеров регистров в разных процессорах. Я просто запутался в количестве регистров. Спасибо

Ответы [ 4 ]

27 голосов
/ 03 февраля 2012

8086 и 8088 - 16-битные процессоры - их регистры имеют ширину 16 байт (AX и DX могут быть объединены в один 32-битный регистр)

Обратите внимание, что 8086 имеет 16-битную шину данных; 8088 имеет 8-битную шину данных (хотя они оба имеют внутреннюю 16-битную адресацию)

РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ

8086 CPU имеет 8 регистров общего назначения, каждый из которых имеет свое имя:

AX - регистр аккумулятора (делится на AH / AL):

Generates shortest machine code
Arithmetic, logic and data transfer
One number must be in AL or AX
Multiplication & Division
Input & Output

BX - регистр базового адреса (разделенный на BH / BL).

CX - регистр счета (делится на CH / CL):

Iterative code segments using the LOOP instruction
Repetitive operations on strings with the REP command
Count (in CL) of bits to shift and rotate

DX - регистр данных (разделенный на DH / DL):

DX:AX concatenated into 32-bit register for some MUL and DIV operations
Specifying ports in some IN and OUT operations

SI - регистр исходного индекса:

Can be used for pointer addressing of data
Used as source in some string processing instructions
Offset address relative to DS

DI - регистр индекса назначения:

Can be used for pointer addressing of data
Used as destination in some string processing instructions
Offset address relative to ES

BP - базовый указатель:

Primarily used to access parameters passed via the stack
Offset address relative to SS

SP - указатель стека:

Always points to top item on the stack
Offset address relative to SS
Always points to word (byte at even address)
An empty stack will had SP = FFFEh

РЕГИСТРЫ СЕГМЕНТА

CS - указывает на сегмент, содержащий текущую программу.

DS - обычно указывает на сегмент, где определены переменные.

ES - регистр дополнительного сегмента, кодер определяет его использование.

SS - указывает на сегмент, содержащий стек.

Хотя в сегментных регистрах можно хранить любые данные, это не очень хорошая идея. Сегментные регистры имеют особую цель - указывать на доступные блоки памяти.

Сегментные регистры работают вместе с регистром общего назначения для доступа к любому значению памяти. Например, если мы хотим получить доступ к памяти по физическому адресу 12345h (шестнадцатеричный), мы могли бы установить DS = 1230h и SI = 0045h. Таким образом, мы можем получить доступ к гораздо большему объему памяти, чем с помощью одного регистра, который ограничен 16-битными значениями. Процессор вычисляет физический адрес, умножая регистр сегмента на 10h и добавляя в него регистр общего назначения (1230h * 10h + 45h = 12345h):

Адрес, сформированный из 2 регистров, называется эффективным адресом. По умолчанию регистры BX, SI и DI работают с регистром сегмента DS; BP и SP работают с регистром сегмента SS. Другие регистры общего назначения не могут сформировать эффективный адрес. Кроме того, хотя BX может формировать эффективный адрес, BH и BL не могут.

РЕГИСТРЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ

IP - указатель инструкции:

Always points to next instruction to be executed
Offset address relative to CS

Регистр IP всегда работает вместе с регистром сегмента CS и указывает на выполняемую в данный момент инструкцию.

РЕГИСТРАЦИЯ ФЛАГОВ

Flags Register - определяет текущее состояние процессора. Они автоматически модифицируются ЦП после математических операций, что позволяет определить тип результата и определить условия для передачи управления другим частям программы. Как правило, вы не можете получить доступ к этим регистрам напрямую.

Carry Flag (CF) - this flag is set to 1 when there is an unsigned overflow. For example when you add bytes 255 + 1 (result is not in range 0...255). When there is no overflow this flag is set to 0.
Parity Flag (PF) - this flag is set to 1 when there is even number of one bits in result, and to 0 when there is odd number of one bits. 
Auxiliary Flag (AF) - set to 1 when there is an unsigned overflow for low nibble (4 bits).
Zero Flag (ZF) - set to 1 when result is zero. For non-zero result this flag is set to 0.
Sign Flag (SF) - set to 1 when result is negative. When result is positive it is set to 0. (This flag takes the value of the most significant bit.)
Trap Flag (TF) - Used for on-chip debugging.
Interrupt enable Flag (IF) - when this flag is set to 1 CPU reacts to interrupts from external devices.
Direction Flag (DF) - this flag is used by some instructions to process data chains, when this flag is set to 0 - the processing is done forward, when this flag is set to 1 the processing is done backward.
Overflow Flag (OF) - set to 1 when there is a signed overflow. For example, when you add bytes 100 + 50 (result is not in range -128...127). 
3 голосов
/ 03 февраля 2012

8086 имеет 14 16-битных регистров. Регистр AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP и флагов. Последние два доступны только косвенно.

3 голосов
/ 03 февраля 2012

Я прошел курс компьютерной архитектуры и понял, что процессор имеет 32 регистра в каждом из 32-битных.

Это не отвечает на ваш вопрос, но если вы хотите общаться с другим инженеромВы должны использовать правильный язык.Сказать, что «(какой-то) процессор имеет 32 регистра, которые имеют размер 32 бита», никуда не денется, есть бесчисленное количество процессоров.

У 8086 было восемь (более или менее общих)16-битные регистры, включая указатель стека, но исключая указатель инструкций, регистр флагов и регистры сегментов.Четыре из них, AX, BX, CX, DX, также могут быть доступны в два раза больше 8-битных регистров (см. Рисунок), в то время как остальные четыре, BP, SI, DI, SP, были только 16-битными.

Я предполагаю, что путаница исходит из этого предложения в Википедии.Оба источника, которые вы читаете, правы.Существует 8 регистров общего назначения (в статье это отмечено как «более или менее общее», я понятия не имею, кто мог бы это написать): AX BX CX DX и SI DI BP SP.Существуют также регистры сегментов, специальные регистры и регистр флагов (которые отмечаются после слова «исключение», которое, как я предполагаю, должно читаться как «есть регистры, их будет 8, если исключить эти3 группы ", расплывчато).

Вопрос в редакции.Приведенное предложение сбивает с толку, и я могу видеть, откуда ваш вопрос.Спрашивать никогда не больно, но вы должны понимать, что Википедия не является надежным источником знаний, если вы когда-нибудь растерялись, просто возьмите книгу.

1 голос
/ 08 августа 2013

Книги по компьютерной архитектуре часто используют MIPS в качестве примера, потому что это довольно просто и познавательно.MIPS имеет 32 регистра, но это не означает, что другие 32-разрядные архитектуры также имеют 32 регистра.32-разрядный здесь означает только то, что компьютер имеет 32-разрядный адрес / 32-разрядные целочисленные регистры , не связанные с количеством регистров.

ARM, самая популярная 32-разрядная архитектура, имеет16 регистров (хотя ARMv8 64 бит удвоит это число до 32).Многие другие 32-разрядные архитектуры также имеют номер регистра, отличный от 32, например, Motoroka 68k и SuperH, которые имеют 16 регистров.Для списка архитектур смотрите здесь .Видите ли, 64-разрядные архитектуры редко имеют 64 регистра.Большинство из них будет иметь 32, хотя некоторые имеют 128 или 256 регистров.

x86, будучи обратно совместимым с 8080 много десятилетий назад, имеет только 8 регистров.Но на самом деле x86 в настоящее время имеет сотни регистров внутри и использует переименование регистров, чтобы преодолеть ограничение количества регистров.

...