singlepost

Вопрос по ассемблеровским вставкам << На главную или назад  

#include &lt;stdlib.h&gt;
#include &lt;conio.h&gt;
#include &lt;dos.h&gt;
#include &lt;stdio.h&gt;
#define stacksize (2048)
#define _stek unsigned int

typedef
struct Tdescr{
unsigned int ss,sp,bp,ds,si,di;
};

void huge t_add(Tdescr huge *proc,void huge* work);
void huge t_switch(Tdescr huge *procO,Tdescr huge *procN);

void huge work1(void);
void huge work2(void);
void huge work3(void);

Tdescr *proc1=(Tdescr * )malloc(sizeof(Tdescr));
Tdescr *proc2=(Tdescr * )malloc(sizeof(Tdescr));
Tdescr *proc3=(Tdescr * )malloc(sizeof(Tdescr));
Tdescrhuge *Main=(Tdescr * huge)malloc(sizeof(Tdescr));

voidhuge t_add(Tdescr huge *proc,void huge * work)
{
_stek huge *st=(_stek huge *)malloc(stacksize);
proc-&gt;ss=FP_SEG(st);
proc-&gt;sp=FP_OFF(st)+1000;
*(int huge *)MK_FP(proc-&gt;ss,proc-&gt;sp)=FP_OFF(work);
*(int huge *)MK_FP(proc-&gt;ss,proc-&gt;sp+2)=FP_SEG(work);
proc-&gt;sp-=8;
}

void huge t_switch(Tdescr huge *procO,Tdescr huge *procN)
{
asm {
les bx,procO;
mov es:[bx],ss
mov es:[bx+2],sp
mov es:[bx+4],bp
mov es:[bx+6],ds
mov es:[bx+8],si
mov es:[bx+10],di
les bx,procN;
mov ax,es:[bx]
mov ss,ax
mov sp,es:[bx+2]
mov bp,es:[bx+4]
mov ds,es:[bx+6]
mov si,es:[bx+8]
mov di,es:[bx+10]
}
;
};

остальные функции удалены

кто нибудь может объяснить работу функцииt_add ?? а так же t_switch

5 ответов в теме “Вопрос по ассемблеровским вставкам”

  1. 4
    Андрей Ковалев ответил:

    t_switch
    на переключение задач похоже
    сохраняются регистры некоторые, странно, что только некоторые
    а потом такие же регистры загружаются из другого сохранённого состояния

  2. 3
    Миха Коробов ответил:

    t_switch загружает некоторые регистры в procO и присваивает этим регистрам значения полей структуры procN.
    А t_add, кажись, создает новый стек.

  3. 2
    Александр Фирсов ответил:

    аццкий код=)

    t_add что то делает с памятью, навскидку выделяет память в куче и говорит что это "память стека" для proc
    t_switchтворит нечто аццкое, но как мне кажется, она выгружает программу procO, и загружает procN.
    ЗЫ, это все более чем предположения

  4. 1
    Илья Ниомётов ответил:

    на wasm.ru спроси

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.