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

📄 7db.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 2 页
字号:
	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"CVTLQ",	0,	alphafp2,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"CPYS",		0,	alphafp,	"CPYSN",	0,	alphafp,	"CPYSE",	0,	alphafp,	"???",		0,	alphaxxx,	"MOVT",		0,	"FPCR,F%a",	"MOVT",		0,	"F%a,FPCR",	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"FCMOVEQ",	0,	alphafp,	"FCMOVNE",	0,	alphafp,	"FCMOVLT",	0,	alphafp,	"FCMOVGE",	0,	alphafp,	"FCMOVLE",	0,	alphafp,	"FCMOVGT",	0,	alphafp,	"CVTQL",	0,	alphafp2,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,};static Opcode ieeeopcodes[64] = {	"ADDS",		0,	alphafp,	"SUBS",		0,	alphafp,	"MULS",		0,	alphafp,	"DIVS",		0,	alphafp,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"ADDT",		0,	alphafp,	"SUBT",		0,	alphafp,	"MULT",		0,	alphafp,	"DIVT",		0,	alphafp,	"CMPTUN",	0,	alphafp,	"CMPTEQ",	0,	alphafp,	"CMPTLT",	0,	alphafp,	"CMPTLE",	0,	alphafp,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"CVTTS",	0,	alphafp2,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"CVTTQ",	0,	alphafp2,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"???",		0,	alphaxxx,	"CVTQS",	0,	alphafp2,	"???",		0,	alphaxxx,	"CVTQT",	0,	alphafp2,	"???",		0,	alphaxxx,};static uchar	amap[128] = {	[0x00]	1,	[0x40]	2,	[0x20]	3,	[0x60]	4,	[0x09]	5,	[0x49]	6,	[0x29]	7,	[0x69]	8,	[0x2D]	9,	[0x4D]	10,	[0x6D]	11,	[0x1D]	12,		[0x3D]	13,		[0x0F]	14,		[0x02]	15,		[0x0B]	16,		[0x12]	17,		[0x1B]	18,	[0x22]	19,		[0x2B]	20,		[0x32]	21,		[0x3B]	22,};static Opcode arithopcodes[64] = {	"???",		0,	alphaxxx,	"ADDL",		0,	alphaint,	"ADDL/V",	0,	alphaint,	"ADDQ",		0,	alphaint,	"ADDQ/V",	0,	alphaint,	"SUBL",		0,	alphaint,	"SUBL/V",	0,	alphaint,	"SUBQ",		0,	alphaint,	"SUBQ/V",	0,	alphaint,	"CMPEQ",	0,	alphaint,	"CMPLT",	0,	alphaint,	"CMPLE",	0,	alphaint,	"CMPULT",	0,	alphaint,	"CMPULE",	0,	alphaint,	"CMPBGE",	0,	alphaint,	"S4ADDL",	0,	alphaint,	"S4SUBL",	0,	alphaint,	"S8ADDL",	0,	alphaint,	"S8SUBL",	0,	alphaint,	"S4ADDQ",	0,	alphaint,	"S4SUBQ",	0,	alphaint,	"S8ADDQ",	0,	alphaint,	"S8SUBQ",	0,	alphaint,};static uchar	lmap[128] = {	[0x00]	1,	[0x20]	2,	[0x40]	3,	[0x08]	4,	[0x28]	5,	[0x48]	6,	[0x24]	7,	[0x44]	8,	[0x64]	9,	[0x26]	7,	[0x46]	8,	[0x66]	9,	[0x14]	10,	[0x16]	11,};static Opcode logicalopcodes[64] = {	"???",		0,	alphaxxx,	"AND",		0,	alphaint,	"OR",		0,	alphaint,	"XOR",		0,	alphaint,	"ANDNOT",	0,	alphaint,	"ORNOT",	0,	alphaint,	"XORNOT",	0,	alphaint,	"CMOVEQ",	0,	alphaint,	"CMOVLT",	0,	alphaint,	"CMOVLE",	0,	alphaint,	"CMOVNE",	0,	alphaint,	"CMOVGE",	0,	alphaint,	"CMOVGT",	0,	alphaint,	"CMOVLBS",	0,	alphaint,	"CMOVLBC",	0,	alphaint,};static uchar	smap[128] = {	[0x39]	1,	[0x3C]	2,	[0x34]	3,	[0x06]	4,	[0x16]	5,	[0x26]	6,	[0x36]	7,	[0x5A]	8,	[0x6A]	9,	[0x7A]	10,	[0x0B]	11,	[0x1B]	12,	[0x2B]	13,	[0x3B]	14,	[0x57]	15,	[0x67]	16,	[0x77]	17,	[0x02]	18,	[0x12]	19,	[0x22]	20,	[0x32]	21,	[0x52]	22,	[0x62]	23,	[0x72]	24,	[0x30]	25,	[0x31]	26,};static Opcode shiftopcodes[64] = {	"???",		0,	alphaxxx,	"SLLQ",		0,	alphaint,	"SRAQ",		0,	alphaint,	"SRLQ",		0,	alphaint,	"EXTBL",	0,	alphaint,	"EXTWL",	0,	alphaint,	"EXTLL",	0,	alphaint,	"EXTQL",	0,	alphaint,	"EXTWH",	0,	alphaint,	"EXTLH",	0,	alphaint,	"EXTQH",	0,	alphaint,	"INSBL",	0,	alphaint,	"INSWL",	0,	alphaint,	"INSLL",	0,	alphaint,	"INSQL",	0,	alphaint,	"INSWH",	0,	alphaint,	"INSLH",	0,	alphaint,	"INSQH",	0,	alphaint,	"MSKBL",	0,	alphaint,	"MSKWL",	0,	alphaint,	"MSKLL",	0,	alphaint,	"MSKQL",	0,	alphaint,	"MSKWH",	0,	alphaint,	"MSKLH",	0,	alphaint,	"MSKQH",	0,	alphaint,	"ZAP",		0,	alphaint,	"ZAPNOT",	0,	alphaint,};static voidformat(char *mnemonic, Instr *i, char *f){	if (mnemonic)		format(0, i, mnemonic);	if (f == 0)		return;	if (mnemonic)		if (i->curr < i->end)			*i->curr++ = '\t';	for ( ; *f && i->curr < i->end; f++) {		if (*f != '%') {			*i->curr++ = *f;			continue;		}		switch (*++f) {		case 'a':			bprint(i, "%d", i->ra);			break;		case 'b':			bprint(i, "%d", i->rb);			break;		case 'c':			bprint(i, "%d", i->rc);			break;		case 'v':			if (i->islit)				bprint(i, "$%ux", i->literal);			else				bprint(i, "R%d", i->rb);			break;		case 'l':			bprint(i, "%lx(R%d)", i->mem, i->rb);			break;		case 'i':			bprint(i, "$%lx", i->mem);			break;		case 'B':			i->curr += symoff(i->curr, i->end-i->curr,				(i->branch<<2)+i->addr+4, CANY);			break;		case 'w':			bprint(i, "[%lux]", i->w0);			break;		case '\0':			*i->curr++ = '%';			return;		default:			bprint(i, "%%%c", *f);			break;		}	}	*i->curr = 0;}static intprintins(Map *map, uvlong pc, char *buf, int n){	Instr i;	Opcode *o;	uchar op;	i.curr = buf;	i.end = buf+n-1;	mymap = map;	if (mkinstr(pc, &i) < 0)		return -1;	switch (i.op) {	case 0x10:					/* INTA */		o = arithopcodes;		op = amap[i.function];		break;	case 0x11:					/* INTL */		o = logicalopcodes;		op = lmap[i.function];		break;	case 0x12:					/* INTS */		o = shiftopcodes;		op = smap[i.function];		break;	case 0x16:					/* FLTI */		o = ieeeopcodes;		op = i.fpfn;		break;	case 0x17:					/* FLTL */		o = fpopcodes;		op = i.fpfn;		break;	default:		o = opcodes;		op = i.op;		break;	}	if (o[op].f)		(*o[op].f)(&o[op], &i);	else		format(o[op].mnemonic, &i, o[op].ken);	return i.size*4;}static intalphainst(Map *map, uvlong pc, char modifier, char *buf, int n){	USED(modifier);	return printins(map, pc, buf, n);}static intalphadas(Map *map, uvlong pc, char *buf, int n){	Instr i;	i.curr = buf;	i.end = buf+n;	mymap = map;	if (mkinstr(pc, &i) < 0)		return -1;	if (i.end-i.curr > 8)		i.curr = _hexify(buf, i.w0, 7);	if (i.size == 2 && i.end-i.curr > 9) {		*i.curr++ = ' ';		i.curr = _hexify(i.curr, i.w1, 7);	}	*i.curr = 0;	return i.size*4;}static intalphainstlen(Map *map, uvlong pc){	Instr i;	mymap = map;	if (mkinstr(pc, &i) < 0)		return -1;	return i.size*4;}static intalphafoll(Map *map, uvlong pc, Rgetter rget, uvlong *foll){	char buf[8];	Instr i;	mymap = map;	if (mkinstr(pc, &i) < 0)		return -1;	switch(i.op) {	case 0x1A:				/* JMP/JSR/RET */		sprint(buf, "R%d", i.rb);		foll[0] = (*rget)(map, buf);		return 1;	case 0x30:				/* BR */	case 0x34:				/* BSR */		foll[0] = pc+4 + (i.branch<<2);		return 1;	default:		if (i.op > 0x30) {		/* cond */			foll[0] = pc+4;			foll[1] = pc+4 + (i.branch<<2);			return 2;		}		foll[0] = pc+i.size*4;		return 1;	}}

⌨️ 快捷键说明

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