Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65

[VM] Реализация аппаратных прерываний

03.08.2014, 15:07. Показов 1331. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, CyberForum. Уже как 2 месяца я пишу свой велосипед - эмулятор платформы Intel 80286. Реализовал некоторые команды, память, загрузку программ в память. В данный момент я ищу любую информацию по аппаратным прерываниям, например, деление на ноль, как ведет себя процессор, что происходит с регистрами и т.д. желательно информацию на русском языке, английский знаю не уверенно.
Кому интересно, вот список оппкодов:

Opcodes.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#ifndef OPCODES_HPP
#define OPCODES_HPP
 
 
// Версия опкодов
#define VER_MAJOR 0
#define VER_MINOR 1
#define VER_FIX 0
 
 
 
namespace FLAGS
{
    enum
    {
        OF = 1,         // Переполнение
        DF = 2,         // Направление
        IF = 4,         // Прерывание
        TF = 8,         // Пошаговый режим
        SF = 16,        // Знак
        ZF = 32,        // Ноль
        AF = 64,        // Внешний перенос
        PF = 128,       // Контроль четности, паритета
        CF = 256        // Перенос
    };
}
 
namespace REG
{
    enum
    {
        AX = 0,         // Аккумулятор
        BX,             // Базовый регистр
        CX,             // Счетчик
        DX,             // Данные
 
        SI,             // Индекс источника
        DI,             // Индекс назначения
 
        SP,             // Стековый указатель
        BP,             // Базовый указатель
 
        CS,             // Регистр сегмента кода
        DS,             // Регистр сегмента данных
        SS,             // Ркгистр сегмента стека
        ES,             // Дополнительный сегментный регистр 
        IP,              // Командный указатель
 
        FLAGS = 65534  // Регистр флагов
    };
}
 
namespace MOD
{
    enum
    {
        OP = 0,         // Непосредственная адресация
        REG = 1,        // Регистровая адресация
        MEM = 2         // Косвенная адресация
    };
}
 
namespace COM
{
    enum
    {
    /*  КОМАНДА         //  АРГУМЕНТЫ   /   РЕГИСТРЫ    /   ФЛАГИ     /    КОММЕНТАРИЙ     */
        NOP = 0,        //              /               /             /
        ADD,            //  DEST, SRC   /               /             /
        JMP,            //  DEST        /               /             /
        HLT,            //              /               /             /
        JO,             //  DEST        /               /             /
        JNO,            //  DEST        /               /             /
        JE,             //  DEST        /               /             /
        JZ,             //  DEST        /               /             /
        JNE,            //  DEST        /               /             /
        JNZ,            //  DEST        /               /             /
        JS,             //  DEST        /               /             /
        JNS,            //  DEST        /               /             /
        SUB,            //  DEST, SRC   /               /             /
        MOV,            //  DEST, SRC   /               /             /
        MUL,            //  DEST        /   AX,DX       /             /
        DIV,            //  DEST        /   AX,DX       /             / Нет прерываний (INT 0h)
        NEG,            //  DEST        /               /             /
        INC,            //  DEST        /               /             /
        DEC,            //  DEST        /               /             /
        INT             //  DEST        /               /             / Не реализовано
    };
}
 
#endif  /* OPCODES_HPP */
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2014, 15:07
Ответы с готовыми решениями:

Обработка аппаратных прерываний
Доброго вечера. Уважаемые форумчане, кто нибудь сталкивался с таким? Необходимо написать подпрограмму обработки аппаратного прерывания...

Глобальные перехваты аппаратных прерываний
Вот посидел попробывал и, понял что вот так нельзя из-под доса отследить или эмулировать нажатия клавишь в windows с помощю прерывания или ...

Обработка аппаратных прерываний по номеру IRQ
Здравствуйте! Подскажите пожалуйста ответ на вопрос:Как ОС различает когда несколько устройств используют один и тот же номер IRQ. Как...

9
03.08.2014, 19:38

Не по теме:

А зачем под каждое перечисление свое пространство?

0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
03.08.2014, 19:49

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
А зачем под каждое перечисление свое пространство?
Эмуляция enum classes.



Добавлено через 4 минуты
Koncord, ну попробуй тут посмотреть.
Но вообще это все фигня. Вот тот документ, который тебе нужен.
1
03.08.2014, 19:49

Не по теме:

Зачем такое счастье нужно?

0
03.08.2014, 19:54

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Зачем такое счастье нужно?
Вот.

0
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
03.08.2014, 20:37  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Эмуляция enum classes.

Не по теме:

Не совсем, в enum classes возникла проблема строгой типизации, получался некрасивый код, например нельзя было бы так сделать:

C++
1
2
3
4
5
6
7
8
9
switch (cell.mod)
{
case MOD::REG:
    return *reg->GetRegister(cell.addr);
case MOD::MEM:
    return ram->GetWord(cell.addr);
case MOD::OP:
    return cell.addr;
}
А если просто использовать enum, то будет конфликт повторного декларирования

0
03.08.2014, 20:53

Не по теме:

Повторно декларирование чего ? чет не вижу тут конфликтов.

0
03.08.2014, 21:41  [ТС]

Не по теме:

Avazart, попробуйте скомпилировать код вида
enum E1
{
A=1,
B=2,
C=3
};
enum E2
{
A=2,
B=3,
C=4
};

0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.08.2014, 21:51
Я вроде не заметил конфликтов имен в коде приведенном в первом посте.
0
03.08.2014, 21:55  [ТС]

Не по теме:

Видимо когда я писал этот хедер, я пребывал в астрале :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2014, 21:55
Помогаю со студенческими работами здесь

Критическая секция запретом аппаратных прерываний
Собственно вопрос в названии. Могу ли я быть абсолютно уверен в том, что код вида: cli .. ;всякие проверки на то, что некоторые...

Реализация прерываний в классах на С++
Доброго дня всем. Изучая С++ для STM32 стлолкнулся со следующей проблемой. Не могу реализовать обработчик прерываний внутри класса....

Какие функции прерываний используются в обработчике прерываний от клавиатуры?
Под функциями же имеется ввиду int ..h?

Отключение аппаратных кнопок
Как сделать так, чтобы при нажатии кнопки Power не включался экран блокировки ?

Блокировка аппаратных ресурсов
Имеется поделка на микроконтроллере. По ходу дела обросла большим функционалом. Хочется немного рефракторнуть имеющийся код. Суть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru