Ejemplo n.º 1
0
void HandleFuncExc(TreeNode* pnode){
	FuncList varList=funcListLookup(pnode->attr.name);
	EMITCODE("pushl %eax\n");  	
	PushParam(pnode->child[0]);
	EMITCODE("pushl %ecx\n");  
	EMITCODE("movl %esp, %ecx\n");
	sprintf(tmp, "call %s\n", pnode->attr.name);
	EMITCODE(tmp);
	EMITCODE("popl %ecx\n");
	PopParam(pnode->child[0],varList->paraList);
	EMITCODE("popl %eax\n");  
}
Ejemplo n.º 2
0
static void PVWrite (CPURegs* Regs)
{
    unsigned char* Data;
    unsigned RetVal, I = 0;

    unsigned Count = GetAX (Regs);
    unsigned Buf   = PopParam (2);
    unsigned FD    = PopParam (2);

    Print (stderr, 2, "PVWrite ($%04X, $%04X, $%04X)\n", FD, Buf, Count);

    Data = xmalloc (Count);
    while (I < Count) {
        Data[I++] = MemReadByte (Buf++);
    }

    RetVal = write (FD, Data, Count);

    xfree (Data);

    SetAX (Regs, RetVal);
}
Ejemplo n.º 3
0
void PopParam(TreeNode* pnode,SimpleTypeList varList){
	
	if (pnode==NULL || varList==NULL)
		return;

	if (varList->isVar==1){
		HandleNodeExp(pnode);
		EMITCODE("popl %eax\n");
		EMITCODE("movl %eax, (%esi)\n");
	}
	else EMITCODE("popl %eax\n");

	PopParam(pnode->sibling,varList->next);
}
Ejemplo n.º 4
0
static void PVRead (CPURegs* Regs)
{
    unsigned char* Data;
    unsigned RetVal, I = 0;

    unsigned Count = GetAX (Regs);
    unsigned Buf   = PopParam (2);
    unsigned FD    = PopParam (2);

    Print (stderr, 2, "PVRead ($%04X, $%04X, $%04X)\n", FD, Buf, Count);

    Data = xmalloc (Count);

    RetVal = read (FD, Data, Count);

    if (RetVal != (unsigned) -1) {
        while (I < RetVal) {
            MemWriteByte (Buf++, Data[I++]);
        }
    }
    xfree (Data);

    SetAX (Regs, RetVal);
}