Windows — Создание массива сбросить флаг? C ++ / asm

У меня проблема с сбросом флага прерывания.
После установки флага прерывания на 0 с asm cli, речь идет о строке кода char* c = new char[size]и когда он завершает инициализацию этого массива, он сбрасывает флаг I в 1. Как я могу сделать так, чтобы флаг у меня оставался на текущем значении все время, потому что запись другого asm cli после того, как оператор new [] не является решением, учитывая, что у меня есть промежуток между этими 2 инструкциями, который разрешает прерывания?

Thread::Thread(StackSize stackSize, Time timeSlice) {
#ifndef BCC_BLOCK_IGNORE
DIS_INT // a macro: #define DIS_INT asm cli
#endif

myPCB = new PCB(stackSize,timeSlice,this);

#ifndef BCC_BLOCK_IGNORE
ENB_INT
#endif
}

здесь я устанавливаю флаг 0 и вызываю конструктор PCB

PCB::PCB(StackSize stackSize, Time timeSlice, Thread* thread){
time = timeSlice;
myThread = thread;
stack = createStack(stackSize);
...

char* PCB::createStack(StackSize stackSize){
char* stek = new char[stackSize];         // after this line, IF = 1
#ifndef BCC_BLOCK_IGNORE                      // which is not desired
newSS = FP_SEG(stek+stackSize);
newSP = FP_OFF(stek+stackSize);
asm{
mov oldSS, ss
mov oldSP, sp
mov ss, newSS
mov sp, newSP

push ax
push bx
push cx
push dx
push es
push ds
push si
push di
push bp

mov newSS, ss
mov newSP, sp
mov ss, oldSS
mov sp, oldSP
}
this->stekp = MK_FP(newSS,newSP);
#endif
return stek;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector