Fork me on GitHub
  2013年3月24日
摘要: 该文章在DOS联盟论坛上找的,很不错,在这贴出来,好文章大家看。DOS联盟论坛:http://www.cn-dos.net/forum/硬盘主引导扇区 = 硬盘主引导记录(MBR)+ 硬盘分区表(DPT)--------------------------------------------------------------物理位置:0面0道1扇区(clindyer 0, side 0, sector 1)大小: 512字节其中:MBR 446字节(0000--01BD),DPT 64字节(01BE--01FD),结束标志2字节(55 AA)功能:MBR通过检查DPT分区信息引导系统跳转至D 阅读全文
posted @ 2013-03-24 19:28 loopever 阅读(714) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是我在网上找的,原作者不知道是谁,不过我还是要说声谢谢,我从这篇文章中学到了很多。引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录MBR和硬盘分区表DPT。在总共512字节的主引导分区里其中MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH偏移1FFH)是分区的结束标志。大致的结构如下图:0000 |------------------------------------------------|| || || Main Boot Rec 阅读全文
posted @ 2013-03-24 19:27 loopever 阅读(676) 评论(0) 推荐(0) 编辑
摘要: 错误:EMM386:Uncoverable privileged operation error #9的解决最近看《自己动手写操作系统》。我在VPC上安装的是DOS7.1,结果运行第三章中的例子程序时总是报错:EMM386:Uncoverable privileged operation error #9-Press Enter to reboot。郁闷了很长时间,才找到答案。原因是我的DOS上装了EMM386.EXE。我先是在C:\Config.sys中把DEVICE=C:\DOS71\EMM386.EXE NOEMMS中的NOEMMS删了,保存,重启DOS,运行例子时报错ERROR # 6 阅读全文
posted @ 2013-03-24 19:26 loopever 阅读(479) 评论(0) 推荐(0) 编辑
摘要: VMWare DOS 文件共享vmware 下 DOS 不能安装vmware tools ,所以不能直接共享文件。一种办法是用DOS的网络功能,用FTP。另一种是用光盘,只说第二种:步骤:1.下载VMWare dos镜像 WINISO2.安装VMWare3.VMWare新建虚拟机。选择MS-DOS。4.在新建的虚拟机中,将软盘设置成下载的DOS镜像文件。并将最上面的两个CONNECT和POWER CONNECT选中。否则软盘不工作。提示找不到操作系统。5.启动VMWare,一步一步安装。在安装过程中,提示换软盘。将软盘设置重新设置为第二个软盘镜像即可。6.将需要COPY的东西,我这为ASM文件 阅读全文
posted @ 2013-03-24 19:24 loopever 阅读(722) 评论(0) 推荐(0) 编辑
  2012年12月14日
摘要: 1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制 阅读全文
posted @ 2012-12-14 22:18 loopever 阅读(186) 评论(0) 推荐(0) 编辑
  2012年10月30日
摘要: 一,堆栈溢出 堆栈溢出就是不顾堆栈中分配的局部数据块大小(在栈中分配的局部数据块大小和局部变量的声明的大小有关),向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据(包括函数的返回地址)。 或者解释为在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自编的代码了.这东西很像病毒。基础知识 首先简单讲两个基础知识,一是函数调用时堆栈的变化;二是函数调用约定对函数调用及返回时堆栈变化的影响。 我们用高级语言编写程序的时候,函数调用是很常见的事情,但是我们却很少去观察函数调用时汇编究竟是如何实现的。其实,函数调用实现的过程很简单. 阅读全文
posted @ 2012-10-30 16:40 loopever 阅读(3730) 评论(0) 推荐(0) 编辑
  2012年10月20日
摘要: BSS段 是“Block Started by Symbol”的缩写,意为“以符号开始的块”。 BSS是Unix链接器产生的未初始化数据段。其他的段分别是包含程序代码的“text”段和包含已初始化数据的“data”段。BSS段的变量只有名称和大小却没有值。此名后来被许多文件格式使用,包括PE。“以符号开始的块”指的是编译器处理未初始化数据的地方。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二进制映象文件中并不存在。 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by S... 阅读全文
posted @ 2012-10-20 22:31 loopever 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL考点:1) #define 语法的基本知识(不能以分号结束,括号的使用,等等);2) 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒,而不是计算出实际的值,是更清晰而没有代价的;3) 意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是的长整型数。4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。2. 写一个“标准”宏 阅读全文
posted @ 2012-10-20 22:11 loopever 阅读(614) 评论(0) 推荐(0) 编辑
  2012年10月18日
摘要: 昨天数码视讯笔试,然后又是一个小面试,C/嵌入式工程师职位。 1,复位程序,将一个寄存器的位拉低并延迟1ms,很简单: int i; while(i=0;i<10000;i++) 0x30000000 = (int16_t)0xfffb; 2,写出表达式 指向整型的指针:int *p; 指向整型指针 阅读全文
posted @ 2012-10-18 13:46 loopever 阅读(899) 评论(0) 推荐(0) 编辑
  2012年9月14日
摘要: 如下程序:char* GetMemory1(){char p[] = "Hello,World";return p;}char* GetMemory2(){char *p = "Hello,World";return p;}int main(){ char *q,*r;q = GetMemory1();r = GetMemory2(); cout<<q<<endl;cout<<r<<endl; return 0;}其运行结果是什么?答:乱码和"hello word",因为第一个函数的字符 阅读全文
posted @ 2012-09-14 10:39 loopever 阅读(395) 评论(0) 推荐(0) 编辑