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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли узнать, что в функцию передается именно элемент перечисления? http://www.cyberforum.ru/cpp/thread1237389.html
Добрый вечер всем. Возможно глупый вопрос, тем не менее: как грамотно организовать проверку входного параметра, если допустимые варианты указаны в перечислении перечислении? например так: enum...
C++ Какую именно книгу Герберта Шилдта стоит прочитать? Хотел узнать какую именно книгу нужно почитать у такого автора как Г.Шилдт(у него их много по с++)и какие лучше не читать? Плюсом было бы если бы книга не была устарелой... И еще если можно то было... http://www.cyberforum.ru/cpp/thread1237134.html
Как сконвертировать URL вида %D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0 туда и обратно? C++
Здрасьте всем! Пришлось перелезть из Борланда на MS Visual Studio 5 под Windows XP. Делаю маленький Веб сервер. Так вот надо декодировать приходящие запросы из %-го вида в обычный тип char*....
Зная c++ в чем можно писать код кроме проекта Win32 в студии? C++
Прошу правильно понять:например в фильмах различные хакеры взламывают что-то и т.п и вообще если что-то супер написано на с++ то это же не означает что на винапи в "Проект Win32" в Visual...
C++ Множественное наследование - так ли это плохо? http://www.cyberforum.ru/cpp/thread1235655.html
Вопрос не в том, что это такое и пр. С момента изучения Си++ во всех книжках все авторы (кроме самого Страуструпа) пишут, что множественное наследование - бяка и фу. Мне лично глубоко пофигу на эти...
C++ Нетривиальный тривиальный калькулятор Привет! Ковырясь в OpenJDK разобрался как генерится/исполняется ассемблерный код в рантайме. Решил поделиться увиденным подходом, написал калькулятор, который часто здесь просят студенты (ввести 5 +... подробнее

Показать сообщение отдельно
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65

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

03.08.2014, 15:07. Просмотров 479. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru