模拟dos下面的Debug下子命令D的功能,显示内存数据的程序

该博客介绍了一个程序,旨在模拟DOS下的Debug工具的D子命令,用于显示内存数据。虽然未实现错误位置提示和'l'参数功能,但通过字符串判断处理命令。代码存在冗余问题。
摘要由CSDN通过智能技术生成

模拟dos下面的Debug下子命令D的功能,显示内存数据的程序

还有子命令错误位置提示的功能和 d 命令的 l 参数没有实现;l  后面接数字表示要显示的个数,

在解析子命令的时候本想用语法和此法分析的方法,但功力不够,《the c++ language 》里面的那个词法语法分析的简单计算的代码都看不懂,只能进行字符串判断来处理了。代码写的很冗余·············

#define unit(m,n) (*(unsigned char far *)( m*0x10000 + n))

int showNum = 0x80 ;		/*要显示的数字的个数*/
int sec = 0;				/*要现实的段地址,在getToken里面如果没有给定的话,会赋予DS的值*/
int offset = 0;				/*当前偏移地址*/
int dcount = 0,ccount = 0;	/*记录已经输出了的内存字节和对应的字符的个数*/
int errorppos=1;			/*出错位置标记,没有实现*/
int str2Hex( char *pstr);	/*将十六进制字符串转化为数字*/
void show();		  		/*从当前偏移地址开始,显示showNum个字符*/	
void showLine( unsigned  int o);	/*根据传入的便宜地址显示内存数据,以及对应的ascii值*/
int getToken(char *);		/*分析d子命令,将结果写给全局变量sec和offset*/
void Driver(char *);		/*根据用户的输入的字符串,调用子命令分析函数,根据返回结果做出相应的操作*/
int valueLegal(char *);		/*传入的参数应该是分离出来的段地址或者偏移地址,判断要转换的十六进制字符串是否合法*/

main()
{
	char buf[100];
	sec=_DS;			/*默认偏移地址*/
	offset=0x0080;		/*因为按下d,偏移地址会自加 showNum*/
	printf("-----------------------------------Lee'S  Debug---------------------------------\n");
	while(1)	/*showLine(_DS,0x1009);*/
	{
		printf("-");
		gets(buf);
		Driver(buf);
		memset(buf,0,100);
	}
}

void Driver(char * pstr)
{
	showNum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值