Увеличение размера стека в операционной системе (GDT)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Увеличение размера стека в операционной системе (GDT)

Сообщение 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


Подробнее здесь: https://stackoverflow.com/questions/790 ... system-gdt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»