Ejemplo n.º 1
0
//ѕосле операции частное помещаетс¤ в ax, а остаток - в dx.
void _div (tCommandWithOperands cmd)
{
    tWord left = getOperandValue(cmd.left);
    tWord right = getOperandValue(cmd.right);
    if (right == 0)
    {
        printf("ERROR: Division by zero!");
        _hlt(cmd);
    }
    regValue[AX] = left / right;
    regValue[DX] = left % right;
    regValue[FLAGS] = ZeroFlag*(regValue[AX] == 0);
}
Ejemplo n.º 2
0
int
getc(FILE *stream)
{
    char ch;
    if (stream->lastc)
    {
        ch = stream->lastc;
        stream->lastc = 0;
        return (int)ch;
    }
    while (!read(stream->fd, (void *)&ch, 1))
        _hlt();
    return (int)ch;
}
Ejemplo n.º 3
0
void keDoSched()
{
	uint32 i;
	uint32 j;

	_cli();
	i=keSchedNextTask();
	while(i==0xFFFFFFFF)
	{
		_sti();
		_hlt();
		_cli();
		i=keSchedNextTask();
	}						// not any task can be sched

	if(i==currentTaskId)
	{
		_sti();
		return;				// only the current task can be sched
	}
	j=currentTaskId;
	currentTaskId=i;
	_switch(&(tasks[i]->esp), &(tasks[j]->esp));
}