DOS编程技术

讨论在纯DOS下的编程技术

 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 
 
 

  whowin

北京市 海淀区 双鱼座

 发消息  写留言

 
自我介绍1984年大学毕业,1985年底有机会开始接触PC机,1986年开始在PC机上做开发工作,曾接触过MS-DOS、CP/M、UNIX、VMS、LINUX、iRMX等众多的操作系统并在上面从事技术开发,擅长做底层与硬件相关的软件开发,讨厌在windows下进行软件开发,目前主要在DOS和LINUX平台下工作,主要从事软件,在硬件开发上也有一定造诣,亦有在8051系列、6502系列(凌阳)、z80系列下开发软硬件的经历。
近期心愿大家都快快乐乐地活着
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 
 
 

[置顶] 为什么我要写这个博客

2008-7-22 6:36:26 阅读(788) 评论(60)

    从一开始我就知道我会很孤独,我知道我写的东西不会有太多的人看,因为我写的这些东西太不入流,不仅生僻,而且有点深奥,对这些选题感兴趣的人少,看的明白的人也不多,即便有几个感兴趣的发现了这个地方,能一篇一篇地看完这些文章并看明白的确不是一件容易的事。

    可是,我还是要不断地写下去,其实从一开始,我就没有准备给其它人看,全当是把自己的经验做一个总结,这其中的很多东西,对不需要的人来说一文不值,但对那个别的需要的人来说,他可能已经苦苦找寻了好久,或者为此苦恼了几天,我希望我能给他们带来一个惊喜,让他们忽然觉得,原来世界上还有另一个人曾经琢磨过他所苦恼的事情,仅此而已。

阅读(788) | 评论(60) | 阅读全文>>

[置顶] 所有文章分类列表

2009-2-3 11:31:35 阅读(663) 评论(6)

DJGPP相关

阅读(663) | 评论(6) | 阅读全文>>

GRUB主引导扇区分析

2009-9-3 10:53:08 阅读(291) 评论(2)

前一篇文章,我们一起分析了一下DOS的主引导扇区,在网上分析DOS主引导扇区的文章比较多,如果看我写的感觉有困难,到网上随便搜一下,应该一抓一大把。

写人家写过的东西,似乎不是我的风格,我写DOS主引导扇区的分析其实还是为了引出后面的两个主题,一个是GRUB主引导扇区的分析,还有就是主引导扇区的应用。

DOS的主引导程序,实际已经很少有地方用了,因为DOS的分区最大只能有2G,4个分区也只能是8G,大于8G以后的分区,DOS是引导不了的,个中原因,我不说,大家可以想一想。

阅读(291) | 评论(2) | 阅读全文>>

DOS主引导扇区分析

2009-8-16 22:43:58 阅读(703) 评论(2)

    基本上这是一篇比较入门级的文章。

    从这篇文章开始,准备用2----3篇的篇幅写一下主引导扇区的分析,先完成DOS下主引导扇区的分析,再分析一下grub下的主引导扇区,同时会简单介绍一下主引导扇区的利用。

    一直以来一直想写一篇关于PC机启动过程的文章,就是从机器上电到BIOS读取主引导扇区并把控制权交给主引导扇区中的引导程序开始,但每次想到这个问题,都感到过程比较复杂,一是自己也不能彻彻底底地搞清楚,二是想不出能写出什么新意,所以就一直没有动笔。但是写这篇文章,是不得不涉及到PC机的启动过程了,好在不是这篇文章的重点,而且只需泛泛说说就可以,所以估计不会出什么大问题。

1、PC机的启动过程

阅读(703) | 评论(2) | 阅读全文>>

从汇编调用C程序

2009-3-24 13:10:10 阅读(987) 评论(1)

    最近有台湾的网友写EMAIL给我说从汇编语言调用C程序的时候遇到了一些麻烦,我想了一下,确实,可能介绍C程序调用汇编程序的文章相对要多一些,而反过来的情况可能用到的人不多,所以决定以此为题写一个短篇。

    首先,如果想从MASM编译的汇编程序调用DJGPP的GCC编译的C程序,这个可能性不大,两个编译出的差异恐怕太大了,本文使用MASM 6.11和TURBO C 3.0作为例子,完成一个从汇编调用C的小范例,这样的调用比较靠谱。

    使用过TURBO C的人都知道,TC把编译出来的程序结构分成6种模式:Tiny、Small、Medium、

