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

📄 regs.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * code to keep track of registers */#include "defs.h"#include "fns.h"/* * translate a name to a magic register offset */Reglist*rname(char *name){	Reglist *rp;	for (rp = mach->reglist; rp->rname; rp++)		if (strcmp(name, rp->rname) == 0)			return rp;	return 0;}static uvlonggetreg(Map *map, Reglist *rp){	uvlong v;	ulong w;	ushort s;	int ret;	v = 0;	ret = 0;	switch (rp->rformat)	{	case 'x':		ret = get2(map, rp->roffs, &s);		v = s;		break;	case 'f':	case 'X':		ret = get4(map, rp->roffs, &w);		v = w;		break;	case 'F':	case 'W':	case 'Y':		ret = get8(map, rp->roffs, &v);		break;	default:		werrstr("can't retrieve register %s", rp->rname);		error("%r");	}	if (ret < 0) {		werrstr("Register %s: %r", rp->rname);		error("%r");	}	return v;}uvlongrget(Map *map, char *name){	Reglist *rp;	rp = rname(name);	if (!rp)		error("invalid register name");	return getreg(map, rp);}voidrput(Map *map, char *name, vlong v){	Reglist *rp;	int ret;	rp = rname(name);	if (!rp)		error("invalid register name");	if (rp->rflags & RRDONLY)		error("register is read-only");	switch (rp->rformat)	{	case 'x':		ret = put2(map, rp->roffs, (ushort) v);		break;	case 'X':	case 'f':	case 'F':		ret = put4(map, rp->roffs, (long) v);		break;	case 'Y':		ret = put8(map, rp->roffs, v);		break;	default:		ret = -1;	}	if (ret < 0)		error("can't write register");}/* * print the registers */voidprintregs(int c){	Reglist *rp;	int i;	uvlong v;	for (i = 1, rp = mach->reglist; rp->rname; rp++, i++) {		if ((rp->rflags & RFLT)) {			if (c != 'R')				continue;			if (rp->rformat == '8' || rp->rformat == '3')				continue;		}		v = getreg(cormap, rp);		if(rp->rformat == 'Y')			dprint("%-8s %-20#llux", rp->rname, v);		else			dprint("%-8s %-12#lux", rp->rname, (ulong)v);		if ((i % 3) == 0) {			dprint("\n");			i = 0;		}	}	if (i != 1)		dprint("\n");	dprint ("%s\n", machdata->excep(cormap, rget));	printpc();}

⌨️ 快捷键说明

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