Fork me on GitHub

随笔分类 -  自己动手写操作系统

x86汇编语言指令集
摘要:一、数据传输指令1. 通用数据传送指令.MOV(MOVe) 传送字或字节.MOVS(MOVe String)串传送指令MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP交换32位寄存器里字节的顺序XCHG(eXCHanG 阅读全文
posted @ 2013-03-24 19:36 loopever 阅读(1986) 评论(0) 推荐(0)
转载:call和ret
摘要:转载自:http://hi.baidu.com/hypkb/blog/item/5031f781ea8ecad09023d96b.html汇编语言笔记-第10章 call和ret指令2009-02-02 17:59ret指令用栈中的数据,修改IP的内容,从而实现近转移;CPU执行ret指令时,进行下面两步操作:(1)(IP)=((ss)*16+(sp))(2)(sp)=(sp)+2相当于进行:pop IP?retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;CPU执行retf指令时,进行下面两步操作:(1)(IP)=((ss)*16+(sp))(2)(sp)=(sp)+2(3)(C 阅读全文
posted @ 2013-03-24 19:35 loopever 阅读(195) 评论(0) 推荐(0)
转载:DOS与windows运行的cpu模式
摘要:首先,80386以及80386以后的CPU都是32位的纯32位windows是不能进入实模式的,重启以后到载入WINDOWS以前都是实模式,也许你会说windows98不是是可以不用重启机器直接进入到纯DOS(实模式)下么首先,98是个16位和32混编的系统,所以不稳定,但对游戏支持甚好,而且其内核是建立在16位上的(你要是搞过Win32编程就会有所了解),这样的话进入DOS很方便,或者在DOS下一条win命令就可以进入WINDOWS...但是从NT开始就不行了,2000/XP都是建立在纯32位(NT开始)内核上的,所以很稳定,但是如果不重新启动到DOS下是不能进行实模式操作的,但是考虑程序的 阅读全文
posted @ 2013-03-24 19:32 loopever 阅读(434) 评论(0) 推荐(0)
转载:特权级
摘要:任务内相同特权级的转移:段间直接转移和段间直接调用:1.检查目标地址指针内的选择子指示的描述符是否为空,目标代码段描述符不能为空描述符,即该选择子的高14位不能为02.由选择子内的TI位(第2位)决定是从GDT还是从LDT中读出目标代码段的描述符3.检查描述符类型是否正确4.普通代码段,要求CPL=DPL,RPL<=DPL;一致代码段,要求CPL>=CPL5.目标代码段描述符中的P位必须为16.把目标代码段描述符中的段基址、段限、属性装入CS的高速缓冲寄存器中7.检查目标地址的偏移是否越过目标代码段的段界限,这也是不允许的,即目标地址的偏移不允许越过该代码段8.装入指令指针寄存器E 阅读全文
posted @ 2013-03-24 19:31 loopever 阅读(315) 评论(0) 推荐(0)
转载:保护模式2
摘要:保护模式 (Protected Mode,或有时简写为 pmode) 是一种 80286 系列和之后的 x86 兼容 CPU 操作模式。保护模式有一些新的特色,设计用来增强 多工 和系统稳定度,像是 内存保护,分页 系统,以及硬件支援的 虚拟内存。大部分的现今 x86 操作系统 都在保护模式下运行,包含 Linux、FreeBSD、以及 微软 Windows 2.0 和之后版本。 另外一种 286 和其之后 CPU 的操作模式是 真实模式,一种向前兼容且关闭这些特色的模式。设计用来让新的芯片可以执行旧的软件。依照设计的规格,所有的 x86 CPU 都是在真实模式下开机来确保传统操作系统的向.. 阅读全文
posted @ 2013-03-24 19:30 loopever 阅读(363) 评论(0) 推荐(0)
转载:保护模式1
摘要:实模式与保护模式摘自ITWIKI,为我和还没搞明白真实模式保护模式的XDJM们真实模式Intel 8086和8088有14个16位缓存器。其中四个(AX, BX, CX, DX)是通用目的(尽管每个缓存器有额外的目的;举个例子:CX可以被用来当作loop(循环)指令的计数器。每个缓存器可以被当成两个分开的字节存取(因此BX的高位可以被当成BH以及低位BL)。除了这些缓存器, 还有四个区段缓存器(CS、DS、SS、ES)。他们用来产生内存的寻址。还有两个指针缓存器(SP是指向堆栈的底部, BP可以用来指向堆栈或内存的其它地方)。两个指针缓存器(SI和DI)可以用来指向数组的内部。最后,有旗标缓存 阅读全文
posted @ 2013-03-24 19:29 loopever 阅读(260) 评论(0) 推荐(0)
转载:硬盘分区表详解
摘要:该文章在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 阅读(740) 评论(0) 推荐(0)
转载:主引导扇区-MBR
摘要:这篇文章是我在网上找的,原作者不知道是谁,不过我还是要说声谢谢,我从这篇文章中学到了很多。引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录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 阅读(747) 评论(0) 推荐(0)
转:错误:EMM386:Uncoverable privileged operation error #9的解决
摘要:错误: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 阅读(505) 评论(0) 推荐(0)
VMWare DOS 文件共享
摘要: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 阅读(778) 评论(0) 推荐(0)
转载:堆栈溢出(Stack overflow)问题
摘要:一,堆栈溢出 堆栈溢出就是不顾堆栈中分配的局部数据块大小(在栈中分配的局部数据块大小和局部变量的声明的大小有关),向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据(包括函数的返回地址)。 或者解释为在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自编的代码了.这东西很像病毒。基础知识 首先简单讲两个基础知识,一是函数调用时堆栈的变化;二是函数调用约定对函数调用及返回时堆栈变化的影响。 我们用高级语言编写程序的时候,函数调用是很常见的事情,但是我们却很少去观察函数调用时汇编究竟是如何实现的。其实,函数调用实现的过程很简单. 阅读全文
posted @ 2012-10-30 16:40 loopever 阅读(3924) 评论(0) 推荐(0)