阅读(987) | 评论(1) | 阅读全文>>

Intel CPU的CPUID指令(三)

2009-2-10 11:23:14 阅读(781) 评论(2)

    本文主要介绍CPUID指令返回扩展信息的部分

8、EAX=80000001h:最大扩展功能号

    mov eax, 80000001h
    cpuid

    该功能除了能够向(一)中介绍的那样返回CPU支持的最大扩展功能号外,并没有其它作用,EBX、ECX、EDX都不返回有意义的信息。

9、EAX=80000002h:返回CPU支持的扩展功能

    mov eax, 80000002h
    cpuid

    执行CPUID指令后,扩展功能标志在EDX和ECX中返回,EDX中的定义如下:

阅读(781) | 评论(2) | 阅读全文>>

Intel CPU的CPUID指令(二)

2009-2-6 23:12:55 阅读(1060) 评论(0)

    我们接着上篇继续。

6、EAX=2:高速缓存描述符(Cache Descriptor)

    mov eax, 2
    cpuid

    执行完CPUID指令后,高速缓存描述符和TLB(Translation Lookable Buffer)特性将在EAX、EBX、ECX和EDX中返回,每个寄存器中的4个字节分别表示4个描述符,描述符中不同的值表示不同的含义(后面有定义),其中EAX中的最低8位(AL)的值表示要得到完整的高速缓存的信息,需要执行EAX=2的CPUID指令的次数(一般都为1,在我这里的数台机器里,还没有为2的),同时,寄存器的最高位(bit 31)为0,表示该寄存器中的描述符是有效的,下面是描述符值的定义(资料来源与Intel):

    Value   Cache or TLB Descriptor Description

阅读(1060) | 评论(0) | 阅读全文>>

Intel CPU的CPUID指令(一)

2009-2-5 14:16:38 阅读(2241) 评论(2)

    Intel有一个超过100页的文档,专门介绍cpuid这条指令,可见这条指令涉及内容的丰富。

    记得去年的时候,曾经有个“英布之剑”问过我这条指令,当时并没有给出一个满意的回答,现在放假,想起来,把资料整理了一下。很久以前确实用过这条指令,其实指令本身并没有什么难的,关键是看你有没有耐心研读完繁琐的资料,当然还得对CPU有一定的了解,如果“英布之剑”看到这篇文章,而且仍然需要更详细的资料,可以给我一个联系方式,或者相互之间可以交流一下。

    cpuid就是一条读取CPU各种信息的一条指令,大概是从80486的某个版本开始就存在了。似乎是

阅读(2241) | 评论(2) | 阅读全文>>

早期CPU的点滴区别

2009-2-3 14:41:10 阅读(351) 评论(3)

    近日从以前的书籍里找到了一张以前记录的笔记,发现了一些早已被我淡忘的关于早期CPU的细节,或者永远也用不上了,但还是决定记录下来,或者......

  • 以前的8086/8088 CPU上的一个小BUG
        我们都知道,SP寄存器是堆栈的指针,当我们执行一条push(在8086/8088上)指令后,SP寄存器的值会自动减2,可是有没有想过,如果我们执行push sp这条指令的话,应该是先把SP - 2再压入堆栈,还是把SP压入堆栈,再把SP - 2呢?大家可以在你现在的机器上试试,当然应该是先把SP压入堆栈,再把SP - 2喽。
        可以在以前的8086/8088上偏偏就出现了这么个BUG,执行push

阅读(351) | 评论(3) | 阅读全文>>

描述符表和描述符高速缓存

2009-2-1 10:43:29 阅读(610) 评论(6)

    在80x86的CPU里,描述符的概念实在是太重要了。

    在实模式下,大家都知道物理地址是由段地址和偏移地址两部分组成,其公式如下:

    物理地址 = 段地址 × 16 + 偏移地址

    或者:物理地址 = 段地址 << 4 + 偏移地址

    其结果都是一样的,由于段地址和偏移地址的长度都是16位,所以这种方式能够表达的最大地址为:ffff:ffffH,也就是10ffefH,大致是1088KBytes,有由于8086CPU的地址线只有20位,所以在8086上实际的寻址能力仅为1024KBytes,在80286和80386CPU上,通过A20的使用,可以实际寻址到1088KBytes,这个问题在《关于A20 gate》的文章中有过介绍。

阅读(610) | 评论(6) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2010