Привет всем, я пытаюсь разработать систему для простой системы, а не для сложной,
Я вошел непосредственно в 16-битный режим, а также настроил его на 32-битный,
и я позвонил в свой файл CPP,
#include "cpp/io/stdio.cpp"
extern "C" void main() {
clear();
const char* str1 = "Kernel Start...\n";
printf(str1);
const char* str2 = "Please Wait...\n";
printf(str2);
clear();
char input[50];
while (1) {
printf("\nEnter your text: ");
scanf(input, sizeof(input));
}
return;
}
Пока всё хорошо
Но заметил при увеличении метода и текстов, например при изменении
const char* str1 = "Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., \n";
Моя система не печатает весь текст, и здесь я подтвердил, что мой стек настроен неправильно.
И после дополнительных исследований я обнаружил, что причиной является GDT
Можете ли вы
; gdt.asm
loadGDT:
cli
lgdt [gdt_pointer]
mov eax, cr0
or eax, 0x1
mov cr0, eax
jmp CODE_SEG:boot2
gdt_start:
dq 0x0
gdt_code:
dw 0xFFFF
dw 0x0
db 0x0
db 10011010b
db 11001111b
db 0x0
gdt_data:
dw 0xFFFF
dw 0x0
db 0x0
db 10010010b
db 11001111b
db 0x0
gdt_end:
gdt_pointer:
dw gdt_end - gdt_start-1
dd gdt_start
CODE_SEG equ gdt_code - gdt_start
DATA_SEG equ gdt_data - gdt_start
goTo32Bit:
bits 32
boot2:
; ; now, initial stack to data segment
mov ax, DATA_SEG
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov ebp, 0x300000
mov esp, ebp
jmp KERNEL_LOCATION
Может кто-нибудь объяснить мне, как я могу увеличить размер стека, чтобы писать больше текста
Я пытаюсь изменить свой esp на 0xFFFF< /p>
boot2:
; ; now, initial stack to data segment
mov ax, DATA_SEG
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov ebp, 0xFFFF
mov esp, ebp
Подробнее здесь: https://stackoverflow.com/questions/790 ... system-gdt
Увеличение размера стека в операционной системе (GDT) ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1728517830
Anonymous
Привет всем, я пытаюсь разработать систему для простой системы, а не для сложной,
Я вошел непосредственно в 16-битный режим, а также настроил его на 32-битный,
и я позвонил в свой файл CPP,
#include "cpp/io/stdio.cpp"
extern "C" void main() {
clear();
const char* str1 = "Kernel Start...\n";
printf(str1);
const char* str2 = "Please Wait...\n";
printf(str2);
clear();
char input[50];
while (1) {
printf("\nEnter your text: ");
scanf(input, sizeof(input));
}
return;
}
Пока всё хорошо
Но заметил при увеличении метода и текстов, например при изменении
const char* str1 = "Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., Kernel Start..., \n";
Моя система не печатает весь текст, и здесь я подтвердил, что мой стек настроен неправильно.
И после дополнительных исследований я обнаружил, что причиной является GDT
Можете ли вы
; gdt.asm
loadGDT:
cli
lgdt [gdt_pointer]
mov eax, cr0
or eax, 0x1
mov cr0, eax
jmp CODE_SEG:boot2
gdt_start:
dq 0x0
gdt_code:
dw 0xFFFF
dw 0x0
db 0x0
db 10011010b
db 11001111b
db 0x0
gdt_data:
dw 0xFFFF
dw 0x0
db 0x0
db 10010010b
db 11001111b
db 0x0
gdt_end:
gdt_pointer:
dw gdt_end - gdt_start-1
dd gdt_start
CODE_SEG equ gdt_code - gdt_start
DATA_SEG equ gdt_data - gdt_start
goTo32Bit:
bits 32
boot2:
; ; now, initial stack to data segment
mov ax, DATA_SEG
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov ebp, 0x300000
mov esp, ebp
jmp KERNEL_LOCATION
Может кто-нибудь объяснить мне, как я могу увеличить размер стека, чтобы писать больше текста
Я пытаюсь изменить свой esp на 0xFFFF< /p>
boot2:
; ; now, initial stack to data segment
mov ax, DATA_SEG
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov ebp, 0xFFFF
mov esp, ebp
Подробнее здесь: [url]https://stackoverflow.com/questions/79072343/increase-stack-size-in-operating-system-gdt[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия