Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
#1

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

03.08.2014, 15:07. Просмотров 478. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2014, 15:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [VM] Реализация аппаратных прерываний (C++):

Обработка прерываний - C++
Доброго времени суток. Пытаюсь выполнить пример программы с использованием прерывания, взятый из справки Borland C++. #include <stdio.h>...

Обработчик прерываний - C++
Есть такое задание: "При нажатии символьной клавиши с нажатой клавишей Shift выводить её код. Для вывода использовать прерывание...

Организация обработки прерываний - C++
Здравствуйте! Пытаюсь разобраться с механизмом обработки прерывания. Нужно написать такую программку, чтобы показать программное прерывание...

Организация прерываний в DOS - C++
Доброе время суток. Возникла проблема с прерываниями в DOS. Недавно начал изучать их использование в написании программ, так что заранее...

Как реализовать обработку прерываний в С++? - C++
Надо разработать три программных модуля, каждый процесс после запуска представляет уникальный процесс, работа которого предполагает...

Вызов функций через таблицу прерываний - C++
Уважаемые участники форума cyberforum.ru, очень нужна ваша помощь. Столкнулся с такой вот проблемой: написал класс обработки 64-битных...

9
Avazart
03.08.2014, 19:38
  #2

Не по теме:

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

0
DrOffset
7313 / 4413 / 999
Регистрация: 30.01.2014
Сообщений: 7,247
03.08.2014, 19:49 #3

Не по теме:

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



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

Не по теме:

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

0
DrOffset
03.08.2014, 19:54
  #5

Не по теме:

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

0
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
03.08.2014, 20:37  [ТС] #6
Цитата Сообщение от 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
Avazart
03.08.2014, 20:53
  #7

Не по теме:

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

0
Koncord
03.08.2014, 21:41  [ТС]
  #8

Не по теме:

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

0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,796
Записей в блоге: 17
03.08.2014, 21:51 #9
Я вроде не заметил конфликтов имен в коде приведенном в первом посте.
0
Koncord
03.08.2014, 21:55  [ТС]     [VM] Реализация аппаратных прерываний
  #10

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2014, 21:55
Привет! Вот еще темы с ответами:

Литература для написания обработчика прерываний MS DOS - C++
Нужна литература чтобы выполнить лабораторную по теме "Использование стандартных функций и разработка собственных прерываний в ОС MSDOS"....

Обработка прерываний с клавиатуры на С++ с применением библиотеки dos.h - C++
Добрый день! Очень сильно нуждаюсь в вашей помощи. Вот в чем вопрос: Осуществить коррекцию прерывания Int 9 (от клавиатуры) так,...

Используя подсистему прерываний написать программу, которая выводит на экран информацию о параметрах НЖМД - C++
Используя подсистему прерываний написать программу, которая выводит на экран информацию о параметрах НЖМД. $ 13 - дисковые службы ...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.08.2014, 21:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru