Прерывание для инициализации переменной

Я следую руководству Джеймса Моллоя по созданию небольшой ОС, и теперь я застрял на прерывании. Я действительно не понимаю, как вызывать обработчики прерываний вместо этой команды:

    asm volatile("int $0x21");

Основной файл

    #include "monitor.h"
    #include "multiboot.h"
    #include "descriptor_tables.h"
    #include "timer.h"
    #include "paging.h"
    #include "simple.h"

    int main(struct multiboot *mboot_ptr){
     // Initialise all the ISRs and segmentation
        init_descriptor_tables();
     // Initialise the screen (by clearing it)
        monitor_clear();
        monitor_write("Hello, paging world!\n");          
        init_simple();
        asm volatile("int $0x21");
        return 0;
    }

Где 0x21 — это номер прерывания в векторе. Есть ли способ сделать прерывание с помощью команды c?

Например, я хочу использовать эти команды:

    char c; // for interrupt created and handler allocate memory for char/int etc.
    char c = 'a'; // allocate + assing 
    c; // get value
    c = 'b'; // assing new value

Есть ли способ сделать это?


person Ivnsky    schedule 10.07.2017    source источник
comment
В стандарте C нет понятия прерываний.   -  person Eugene Sh.    schedule 11.07.2017
comment
О, хорошо, есть ли способ сделать это на ассемблере?   -  person Ivnsky    schedule 11.07.2017
comment
выделить + assing ? Это конец распределения? Может быть, выделить + назначить?   -  person chux - Reinstate Monica    schedule 11.07.2017


Ответы (1)


Прерывания генерируются самим процессором.

Хотя C обычно используется для написания обработчиков прерываний в ядре, не существует уникального средства (или модели машины), диктующего их создание с его использованием.

person ŹV -    schedule 10.07.2017
comment
Но как система выделяет память в простой основной программе с несколькими переменными? - person Ivnsky; 11.07.2017
comment
Это специфично для операционной системы. В Linux ваша программа вызывает malloc(), который, в свою очередь, вызывает системный вызов brk(). С другой стороны, ядро ​​(и блок управления памятью, если это необходимо) затем отвечает за преобразование этой страницы в нижележащий фрагмент физической памяти. - person ŹV -; 11.07.2017