⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm86.c

📁 操作系统源代码
💻 C
字号:
/*	asm86.c - 80X86 assembly intermediate		Author: Kees J. Bot *								24 Dec 1993 */#define nil 0#include <stddef.h>#include <string.h>#include <assert.h>#include "asm86.h"#include "asmconv.h"#include "token.h"expression_t *new_expr(void)/* Make a new cell to build an expression. */{	expression_t *e;	e= allocate(nil, sizeof(*e));	e->operator= -1;	e->left= e->middle= e->right= nil;	e->name= nil;	e->magic= 31624;	return e;}void del_expr(expression_t *e)/* Delete an expression tree. */{	if (e != nil) {		assert(e->magic == 31624);		e->magic= 0;		deallocate(e->name);		del_expr(e->left);		del_expr(e->middle);		del_expr(e->right);		deallocate(e);	}}asm86_t *new_asm86(void)/* Make a new cell to hold an 80X86 instruction. */{	asm86_t *a;	a= allocate(nil, sizeof(*a));	a->opcode= -1;	get_file(&a->file, &a->line);	a->optype= -1;	a->oaz= 0;	a->rep= ONCE;	a->seg= DEFSEG;	a->args= nil;	a->magic= 37937;	return a;}void del_asm86(asm86_t *a)/* Delete an 80X86 instruction. */{	assert(a != nil);	assert(a->magic == 37937);	a->magic= 0;	del_expr(a->args);	deallocate(a);}int isregister(const char *name)/* True if the string is a register name.  Return its size. */{	static char *regs[] = {		"al", "bl", "cl", "dl", "ah", "bh", "ch", "dh",		"ax", "bx", "cx", "dx", "si", "di", "bp", "sp",		"cs", "ds", "es", "fs", "gs", "ss",		"eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp",		"cr0", "cr1", "cr2", "cr3",		"st",	};	int reg;	for (reg= 0; reg < arraysize(regs); reg++) {		if (strcmp(name, regs[reg]) == 0) {			return reg < 8 ? 1 : reg < 22 ? 2 : 4;		}	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -