Как прерывания работают над Intel 8080?

Как прерывания работают над Intel 8080? Я искал Google и в официальной документации Intel (197X), и я нашел только небольшое описание об этом. Мне нужно подробное объяснение об этом, для эмуляции этого ЦП.

8
задан Gilles 'SO- stop being evil' 12 September 2012 в 16:37
поделиться

4 ответа

\thispagestyle{empty}
-121--2768742-

Хотя я согласен с тем, что я воспринимаю как "намерение" в заявлении Дэвида Басараба: "Нет причин для публичного разоблачения полей", я хотел бы добавить немного другой акцент:

Я бы изменил цитату Давида выше, чтобы читать: "Нет причин для публичного разоблачения полей вне класса... за исключением сознательного выбора инкапсуляции полей в Свойствах, через которые осуществляется строгий контроль доступа.

Свойства не являются просто «шпоном» синтаксиса над полями «, привязанными к» C #: они являются фундаментальной языковой особенностью, разработанной по уважительным причинам, включая:

  1. управление открытым и не открытым внешним классам (инкапсуляция, скрытие данных)

  2. , позволяющее выполнять определенные действия при обращении к Свойству или установке: действия, которые лучше всего выражаются в наборе «get and» свойства, а не «повышаются» до внешних методов.

  3. Интерфейсы по конструкции не могут определять поля ', но могут определять свойства.

Хороший дизайн OO означает сознательный выбор относительно «состояния»:

  1. локальных переменных полей: какое состояние является частным для метода и переходных : локальные переменные, как правило, действительны только в рамках тела метода, или даже с такой «узкой продолжительностью жизни», как в области чего-либо типа 'для цикла. Конечно, переменные параметров в методе также можно рассматривать как «локальные».

  2. поля экземпляра класса: какое состояние является частным для класса и имеет независимое существование для каждого экземпляра класса, но, скорее всего, требуется использовать в нескольких местах класса.

  3. статические поля экземпляра: какое состояние будет свойством только класса, независимо от количества экземпляров класса.

  4. состояние сознательно и сознательно экспонируется «вне» класса: ключевая идея состоит в том, что между классом и «потребителями» данных, которые класс выставляет, существует, по крайней мере, один уровень косвенности. «Обратная сторона» «воздействия» - это, конечно, сознательное намерение скрыть (инкапсулировать, изолировать) код реализации.

    a. через общественные свойства: все аспекты этого хорошо освещены во всех других ответах здесь

    b. через индексаторы

    c. с помощью методов

    d. открытые статические переменные обычно встречаются в служебных классах, которые часто являются статическими классами.

Рекомендуется просмотреть: MSDN на полях ... MSDN в свойствах ... MSDN на индексаторах

-121--1255495-

Я наконец-то нашел его!

Я создаю переменную, называемую шиной, куда поступает код операции прерывания. Затем я вызвал функцию для обработки прерывания:

void i8080::interruption()
{
    // only for RST
    cycles -= cycles_table[bus];
    instruction[bus]();
    INT = false;
}

INT верно, когда требуется прерывание. Инструкции EI и DI обрабатывают INTE.

Если INT и INTE являются истинными, выполняется прерывание.

1
ответ дан 5 December 2019 в 08:52
поделиться

Указатели функций к обработчикам прерываний хранятся в низкой памяти. Около 32 или около того первых адресов являются аппаратные прерывания: срабатывание оборудования.

Следующие 32 или около того адреса выполнены пользователем, они называются программными прерываниями. Они вызваны инструкцией INT .

Параметр int - это прерывание программного обеспечения векторное число , которое будет называться прерыванием.

Вам нужно будет использовать инструкцию IRT для возврата от прерываний.

Вероятно, вы также должны отключить прерывания, как первое, что вы делаете при входе в прерывание.

Для получения дополнительной информации вы должны обратиться к документации для вашей конкретной модели процессора, она имеет тенденцию широко варьироваться.

1
ответ дан 5 December 2019 в 08:52
поделиться

Прерывание - это способ прерывания процессора с уведомлением об обработке чего-то другого, я не уверен насчет микросхемы Intel 8080, но по моему опыту, лучший способ описания прерывания - это:

The CS: IP (Code Segment:Instruction Pointer) находится на этой инструкции по адресу памяти 0x0000:0020, в качестве примера для объяснения ее с помощью инструкций Intel 8086, ассемблер тарабарщина и не имеет реального значения. .. инструкции являются образными

0x0000:001C   MOV AH, 07
0x0000:001D   CMP AH, 0
0x0000:001E   JNZ 0x0020
0x0000:001F   MOV BX, 20
0x0000:0020   MOV CH, 10   ; CS:IP is pointing here
0x0000:0021   INT 0x15

Когда CS:IP указывает на следующую строку и выдается INTerrupt 15 hexadecimal, вот что происходит, процессор толкает регистры и флаги на стек и затем выполняет код в 0x1000:0100, который обслуживает INT 15 в качестве примера

0x1000:0100   PUSH AX
0x1000:0101   PUSH BX
0x1000:0102   PUSH CX
0x1000:0103   PUSH DX
0x1000:0104   PUSHF
0x1000:0105   MOV ES, CS
0x1000:0106   INC AX
0x1000:0107   ....
0x1000:014B   IRET

Затем, когда CS: IP попадает на команду 0x1000:014B, выдается IRET (Interrupt RETurn), которая выскакивает из ВСЕХ регистров и восстанавливает состояние, и когда она выполняется, CPU's CS:IP указывает сюда, после команды 0x0000:0021.

0x0000:0022   CMP AX, 0
0x0000:0023   ....

То, как CPU знает, куда переходить к определенному смещению, основано на таблице Interrupt Vector (Вектор прерывания), эта таблица векторов прерывания устанавливается BIOS в определенном месте в BIOS, она выглядит следующим образом:

INT    BIOS's LOCATION OF INSTRUCTION POINTER
---    --------------------------------------
0      0x3000
1      0x2000
..      ....
15     0x1000    <--- THIS IS HOW THE CPU KNOWS WHERE TO JUMP TO

Эта таблица хранится в BIOS, и при выполнении INT 15, BIOS перенаправит CS:IP в это место в BIOS для выполнения служебного кода, обрабатывающего прерывание.

Еще в старые времена, в Turbo C, существовала возможность переопределения процедур таблицы векторов прерываний собственными функциями обработки прерываний, используя функции setvect и getvect, в которых действительные обработчики прерываний перенаправлялись в собственный код.

Надеюсь, я достаточно хорошо объяснил, хорошо, это не Intel 8080, но, насколько я понимаю, и был бы уверен, что концепция для этой микросхемы та же, что и для микросхем семейства Intel x86.

1
ответ дан 5 December 2019 в 08:52
поделиться

8080. 8080 зависел от внешнего оборудования для управления его обработкой прерываний, поэтому невозможно обобщить. Ищите информацию на контроллерах прерываний Intel 8214 или 8259.

1
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: