Board logo

标题: 1DOS学习中的文章展开,方便阅读。(20160203) [打印本页]

作者: zzz19760225     时间: 2016-2-2 23:09    标题: 1DOS学习中的文章展开,方便阅读。(20160203)

目录:
1第一个 C 语言编译器是怎样编写的?2楼
2一起来写个简单的解释器                3楼
3手把手教你做一个 C 语言编译器      4楼
4学习较底层编程:动手写一个C语言编译器 5楼
5自制编译器:语法分析器                6楼
6自制编译器:词法分析器                7楼
7cucu: 一个易于理解的编译器          8楼
8 kickout 转贴李家芳的《硬盘分区表详解 》 9楼  (坛内)
9不可思议的物理——与加来道雄对话 10楼
10 LOLI地狱 尼古拉的遗嘱               11楼
11《关于时间》                             12楼
12Linux下的经典软件(史上最全)        13楼




第一页-----------------------------------------------------------------------------------------第一页

如果你进入地狱,请不要慌张,因为你在哪里,哪里就会成为天堂。
害怕,是一条努力不害怕的道路,而勇敢好奇一直在路上陪伴着同行。
(文章全部属于原作者所有,非个人原创,当然个人没有原创,全是转载)
------------------------------------------------------------------------------------------------------------
产品收集:
足球动能发电用于能源不足地区的发明
http://business.sohu.com/20160722/n460421178.shtml
概念人力脚踩发电锻炼

英国Billions in Change 公司推出了一款健身发电车
http://tech.163.com/15/1219/15/BB754ST500094OE0.html

[ Last edited by zzz19760225 on 2018-1-15 at 11:46 ]
作者: zzz19760225     时间: 2016-2-2 23:13    标题: 1第一个 C 语言编译器是怎样编写的?

第一个 C 语言编译器是怎样编写的?
首先向C语言之父Dennis Ritchie致敬!

当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基于.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了调用了C。所以衡量某种高级语言的可移植性其实就是在讨论ANSI/ISO C的移植性。

C语言是很低级的语言,很多方面都近似于汇编语言,在《Intel32位汇编语言程序设计》一书中,甚至介绍了手工把简单的C语言翻译成汇编的方法。对于编译器这种系统软件,用C语言来编写是很自然不过的,即使是像Python这样的高级语言依然在底层依赖于C语言(举Python的例子是因为因特尔的黑客正在尝试让Python不需要操作系统就能运行——实际上是免去了BIOS上的一次性C代码)。现在的学生,学过编译原理后,只要有点编程能力的都可以实现一个功能简单的类C语言编译器。

可是问题来了,不知道你有没有想过,大家都用C语言或基于C语言的语言来写编译器,那么世界上第一个C语言编译器又是怎么编写的呢?这不是一个“鸡和蛋”的问题……

还是让我们回顾一下C语言历史:1970年Tomphson和Ritchie在BCPL(一种解释型语言)的基础上开发了B语言,1973年又在B语言的基础上成功开发出了现在的C语言。在C语言被用作系统编程语言之前,Tomphson也用过B语言编写操作系统。可见在C语言实现以前,B语言已经可以投入实用了。因此第一个C语言编译器的原型完全可能是用B语言或者混合B语言与PDP汇编语言编写的。我们现在都知道,B语言的效率比较低,但是如果全部用汇编语言来编写,不仅开发周期长、维护难度大,更可怕的是失去了高级程序设计语言必需的移植性。所以早期的C语言编译器就采取了一个取巧的办法:先用汇编语言编写一个C语言的一个子集的编译器,再通过这个子集去递推完成完整的C语言编译器。详细的过程如下:

先创造一个只有C语言最基本功能的子集,记作C0语言,C0语言已经足够简单了,可以直接用汇编语言编写出C0的编译器。依靠C0已有的功能,设计比C0复杂,但仍然不完整的C语言的又一个子集C1语言,其中C0属于C1,C1属于C,用C0开发出C1语言的编译器。在C1的基础上设计C语言的又一个子集C2语言,C2语言比C1复杂,但是仍然不是完整的C语言,开发出C2语言的编译器……如此直到CN,CN已经足够强大了,这时候就足够开发出完整的C语言编译器的实现了。至于这里的N是多少,这取决于你的目标语言(这里是C语言)的复杂程度和程序员的编程能力——简单地说,如果到了某个子集阶段,可以很方便地利用现有功能实现C语言时,那么你就找到N了。下面的图说明了这个抽象过程:

C语言
CN语言
……
C0语言
汇编语言
机器语言
这张图是不是有点熟悉?对了就是在将虚拟机的时候见到过,不过这里是CVM(C Language Virtual Machine),每种语言都是在每个虚拟层上可以独立实现编译的,并且除了C语言外,每一层的输出都将作为下一层的输入(最后一层的输出就是应用程序了),这和滚雪球是一个道理。用手(汇编语言)把一小把雪结合在一起,一点点地滚下去就形成了一个大雪球,这大概就是所谓的0生1,1生C,C生万物吧?

那么这种大胆的子集简化的方法,是怎么实现的,又有什么理论依据呢?先介绍一个概念,“自编译”(Self-Compile),也就是对于某些具有明显自举性质的强类型(所谓强类型就是程序中的每个变量必学声明类型后才能使用,比如C语言,相反有些脚本语言则根本没有类型这一说法)编程语言,可以借助它们的一个有限小子集,通过有限次数的递推来实现对它们自身的表述,这样的语言有C、Pascal、Ada等等,至于为什么可以自编译,可以参见清华大学出版社的《编译原理》,书中实现了一个Pascal的子集的编译器。总之,已经有CS科学家证明了,C语言理论上是可以通过上面说的CVM的方法实现完整的编译器的,那么实际上是怎样做到简化的呢?

下面是C99的关键字:

auto        enum        restrict        unsigned
break       extern      return          void
case        float       short           volatile
char        for         signed          while
const       goto        sizeof          _Bool
continue    if          static          _Complex
default     inline      struct          _Imaginary
do          int         switch        
double      long        typedef
else        register    union
//共37个
仔细看看,其实其中有很多关键字是为了帮助编译器进行优化的,还有一些是用来限定变量、函数的作用域、链接性或者生存周期(函数没有)的,这些在编译器实现的早期根本不必加上,于是可以去掉auto,restrict,extern,volatile,const,sizeof,static,inline,register,typedef,这样就形成了C的子集,C3语言,C3语言的关键字如下:

enum       unsigned
break       return      void
case        float       short   
char        for         signed     while
goto        _Bool
continue    if          _Complex
default     struct      _Imaginary
do          int         switch        
double      long   
else        union
//共27个
再想一想,发现C3中其实有很多类型和类型修饰符是没有必要一次性都加上去的,比如三种整型,只要实现int就行了,因此进一步去掉这些关键词,它们是:unsigned,float,short,char(char is int),signed,_Bool,_Complex,_Imaginary,long,这样就形成了我们的C2语言,C2语言关键字如下:

enum
break      return      void
case
for         while
goto        
continue    if         
default     struct   
do          int         switch        
double  
else        union
//共18个
继续思考,即使是只有18个关键字的C2语言,依然有很多,高级的地方,比如基于基本数据类型的复合数据结构,另外我们的关键字表中是没有写运算符的,在C语言中的复合赋值运算符->运算符等的++,–等过于灵活的表达方式此时也可以完全删除掉,因此可以去掉的关键字有:enum,struct,union,这样我们可以得到C1语言的关键字:

break      return      void
case
for         while
goto        
continue    if         
default  
do          int         switch        
double  
else
//共15个
接近完美了,不过最后一步手笔自然要大一点。这个时候数组和指针也要去掉了,另外C1语言其实仍然有很大的冗杂度,比如控制循环和分支的都有多种表述方法,其实都可简化成一种,具体的来说,循环语句有while循环,do…while循环和for循环,只需要保留while循环就够了;分支语句又有if…{},if…{}…else,if…{}…else if…,switch,这四种形式,它们都可以通过两个以上的if…{}来实现,因此只需要保留if,…{}就够了。可是再一想,所谓的分支和循环不过是条件跳转语句罢了,函数调用语句也不过是一个压栈和跳转语句罢了,因此只需要goto(未限制的goto)。因此大胆去掉所有结构化关键字,连函数也没有,得到的C0语言关键字如下:

break    void
goto        
int     
double  
//共5个
这已经是简约的极致了。

只有5个关键字,已经完全可以用汇编语言快速的实现了。通过逆向分析我们还原了第一个C语言编译器的编写过程,也感受到了前辈科学家们的智慧和勤劳!我们都不过是巨人肩膀上的灰尘罢了!0生1,1生C,C生万物,实在巧妙!
作者: zzz19760225     时间: 2016-2-2 23:14    标题: 2一起来写个简单的解释器

一起来写个简单的解释器
一起来写个简单的解释器(1)
谷歌大牛 Steve Yegge 曾说过:“如果你不知道编译器是怎样工作的,那你也并不知道计算机是怎样工作的。如果你不是 100% 确定你是否知道编译器是怎样工作的,那你其实并不知道它们是怎样工作的。”
这跟你是新手还是经验丰富的软件开发人员无关:如果你不知道编译器和解释器是怎样工作的,那么你就不知道计算机是怎样工作的。就这么简单。

那么,你知道编译器和解释器是怎样工作的吗?我的意思是,你 100% 确定自己知道它们是怎样工作的吗?如果你不知道。



或者说如果你不知道,并且因此而感到不安。



别着急。如果你留下来学习完整个系列,并且和我一起构造一个解释器和编译器,你最终将会知道它们是怎样工作的。并且你将会变成一个自信快乐的人,至少我希望是这样。



为什么要学习解释器和编译器?有三个理由:

1、为了写一个解释器或者一个编译器,你必须综合应用一些技能。编写一个解释器或者编译器,将会帮助你提高这些技能,让你变成一个更优秀的软件开发者。同时这些技术在编写其它软件(非编译器和解释器)时同样很有用。

2.你确实想知道计算机是怎样工作的。常常解释器和编译器看起来像魔术。而你对这种魔术觉得不太舒服。你想弄清楚构造一个解释器和编译器的过程,弄明白它们是怎样工作的,弄明白这里面所有的事。

3.你想创建你自己的语言或者是特定领域的语言。如果你创建了它,那么你同样需要为它创建一个编译器或解释器。最近,人们重新兴起了对新语言的兴趣。你几乎每天都能看新语言的出现:Elixir、Go、Rust,只是随便举几个例子。



好了,那什么是解释器,什么是编译器呢?

解释器和编译器的目标就是将使用高级语言编写的源程序转换成另一种形式。什么形式?稍安勿燥,在本系列的后续部分中,你将会很确切地了解到源程序将被转换成什么。

现在你可能会对解释器和编译器之间有什么区别感到好奇。对于本系列,我们约定,如果一个翻译器将源程序翻译成机器语言,那么它就是一个编译器。如果一个翻译器直接处理并运行源程序,不先把源程序翻译成机器语言,那么它就是一个解释器。直观上它看起来会是这个样子:


我希望此时此刻,你很确信你的愿意学习,并且构建一个解释器和编译器。关于这个解释器系列,你有什么期待呢?

你看这样行不行。我们为 Pascal 语言的一个大子集创建一个简单的解释器。在这个系列的最后,你将得到一个能够工作的解释器以及像 Python 的 pdb 一样的源代码级别的调试器。

那么问题来了,为什么选 Pascal?首先,这不是我为了这个系列捏造的语言:这是一个真实的编程语言,具有许多重要的语言结构。其次,有些计算机书籍虽然旧,但实用,这些书的例子用了 Pascal 语言。(我承认这不是一个选择它来构造解释器的不可抗拒的理由,但我认为这也是一个很好的学习非主流语言的机会:)

这是有一个使用 Pascal 编写的阶乘的例子。你将可以用自己的解释器和调试器来解释和调试这段代码。

program factorial;

function factorial(n: integer): longint;
begin
    if n = 0 then
        factorial := 1
    else
        factorial := n * factorial(n - 1);
end;

var
    n: integer;

begin
    for n := 0 to 16 do
        writeln(n, '! = ', factorial(n));
end.
我们使用 Python 来实现 Pascal 的解释器,但是你也可以使用其它任何语言来实现它,思想的表达不应局限于任何特定的语言。



好了,让我们开始行动吧。预备,开始!

你将通过编写一个四则运算表达式的解释器(俗称计算器),来完成对解释器和编译器的第一次进军。今天的目标很简单:让计算器能够处理个位整数的加法,比如 3 + 5。下面是你的计算器的代码,对不起,是你的解释器的代码。

# Token types
#
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, PLUS, EOF = 'INTEGER', 'PLUS', 'EOF'

class Token(object):
    def __init__(self, type, value):
        # token type: INTEGER, PLUS, or EOF
        self.type = type
        # token value: 0, 1, 2. 3, 4, 5, 6, 7, 8, 9, '+', or None
        self.value = value

    def __str__(self):
        """String representation of the class instance.

        Examples:
            Token(INTEGER, 3)
            Token(PLUS '+')
        """
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Interpreter(object):
    def __init__(self, text):
        # client string input, e.g. "3+5"
        self.text = text
        # self.pos is an index into self.text
        self.pos = 0
        # current token instance
        self.current_token = None

    def error(self):
        raise Exception('Error parsing input')

    def get_next_token(self):
        """Lexical analyzer (also known as scanner or tokenizer)

        This method is responsible for breaking a sentence
        apart into tokens. One token at a time.
        """
        text = self.text

        # is self.pos index past the end of the self.text ?
        # if so, then return EOF token because there is no more
        # input left to convert into tokens
        if self.pos > len(text) - 1:
            return Token(EOF, None)

        # get a character at the position self.pos and decide
        # what token to create based on the single character
        current_char = text[self.pos]

        # if the character is a digit then convert it to
        # integer, create an INTEGER token, increment self.pos
        # index to point to the next character after the digit,
        # and return the INTEGER token
        if current_char.isdigit():
            token = Token(INTEGER, int(current_char))
            self.pos += 1
            return token

        if current_char == '+':
            token = Token(PLUS, current_char)
            self.pos += 1
            return token

        self.error()

    def eat(self, token_type):
        # compare the current token type with the passed token
        # type and if they match then "eat" the current token
        # and assign the next token to the self.current_token,
        # otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.get_next_token()
        else:
            self.error()

    def expr(self):
        """expr -> INTEGER PLUS INTEGER"""
        # set current token to the first token taken from the input
        self.current_token = self.get_next_token()

        # we expect the current token to be a single-digit integer
        left = self.current_token
        self.eat(INTEGER)

        # we expect the current token to be a '+' token
        op = self.current_token
        self.eat(PLUS)

        # we expect the current token to be a single-digit integer
        right = self.current_token
        self.eat(INTEGER)
        # after the above call the self.current_token is set to
        # EOF token

        # at this point INTEGER PLUS INTEGER sequence of tokens
        # has been successfully found and the method can just
        # return the result of adding two integers, thus
        # effectively interpreting client input
        result = left.value + right.value
        return result

def main():
    while True:
        try:
            # To run under Python3 replace 'raw_input' call
            # with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        interpreter = Interpreter(text)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上面的代码保存为文件 calc1.py ,或者直接从 Github 上下载。在深入代码之前,以命令行运行,观察其运行结果。好好把玩这个程序。这是在我的笔记本上的一个示例会话(如果你使用 Python3,代码中 raw_input 需改写为 input )

$ python calc1.py
calc> 3+4
7
calc> 3+5
8
calc> 3+9
12
calc>
为了让计算器工作正常,不抛出异常,输入应该遵循几条规则:

输入只能是个位数的整数
当前支持的算术运算只有加法
在输入中不允许出现空格
为了使计算器简单这些限制是必要的。别担心,很快你将使它变得很复杂。

好了,现在让我们深入理解解释器是怎样工作的,以及它是怎样计算算术表达式的。

当你在命令行下输入 3+5 时,解释器得到一串字符 “3+5”。为了让解释器真正地理解怎么处理这一字符串,第一步需要将 “3+5”切分成不同的部分,我们称之为记号(tokens)。一个记号(token)是一对类型·值。举例来说,记号 “3”的类型为 INTEGER,相对应的值为整数3。

将输入的字符串切分成记号的过程被称作词法分析。所以,第一步解释器需要读取输入并把它转换成一系列的记号。解释器做这部分工作的组件被称作词法分析器(lexical ananlyzer,简称lexer)。你也许碰到过其它的叫法,像扫描程序(scanner),分词器(tokenizer)。它们意思都相同:解释器或者编译器中把输入字符串转换成一串记号的组件。

Interpreter 类中的 get_next_token 方法就是一个词法分析器。每当你调用它,就能得到从传入的字符串中创建的记号里的下一个。我们来仔细看看这个方法,看它是怎样把字符串转换成记号的。输入的字符串被保存在变量 text 中,pos 是字符串的一个索引值(把字符串想象成一个字符的数组)。pos 被初始化成 0,指向字符 ‘3’。get_next_token 首先测试这个字符是不是一个数字。如果是,pos 加 1 右移并返回一个类型是 INTEGER 值为 3 的 Token 实例,代表一个整型数字 3:

现在 pos 指向 text 中的字符 ‘+’。当你下次调用 get_next_token 方法时,它先测试在 pos 位置的字符是不是一个数字,然后测试它是不是一个加号,现在它的确是加号。于是 get_next_token 对 pos 加 1 并返回一个类型为 PLUS 值为 ‘+’ 的 Token 实例:

现在 pos 指向字符 ‘5’。当你再次调用 get_next_token 方法时,这个方法检查它是不是一个数字,它是,所以它对 pos 加 1 并且返回一个新的类型为 INTEGER,值被设置成 5 的 Token 实例。

由于现在 pos 指向字符串 “3+5”尾部的后一个位置,每次调用 get_next_token 将会返回一个 EOF Token 对象。

动手试试,看看你的计算器中词法分析器是怎样工作的:

>>> from calc1 import Interpreter
>>>
>>> interpreter = Interpreter('3+5')
>>> interpreter.get_next_token()
Token(INTEGER, 3)
>>>
>>> interpreter.get_next_token()
Token(PLUS, '+')
>>>
>>> interpreter.get_next_token()
Token(INTEGER, 5)
>>>
>>> interpreter.get_next_token()
Token(EOF, None)
>>>
现在解释器能访问从输入字符串中等到的记号流,解释器需要对这些记号做一些事:在平滑的记号流中找到一种结构,记号流是从 lexer 的 get_next_token 而来。你的解释器期望在这串记号中找到这么一种结构:INTERGER -> PLUS -> INTEGER。也就是说,解释器尝试找到这种序列的记号:整数后面跟着一个加号,再后面跟着一个整数。

查找这种结构并对其进行解释的方法是 expr。这个方法验证记号的序列是不是跟期望的一样,比如 INTEGER -> PLUS -> INTEGER。验证成功后,用 PLUS 左边的记号的值加上 PLUS 右边的记号的值就得到了结果,这样就成功地解释了传递给解释器的算术表达式。

expr 方法使用 辅助方法(helper method) eat 来验证传递给 eat 方法的记号类型与 current token 类型是否匹配。匹配成功 eat 方法获取下一个记号,并把下一个记号赋值给变量 current_token,如此实际上就把匹配的记号“吃掉了”,并把一个虚拟的指向记号流的指针向前移动了。如果在记号中的结构与所期望的 INTEGER PLUS INTEGER 序列不对等,eat 方法抛出一个异常。

概括一下解释器是怎样计算算术表达式的:

解释器接受一个输入字符串,比如说“3+5”
解释器调用 expr 方法从词法分析器 get_next_token 得到的记号流中查找一种结构。这种结构的形式为:INTEGER PLUS INTEGER。在确认了这种结构后,它将通过对两个 INTEGER 的记号做加法来解释输入。对于解释器来说在,这时要做的就是把两个整数加起来,即 3 和 5。
恭喜自己吧。你刚学会怎样构建你的第一个解释器!



现在是练习时间。



你不会认为读了这篇文章就足够了,对吗?那好,不要嫌弄脏手,完成下面的练习:

修改代码,使得多位的整型数字也能做为输入,比如 “12+3”
添加一个方法处理空格,使得你的计算器能处理包含空格的输入,比如 “  12 + 3”
修改代码用 ‘-’ 代替 ‘+’,使其能计算像 “7-5” 的表达式


检查你是否理解了

1.什么是解释器?
2.什么是编译器?
3.解释器和编译器何不同?
4.什么是记号(token)?
5.将输入切分成记号的过程名叫什么?
6.解释器中负责词法分析的部分叫什么?
7.这部分在解释器及编译器中共同的名字叫什么?

在结束这篇文章前,我希望你能保证学习解释器和编译器。并且我希望你马上做这件事。不要把它放在一边。不要等。如果你已经略读了这篇文章,请再看一遍。如果你已经仔细阅读但没做练习——现在就做。如果你只做了部分练习,完成剩下的。签下承诺保证,今天就开始学习解释器和编译器!

我,      ,身体健康,思想健全,在此郑重保证从今天开始学习解释器和编译器直到有一天 100% 知道它们是怎么工作的!

签名:
日期:


签上你的名字、日期,把它放在你能天天看到的地方,确保坚持你的承诺。并且记住承诺的定义:

“承诺就是做你曾经说过要做的事,即使说这话时的好心情早已不在了。”——Darren Hardy

好了,今天就这么多了,在这个小系列的下一篇文章中,你将得以扩展你的计算器,让它支持更多的算术运算。敬请期待。

如果你不想等本系列的第二部分,并且迫不及待地想开始深入解释器和编译器,这有我推荐的一张有帮助的书单。

1.《编程语言实现模式》(实用主义程序员)
2.《Writing Compilers and Interpreters: A Software Engineering Approach》
3.《现代编译原理——java语言描述》
4.《现代编译程序设计》
5.《编译原理技术和工具》(第二版)
一起来写个简单的解释器(2):两个整数相加或相减
Burger 和 Starbird 在其著作《高效思考的 5 要素》中分享了他们如何观察 Tony Plog 的故事。Tony Plog是一名享誉世界的小号艺术家,经营了一家针对熟练小号演奏者的高级讲习班。学生们一开始就可以熟练地演奏复杂的乐句,他们演奏得很棒。然后他们被要求演奏非常基础的、简单的音符。当他们演奏这些音符时,这些音符和先前被演奏的复杂乐句相比,听起来就很稚嫩了。他们演奏完毕后,主讲老师也演奏了同样的音符,不过他演奏时,这些音符听起来并不稚嫩。区别是令人震撼的。Tony 解释说掌握简单音符的演奏使得演奏者可以更完美地掌握复杂的片段。结论很清楚了:要想成为真正的艺术家,你必须集中精力掌握简单、基础的概念。

故事的意义很显然不仅适用于音乐,也适合软件开发。这个故事对我们所有人都是一个很好的提示:不要忽视去深入理解简单、基础的概念,即使有时候这看起来像是在走回头路。成为一个你所使用的工具或框架的专家固然重要,但了解背后的原理也是极为重要的。正如拉尔夫·沃尔多·爱默生所说:

“如果你仅仅学习方法,那么你将被方法所束缚。但是如果你学习原理,你将能够设计自己的方法。”
基于这样的观点,让我们再次深入解释器和编译器吧。

今天展示在第一篇中计算器的基础上出一个新版本,新版计算器能够:

1. 处理输入字符串中的空白字符;
2. 处理输入中的多位整数;
3. 两整数相减(现在只能相加);
这里是完成上述所有功能的新版计算器的源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Token types
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, PLUS, MINUS, EOF = 'INTEGER', 'PLUS', 'MINUS', 'EOF'

class Token(object):
    def __init__(self, type, value):
        
# token type: INTEGER, PLUS, MINUS, or EOF
        self.type = type
        
# token value: non-negative integer value, '+', '-', or None
        self.value = value

    def __str__(self):
        
"""String representation of the class instance.

        
Examples:
            
Token(INTEGER, 3)
            
Token(PLUS '+')
        
"""
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Interpreter(object):
    def __init__(self, text):
        
# client string input, e.g. "3 + 5", "12 - 5", etc
        self.text = text
        
# self.pos is an index into self.text
        self.pos = 0
        
# current token instance
        self.current_token = None
        self.current_char = self.text[self.pos]

    def error(self):
        raise Exception('Error parsing input')

    def advance(self):
        
"""Advance the 'pos' pointer and set the 'current_char' variable."""
        self.pos += 1
        if self.pos > len(self.text) - 1:
            self.current_char = None  
# Indicates end of input
        else:
            self.current_char = self.text[self.pos]

    def skip_whitespace(self):
        while self.current_char is not None and self.current_char.isspace():
            self.advance()

    def integer(self):
        
"""Return a (multidigit) integer consumed from the input."""
        result = ''
        while self.current_char is not None and self.current_char.isdigit():
            result += self.current_char
            self.advance()
        return int(result)

    def get_next_token(self):
        
"""Lexical analyzer (also known as scanner or tokenizer)

        
This method is responsible for breaking a sentence
        
apart into tokens.
        
"""
        while self.current_char is not None:

            if self.current_char.isspace():
                self.skip_whitespace()
                continue

            if self.current_char.isdigit():
                return Token(INTEGER, self.integer())

            if self.current_char == '+':
                self.advance()
                return Token(PLUS, '+')

            if self.current_char == '-':
                self.advance()
                return Token(MINUS, '-')

            self.error()

        return Token(EOF, None)

    def eat(self, token_type):
        
# compare the current token type with the passed token
        
# type and if they match then "eat" the current token
        
# and assign the next token to the self.current_token,
        
# otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.get_next_token()
        else:
            self.error()

    def expr(self):
        
"""Parser / Interpreter

        
expr -> INTEGER PLUS INTEGER
        
expr -> INTEGER MINUS INTEGER
        
"""
        
# set current token to the first token taken from the input
        self.current_token = self.get_next_token()

        
# we expect the current token to be an integer
        left = self.current_token
        self.eat(INTEGER)

        
# we expect the current token to be either a '+' or '-'
        op = self.current_token
        if op.type == PLUS:
            self.eat(PLUS)
        else:
            self.eat(MINUS)

        
# we expect the current token to be an integer
        right = self.current_token
        self.eat(INTEGER)
        
# after the above call the self.current_token is set to
        
# EOF token

        
# at this point either the INTEGER PLUS INTEGER or
        
# the INTEGER MINUS INTEGER sequence of tokens
        
# has been successfully found and the method can just
        
# return the result of adding or subtracting two integers,
        
# thus effectively interpreting client input
        if op.type == PLUS:
            result = left.value + right.value
        else:
            result = left.value - right.value
        return result

def main():
    while True:
        try:
            
# To run under Python3 replace 'raw_input' call
            
# with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        interpreter = Interpreter(text)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上述源码保存为 calc2.py 文件,或直接从 GitHub 下载。试一试,看看它是不是如想象中一样工作:它能够接受多位整数,并且它能够象两数相加一样将两数相减。

Here is a sample session that I ran on my laptop:

这里是我笔记本上运行的一个例子:

1
2
3
4
5
6
$ python calc2.py
calc> 27 + 3
30
calc> 27 - 7
20
calc>
与 第一篇中的版本相比,最主要的变化有:

get_next_token 方法稍微重构了一点。pos 指针的自增逻辑放到了一个独立的 advance 方法。
增加了两个方法:skip_whitespace 方法用来忽略空白字符,integer 方法用来处理输入中的多位整数。
修改了 expr 方法,在识别 INTEGER -> PLUS -> INTEGER 短语的基础上,识别 INTEGER -> MINUS -> INTEGER 短语。在成功识别相应短语后,这个方法现在也能够解释加法和减法了。
在第一部分,我们学习了两个重要的概念,那就是 token(记号) 和 lexical analyzer(词法分析器)。第二篇我们来浅谈一下 lexeme、parsing 和 parser。

你已经知道 token 了。但是为了完成对 token 的讨论我需要提到 lexeme。什么是 lexeme? lexeme 就是组成 token 的字符序列。在下面的图片中你可以看到一些 token 和 lexeme 的示例,希望已经把它们之间的关系表达清楚了:



现在,还记得我们的朋友 expr 方法吗?我曾经说过,这里是对一个算术表达式的解释真正发生的地方。但是在你对一个表达式进行解释之前,你首先需要识别短语的类型,例如:是加法还是减法。这是 expr 方法本质上干的活:它从 get_next_token 方法获取 token 流,找到 token 流的结构,解释识别出的短语,生成算术表达式的结果。

找到 token 流中的结构的过程,换句话说,识别 token 流中的短语的过程称之为 parsing(语法分析)。解释器或编译器中用以完成这样的工作的部分,称之为 parser(语法分析器)。

现在你知道了 expr 方法是解释器中既做了 parsing(语法分析)又做了 interpreting(解释)的部分。expr 方法首先试图识别(parsing)token 流中的 INTEGER -> PLUS -> INTEGER 或 INTEGER -> MINUS -> INTEGER 短语,成功完成识别(parsed)其中一种短语后,该方法解释它,并将两整数相加或相减的结果返回给调用者。

又到了练习时间。



扩展计算器,来处理两整数相乘
扩展计算器,来出来两整数相除
修改代码,以解释包含任意多加法和减法的表达式,例如:“9 – 5 + 3 + 11”
检查你是否已理解:

什么是 lexeme ?
找出 token 流中的结构的过程叫什么?换句话说,从 token 流中识别出特定短语的过程叫什么?
解释器(编译器)中做 parsing(语法分析)的部分的名称是什么?
我希望你喜欢今天的内容。在本系列的下篇文章中,你将扩展你的解释器来处理更加复杂的算术表达式。保持关注哦!



这有我推荐的一张有帮助的书单。

1.《编程语言实现模式》(实用主义程序员)
2.《Writing Compilers and Interpreters: A Software Engineering Approach》
3.《现代编译原理——java语言描述》
4.《现代编译程序设计》
5.《编译原理技术和工具》(第二版)
一起来写个简单的解释器(3):任意数量的加法和减法
今早起来我就想:“为什么我们学习一项新技能这么困难?”

我不认为这仅仅是因为艰苦的工作。我认为其中一个原因是我们花费了很多时间和努力去阅读和观看,从而获取知识。然而并没有足够的时间通过实践将知识转换成技能。以游泳为例。你可以花很多时间去阅读数以百计关于游泳的书,与有经验的游泳运动员和教练聊上几个小时,看培训视频,然而在你第一次跳进游泳池里面时,你仍然会像石头一样往下沉。



最根本的是:不管你觉得你对某个科目有多了解——你必须把知识付诸实践,从而将知识转化成技能。为了帮助你去实践,我将一些练习放到了《一起来写个简单的解释器》系列文章的第一篇和第二篇中。当然,你将会在今天的这篇文章或者以后的文章中看到更多的练习,我发誓 :)

好了,让我们开始今天的文章吧,好吗?

目前,你已经学习了如何解释像“7 + 3”或者“12 – 9”这样的两个整数相加或者相减的算术表达式。今天,我将会介绍关于如何解析(识别)和解释带有任意数量加法或者减法运算符的算术表达式,例如“7 – 3 + 2 – 1”。

可以用下面的语法图来表示这篇文章的算术表达式:



语法图是什么?语法图是指表示一种程序设计语言语法规则的示意图。本质上,一个语法图直观地显示了在你的程序设计语言中,允许使用哪些语句和不允许使用哪些语句。

语法图十分易于阅读:只需跟随箭头指示的路径。一些路径表示选择。另一些路径表示循环。

你可以像下面一样阅读上面的语法图:一个 term 有选择地接着一个加号或者减号,再跟着另一个 term,依次是有选择地接着一个加号或者减号,再跟着另一个 term 等等。你可能会好奇一个“term”是什么。对于本文,一个“term”就是一个整数。

语法图的两个主要目的:

它们以图表的形式表示一种程序设计语言的规范(语法)。
它们可以帮助你编写解析器,你可以通过遵循简单的规则将一个图表映射成代码。
你已经知道在一连串 token 中识别出一个短语的过程称作 parsing。一个解释器或者编译器用于处理工作的部分称作 parser。parsing 也叫作语法分析(syntax analysis),而 parser 贴切地称为,你猜对了,一个语法分析器(syntax analyzer)。

根据上面的语法图,下面所有的算术表达式都是有效的:

3
3 + 4
7 – 3 + 2 – 1
因为在不同的程序设计语言中,算术表达式的语法规则十分相似,所以我们可以使用 Python shell 来“测试”我们的语法图。启动 Python shell 并且查看结果:

1
2
3
4
5
6
>>> 3
3
>>> 3 + 4
7
>>> 7 - 3 + 2 - 1
5
这里没什么特别之处。

然而表达式“3 + ”并不是一个有效的算术表达式,因为根据语法图,加号后面必须跟着一个 term(整数),否则将会是一个语法错误。再次,用 Python shell 尝试一下并且查看结果:

1
2
3
4
5
>>> 3 +
  File "<stdin>", line 1
    3 +
      ^
SyntaxError: invalid syntax
能够用 Python shell 来做一些测试当然很好,但是还是让我们将上述语法图映射成代码并使用我们自己的解释器来测试,如何?

从以前的文章(第一篇和第二篇)中,你已经知道我们的 parser 和 interpreter 位于 expr 方法中。再次说明,parser 仅仅识别结构并确保这个结构符合一些规范,一旦 parser 成功识别(解析)出结构,interpreter 会对表达式求值。

下面的代码片段介绍了相应于语法图的 parser 代码。语法图中的矩形(term)变成解析一个整数的 term 方法,而 expr 方法则遵循语法图流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def term(self):
    self.eat(INTEGER)

def expr(self):
   
# set current token to the first token taken from the input
    self.current_token = self.get_next_token()

    self.term()
    while self.current_token.type in (PLUS, MINUS):
        token = self.current_token
        if token.type == PLUS:
            self.eat(PLUS)
            self.term()
        elif token.type == MINUS:
            self.eat(MINUS)
            self.term()
可以看到 expr 首先调用了 term 方法。然后,expr 方法有一个可以执行 0 次或者多次的 while 循环。在循环中,parser 根据 token 进行判断(是一个加号还是减号)。花一些时间自行验证上面的代码的确遵循算术表达式的语法图流程。

然而 parser 本身并不会解释所有东西:如果它识别到表达式,它会沉默。如果它识别不到,它会抛出一个语法错误。下面让我们修改 expr 方法并添加 interpreter 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def term(self):
   
"""Return an INTEGER token value"""
    token = self.current_token
    self.eat(INTEGER)
    return token.value

def expr(self):
   
"""Parser / Interpreter """
   
# set current token to the first token taken from the input
    self.current_token = self.get_next_token()

    result = self.term()
    while self.current_token.type in (PLUS, MINUS):
        token = self.current_token
        if token.type == PLUS:
            self.eat(PLUS)
            result = result + self.term()
        elif token.type == MINUS:
            self.eat(MINUS)
            result = result - self.term()

    return result
因为 interpreter 需要求表达式的值,因此修改 term 方法使之返回一个整数值,修改 expr 方法使之在适当的地方执行加法和减法并且返回解释的结果。尽管代码非常简单,我还是建议你花一点时间去学习一下。

现在让我们继续往下,看看 interpreter 完整的代码,可以不?

下面是新版本计算器的源代码,该计算器可以处理包含整数和任意数量加法和减法运算符的有效的算术表达式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Token types
#
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, PLUS, MINUS, EOF = 'INTEGER', 'PLUS', 'MINUS', 'EOF'

class Token(object):
    def __init__(self, type, value):
        
# token type: INTEGER, PLUS, MINUS, or EOF
        self.type = type
        
# token value: non-negative integer value, '+', '-', or None
        self.value = value

    def __str__(self):
        
"""String representation of the class instance.

        
Examples:
            
Token(INTEGER, 3)
            
Token(PLUS, '+')
        
"""
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Interpreter(object):
    def __init__(self, text):
        
# client string input, e.g. "3 + 5", "12 - 5 + 3", etc
        self.text = text
        
# self.pos is an index into self.text
        self.pos = 0
        
# current token instance
        self.current_token = None
        self.current_char = self.text[self.pos]

   
##########################################################
   
# Lexer code                                             #
   
##########################################################
    def error(self):
        raise Exception('Invalid syntax')

    def advance(self):
        
"""Advance the `pos` pointer and set the `current_char` variable."""
        self.pos += 1
        if self.pos > len(self.text) - 1:
            self.current_char = None  
# Indicates end of input
        else:
            self.current_char = self.text[self.pos]

    def skip_whitespace(self):
        while self.current_char is not None and self.current_char.isspace():
            self.advance()

    def integer(self):
        
"""Return a (multidigit) integer consumed from the input."""
        result = ''
        while self.current_char is not None and self.current_char.isdigit():
            result += self.current_char
            self.advance()
        return int(result)

    def get_next_token(self):
        
"""Lexical analyzer (also known as scanner or tokenizer)

        
This method is responsible for breaking a sentence
        
apart into tokens. One token at a time.
        
"""
        while self.current_char is not None:

            if self.current_char.isspace():
                self.skip_whitespace()
                continue

            if self.current_char.isdigit():
                return Token(INTEGER, self.integer())

            if self.current_char == '+':
                self.advance()
                return Token(PLUS, '+')

            if self.current_char == '-':
                self.advance()
                return Token(MINUS, '-')

            self.error()

        return Token(EOF, None)

   
##########################################################
   
# Parser / Interpreter code                              #
   
##########################################################
    def eat(self, token_type):
        
# compare the current token type with the passed token
        
# type and if they match then "eat" the current token
        
# and assign the next token to the self.current_token,
        
# otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.get_next_token()
        else:
            self.error()

    def term(self):
        
"""Return an INTEGER token value."""
        token = self.current_token
        self.eat(INTEGER)
        return token.value

    def expr(self):
        
"""Arithmetic expression parser / interpreter."""
        
# set current token to the first token taken from the input
        self.current_token = self.get_next_token()

        result = self.term()
        while self.current_token.type in (PLUS, MINUS):
            token = self.current_token
            if token.type == PLUS:
                self.eat(PLUS)
                result = result + self.term()
            elif token.type == MINUS:
                self.eat(MINUS)
                result = result - self.term()

        return result

def main():
    while True:
        try:
            
# To run under Python3 replace 'raw_input' call
            
# with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        interpreter = Interpreter(text)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上面的代码保存到 calc3.py 文件中,或者直接在 GitHub 上下载。尝试一下。亲自看看,它可以处理从前面展示的语法图中获得的算术表达式。

下面是我在我的笔记本上运行的示例会话:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ python calc3.py
calc> 3
3
calc> 7 - 4
3
calc> 10 + 5
15
calc> 7 - 3 + 2 - 1
5
calc> 10 + 1 + 2 - 3 + 4 + 6 - 15
5
calc> 3 +
Traceback (most recent call last):
  File "calc3.py", line 147, in <module>
    main()
  File "calc3.py", line 142, in main
    result = interpreter.expr()
  File "calc3.py", line 123, in expr
    result = result + self.term()
  File "calc3.py", line 110, in term
    self.eat(INTEGER)
  File "calc3.py", line 105, in eat
    self.error()
  File "calc3.py", line 45, in error
    raise Exception('Invalid syntax')
Exception: Invalid syntax
记得我在文章开头提到的那些练习么:下面就是啦,言出必行哦 :)



画一个只包含乘法和除法的算术表达式语法图,例如“7 * 4 / 2 * 3”。请认真对待,拿起一支笔或者铅笔尝试画一个。
修改计算器的源代码,使之可以解释只包含乘法和除法的算术表达式,例如“7 * 4 / 2 * 3”。
从头开始写一个 interpreter 来处理像“7 – 3 + 2 – 1”这样的算术表达式。使用任何你运用自如的程序设计语言,在不看例子的情况下写出来。当你这样做时,想一下有关的组件:lexer 带着一个输入并将其转换成一连串 token,parser 获取 lexer 提供的一连串 token 并且尝试在流中识别出一个结构,在 parser 成功地解析(识别)出一个有效的算术表达式之后,interpreter 会产生结果。把这些片段串在一起。花一些时间将你学到的知识转化成一个可以工作的算术表达式解释器。
检查你的理解。

语法图是什么?
语法分析是什么?
语法分析器是什么?
Hey,看!你读到文章的结尾了。谢谢今天呆在这里,不过不要忘记做练习哦。:) 下次我会带来一篇新的文章——敬请期待。

下面是我推荐的一些书籍,它们可以帮助你学习解释器和编译器:

《Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers)》
《Writing Compilers and Interpreters: A Software Engineering Approach》
《Modern Compiler Implementation in Java》
《Modern Compiler Design》
《Compilers: Principles, Techniques, and Tools (2nd Edition)》
一起来写个简单的解释器(4):任意数量的乘法和除法
你是在被动地学习这几篇文章中的材料,还是主动地去做练习?我希望你主动地去练习。我真的希望哦 :)

记得孔子说过的话么?

“听而易忘”


“见而易记”


“做而易懂”


在上一篇文章中,你已经学会了如何解析(识别)和解释带有任意数量加法或者减法运算符的算术表达式,例如“7 – 3 + 2 – 1”。你也学习了语法图以及如何使用语法图来指定一种程序设计语言的语法。

本文你将会学习如何解析(识别)和解释带有任意数量乘法或者除法运算符的算术表达式,例如“7 * 4 / 2 * 3”。这篇文章讨论的除法是整数除法,所以如果表达式是“9 / 4”,那么答案将会是一个整数:2。

今天我也会讨论不少有关另一种被广泛使用的、用于指定一种程序设计语言语法的表示法。它叫做上下文无关文法(简称文法)或者 BNF(Backus-Naur Form 巴科斯-诺尔范式)。在这篇文章中,我不会使用纯净的 BNF 表示法,而是使用类似的修改过的 EBNF 表示法。

下面是使用文法的几个原因:

文法以简明的方式说明一种程序设计语言的语法。不像语法图,文法十分简洁。你将会看到我在未来的文章中越来越多地使用文法。
文法可以用作很好的文档。
即使你从零开始编写你的解析器,文法也是一个很好的起点。通常,你可以通过遵循一系列简单的规则将文法转换成代码。
有一组工具叫做解析器生成器,它接收一段文法作为输入,并且根据那段文法自动地生成一个解析器。我会在系列后面的文章中讨论那些工具。
现在,让我们谈一下文法的原理,好吗?

下面是描述像“7 * 4 / 2 * 3”(它只是众多可以由文法生成的表达式之一)这样的算术表达式的一段文法:



一段文法由一系列规则(rule)组成,也称为 产生式(productions)。在我们的文法中有两条规则:



一条规则由一个非终结符(称为产生式的头或者左边)、一个冒号和一系列终结符(和 | 或者)非终结符(称为产生式的主体或者右边)组成:



上面介绍的文法中,像 MUL、DIV 和 INTEGER 这样的标记称为终结符(terminals),像 expr 和 factor 这样的变量称为非终结符(non-terminals)。非终结符通常由一系列终结符(和 | 或者)非终结符组成:



第一条规则左边的非终结符符号称为开始符号(start symbol)。在我们的文法例子中,开始符号是 expr:



你可以这样读 expr 规则:“expr 可以是一个 factor 可选地接着一个乘法或者除法运算符,再接着另一个 factor,依次可选地接着一个乘法或者除法运算符,再接着另一个 factor……”

factor 是什么?就本文而言,factor 就是一个整数。

让我们快速地回顾一下文法中用到的符号和它们的含义。

| – 多选一。表示“或”。所以 (MUL | DIV) 表示要么是 MUL,要么是 DIV。
( … ) – 一对圆括号表示把终结符(和 | 或者)非终结符组合起来,就像 (MUL | DIV) 一样。
( … )* – 匹配组合里面的内容 0 次或者多次。
如果你以前了解过正则表达式,那么 |、() 和 (…)* 这些符号对于你来说应该会比较熟悉。

一段文法通过说明它可以组成什么句子来定义一种语言(language)。这是如何使用文法推导出算术表达式:首先以开始符号 expr 开始,然后反复地用一个非终结符所在规则的主体替代该非终结符,直到产生一个只包含终结符的句子。那些句子组成了由文法定义的语言。

如果文法不能得到一条确定的算术表达式,那么它不支持该表达式,并且当解析器尝试识别该表达式时,解析器会生成一个语法错误。

我依次想了几个例子。下面是文法如何得到表达式 3 的例子:



这是文法如何得到表达式 3 * 7 的例子:



这是文法如何得到表达式 3 * 7 / 2 的例子:



哇,这里有相当多的理论!

我想当我第一次阅读关于文法相关的术语和诸如此类的东西,我有这样一种感觉:



我可以向你保证我肯定不会像这样:



我花费了一些时间来适应这种表示法,它是如何工作的和它与解析器、语法分析器的关系。但是我必须告诉你,从长远来看,学习它是值得的。因为它在实际中被广泛应用,你也一定会遇到一些编译器文献在某些时候会用到它。所以,为何不早点学呢?:)

现在,让我们将文法映射成代码,可以么?

这里是用于将文法转换成源代码的准则。遵循这些准则,你可以逐字逐句地把文法翻译给正在工作的分析器:

文法中定义的每条规则,R,会变成一个同名的方法,而对那条规则的引用变成一个方法调用:R()。方法的主体跟着同一套准则的规则的主体流。
多个可选项 (a1 | a2 | aN) 变成 if-elif-else 语句。
可选的 (…)* 集合变成 while 语句,该语句可以循环 0 次或者多次。
每个符号引用 T 变成对 eat 方法的调用:eat(T)。eat 方法的工作方式是如果该方法匹配当前的 lookahead 符号,那么 eat 方法会传入符号 T,然后它会从词法分析器中得到一个新的符号,并且把该符号分配给内部变量 current_token。
这些准则直观上看起来像这样:



让我们继续前进,遵循上述准则将我们的文法转换成代码。

在我们的文法中有两条规则:expr 规则和 factor 规则。我们以 factor 规则(产生式)开始。根据准则,你需要创建一个名为 factor 的方法(准则 1),该方法有一个对以 INTEGER 符号为参数的 eat 方法的调用(准则 4):

1
2
def factor(self):
    self.eat(INTEGER)
这很简单,不是吗?

继续!

expr 规则变成 expr 方法(再次依据准则 1)。该规则开始是对变成了 factor() 方法调用的 factor 的引用。可选的集合 (…)* 变成一个 while 循环,(MUL | DIV) 变成 if-elif-else 语句。把那些代码段组合在一起,我们得到了下面的 expr 方法:

1
2
3
4
5
6
7
8
9
10
11
def expr(self):
    self.factor()

    while self.current_token.type in (MUL, DIV):
        token = self.current_token
        if token.type == MUL:
            self.eat(MUL)
            self.factor()
        elif token.type == DIV:
            self.eat(DIV)
            self.factor()
请花点时间学习一下我是如何将文法映射成源代码的。确保你弄懂了那部分的内容,因为在以后会派上用场的。

为了方便,我将上述的代码放到 parser.py 文件中,它包含一个词法分析器和一个解析器,不包含解释器。你可以直接从 GitHub 下载文件并使用它。该程序有交互式提示,你可以在提示中输入表达式并查看表达式是否可用:也就是说,依据文法构建的解析器是否可以识别该表达式。

下面是运行在我的电脑上一段简单的会话:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ python parser.py
calc> 3
calc> 3 * 7
calc> 3 * 7 / 2
calc> 3 *
Traceback (most recent call last):
  File "parser.py", line 155, in <module>
    main()
  File "parser.py", line 151, in main
    parser.parse()
  File "parser.py", line 136, in parse
    self.expr()
  File "parser.py", line 130, in expr
    self.factor()
  File "parser.py", line 114, in factor
    self.eat(INTEGER)
  File "parser.py", line 107, in eat
    self.error()
  File "parser.py", line 97, in error
    raise Exception('Invalid syntax')
Exception: Invalid syntax
试一下!

我忍不住再次提到语法图。这是对于同一个 expr 规则的语法图:



我们是时候专研一下新的算术表达式解释器的源代码了。下面的代码是一个计算器,该计算器可以处理包含整数和任意数量的乘法和除法(整除)运算符的有效算术表达式。你也可以看到我把词法分析器重构成一个 Lexer 类,并且把 Lexer 实例作为参数更新 Interpreter 类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Token types
#
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, MUL, DIV, EOF = 'INTEGER', 'MUL', 'DIV', 'EOF'

class Token(object):
    def __init__(self, type, value):
        
# token type: INTEGER, MUL, DIV, or EOF
        self.type = type
        
# token value: non-negative integer value, '*', '/', or None
        self.value = value

    def __str__(self):
        
"""String representation of the class instance.

        
Examples:
            
Token(INTEGER, 3)
            
Token(MUL, '*')
        
"""
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Lexer(object):
    def __init__(self, text):
        
# client string input, e.g. "3 * 5", "12 / 3 * 4", etc
        self.text = text
        
# self.pos is an index into self.text
        self.pos = 0
        self.current_char = self.text[self.pos]

    def error(self):
        raise Exception('Invalid character')

    def advance(self):
        
"""Advance the `pos` pointer and set the `current_char` variable."""
        self.pos += 1
        if self.pos > len(self.text) - 1:
            self.current_char = None  
# Indicates end of input
        else:
            self.current_char = self.text[self.pos]

    def skip_whitespace(self):
        while self.current_char is not None and self.current_char.isspace():
            self.advance()

    def integer(self):
        
"""Return a (multidigit) integer consumed from the input."""
        result = ''
        while self.current_char is not None and self.current_char.isdigit():
            result += self.current_char
            self.advance()
        return int(result)

    def get_next_token(self):
        
"""Lexical analyzer (also known as scanner or tokenizer)

        
This method is responsible for breaking a sentence
        
apart into tokens. One token at a time.
        
"""
        while self.current_char is not None:

            if self.current_char.isspace():
                self.skip_whitespace()
                continue

            if self.current_char.isdigit():
                return Token(INTEGER, self.integer())

            if self.current_char == '*':
                self.advance()
                return Token(MUL, '*')

            if self.current_char == '/':
                self.advance()
                return Token(DIV, '/')

            self.error()

        return Token(EOF, None)

class Interpreter(object):
    def __init__(self, lexer):
        self.lexer = lexer
        
# set current token to the first token taken from the input
        self.current_token = self.lexer.get_next_token()

    def error(self):
        raise Exception('Invalid syntax')

    def eat(self, token_type):
        
# compare the current token type with the passed token
        
# type and if they match then "eat" the current token
        
# and assign the next token to the self.current_token,
        
# otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.lexer.get_next_token()
        else:
            self.error()

    def factor(self):
        
"""Return an INTEGER token value.

        
factor : INTEGER
        
"""
        token = self.current_token
        self.eat(INTEGER)
        return token.value

    def expr(self):
        
"""Arithmetic expression parser / interpreter.

        
expr   : factor ((MUL | DIV) factor)*
        
factor : INTEGER
        
"""
        result = self.factor()

        while self.current_token.type in (MUL, DIV):
            token = self.current_token
            if token.type == MUL:
                self.eat(MUL)
                result = result * self.factor()
            elif token.type == DIV:
                self.eat(DIV)
                result = result / self.factor()

        return result

def main():
    while True:
        try:
            
# To run under Python3 replace 'raw_input' call
            
# with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        lexer = Lexer(text)
        interpreter = Interpreter(lexer)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上面的代码保存到 calc4.py 文件或者直接从 GitHub 上下载。像往常一样,亲自试一下并看下它是如何工作的。

这是运行在我的笔记本上一段简单的会话:

1
2
3
4
5
6
7
$ python calc4.py
calc> 7 * 4 / 2
14
calc> 7 * 4 / 2 * 3
42
calc> 10 * 4  * 2 * 3 / 8
30
我知道你迫不及待这一部分了 :) 这是今天新的练习:



写一段文法来描述包含任意数量的 +、-、* 或者 / 运算符的算术表达式。你应该有能力从文法中得到像“2 + 7 * 4”、“7 – 8 / 4”、“14 + 2 * 3 – 6 / 2” 等这样的表达式。
使用文法,编写一个解释器,该解释器可以计算包含任意数量的 +、-、* 或者 / 运算符的算术表达式。你的解释器应该可以处理像“2 + 7 * 4”、“7 – 8 / 4”、“14 + 2 * 3 – 6 / 2” 等这样的表达式。
如果你完成了上述的联系,那么放松一下把 :)
检测你的理解。

牢记今天这篇文章介绍的文法,回答下面的几个问题,需要时可以参考下面的图片:

lsbasi_part4_bnf1

什么是上下文无关文法?
文法有多少条规则或者产生式?
什么是终结符?(在图片中找到所有的终结符)
什么是非终结符?(在图片中找到所有的非终结符)
什么是一条规则的头部?(在图片中找到所有的头部或者左边)
什么是一条规则的主体?(在图片中找到所有的主体或者右边)
文法的开始符号是什么?
嘿,你读到最后了!这篇文章包含了相当多理论,所以我真的为你读完这篇文章而感到骄傲。

下次我会带来一篇新的文章——敬请期待,不要忘记做练习哦,它们对你有好处的。

下面是我推荐的一些书籍列表,它们对你学习解释器和编译器有帮助:

Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers)
Writing Compilers and Interpreters: A Software Engineering Approach
Modern Compiler Implementation in Java
Modern Compiler Design
Compilers: Principles, Techniques, and Tools (2nd Edition)
一起来写个简单的解释器(5):加减乘除表达式
如何创建一个解释器或编译器这么复杂的问题,你会如何处理呢?开始的时候它很像是一团乱糟糟的毛线,你得重新梳理展开,然后缠成一个完美的毛线球 。

达到上述目的的方法只需一次解开一根线、一个结。虽然有时候你可能会觉得你无法马上理解某些事情,但是你必须坚持下去。我保证如果你足够坚持,最后你会“豁然开朗”(哎呀呀,如果每次我不能马上弄懂某些事情的时候,我都存 25美分,那么我早就变成富豪了 :))。

关于理解如何创建一个解释器和编译器,也许我能给你的最好建议之一就说阅读本系列文章的解释、代码,然后自己去编写代码,甚至在一段时间内多次编写同样的代码,使得这些材料和代码对于你来说是很自然的。直到那时才继续学习新的主题。不要着急,请慢下来,花时间去深刻地理解基础概念。虽然这种方法看起来有点慢,但是你会受益匪浅。相信我。

你在最后终究会得到完美的毛线球。你知道吗?即使它不够完美,但是总比什么都不做和不学习这些课题,或者走马观花然后几天之后就忘记了要好。

记住——只需要坚持不懈地解开缠绕:一次一根线、一个结,并且通过编写大量代码来实践你所学过的:



今天你将会用到在本系列前面几篇文章中学到的所有知识,并且学习如何解析和解释带有任意数量的加法、减法、乘法和除法运算符的算术表达式。你将会编写一个可以计算像“14 + 2 * 3 – 6 / 2”这样的表达式的解释器。

在深入研究和编写代码之前,让我们讨论一下运算符的结合律和优先级。

按照约定,7 + 3 + 1 等同 (7 + 3) + 1,7 – 3 – 1 等同 (7 – 3) – 1。这里没有什么可惊讶的。我们在某个时候学过那些约定,并且从那以后把那些约定当作是理所当然的。如果我们把 7 – 3 – 1 当作是 7 – (3 – 1),那么结果会是 5 而不是预期的 3。

在普通的算术运算和大部分编程语言中,加法、减法、乘法和除法都是左结合:

1
2
3
4
7 + 3 + 1 is equivalent to (7 + 3) + 1
7 - 3 - 1 is equivalent to (7 - 3) - 1
8 * 4 * 2 is equivalent to (8 * 4) * 2
8 / 4 / 2 is equivalent to (8 / 4) / 2
一个运算符是左结合是什么意思?

当一个操作数像表达式 7 + 3 + 1 中的 3 一样两边都有加号时,我们需要一个约定来决定哪个运算符适用于 3。是操作数 3 左边的运算符还是右边的?因为两边都有加号的操作数属于它左边的运算符,所以 + 运算符结合左边的操作数。因此我们说运算符 + 是左结合。那就是为什么根据结合律,7 + 3 + 1 等同于 (7 + 3) + 1。

好,那么像 7 + 5 * 2 这样的表达式中的操作数 5,两边有着不同种类的运算符会是怎样呢?该表达式等同于 7 + (5 * 2) 还是 (7 + 5) * 2?我们如何解决这个歧义呢?

在这个例子中,结合律对我们已经没有帮助了。因为它只适用于同一种运算符,要么是加法类(+、-),要么是乘法类(*、/)。当在同一条表达式中有不同种类的运算符时,我们需要另一个约定来解决歧义。我们需要定义了运算符相对优先级的约定。

这就是了:如果运算符 * 比 + 先接受操作数,那么我们说 * 有更高的优先级。在我们知道和使用的算术运算中,乘法和除法比加法和减法优先级更高。所以表达式 7 + 5 * 2 等同于 7 + (5 * 2),表达式 7 – 8 / 4 等同于 7 – (8 / 4)。

在一个例子中,表达式的运算符有同样的优先级,我们只需运用结合律并且从左到右执行运算符:

1
2
7 + 3 - 1 is equivalent to (7 + 3) - 1
8 / 4 * 2 is equivalent to (8 / 4) * 2
讨论这么多关于运算符的结合律和优先级,我希望你不要认为我想让你无聊死。那些约定的好处是我们可以从一个展示算术运算符的结合律和优先级的表格中构建算术表达式的文法。然后我们可以遵循我在《一起来写个简单的解释器(4)》文章中概括的准则,将文法翻译成代码,我们的解释器也有能力处理除了结合律之外的运算符优先级。

好了,下面是我们的优先级表格:



在表格中,运算符 + 和 – 有着相同的优先级,它们都是左结合的。你也可以看到运算符 * 和 / 也是左结合,有着相同的优先级,但是它们的优先级比加法和减法运算符的优先级要高。

下面是如何根据优先级表格构建文法的规则:

为每个优先级定义一个非终结符。非终结符所在产生式的主体应该包含同等级的算术运算符和优先级高一级的非终结符。
为表达式创建一个额外的非终结符 factor 作为基本单位,在我们的例子中该基本单位是整数。通用的规则是如果你有 N 层优先级,那么你总共需要 N + 1 个非终结符:每层优先级需要一个非终结符,加上一个用作表达式基本单位的非终结符。
继续前进!

下面我们根据这些规则来构造文法。

根据规则 1,我们要定义两个非终结符:用于等级 2 的非终结符称为 expr,用于等级 1 的非终结符称为 term。而根据规则 2,我们将定义一个 factor (即一个整数)用作算术表达式的基本单位。

新文法的开始符号是 expr,expr 产生式包含一个主体,该主体使用来自等级 2 的运算符(在我们的例子中是 + 和 – 运算符)。同时 expr 产生式也包含更高优先级(等级 1)的 term 非终结符:



term 表达式包含一个主体,该主题使用来自等级 1 的运算符(在我们的例子中是 * 和 /)。同时 term 产生式也包含用作表达式基本单位的 factor(即整数):



而非终结符 factor 的产生式是:



我们已经在前几篇文章中看过上述产生式的文法和语法图形式,下面我们将会把它们结合到一个文法中,该文法会关注到运算符的结合律和优先级:



下面是与上述文法相对应的语法图:



框图中的每个矩形框是对另一个框图的“方法调用”。对于表达式 7 + 5 * 2,如果你从最上面的框图 expr 开始一直往下看到最下面的框图 factor,那么你应该可以看到较下面的框图中更高级的运算符 * 和 / 会比较上面的框图中运算符 + 和 – 先执行。

为了彻底地说明运算符的优先级,下面我们看一下根据上述的文法和语法图对同一个算术表达式 7 + 5 * 2 的分解。这只是从另一方面展示更高优先级的运算符会比低优先级运算符先执行:



好的,下面根据《一起来写个简单的解释器(4)》中的准则将文法转换成代码,再看下我们的新解释器是怎么工作的,好吗?

再次列出文法:



下面是一个计算器的全部代码,该计算器可以处理包含整数和任意数量的加法、减法、乘法和除法(整除)运算符的有效算术表达式。

下面是对比《一起来写个简单的解释器(4)》中的代码的主要修改:

Lexer 类现在可以标记 +、-、* 和 /(这里没有新的东西,我们只是把以前的代码整合到一个类中,从而支持所有的标记)
回想一下,文法中定义的每条规则(产生式),R,会变成一个同名的方法,而对那条规则的引用变成一个方法调用:R()。因此 Interpreter 类现在有三个方法,分别对应文法中的非终结符:expr、term 和 factor。
源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Token types
#
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, PLUS, MINUS, MUL, DIV, EOF = (
    'INTEGER', 'PLUS', 'MINUS', 'MUL', 'DIV', 'EOF'
)

class Token(object):
    def __init__(self, type, value):
        
# token type: INTEGER, PLUS, MINUS, MUL, DIV, or EOF
        self.type = type
        
# token value: non-negative integer value, '+', '-', '*', '/', or None
        self.value = value

    def __str__(self):
        
"""String representation of the class instance.

        
Examples:
            
Token(INTEGER, 3)
            
Token(PLUS, '+')
            
Token(MUL, '*')
        
"""
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Lexer(object):
    def __init__(self, text):
        
# client string input, e.g. "3 * 5", "12 / 3 * 4", etc
        self.text = text
        
# self.pos is an index into self.text
        self.pos = 0
        self.current_char = self.text[self.pos]

    def error(self):
        raise Exception('Invalid character')

    def advance(self):
        
"""Advance the `pos` pointer and set the `current_char` variable."""
        self.pos += 1
        if self.pos > len(self.text) - 1:
            self.current_char = None  
# Indicates end of input
        else:
            self.current_char = self.text[self.pos]

    def skip_whitespace(self):
        while self.current_char is not None and self.current_char.isspace():
            self.advance()

    def integer(self):
        
"""Return a (multidigit) integer consumed from the input."""
        result = ''
        while self.current_char is not None and self.current_char.isdigit():
            result += self.current_char
            self.advance()
        return int(result)

    def get_next_token(self):
        
"""Lexical analyzer (also known as scanner or tokenizer)

        
This method is responsible for breaking a sentence
        
apart into tokens. One token at a time.
        
"""
        while self.current_char is not None:

            if self.current_char.isspace():
                self.skip_whitespace()
                continue

            if self.current_char.isdigit():
                return Token(INTEGER, self.integer())

            if self.current_char == '+':
                self.advance()
                return Token(PLUS, '+')

            if self.current_char == '-':
                self.advance()
                return Token(MINUS, '-')

            if self.current_char == '*':
                self.advance()
                return Token(MUL, '*')

            if self.current_char == '/':
                self.advance()
                return Token(DIV, '/')

            self.error()

        return Token(EOF, None)

class Interpreter(object):
    def __init__(self, lexer):
        self.lexer = lexer
        
# set current token to the first token taken from the input
        self.current_token = self.lexer.get_next_token()

    def error(self):
        raise Exception('Invalid syntax')

    def eat(self, token_type):
        
# compare the current token type with the passed token
        
# type and if they match then "eat" the current token
        
# and assign the next token to the self.current_token,
        
# otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.lexer.get_next_token()
        else:
            self.error()

    def factor(self):
        
"""factor : INTEGER"""
        token = self.current_token
        self.eat(INTEGER)
        return token.value

    def term(self):
        
"""term : factor ((MUL | DIV) factor)*"""
        result = self.factor()

        while self.current_token.type in (MUL, DIV):
            token = self.current_token
            if token.type == MUL:
                self.eat(MUL)
                result = result * self.factor()
            elif token.type == DIV:
                self.eat(DIV)
                result = result / self.factor()

        return result

    def expr(self):
        
"""Arithmetic expression parser / interpreter.

        
calc>  14 + 2 * 3 - 6 / 2
        
17

        
expr   : term ((PLUS | MINUS) term)*
        
term   : factor ((MUL | DIV) factor)*
        
factor : INTEGER
        
"""
        result = self.term()

        while self.current_token.type in (PLUS, MINUS):
            token = self.current_token
            if token.type == PLUS:
                self.eat(PLUS)
                result = result + self.term()
            elif token.type == MINUS:
                self.eat(MINUS)
                result = result - self.term()

        return result

def main():
    while True:
        try:
            
# To run under Python3 replace 'raw_input' call
            
# with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        lexer = Lexer(text)
        interpreter = Interpreter(lexer)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上述代码保存到 calc5.py 文件中,或者直接从 GitHub 上下载。像往常一样,自己尝试一下,看下解释器是否可以正确地计算出带有不同优先级运算符的算术表达式。

下面是运行在我的电脑上一段简单的会话:

1
2
3
4
5
6
7
8
9
$ python calc5.py
calc> 3
3
calc> 2 + 7 * 4
30
calc> 7 - 8 / 4
5
calc> 14 + 2 * 3 - 6 / 2
17
下面是今天的练习:



不要窥视文章中的代码,不假思索地编写一个类似这篇文章中描述的解释器。为你的解释器写一些测试,确保都通过这些测试。
扩展解释器来处理包含括号的算术表达式,使得你的解释器可以计算像 7 + 3 * (10 / (12 / (3 + 1) – 1)) 这样深层嵌套的算术表达式。
检测你的理解。

运算符是左结合是什么意思?
运算符 + 和 – 是左结合还是右结合?运算符 * 和 / 呢?
运算符 + 的优先级比 * 高么?
嘿,你读到最后了!真是太棒了。下次我会带来一篇新的文章——敬请期待,还有不要忘记做练习哦。

下面是我推荐的一些书籍列表,它们对你学习解释器和编译器有帮助:

Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers)
Writing Compilers and Interpreters: A Software Engineering Approach
Modern Compiler Implementation in Java
Modern Compiler Design
Compilers: Principles, Techniques, and Tools (2nd Edition)
一起来写个简单的解释器(6)
今天是个好日子 :) 你可能会问:“为什么?”。原因是今天我们会在文法中添加括号表达式和实现可以计算像 7 + 3 * (10 / (12 / (3 + 1) – 1)) 这样任意深度嵌套的括号表达式的解释器,然后结束关于算术表达式的讨论(好吧,差不多)。

让我们开始吧,好吗?

首先,修改文法以支持带有圆括号的表达式。记得在《一起来写个简单的解释器(5)》曾经提到,factor 规则是表达式的基本单位。在那篇文章中,我们只有一个整数作为基本单位。今天我们将会添加另一个基本单位——一个括号表达式。那么开始吧。

下面是更新后的文法:



expr 和 term 表达式与《一起来写个简单的解释器(5)》中的完全一样,唯一的变化是在 factor 产生式中,终结符 LPAREN 代表左括号 ‘(’,终结符 RPAREN 代表右括号 ‘)’,在圆括号里面的非终结符 expr 代表 expr 规则。

下面是更新过的 factor 语法图,语法图现在包括两项:



因为 expr 和 term 的文法规则没有改变,所以它们的语法图与《一起来写个简单的解释器(5)》中的是一样的:



新的文法中有一个有趣的特点——它是递归的。如果你尝试得到表达式 2 * (7 + 3),那么你会以开始符号 expr 开始,最后你还是会再次递归地使用 expr 规则,从而得到原来算术表达式的一部分 (7 + 3)。

下面根据文法来分解表达式 2 * (7 + 3) 并看下它是如何工作的:



一段题外话:如果你需要关于递归的资料,那么你可以看一下 Daniel P. Friedman 和 Matthias Felleisen 的这本书《The Little Schemer》——它真的写得很好。

好了,让我们继续将新的更新后的文法翻译成代码。

下面是对比上篇文章的代码主要修改的地方:

修改 Lexer 使之返回两个以上的标记:代表左括号的 LPAREN 和代表右括号的 PAREN。
Interpreter 的 factor 方法被稍微更新成除了可以解析整数之外,还可以解析括号表达式。
下面是一个计算器的全部代码,该计算器可以计算包含整数、任意数量的加法、减法、乘法和除法(整除)运算符和任意深度嵌套的括号表达式的算术表达式:

# Token types
#
# EOF (end-of-file) token is used to indicate that
# there is no more input left for lexical analysis
INTEGER, PLUS, MINUS, MUL, DIV, LPAREN, RPAREN, EOF = (
    'INTEGER', 'PLUS', 'MINUS', 'MUL', 'DIV', '(', ')', 'EOF'
)

class Token(object):
    def __init__(self, type, value):
        self.type = type
        self.value = value

    def __str__(self):
        """String representation of the class instance.

        Examples:
            Token(INTEGER, 3)
            Token(PLUS, '+')
            Token(MUL, '*')
        """
        return 'Token({type}, {value})'.format(
            type=self.type,
            value=repr(self.value)
        )

    def __repr__(self):
        return self.__str__()

class Lexer(object):
    def __init__(self, text):
        # client string input, e.g. "4 + 2 * 3 - 6 / 2"
        self.text = text
        # self.pos is an index into self.text
        self.pos = 0
        self.current_char = self.text[self.pos]

    def error(self):
        raise Exception('Invalid character')

    def advance(self):
        """Advance the `pos` pointer and set the `current_char` variable."""
        self.pos += 1
        if self.pos > len(self.text) - 1:
            self.current_char = None  # Indicates end of input
        else:
            self.current_char = self.text[self.pos]

    def skip_whitespace(self):
        while self.current_char is not None and self.current_char.isspace():
            self.advance()

    def integer(self):
        """Return a (multidigit) integer consumed from the input."""
        result = ''
        while self.current_char is not None and self.current_char.isdigit():
            result += self.current_char
            self.advance()
        return int(result)

    def get_next_token(self):
        """Lexical analyzer (also known as scanner or tokenizer)

        This method is responsible for breaking a sentence
        apart into tokens. One token at a time.
        """
        while self.current_char is not None:

            if self.current_char.isspace():
                self.skip_whitespace()
                continue

            if self.current_char.isdigit():
                return Token(INTEGER, self.integer())

            if self.current_char == '+':
                self.advance()
                return Token(PLUS, '+')

            if self.current_char == '-':
                self.advance()
                return Token(MINUS, '-')

            if self.current_char == '*':
                self.advance()
                return Token(MUL, '*')

            if self.current_char == '/':
                self.advance()
                return Token(DIV, '/')

            if self.current_char == '(':
                self.advance()
                return Token(LPAREN, '(')

            if self.current_char == ')':
                self.advance()
                return Token(RPAREN, ')')

            self.error()

        return Token(EOF, None)

class Interpreter(object):
    def __init__(self, lexer):
        self.lexer = lexer
        # set current token to the first token taken from the input
        self.current_token = self.lexer.get_next_token()

    def error(self):
        raise Exception('Invalid syntax')

    def eat(self, token_type):
        # compare the current token type with the passed token
        # type and if they match then "eat" the current token
        # and assign the next token to the self.current_token,
        # otherwise raise an exception.
        if self.current_token.type == token_type:
            self.current_token = self.lexer.get_next_token()
        else:
            self.error()

    def factor(self):
        """factor : INTEGER | LPAREN expr RPAREN"""
        token = self.current_token
        if token.type == INTEGER:
            self.eat(INTEGER)
            return token.value
        elif token.type == LPAREN:
            self.eat(LPAREN)
            result = self.expr()
            self.eat(RPAREN)
            return result

    def term(self):
        """term : factor ((MUL | DIV) factor)*"""
        result = self.factor()

        while self.current_token.type in (MUL, DIV):
            token = self.current_token
            if token.type == MUL:
                self.eat(MUL)
                result = result * self.factor()
            elif token.type == DIV:
                self.eat(DIV)
                result = result / self.factor()

        return result

    def expr(self):
        """Arithmetic expression parser / interpreter.

        calc> 7 + 3 * (10 / (12 / (3 + 1) - 1))
        22

        expr   : term ((PLUS | MINUS) term)*
        term   : factor ((MUL | DIV) factor)*
        factor : INTEGER | LPAREN expr RPAREN
        """
        result = self.term()

        while self.current_token.type in (PLUS, MINUS):
            token = self.current_token
            if token.type == PLUS:
                self.eat(PLUS)
                result = result + self.term()
            elif token.type == MINUS:
                self.eat(MINUS)
                result = result - self.term()

        return result

def main():
    while True:
        try:
            # To run under Python3 replace 'raw_input' call
            # with 'input'
            text = raw_input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        lexer = Lexer(text)
        interpreter = Interpreter(lexer)
        result = interpreter.expr()
        print(result)

if __name__ == '__main__':
    main()
将上述的代码保存到 calc6.py 文件,自己尝试一下,看下新的解释器是否可以正确地计算出带有不同运算符和括号的算术表达式。

下面是一段简单的会话:

$ python calc6.py
calc> 3
3
calc> 2 + 7 * 4
30
calc> 7 - 8 / 4
5
calc> 14 + 2 * 3 - 6 / 2
17
calc> 7 + 3 * (10 / (12 / (3 + 1) - 1))
22
calc> 7 + 3 * (10 / (12 / (3 + 1) - 1)) / (2 + 3) - 5 - 3 + (8)
10
calc> 7 + (((3 + 2)))
12
下面是今天的新练习:



像这篇文章中介绍的一样,写一个你自己的算术表达式解释器。记住:重复是学习之母。
嘿,你读到最后了!恭喜,你刚学习了如何创建(如果你完成了练习,那么你事实上编写了)一个基本的、可以计算相当复杂的算术表达式的递归下降解析器/解释器。

下一篇文章我将会谈及更多关于递归下降解析器的细节。我还会介绍一种重要的、在解释器和编译器构造中被广泛使用的数据结构,该数据结构将会贯穿后续的系列文章。

敬请期待和很快再见。直到那时,继续编写你的解释器,最重要的是:享受这个过程!

下面是我推荐的一些书籍列表,它们对你学习解释器和编译器有帮助:

Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers)
Writing Compilers and Interpreters: A Software Engineering Approach
Modern Compiler Implementation in Java
Modern Compiler Design
Compilers: Principles, Techniques, and Tools (2nd Edition)
作者: zzz19760225     时间: 2016-2-2 23:17    标题: 3手把手教你做一个 C 语言编译器

手把手教你做一个 C 语言编译器(0):前言
“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。希望通过这个系列,我们能对编译器的构建有一定的了解,同时,我们也将构建出一个能用的 C 语言编译器,尽管有许多语法并不支持。

在开始进入正题之前,本篇是一些闲聊,谈谈这个系列的初衷。如果你急切地想进入正篇,请跳过本章。

前言

为什么要学编译原理

如果要我说计算机专业最重要的三门课,我会说是《数据结构》、《算法》和《编译原理》。在我看来,能不能理解“递归”像是程序员的第一道门槛,而会不会写编译器则是第二道。

(当然,并不是说是没写过编译器就不是好程序员,只能说它是一个相当大的挑战吧)

以前人们会说,学习了编译原理,你就能写出更加高效的代码,但随着计算机性能的提升,代码是否高效显得就不那么重要了。那么为什么要学习编译原理呢?

原因只有一个:装B。

好吧,也许现在还想学习编译原理的人只可能是因为兴趣了。一方面想了解它的工作原理;另一方面希望挑战一下自己,看看自己能走多远。

理论很复杂,实现也很复杂?

我对编译器一直心存敬佩。所以当学校开《编译原理》的课程后,我是抱着满腔热情去上课的,但是两节课后我就放弃了。原因是太复杂了,听不懂。

一般编译原理的课程会说一些:

如何表示语法(BNF什么的)
词法分析,用什么有穷自动机和无穷自动机
语法分析,递归下降法,什么 LL(k),LALR 分析。
中间代码的表示
代码的生成
代码优化
我相信绝大多数(98%)的学生顶多学到语法分析就结束了。并且最重要的是,学了这么多也没用!依旧帮助不了我们学习编译器!这其中最主要的原因是《编译原理》试图教会我们的是如何构造“编译器生成器”,即构造一个工具,根据文法来生成编译器(如 lex/yacc)等等。

这些理论试图教会我们如何用通用的方法来自动解决问题,它们有很强的实际意义,只是对于一般的学生或程序员来说,它们过于强大,内容过于复杂。如果你尝试阅读 lex/yacc (或 flex/bison)的代码,就会发现太可怕了。

然而如果你能跟我一样,真正来实现一个简单的编译器,那么你会发现,比起可怕的《编译原理》,这点复杂度还是不算什么的(因为好多理论根本用不上)。

项目的初衷

有一次在 Github 上看到了一个项目(当时很火的),名叫 c4,号称用 4 个函数来实现了一个小的 C 语言编译器。它最让我震惊的是能够自举,即能自己编译自己。并且它用很少的代码就完成了一个功能相当完善的 C 语言编译器。

一般的编译器相关的教程要么就十分简单(如实现四则运算),要么就是借助了自动生成的工具(如 flex/bison)。而 c4 的代码完全是手工实现的,不用外部工具。可惜的是它的代码初衷是代码最小化,所以写得很乱,很难懂。所以本项目的主要目的:

实现一个功能完善的 C 语言编译器
通过教程来说明这个过程。
c4 大致500+行。重写的代码历时一周,总共代码加注释1400行。项目地址: Write a C Interpreter。

声明:本项目中的代码逻辑绝大多数取自 c4 ,但确为自己重写。

预警

在写编译器的时候会遇到两个主要问题:

麻烦,会有许多类似的代码,写起来很无聊。
难以调试,一方面没有很好的测试用例,另一方面需要对照生成的代码来调试(遇到的时候就知道了)。
所以我希望你有足够的耐心和时间来学习,相信当你真正完成的时候会像我一样,十分有成就感。

PS. 第一篇完全没有正题相关的内容也是希望你能有所心理准备再开始学习。

参考资料

最后想介绍几个资料:

Let’s Build a Compiler 很好的初学者教程,英文的。
Lemon Parser Generator,一个语法分析器生成器,对照《编译原理》观看效果更佳。
祝你学得愉快。
手把手教你做一个 C 语言编译器(1):设计
本章是“手把手教你构建 C 语言编译器”系列的第二篇,我们要从整体上讲解如何设计我们的 C 语言编译器。

本系列:

手把手教你做一个 C 语言编译器(0):前言
首先要说明的是,虽然标题是编译器,但实际上我们构建的是 C 语言的解释器,这意味着我们可以像运行脚本一样去运行 C 语言的源代码文件。这么做的理由有两点:

解释器与编译器仅在代码生成阶段有区别,而其它方面如词法分析、语法分析是一样的。
解释器需要我们实现自己的虚拟机与指令集,而这部分能帮助我们了解计算机的工作原理。
编译器的构建流程

一般而言,编译器的编写分为 3 个步骤:

词法分析器,用于将字符串转化成内部的表示结构。
语法分析器,将词法分析得到的标记流(token)生成一棵语法树。
目标代码的生成,将语法树转化成目标代码。
已经有许多工具能帮助我们处理阶段1和2,如 flex 用于词法分析,bison 用于语法分析。只是它们的功能都过于强大,屏蔽了许多实现上的细节,对于学习构建编译器帮助不大。所以我们要完全手写这些功能。

所以我们会根据下面的流程:

构建我们自己的虚拟机以及指令集。这后生成的目标代码便是我们的指令集。
构建我们的词法分析器
构建语法分析器
编译器的框架

我们的编译器主要包括 4 个函数:

next() 用于词法分析,获取下一个标记,它将自动忽略空白字符。
program() 语法分析的入口,分析整个 C 语言程序。
expression(level) 用于解析一个表达式。
eval() 虚拟机的入口,用于解释目标代码。
这里有一个单独用于解析“表达式”的函数 expression 是因为表达式在语法分析中相对独立并且比较复杂,所以我们将它单独作为一个模块(函数)。

因为我们的源代码看起来就像是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>

int token;            
// current token
char *src, *old_src;  
// pointer to source code string;
int poolsize;         
// default size of text/data/stack
int line;            
// line number

void next() {
    token = *src++;
    return;
}

void expression(int level) {
   
// do nothing
}

void program() {
    next();                  
// get next token
    while (token > 0) {
        printf("token is: %c\n", token);
        next();
    }
}

int eval() {
// do nothing yet
    return 0;
}

int main(int argc, char **argv)
{
    int i, fd;

    argc--;
    argv++;

    poolsize = 256 * 1024;
// arbitrary size
    line = 1;

    if ((fd = open(*argv, 0)) < 0) {
        printf("could not open(%s)\n", *argv);
        return -1;
    }

    if (!(src = old_src = malloc(poolsize))) {
        printf("could not malloc(%d) for source area\n", poolsize);
        return -1;
    }

   
// read the source file
    if ((i = read(fd, src, poolsize-1)) <= 0) {
        printf("read() returned %d\n", i);
        return -1;
    }
    src[i] = 0;
// add EOF character
    close(fd);

    program();
    return eval();
}
上面的代码看上去挺复杂,但其实内容不多,就是读取一个源代码文件,逐个读取每个字符,并输出每个字符。这里重要的是注意每个函数的作用,后面的文章中,我们将逐个填充每个函数的功能,最终构建起我们的编译器。

本节的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-0 https:
//github.com/lotabout/write-a-C-interpreter
这样我们就有了一个最简单的编译器:什么都不干的编译器,下一章中,我们将实现其中的eval函数,即我们自己的虚拟机。
手把手教你做一个 C 语言编译器(2):虚拟机
本章是“手把手教你构建 C 语言编译器”系列的第三篇,本章我们要构建一台虚拟的电脑,设计我们自己的指令集,运行我们的指令集,说得通俗一点就是自己实现一套汇编语言。它们将作为我们的编译器最终输出的目标代码。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
计算机的内部工作原理

我们关心计算机的三个基本部件:CPU、寄存器及内存。代码(汇编指令)以二进制的形式保存在内存中,CPU 从中一条条地加载指令执行。程序运行的状态保存在寄存器中。

内存

我们从内存开始说起。现代的操作系统都不直接使用内存,而是使用虚拟内存。虚拟内存可以理解为一种映射,在我们的程序眼中,我们可以使用全部的内存地址,而操作系统需要将它映射到实际的内存上。当然,这些并不重要,重要的是一般而言,进程的内存会被分成几个段:

代码段(text)用于存放代码(指令)。
数据段(data)用于存放初始化了的数据,如int i = 10;,就需要存放到数据段中。
未初始化数据段(bss)用于存放未初始化的数据,如 int i[1000];,因为不关心其中的真正数值,所以单独存放可以节省空间,减少程序的体积。
栈(stack)用于处理函数调用相关的数据,如调用帧(calling frame)或是函数的局部变量等。
堆(heap)用于为程序动态分配内存。
它们在内存中的位置类似于下图:

+------------------+
|    stack   |     |      high address
|    ...     v     |
|                  |
|                  |
|                  |
|                  |
|    ...     ^     |
|    heap    |     |
+------------------+
| bss  segment     |
+------------------+
| data segment     |
+------------------+
| text segment     |      low address
+------------------+
但我们的虚拟机并不模拟完整的计算机,我们只关心三个内容:代码段、数据段以及栈。其中的数据段我们只存放字符串,因为我们的编译器并不支持初始化变量,因此我们也不需要未初始化数据段。理论上我们的虚拟器需要维护自己的堆用于内存分配,但实际实现上较为复杂且与编译无关,故我们引入一个指令MSET,使我们能直接使用编译器(解释器)中的内存。

综上,我们需要首先在全局添加如下代码:

1
2
3
4
int *text,            
// text segment
     *old_text,        
// for dump text segment
     *stack;           
// stack
char *data;           
// data segment
注意这里的类型,虽然是int型,但理解起来应该作为无符号的整型,因为我们会在代码段(text)中存放如指针/内存地址的数据,它们就是无符号的。其中数据段(data)由于只存放字符串,所以是 char * 型的

接着,在main函数中加入初始化代码,真正为其分配内存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main() {
    close(fd);
    ...

    // allocate memory for virtual machine
    if (!(text = old_text = malloc(poolsize))) {
        printf("could not malloc(%d) for text area\n", poolsize);
        return -1;
    }
    if (!(data = malloc(poolsize))) {
        printf("could not malloc(%d) for data area\n", poolsize);
        return -1;
    }
    if (!(stack = malloc(poolsize))) {
        printf("could not malloc(%d) for stack area\n", poolsize);
        return -1;
    }

    memset(text, 0, poolsize);
    memset(data, 0, poolsize);
    memset(stack, 0, poolsize);

    ...
    program();
寄存器

计算机中的寄存器用于存放计算机的运行状态,真正的计算机中有许多不同种类的寄存器,但我们的虚拟机中只使用 4 个寄存器,分别如下:

PC 程序计数器,它存放的是一个内存地址,该地址中存放着 下一条 要执行的计算机指令。
SP 指针寄存器,永远指向当前的栈顶。注意的是由于栈是位于高地址并向低地址增长的,所以入栈时 SP 的值减小。
BP 基址指针。也是用于指向栈的某些位置,在调用函数时会使用到它。
AX 通用寄存器,我们的虚拟机中,它用于存放一条指令执行后的结果。
要理解这些寄存器的作用,需要去理解程序运行中会有哪些状态。而这些寄存器只是用于保存这些状态的。

在全局中加入如下定义:

1
int *pc, *bp, *sp, ax, cycle;
// virtual machine registers
在 main 函数中加入初始化代码,注意的是PC在初始应指向目标代码中的main函数,但我们还没有写任何编译相关的代码,因此先不处理。代码如下:

1
2
3
4
5
6
7
8
memset(stack, 0, poolsize);
...

bp = sp = (int *)((int)stack + poolsize);
ax = 0;

...
program();
与 CPU 相关的是指令集,我们将专门作为一个小节。

指令集

指令集是 CPU 能识别的命令的集合,也可以说是 CPU 能理解的语言。这里我们要为我们的虚拟机构建自己的指令集。它们基于 x86 的指令集,但要更为简单。

首先在全局变量中加入一个枚举类型,这是我们要支持的全部指令:

1
2
3
4
// instructions
enum { LEA ,IMM ,JMP ,CALL,JZ  ,JNZ ,ENT ,ADJ ,LEV ,LI  ,LC  ,SI  ,SC  ,PUSH,
       OR  ,XOR ,AND ,EQ  ,NE  ,LT  ,GT  ,LE  ,GE  ,SHL ,SHR ,ADD ,SUB ,MUL ,DIV ,MOD ,
       OPEN,READ,CLOS,PRTF,MALC,MSET,MCMP,EXIT };
这些指令的顺序安排是有意的,稍后你会看到,带有参数的指令在前,没有参数的指令在后。这种顺序的唯一作用就是在打印调试信息时更加方便。但我们讲解的顺序并不依据它。

MOV

MOV 是所有指令中最基础的一个,它用于将数据放进寄存器或内存地址,有点类似于 C 语言中的赋值语句。x86 的 MOV 指令有两个参数,分别是源地址和目标地址:MOV dest, source (Intel 风格),表示将 source 的内容放在 dest 中,它们可以是一个数、寄存器或是一个内存地址。

一方面,我们的虚拟机只有一个寄存器,另一方面,识别这些参数的类型(是数还是地址)是比较困难的,因此我们将 MOV 指令拆分成 5 个指令,这些指令只接受一个参数,如下:

IMM <num> 将 <num> 放入寄存器 ax 中。
LC 将对应地址中的字符载入 ax 中,要求 ax 中存放地址。
LI 将对应地址中的整数载入 ax 中,要求 ax 中存放地址。
SC 将 ax 中的数据作为字符存放入地址中,要求栈顶存放地址。
SI 将 ax 中的数据作为整数存放入地址中,要求栈顶存放地址。
你可能会觉得将一个指令变成了许多指令,整个系统就变得复杂了,但实际情况并非如此。首先是 MOV 指令其实有许多变种,根据类型的不同有 MOVB, MOVW 等指令,我们这里的LC/SC 和 LI/SI 就是对应字符型和整型的存取操作。

但最为重要的是,通过将 MOV 指令拆分成这些指令,只有 IMM 需要有参数,且不需要判断类型,所以大大简化了实现的难度。

在 eval() 函数中加入下列代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
void eval() {
    int op, *tmp;
    while (1) {
        if (op == IMM)       {ax = *pc++;}                                    
// load immediate value to ax
        else if (op == LC)   {ax = *(char *)ax;}                              
// load character to ax, address in ax
        else if (op == LI)   {ax = *(int *)ax;}                                
// load integer to ax, address in ax
        else if (op == SC)   {ax = *(char *)*sp++ = ax;}                       
// save character to address, value in ax, address on stack
        else if (op == SI)   {*(int *)*sp++ = ax;}                             
// save integer to address, value in ax, address on stack
    }

    ...
    return 0;
}
其中的 *sp++ 的作用是退栈,相当于 POP 操作。

这里要解释的一点是,为什么 SI/SC 指令中,地址存放在栈中,而 LI/LC 中,地址存放在ax 中?原因是默认计算的结果是存放在 ax 中的,而地址通常是需要通过计算获得,所以执行 LI/LC 时直接从 ax 取值会更高效。另一点是我们的 PUSH 指令只能将 ax 的值放到栈上,而不能以值作为参数,详细见下文。

PUSH

在 x86 中,PUSH 的作用是将值或寄存器,而在我们的虚拟机中,它的作用是将 ax 的值放入栈中。这样做的主要原因是为了简化虚拟机的实现,并且我们也只有一个寄存器 ax 。代码如下:

1
else if (op == PUSH) {*--sp = ax;}
// push the value of ax onto the stack
JMP

JMP <addr> 是跳转指令,无条件地将当前的 PC 寄存器设置为指定的 <addr>,实现如下:

1
else if (op == JMP)  {pc = (int *)*pc;}     
// jump to the address
要记得,pc 寄存器指向的是 下一条 指令。所以此时它存放的是 JMP 指令的参数,即<addr> 的值。

JZ/JNZ

为了实现 if 语句,我们需要条件判断相关的指令。这里我们只实现两个最简单的条件判断,即结果(ax)为零或不为零情况下的跳转。

实现如下:

1
else if (op == JZ)   {pc = ax ? pc + 1 : (int *)*pc;}                  
// jump if ax is zero
1
else if (op == JNZ)  {pc = ax ? (int *)*pc : pc + 1;}                  
// jump if ax is zero
子函数调用

这是汇编中最难理解的部分,所以合在一起说,要引入的命令有 CALL, ENT, ADJ 及LEV。

首先我们介绍 CALL <addr> 与 RET 指令,CALL 的作用是跳转到地址为 <addr> 的子函数,RET 则用于从子函数中返回。

为什么不能直接使用 JMP 指令呢?原因是当我们从子函数中返回时,程序需要回到跳转之前的地方继续运行,这就需要事先将这个位置信息存储起来。反过来,子函数要返回时,就需要获取并恢复这个信息。因此实际中我们将 PC 保存在栈中。如下:

1
2
else if (op == CALL) {*--sp = (int)(pc+1); pc = (int *)*pc;}           
// call subroutine
//else if (op == RET)  {pc = (int *)*sp++;}                            // return from subroutine;
这里我们把 RET 相关的内容注释了,是因为之后我们将用 LEV 指令来代替它。

在实际调用函数时,不仅要考虑函数的地址,还要考虑如何传递参数和如何返回结果。这里我们约定,如果子函数有返回结果,那么就在返回时保存在 ax 中,它可以是一个值,也可以是一个地址。那么参数的传递呢?

各种编程语言关于如何调用子函数有不同的约定,例如 C 语言的调用标准是:

由调用者将参数入栈。
调用结束时,由调用者将参数出栈。
参数逆序入栈。
事先声明一下,我们的编译器参数是顺序入栈的,下面的例子(C 语言调用标准)取自 维基百科:

1
2
3
4
5
6
7
8
9
10
int callee(int, int, int);

int caller(void)
{
    int i, ret;

    ret = callee(1, 2, 3);
    ret += 5;
    return ret;
}
会生成如下的 x86 汇编代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
caller:
    ; make new call frame
    push    ebp
    mov     ebp, esp
        sub     1, esp       ; save stack for variable: i
    ; push call arguments
    push    3
    push    2
    push    1
    ; call subroutine 'callee'
    call    callee
    ; remove arguments from frame
    add     esp, 12
    ; use subroutine result
    add     eax, 5
    ; restore old call frame
        mov     esp, ebp
    pop     ebp
    ; return
    ret
上面这段代码在我们自己的虚拟机里会有几个问题:

push ebp,但我们的 PUSH 指令并无法指定寄存器。
mov ebp, esp,我们的 MOV 指令同样功能不足。
add esp, 12,也是一样的问题(尽管我们还没定义)。
也就是说由于我们的指令过于简单(如只能操作ax寄存器),所以用上面提到的指令,我们连函数调用都无法实现。而我们又不希望扩充现有指令的功能,因为这样实现起来就会变得复杂,因此我们采用的方法是增加指令集。毕竟我们不是真正的计算机,增加指令会消耗许多资源(钱)。

ENT

ENT <size> 指的是 enter,用于实现 ‘make new call frame’ 的功能,即保存当前的栈指针,同时在栈上保留一定的空间,用以存放局部变量。对应的汇编代码为:

1
2
3
4
; make new call frame
push    ebp
mov     ebp, esp
       sub     1, esp       ; save stack for variable: i
实现如下:

1
else if (op == ENT)  {*--sp = (int)bp; bp = sp; sp = sp - *pc++;}      // make new stack frame
ADJ

ADJ <size> 用于实现 ‘remove arguments from frame’。在将调用子函数时压入栈中的数据清除,本质上是因为我们的 ADD 指令功能有限。对应的汇编代码为:

1
2
; remove arguments from frame
add     esp, 12
实现如下:

1
else if (op == ADJ)  {sp = sp + *pc++;}                                // add esp, <size>
LEV

本质上这个指令并不是必需的,只是我们的指令集中并没有 POP 指令。并且三条指令写来比较麻烦且浪费空间,所以用一个指令代替。对应的汇编指令为:

1
2
3
4
5
; restore old call frame
       mov     esp, ebp
pop     ebp
; return
ret
具体的实现如下:

1
else if (op == LEV)  {sp = bp; bp = (int *)*sp++; pc = (int *)*sp++;}  // restore call frame and PC
注意的是,LEV 已经把 RET 的功能包含了,所以我们不再需要 RET 指令。

LEA

上面的一些指令解决了调用帧的问题,但还有一个问题是如何在子函数中获得传入的参数。这里我们首先要了解的是当参数调用时,栈中的调用帧是什么样的。我们依旧用上面的例子(只是现在用“顺序”调用参数):

sub_function(arg1, arg2, arg3);

|    ....       | high address
+---------------+
| arg: 1        |    new_bp + 4
+---------------+
| arg: 2        |    new_bp + 3
+---------------+
| arg: 3        |    new_bp + 2
+---------------+
|return address |    new_bp + 1
+---------------+
| old BP        | <- new BP
+---------------+
| local var 1   |    new_bp - 1
+---------------+
| local var 2   |    new_bp - 2
+---------------+
|    ....       |  low address
所以为了获取第一个参数,我们需要得到 new_bp + 4,但就如上面的说,我们的 ADD 指令无法操作除 ax 外的寄存器,所以我们提供了一个新的指令:LEA <offset>

实现如下:

1
else if (op == LEA)  {ax = (int)(bp + *pc++);}                         // load address for arguments.
以上就是我们为了实现函数调用需要的指令了。

运算符指令

我们为 C 语言中支持的运算符都提供对应汇编指令。每个运算符都是二元的,即有两个参数,第一个参数放在栈顶,第二个参数放在 ax 中。这个顺序要特别注意。因为像 -,/之类的运算符是与参数顺序有关的。计算后会将栈顶的参数退栈,结果存放在寄存器 ax中。因此计算结束后,两个参数都无法取得了(汇编的意义上,存在内存地址上就另当别论)。

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
else if (op == OR)  ax = *sp++ | ax;
else if (op == XOR) ax = *sp++ ^ ax;
else if (op == AND) ax = *sp++ & ax;
else if (op == EQ)  ax = *sp++ == ax;
else if (op == NE)  ax = *sp++ != ax;
else if (op == LT)  ax = *sp++ < ax;
else if (op == LE)  ax = *sp++ <= ax;
else if (op == GT)  ax = *sp++ >  ax;
else if (op == GE)  ax = *sp++ >= ax;
else if (op == SHL) ax = *sp++ << ax;
else if (op == SHR) ax = *sp++ >> ax;
else if (op == ADD) ax = *sp++ + ax;
else if (op == SUB) ax = *sp++ - ax;
else if (op == MUL) ax = *sp++ * ax;
else if (op == DIV) ax = *sp++ / ax;
else if (op == MOD) ax = *sp++ % ax;
内置函数

程序要有用,除了核心的逻辑外还需要输入输出,如 C 语言中我们经常使用的 printf 函数就是用于输出。但是 printf 函数的实现本身就十分复杂,如果我们的编译器要达到自举,就势必要实现 printf 之类的函数,但它又与编译器没有太大的联系,因此我们继续实现新的指令,从虚拟机的角度予以支持。

编译器中我们需要用到的函数有:exit, open, close, read, printf, malloc, memset 及memcmp。代码如下:

1
2
3
4
5
6
7
8
else if (op == EXIT) { printf("exit(%d)", *sp); return *sp;}
else if (op == OPEN) { ax = open((char *)sp[1], sp[0]); }
else if (op == CLOS) { ax = close(*sp);}
else if (op == READ) { ax = read(sp[2], (char *)sp[1], *sp); }
else if (op == PRTF) { tmp = sp + pc[1]; ax = printf((char *)tmp[-1], tmp[-2], tmp[-3], tmp[-4], tmp[-5], tmp[-6]); }
else if (op == MALC) { ax = (int)malloc(*sp);}
else if (op == MSET) { ax = (int)memset((char *)sp[2], sp[1], *sp);}
else if (op == MCMP) { ax = memcmp((char *)sp[2], (char *)sp[1], *sp);}
这里的原理是,我们的电脑上已经有了这些函数的实现,因此编译编译器时,这些函数的二进制代码就被编译进了我们的编译器,因此在我们的编译器/虚拟机上运行我们提供的这些指令时,这些函数就是可用的。换句话说就是不需要我们自己去实现了。

最后再加上一个错误判断:

1
2
3
4
else {
    printf("unknown instruction:%d\n", op);
    return -1;
}
测试

下面我们用我们的汇编写一小段程序,来计算 10+20,在 main 函数中加入下列代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(int argc, char *argv[])
{
    ax = 0;
    ...

    i = 0;
    text[i++] = IMM;
    text[i++] = 10;
    text[i++] = PUSH;
    text[i++] = IMM;
    text[i++] = 20;
    text[i++] = ADD;
    text[i++] = PUSH;
    text[i++] = EXIT;
    pc = text;

    ...
    program();
}
编译程序 gcc xc-tutor.c,运行程序:./a.out hello.c。输出

1
exit(30)
注意我们的之前的程序需要指令一个源文件,只是现在还用不着,但从结果可以看出,我们的虚拟机还是工作良好的。

小结

本章中我们回顾了计算机的内部运行原理,并仿照 x86 汇编指令设计并实现了我们自己的指令集。

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-1 [url]https://github.com/lotabout/write-a-C-interpreter[/url]
实际计算机中,添加一个新的指令需要设计许多新的电路,会增加许多的成本,但我们的需要机中,新的指令几乎不消耗资源,因此我们可以利用这一点,用更多的指令来完成更多的功能,从而简化具体的实现。
手把手教你做一个 C 语言编译器(3):词法分析器
本章我们要讲解如何构建词法分析器。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
什么是词法分析器

简而言之,词法分析器用于对源码字符串做预处理,以减少语法分析器的复杂程度。

词法分析器以源码字符串为输入,输出为标记流(token stream),即一连串的标记,每个标记通常包括: (token, token value) 即标记本身和标记的值。例如,源码中若包含一个数字 '998' ,词法分析器将输出 (Number, 998),即(数字,998)。再例如:

1
2
3
2 + 3 * (4 - 5)
=>
(Number, 2) Add (Number, 3) Multiply Left-Bracket (Number, 4) Subtract (Number, 5) Right-Bracket
通过词法分析器的预处理,语法分析器的复杂度会大大降低,这点在后面的语法分析器我们就能体会。

词法分析器与编译器

要是深入词法分析器,你就会发现,它的本质上也是编译器。我们的编译器是以标记流为输入,输出汇编代码,而词法分析器则是以源码字符串为输入,输出标记流。

                   +-------+                      +--------+
-- source code --> | lexer | --> token stream --> | parser | --> assembly
                   +-------+                      +--------+
在这个前提下,我们可以这样认为:直接从源代码编译成汇编代码是很困难的,因为输入的字符串比较难处理。所以我们先编写一个较为简单的编译器(词法分析器)来将字符串转换成标记流,而标记流对于语法分析器而言就容易处理得多了。

词法分析器的实现

由于词法分析的工作很常见,但又枯燥且容易出错,所以人们已经开发出了许多工具来生成词法分析器,如 lex, flex。这些工具允许我们通过正则表达式来识别标记。

这里注意的是,我们并不会一次性地将所有源码全部转换成标记流,原因有二:

字符串转换成标记流有时是有状态的,即与代码的上下文是有关系的。
保存所有的标记流没有意义且浪费空间。
所以实际的处理方法是提供一个函数(即前几篇中提到的 next()),每次调用该函数则返回下一个标记。

支持的标记

在全局中添加如下定义:

1
2
3
4
5
6
// tokens and classes (operators last and in precedence order)
enum {
  Num = 128, Fun, Sys, Glo, Loc, Id,
  Char, Else, Enum, If, Int, Return, Sizeof, While,
  Assign, Cond, Lor, Lan, Or, Xor, And, Eq, Ne, Lt, Gt, Le, Ge, Shl, Shr, Add, Sub, Mul, Div, Mod, Inc, Dec, Brak
};
这些就是我们要支持的标记符。例如,我们会将 = 解析为 Assign;将 == 解析为Eq;将 != 解析为 Ne 等等。

所以这里我们会有这样的印象,一个标记(token)可能包含多个字符,且多数情况下如此。而词法分析器能减小语法分析复杂度的原因,正是因为它相当于通过一定的编码(更多的标记)来压缩了源码字符串。

当然,上面这些标记是有顺序的,跟它们在 C 语言中的优先级有关,如 *(Mul) 的优先级就要高于 +(Add)。它们的具体使用在后面的语法分析中会提到。

最后要注意的是还有一些字符,它们自己就构成了标记,如右方括号 ] 或波浪号 ~等。我们不另外处理它们的原因是:

它们是单字符的,即并不是多个字符共同构成标记(如 == 需要两个字符);
它们不涉及优先级关系。
词法分析器的框架

即 next() 函数的主体:

1
2
3
4
5
6
7
8
9
10
void next() {
    char *last_pos;
    int hash;

    while (token = *src) {
        ++src;
        
// parse token here
    }
    return;
}
这里的一个问题是,为什么要用 while 循环呢?这就涉及到编译器(记得我们说过词法分析器也是某种意义上的编译器)的一个问题:如何处理错误?

对词法分析器而言,若碰到了一个我们不认识的字符该怎么处理?一般处理的方法有两种:

指出错误发生的位置,并退出整个程序
指出错误发生的位置,跳过当前错误并继续编译
这个 while 循环的作用就是跳过这些我们不识别的字符,我们同时还用它来处理空白字符。我们知道,C 语言中空格是用来作为分隔用的,并不作为语法的一部分。因此在实现中我们将它作为“不识别”的字符,这个 while 循环可以用来跳过它。

换行符

换行符和空格类似,但有一点不同,每次遇到换行符,我们需要将当前的行号加一:

1
2
3
4
5
6
7
// parse token here
...

if (token == '\n') {
    ++line;
}
...
宏定义

C 语言的宏定义以字符 # 开头,如 # include <stdio.h>。我们的编译器并不支持宏定义,所以直接跳过它们。

1
2
3
4
5
6
else if (token == '#') {
   
// skip macro, because we will not support it
    while (*src != 0 && *src != '\n') {
        src++;
    }
}
标识符与符号表

标识符(identifier)可以理解为变量名。对于语法分析而言,我们并不关心一个变量具体叫什么名字,而只关心这个变量名代表的唯一标识。例如 int a; 定义了变量a,而之后的语句 a = 10,我们需要知道这两个 a 指向的是同一个变量。

基于这个理由,词法分析器会把扫描到的标识符全都保存到一张表中,遇到新的标识符就去查这张表,如果标识符已经存在,就返回它的唯一标识。

那么我们怎么表示标识符呢?如下:

1
2
3
4
5
6
7
8
9
10
11
struct identifier {
    int token;
    int hash;
    char * name;
    int class;
    int type;
    int value;
    int Bclass;
    int Btype;
    int Bvalue;
}
这里解释一下具体的含义:

token:该标识符返回的标记,理论上所有的变量返回的标记都应该是 Id,但实际上由于我们还将在符号表中加入关键字如 if, while 等,它们都有对应的标记。
hash:顾名思义,就是这个标识符的哈希值,用于标识符的快速比较。
name:存放标识符本身的字符串。
class:该标识符的类别,如数字,全局变量或局部变量等。
type:标识符的类型,即如果它是个变量,变量是 int 型、char 型还是指针型。
value:存放这个标识符的值,如标识符是函数,刚存放函数的地址。
BXXXX:C 语言中标识符可以是全局的也可以是局部的,当局部标识符的名字与全局标识符相同时,用作保存全局标识符的信息。
由上可以看出,我们实现的词法分析器与传统意义上的词法分析器不太相同。传统意义上的符号表只需要知道标识符的唯一标识即可,而我们还存放了一些只有语法分析器才会得到的信息,如 type 。

由于我们的目标是能自举,而我们定义的语法不支持 struct,故而使用下列方式。

Symbol table:
----+-----+----+----+----+-----+-----+-----+------+------+----
.. |token|hash|name|type|class|value|btype|bclass|bvalue| ..
----+-----+----+----+----+-----+-----+-----+------+------+----
    |<---       one single identifier                --->|
即用一个整型数组来保存相关的ID信息。每个ID占用数组中的9个空间,分析标识符的相关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int token_val;               
// value of current token (mainly for number)
int *current_id,              
// current parsed ID
    *symbols;                 
// symbol table

// fields of identifier
enum {Token, Hash, Name, Type, Class, Value, BType, BClass, BValue, IdSize};

void next() {
        ...

        else if ((token >= 'a' && token <= 'z') || (token >= 'A' && token <= 'Z') || (token == '_')) {

            
// parse identifier
            last_pos = src - 1;
            hash = token;

            while ((*src >= 'a' && *src <= 'z') || (*src >= 'A' && *src <= 'Z') || (*src >= '0' && *src <= '9') || (*src == '_')) {
                hash = hash * 147 + *src;
                src++;
            }

            
// look for existing identifier, linear search
            current_id = symbols;
            while (current_id[Token]) {
                if (current_id[Hash] == hash && !memcmp((char *)current_id[Name], last_pos, src - last_pos)) {
                    
//found one, return
                    token = current_id[Token];
                    return;
                }
                current_id = current_id + IdSize;
            }

            
// store new ID
            current_id[Name] = (int)last_pos;
            current_id[Hash] = hash;
            token = current_id[Token] = Id;
            return;
        }
        ...
}
查找已有标识符的方法是线性查找 symbols 表。

数字

数字中较为复杂的一点是需要支持十进制、十六进制及八进制。逻辑也较为直接,可能唯一不好理解的是获取十六进制的值相关的代码。

1
token_val = token_val * 16 + (token & 16) + (token >= 'A' ? 9 : 0);
这里要注意的是在ASCII码中,字符a对应的十六进制值是 61, A是41,故通过(token & 16) 可以得到个位数的值。其它就不多说了,这里这样写的目的是装B(其实是抄 c4 的源代码的)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void next() {
        ...

        else if (token >= '0' && token <= '9') {
            
// parse number, three kinds: dec(123) hex(0x123) oct(017)
            token_val = token - '0';
            if (token_val) {
                if (*src == 'x' || *src == 'X') {
                    
//hex
                    token = *++src;
                    while ((token >= '0' && token <= '9') || (token >= 'a' && token <= 'f') || (token >= 'A' && token <= 'F')) {
                        token_val = token_val * 16 + (token & 16) + (token >= 'A' ? 9 : 0);
                        token = *++src;
                    }
                } else {
                    
// dec
                    while (*src >= '0' && *src <= '9') {
                        token_val = token_val*10 + *src++ - '0';
                    }
                }
            } else {
               
// oct
                while (*src >= '0' && *src <= '7') {
                    token_val = token_val*8 + *src++ - '0';
                }
            }

            token = Num;
            return;
        }

        ...
}
字符串

在分析时,如果分析到字符串,我们需要将它存放到前一篇文章中说的 data 段中。然后返回它在 data 段中的地址。另一个特殊的地方是我们需要支持转义符。例如用\n 表示换行符。由于本编译器的目的是达到自己编译自己,所以代码中并没有支持除\n 的转义符,如 \t, \r 等,但仍支持 \a 表示字符 a 的语法,如 \" 表示 "。

在分析时,我们将同时分析单个字符如 'a' 和字符串如 "a string"。若得到的是单个字符,我们以 Num 的形式返回。相关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void next() {
        ...

        else if (token == '"' || token == '\'') {
            
// parse string literal, currently, the only supported escape
            
// character is '\n', store the string literal into data.
            last_pos = data;
            while (*src != 0 && *src != token) {
                token_val = *src++;
                if (token_val == '\\') {
                    
// escape character
                    token_val = *src++;
                    if (token_val == 'n') {
                        token_val = '\n';
                    }
                }

                if (token == '"') {
                    *data++ = token_val;
                }
            }

            src++;
            
// if it is a single character, return Num token
            if (token == '"') {
                token_val = (int)last_pos;
            } else {
                token = Num;
            }

            return;
        }
}
注释

在我们的 C 语言中,只支持 // 类型的注释,不支持 /* comments */ 的注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void next() {
        ...

        else if (token == '/') {
            if (*src == '/') {
               
// skip comments
                while (*src != 0 && *src != '\n') {
                    ++src;
                }
            } else {
               
// divide operator
                token = Div;
                return;
            }
        }

        ...
}
这里我们要额外介绍 lookahead 的概念,即提前看多个字符。上述代码中我们看到,除了跳过注释,我们还可能返回除号 /(Div) 标记。

提前看字符的原理是:有一个或多个标记是以同样的字符开头的(如本小节中的注释与除号),因此只凭当前的字符我们并无法确定具体应该解释成哪一个标记,所以只能再向前查看字符,如本例需向前查看一个字符,若是 / 则说明是注释,反之则是除号。

我们之前说过,词法分析器本质上也是编译器,其实提前看字符的概念也存在于编译器,只是这时就是提前看k个“标记”而不是“字符”了。平时听到的 LL(k) 中的 k 就是需要向前看的标记的个数了。

另外,我们用词法分析器将源码转换成标记流,能减小语法分析复杂度,原因之一就是减少了语法分析器需要“向前看”的字符个数。

其它

其它的标记的解析就相对容易一些了,我们直接贴上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
void next() {
        ...

        else if (token == '=') {
            
// parse '==' and '='
            if (*src == '=') {
                src ++;
                token = Eq;
            } else {
                token = Assign;
            }
            return;
        }
        else if (token == '+') {
            
// parse '+' and '++'
            if (*src == '+') {
                src ++;
                token = Inc;
            } else {
                token = Add;
            }
            return;
        }
        else if (token == '-') {
            
// parse '-' and '--'
            if (*src == '-') {
                src ++;
                token = Dec;
            } else {
                token = Sub;
            }
            return;
        }
        else if (token == '!') {
            
// parse '!='
            if (*src == '=') {
                src++;
                token = Ne;
            }
            return;
        }
        else if (token == '<') {
            
// parse '<=', '<<' or '<'
            if (*src == '=') {
                src ++;
                token = Le;
            } else if (*src == '<') {
                src ++;
                token = Shl;
            } else {
                token = Lt;
            }
            return;
        }
        else if (token == '>') {
            
// parse '>=', '>>' or '>'
            if (*src == '=') {
                src ++;
                token = Ge;
            } else if (*src == '>') {
                src ++;
                token = Shr;
            } else {
                token = Gt;
            }
            return;
        }
        else if (token == '|') {
            
// parse '|' or '||'
            if (*src == '|') {
                src ++;
                token = Lor;
            } else {
                token = Or;
            }
            return;
        }
        else if (token == '&') {
            
// parse '&' and '&&'
            if (*src == '&') {
                src ++;
                token = Lan;
            } else {
                token = And;
            }
            return;
        }
        else if (token == '^') {
            token = Xor;
            return;
        }
        else if (token == '%') {
            token = Mod;
            return;
        }
        else if (token == '*') {
            token = Mul;
            return;
        }
        else if (token == '[') {
            token = Brak;
            return;
        }
        else if (token == '?') {
            token = Cond;
            return;
        }
        else if (token == '~' || token == ';' || token == '{' || token == '}' || token == '(' || token == ')' || token == ']' || token == ',' || token == ':') {
            
// directly return the character as token;
            return;
        }

        ...
}
代码较多,但主要逻辑就是向前看一个字符来确定真正的标记。

关键字与内置函数

虽然上面写完了词法分析器,但还有一个问题需要考虑,那就是“关键字”,例如 if,while, return 等。它们不能被作为普通的标识符,因为有特殊的含义。

一般有两种处理方法:

词法分析器中直接解析这些关键字。
在语法分析前将关键字提前加入符号表。
这里我们就采用第二种方法,将它们加入符号表,并提前为它们赋予必要的信息(还记得前面说的标识符 Token 字段吗?)。这样当源代码中出现关键字时,它们会被解析成标识符,但由于符号表中已经有了相关的信息,我们就能知道它们是特殊的关键字。

内置函数的行为也和关键字类似,不同的只是赋值的信息,在main函数中进行初始化如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// types of variable/function
enum { CHAR, INT, PTR };
int *idmain;                  
// the `main` function

void main() {
    ...

    src = "char else enum if int return sizeof while "
          "open read close printf malloc memset memcmp exit void main";

     
// add keywords to symbol table
    i = Char;
    while (i <= While) {
        next();
        current_id[Token] = i++;
    }

   
// add library to symbol table
    i = OPEN;
    while (i <= EXIT) {
        next();
        current_id[Class] = Sys;
        current_id[Type] = INT;
        current_id[Value] = i++;
    }

    next(); current_id[Token] = Char;
// handle void type
    next(); idmain = current_id;
// keep track of main

    ...
    program();
}
代码

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-2 https:
//github.com/lotabout/write-a-C-interpreter
上面的代码运行后会出现 ‘Segmentation Falt’,这是正常的,因为它会尝试运行我们上一章创建的虚拟机,但其中并没有任何汇编代码。

小结

本章我们为我们的编译器构建了词法分析器,通过本章的学习,我认为有几个要点需要强调:

词法分析器的作用是对源码字符串进行预处理,作用是减小语法分析器的复杂程度。
词法分析器本身可以认为是一个编译器,输入是源码,输出是标记流。
lookahead(k) 的概念,即向前看 k 个字符或标记。
词法分析中如何处理标识符与符号表。
下一章中,我们将介绍递归下降的语法分析器。我们下一章见。
手把手教你做一个 C 语言编译器(4):递归下降
本章我们将讲解递归下降的方法,并用它完成一个基本的四则运算的语法分析器。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
什么是递归下降

传统上,编写语法分析器有两种方法,一种是自顶向下,一种是自底自上。自顶向下是从起始非终结符开始,不断地对非终结符进行分解,直到匹配输入的终结符;自底向上是不断地将终结符进行合并,直到合并成起始的非终结符。

其中的自顶向下方法就是我们所说的递归下降。

终结符与非终结符

没有学过编译原理的话可能并不知道什么是“终结符”,“非终结符”。这里我简单介绍一下。首先是 BNF 范式,就是一种用来描述语法的语言,例如,四则运算的规则可以表示如下:

<expr> ::= <expr> + <term>
         | <expr> - <term>
         | <term>

<term> ::= <term> * <factor>
         | <term> / <factor>
         | <factor>

<factor> ::= ( <expr> )
           | Num
用尖括号 <> 括起来的就称作 非终结符 ,因为它们可以用 ::= 右侧的式子代替。| 表示选择,如 <expr> 可以是 <expr> + <term>、<expr> - <term>或 <term> 中的一种。而没有出现在::=左边的就称作 终结符 ,一般终结符对应于词法分析器输出的标记。

四则运算的递归下降

例如,我们对 3 * (4 + 2) 进行语法分析。我们假设词法分析器已经正确地将其中的数字识别成了标记 Num。

递归下降是从起始的非终结符开始(顶),本例中是 <expr>,实际中可以自己指定,不指定的话一般认为是第一个出现的非终结符。

1. <expr> => <expr>
2.           => <term>        * <factor>
3.              => <factor>     |
4.                 => Num (3)   |
5.                              => ( <expr> )
6.                                   => <expr>           + <term>
7.                                      => <term>          |
8.                                         => <factor>     |
9.                                            => Num (4)   |
10.                                                        => <factor>
11.                                                           => Num (2)
可以看到,整个解析的过程是在不断对非终结符进行替换(向下),直到遇见了终结符(底)。而我们可以从解析的过程中看出,一些非终结符如<expr>被递归地使用了。

为什么选择递归下降

从上小节对四则运算的递归下降解析可以看出,整个解析的过程和语法的 BNF 表示是二分接近的,更为重要的是,我们可以很容易地直接将 BNF 表示转换成实际的代码。方法是为每个产生式(即 非终结符 ::= ...)生成一个同名的函数。

这里会有一个疑问,就是上例中,当一个终结符有多个选择时,如何确定具体选择哪一个?如为什么用 <expr> ::= <term> * <factor> 而不是 <expr> ::= <term> / <factor> ?这就用到了上一章中提到的“向前看 k 个标记”的概念了。我们向前看一个标记,发现是 *,而这个标记足够让我们确定用哪个表达式了。

另外,递归下下降方法对 BNF 方法本身有一定的要求,否则会有一些问题,如经典的“左递归”问题。

左递归

原则上我们是不讲这么深入,但我们上面的四则运算的文法就是左递归的,而左递归的语法是没法直接使用递归下降的方法实现的。因此我们要消除左递归,消除后的文法如下:

1
2
3
4
5
6
7
8
9
10
11
12
<expr> ::= <term> <expr_tail>
<expr_tail> ::= + <term> <expr_tail>
              | - <term> <expr_tail>
              | <empty>

<term> ::= <factor> <term_tail>
<term_tail> ::= * <factor> <term_tail>
              | / <factor> <term_tail>
              | <empty>

<factor> ::= ( <expr> )
           | Num
消除左递归的相关方法,这里不再多说,请自行查阅相关的资料。

四则运算的实现

本节中我们专注语法分析器部分的实现,具体实现很容易,我们直接贴上代码,就是上述的消除左递归后的文法直接转换而来的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
int expr();

int factor() {
    int value = 0;
    if (token == '(') {
        match('(');
        value = expr();
        match(')');
    } else {
        value = token_val;
        match(Num);
    }
    return value;
}

int term_tail(int lvalue) {
    if (token == '*') {
        match('*');
        int value = lvalue * factor();
        return term_tail(value);
    } else if (token == '/') {
        match('/');
        int value = lvalue / factor();
        return term_tail(value);
    } else {
        return lvalue;
    }
}

int term() {
    int lvalue = factor();
    return term_tail(lvalue);
}

int expr_tail(int lvalue) {
    if (token == '+') {
        match('+');
        int value = lvalue + term();
        return expr_tail(value);
    } else if (token == '-') {
        match('-');
        int value = lvalue - term();
        return expr_tail(value);
    } else {
        return lvalue;
    }
}

int expr() {
    int lvalue = term();
    return expr_tail(lvalue);
}
可以看到,有了BNF方法后,采用递归向下的方法来实现编译器是很直观的。

我们把词法分析器的代码一并贴上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>

enum {Num};
int token;
int token_val;
char *line = NULL;
char *src = NULL;

void next() {
   
// skip white space
    while (*src == ' ' || *src == '\t') {
        src ++;
    }

    token = *src++;

    if (token >= '0' && token <= '9' ) {
        token_val = token - '0';
        token = Num;

        while (*src >= '0' && *src <= '9') {
            token_val = token_val*10 + *src - '0';
            src ++;
        }
        return;
    }
}

void match(int tk) {
    if (token != tk) {
        printf("expected token: %d(%c), got: %d(%c)\n", tk, tk, token, token);
        exit(-1);
    }
    next();
}
最后是main函数:

1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char *argv[])
{
    size_t linecap = 0;
    ssize_t linelen;
    while ((linelen = getline(&line, &linecap, stdin)) > 0) {
        src = line;
        next();
        printf("%d\n", expr());
    }
    return 0;
}
小结

本章中我们介绍了递归下降的方法,并用它来实现了四则运算的语法分析器。

花这么大精力讲解递归下降方法,是因为几乎所有手工编写的语法分析器都或多或少地有它的影子。换句话说,掌握了递归下降的方法,就可以应付大多数的语法分析器编写。

同时我们也用实例看到了理论(BNF 语法,左递归的消除)是如何帮助我们的工程实现的。尽管理论不是必需的,但如果能掌握它,对于提高我们的水平还是很有帮助的。
手把手教你做一个 C 语言编译器(5):变量定义
本章中我们用 EBNF 来大致描述我们实现的 C 语言的文法,并实现其中解析变量定义部分。

由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
手把手教你做一个 C 语言编译器(4):递归下降
EBNF 表示

EBNF 是对前一章提到的 BNF 的扩展,它的语法更容易理解,实现起来也更直观。但真正看起来还是很烦,如果不想看可以跳过。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program ::= {global_declaration}+

global_declaration ::= enum_decl | variable_decl | function_decl

enum_decl ::= 'enum' [id] '{' id ['=' 'num'] {',' id ['=' 'num'} '}'

variable_decl ::= type {'*'} id { ',' {'*'} id } ';'

function_decl ::= type {'*'} id '(' parameter_decl ')' '{' body_decl '}'

parameter_decl ::= type {'*'} id {',' type {'*'} id}

body_decl ::= {variable_decl}, {statement}

statement ::= non_empty_statement | empty_statement

non_empty_statement ::= if_statement | while_statement | '{' statement '}'
                     | 'return' expression | expression ';'

if_statement ::= 'if' '(' expression ')' statement ['else' non_empty_statement]

while_statement ::= 'while' '(' expression ')' non_empty_statement
其中 expression 相关的内容我们放到后面解释,主要原因是我们的语言不支持跨函数递归,而为了实现自举,实际上我们也不能使用递归(亏我们说了一章的递归下降)。

P.S. 我是先写程序再总结上面的文法,所以实际上它们间的对应关系并不是特别明显。

解析变量的定义

本章要讲解的就是上节文法中的 enum_decl 和 variable_decl 部分。

program()

首先是之前定义过的 program 函数,将它改成:

1
2
3
4
5
6
7
void program() {
   
// get next token
    next();
    while (token > 0) {
        global_declaration();
    }
}
我知道 global_declaration 函数还没有出现过,但没有关系,采用自顶向下的编写方法就是要不断地实现我们需要的内容。下面是 global_declaration 函数的内容:

global_declaration()

即全局的定义语句,包括变量定义,类型定义(只支持枚举)及函数定义。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
int basetype;   
// the type of a declaration, make it global for convenience
int expr_type;   
// the type of an expression

void global_declaration() {
   
// global_declaration ::= enum_decl | variable_decl | function_decl
   
//
   
// enum_decl ::= 'enum' [id] '{' id ['=' 'num'] {',' id ['=' 'num'} '}'
   
//
   
// variable_decl ::= type {'*'} id { ',' {'*'} id } ';'
   
//
   
// function_decl ::= type {'*'} id '(' parameter_decl ')' '{' body_decl '}'

    int type;
// tmp, actual type for variable
    int i;
// tmp

    basetype = INT;

   
// parse enum, this should be treated alone.
    if (token == Enum) {
        
// enum [id] { a = 10, b = 20, ... }
        match(Enum);
        if (token != '{') {
            match(Id);
// skip the [id] part
        }
        if (token == '{') {
            
// parse the assign part
            match('{');
            enum_declaration();
            match('}');
        }

        match(';');
        return;
    }

   
// parse type information
    if (token == Int) {
        match(Int);
    }
    else if (token == Char) {
        match(Char);
        basetype = CHAR;
    }

   
// parse the comma seperated variable declaration.
    while (token != ';' && token != '}') {
        type = basetype;
        
// parse pointer type, note that there may exist `int ****x;`
        while (token == Mul) {
            match(Mul);
            type = type + PTR;
        }

        if (token != Id) {
            
// invalid declaration
            printf("%d: bad global declaration\n", line);
            exit(-1);
        }
        if (current_id[Class]) {
            
// identifier exists
            printf("%d: duplicate global declaration\n", line);
            exit(-1);
        }
        match(Id);
        current_id[Type] = type;

        if (token == '(') {
            current_id[Class] = Fun;
            current_id[Value] = (int)(text + 1);
// the memory address of function
            function_declaration();
        } else {
            
// variable declaration
            current_id[Class] = Glo;
// global variable
            current_id[Value] = (int)data;
// assign memory address
            data = data + sizeof(int);
        }

        if (token == ',') {
            match(',');
        }
    }
    next();
}
看了上面的代码,能大概理解吗?这里我们讲解其中的一些细节。

向前看标记 :其中的 if (token == xxx) 语句就是用来向前查看标记以确定使用哪一个产生式,例如只要遇到 enum 我们就知道是需要解析枚举类型。而如果只解析到类型,如 int identifier 时我们并不能确定 identifier 是一个普通的变量还是一个函数,所以还需要继续查看后续的标记,如果遇到 ( 则可以断定是函数了,反之则是变量。

变量类型的表示 :我们的编译器支持指针类型,那意味着也支持指针的指针,如 int **data;。那么我们如何表示指针类型呢?前文中我们定义了支持的类型:

1
2
// types of variable/function
enum { CHAR, INT, PTR };
所以一个类型首先有基本类型,如 CHAR 或 INT,当它是一个指向基本类型的指针时,如int *data,我们就将它的类型加上 PTR 即代码中的:type = type + PTR;。同理,如果是指针的指针,则再加上 PTR。

enum_declaration()

用于解析枚举类型的定义。主要的逻辑用于解析用逗号(,)分隔的变量,值得注意的是在编译器中如何保存枚举变量的信息。

即我们将该变量的类别设置成了 Num,这样它就成了全局的常量了,而注意到上节中,正常的全局变量的类别则是 Glo,类别信息在后面章节中解析 expression 会使用到。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void enum_declaration() {
   
// parse enum [id] { a = 1, b = 3, ...}
    int i;
    i = 0;
    while (token != '}') {
        if (token != Id) {
            printf("%d: bad enum identifier %d\n", line, token);
            exit(-1);
        }
        next();
        if (token == Assign) {
            
// like {a=10}
            next();
            if (token != Num) {
                printf("%d: bad enum initializer\n", line);
                exit(-1);
            }
            i = token_val;
            next();
        }

        current_id[Class] = Num;
        current_id[Type] = INT;
        current_id[Value] = i++;

        if (token == ',') {
            next();
        }
    }
}
其它

其中的 function_declaration 函数我们将放到下一章中讲解。match 函数是一个辅助函数:

1
2
3
4
5
6
7
8
void match(int tk) {
    if (token == tk) {
        next();
    } else {
        printf("%d: expected token: %d\n", line, tk);
        exit(-1);
    }
}
它将 next 函数包装起来,如果不是预期的标记则报错并退出。

代码

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-3 https:
//github.com/lotabout/write-a-C-interpreter
本章的代码还无法正常运行,因为还有许多功能没有实现,但如果有兴趣的话,可以自己先试着去实现它。

小结

本章的内容应该不难,除了开头的 EBNF 表达式可能相对不好理解一些,但如果你查看了 EBNF 的具体表示方法后就不难理解了。

剩下的内容就是按部就班地将 EBNF 的产生式转换成函数的过程,如果你理解了上一章中的内容,相信这部分也不难理解。

下一章中我们将介绍如何解析函数的定义,敬请期待。
手把手教你做一个 C 语言编译器(6):函数定义
由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。本章讲解函数定义相关的内容。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
手把手教你做一个 C 语言编译器(4):递归下降
手把手教你做一个 C 语言编译器(5):变量定义
EBNF 表示

这是上一章的 EBNF 方法中与函数定义相关的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
variable_decl ::= type {'*'} id { ',' {'*'} id } ';'

function_decl ::= type {'*'} id '(' parameter_decl ')' '{' body_decl '}'

parameter_decl ::= type {'*'} id {',' type {'*'} id}

body_decl ::= {variable_decl}, {statement}

statement ::= non_empty_statement | empty_statement

non_empty_statement ::= if_statement | while_statement | '{' statement '}'
                     | 'return' expression | expression ';'

if_statement ::= 'if' '(' expression ')' statement ['else' non_empty_statement]

while_statement ::= 'while' '(' expression ')' non_empty_statement
解析函数的定义

上一章的代码中,我们已经知道了什么时候开始解析函数的定义,相关的代码如下:

1
2
3
4
5
6
7
...
if (token == '(') {
    current_id[Class] = Fun;
    current_id[Value] = (int)(text + 1);
// the memory address of function
    function_declaration();
} else {
...
即在这断代码之前,我们已经为当前的标识符(identifier)设置了正确的类型,上面这断代码为当前的标识符设置了正确的类别(Fun),以及该函数在代码段(text segment)中的位置。接下来开始解析函数定义相关的内容:parameter_decl 及 body_decl。

函数参数与汇编代码

现在我们要回忆如何将“函数”转换成对应的汇编代码,因为这决定了在解析时我们需要哪些相关的信息。考虑下列函数:

1
2
3
4
5
6
int demo(int param_a, int *param_b) {
    int local_1;
    char local_2;

    ...
}
那么它应该被转换成什么样的汇编代码呢?在思考这个问题之前,我们需要了解当 demo函数被调用时,计算机的栈的状态,如下(参照第三章讲解的虚拟机):

|    ....       | high address
+---------------+
| arg: param_a  |    new_bp + 3
+---------------+
| arg: param_b  |    new_bp + 2
+---------------+
|return address |    new_bp + 1
+---------------+
| old BP        | <- new BP
+---------------+
| local_1       |    new_bp - 1
+---------------+
| local_2       |    new_bp - 2
+---------------+
|    ....       |  low address
这里最为重要的一点是,无论是函数的参数(如 param_a)还是函数的局部变量(如local_1)都是存放在计算机的 栈 上的。因此,与存放在 数据段 中的全局变量不同,在函数内访问它们是通过 new_bp 指针和对应的位移量进行的。因此,在解析的过程中,我们需要知道参数的个数,各个参数的位移量。

函数定义的解析

这相当于是整个函数定义的语法解析的框架,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void function_declaration() {
   
// type func_name (...) {...}
   
//               | this part

    match('(');
    function_parameter();
    match(')');
    match('{');
    function_body();
   
//match('}');                 //  ①

   
// ②
   
// unwind local variable declarations for all local variables.
    current_id = symbols;
    while (current_id[Token]) {
        if (current_id[Class] == Loc) {
            current_id[Class] = current_id[BClass];
            current_id[Type]  = current_id[BType];
            current_id[Value] = current_id[BValue];
        }
        current_id = current_id + IdSize;
    }
}
其中①中我们没有消耗最后的}字符。这么做的原因是:variable_decl 与 function_decl是放在一起解析的,而 variable_decl 是以字符 ; 结束的。而 function_decl 是以字符 }结束的,若在此通过 match 消耗了 ‘;’ 字符,那么外层的 while 循环就没法准确地知道函数定义已经结束。所以我们将结束符的解析放在了外层的 while 循环中。

而②中的代码是用于将符号表中的信息恢复成全局的信息。这是因为,局部变量是可以和全局变量同名的,一旦同名,在函数体内局部变量就会覆盖全局变量,出了函数体,全局变量就恢复了原先的作用。这段代码线性地遍历所有标识符,并将保存在 BXXX 中的信息还原。

解析参数

1
parameter_decl ::= type {'*'} id {',' type {'*'} id}
解析函数的参数就是解析以逗号分隔的一个个标识符,同时记录它们的位置与类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int index_of_bp;
// index of bp pointer on stack

void function_parameter() {
    int type;
    int params;
    params = 0;
    while (token != ')') {
        
// ①

        
// int name, ...
        type = INT;
        if (token == Int) {
            match(Int);
        } else if (token == Char) {
            type = CHAR;
            match(Char);
        }

        
// pointer type
        while (token == Mul) {
            match(Mul);
            type = type + PTR;
        }

        
// parameter name
        if (token != Id) {
            printf("%d: bad parameter declaration\n", line);
            exit(-1);
        }
        if (current_id[Class] == Loc) {
            printf("%d: duplicate parameter declaration\n", line);
            exit(-1);
        }

        match(Id);

        
//②
        
// store the local variable
        current_id[BClass] = current_id[Class]; current_id[Class]  = Loc;
        current_id[BType]  = current_id[Type];  current_id[Type]   = type;
        current_id[BValue] = current_id[Value]; current_id[Value]  = params++;   
// index of current parameter

        if (token == ',') {
            match(',');
        }
    }

   
// ③
    index_of_bp = params+1;
}
其中①与全局变量定义的解析十分一样,用于解析该参数的类型。

而②则与上节中提到的“局部变量覆盖全局变量”相关,先将全局变量的信息保存(无论是是否真的在全局中用到了这个变量)在 BXXX 中,再赋上局部变量相关的信息,如 Value 中存放的是参数的位置(是第几个参数)。

③则与汇编代码的生成有关,index_of_bp 就是前文提到的 new_bp 的位置。

函数体的解析

我们实现的 C 语言与现代的 C 语言不太一致,我们需要所有的变量定义出现在所有的语句之前。函数体的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
void function_body() {
   
// type func_name (...) {...}
   
//                   -->|   |<--

   
// ... {
   
// 1. local declarations
   
// 2. statements
   
// }

    int pos_local;
// position of local variables on the stack.
    int type;
    pos_local = index_of_bp;

   
// ①
    while (token == Int || token == Char) {
        
// local variable declaration, just like global ones.
        basetype = (token == Int) ? INT : CHAR;
        match(token);

        while (token != ';') {
            type = basetype;
            while (token == Mul) {
                match(Mul);
                type = type + PTR;
            }

            if (token != Id) {
               
// invalid declaration
                printf("%d: bad local declaration\n", line);
                exit(-1);
            }
            if (current_id[Class]) {
               
// identifier exists
                printf("%d: duplicate local declaration\n", line);
                exit(-1);
            }
            match(Id);

            
// store the local variable
            current_id[BClass] = current_id[Class]; current_id[Class]  = Loc;
            current_id[BType]  = current_id[Type];  current_id[Type]   = type;
            current_id[BValue] = current_id[Value]; current_id[Value]  = ++pos_local;   
// index of current parameter

            if (token == ',') {
                match(',');
            }
        }
        match(';');
    }

   
// ②
   
// save the stack size for local variables
    *++text = ENT;
    *++text = pos_local - index_of_bp;

   
// statements
    while (token != '}') {
        statement();
    }

   
// emit code for leaving the sub function
    *++text = LEV;
}
其中①用于解析函数体内的局部变量的定义,代码与全局的变量定义几乎一样。

而②则用于生成汇编代码,我们在第三章的虚拟机中提到过,我们需要在栈上为局部变量预留空间,这两行代码起的就是这个作用。

代码

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-4 https:
//github.com/lotabout/write-a-C-interpreter
本章的代码依旧无法运行,还有两个重要函数没有完成:statement 及 expression,感兴趣的话可以尝试自己实现它们。

小结

本章中我们用了不多的代码完成了函数定义的解析。大部分的代码依旧是用于解析变量:参数和局部变量,而它们的逻辑和全局变量的解析几乎一致,最大的区别就是保存的信息不同。

当然,要理解函数定义的解析过程,最重要的是理解我们会为函数生成怎样的汇编代码,因为这决定了我们需要从解析中获取什么样的信息(例如参数的位置,个数等),而这些可能需要你重新回顾一下“虚拟机”这一章,或是重新学习学习汇编相关的知识。

下一章中我们将讲解最复杂的表达式的解析,同时也是整个编译器最后的部分,敬请期待。
手把手教你做一个 C 语言编译器(7):语句
整个编译器还剩下最后两个部分:语句和表达式的解析。它们的内容比较多,主要涉及如何将语句和表达式编译成汇编代码。这章讲解语句的解析,相对于表达式来说它还是较为容易的。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
手把手教你做一个 C 语言编译器(4):递归下降
手把手教你做一个 C 语言编译器(5):变量定义
手把手教你做一个 C 语言编译器(6):函数定义
语句

C 语言区分“语句”(statement)和“表达式”(expression)两个概念。简单地说,可以认为语句就是表达式加上末尾的分号。

在我们的编译器中共识别 6 种语句:

if (...) <statement> [else <statement>]
while (...) <statement>
{ <statement> }
return xxx;
<empty statement>;
expression; (expression end with semicolon)
它们的语法分析都相对容易,重要的是去理解如何将这些语句编译成汇编代码,下面我们逐一解释。

IF 语句

IF 语句的作用是跳转,跟据条件表达式决定跳转的位置。我们看看下面的伪代码:

1
2
3
4
5
6
7
8
9
if (...) <statement> [else <statement>]

  if (<cond>)                   <cond>
                                JZ a
    <true_statement>   ===>     <true_statement>
  else:                         JMP b
a:                           a:
    <false_statement>           <false_statement>
b:                           b:
对应的汇编代码流程为:

执行条件表达式 <cond>。
如果条件失败,则跳转到 a 的位置,执行 else 语句。这里 else 语句是可以省略的,此时 a 和 b 都指向 IF 语句后方的代码。
因为汇编代码是顺序排列的,所以如果执行了 true_statement,为了防止因为顺序排列而执行了 false_statement,所以需要无条件跳转 JMP b。
对应的 C 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (token == If) {
    match(If);
    match('(');
    expression(Assign);  
// parse condition
    match(')');

    *++text = JZ;
    b = ++text;

    statement();         
// parse statement
    if (token == Else) {
// parse else
        match(Else);

        
// emit code for JMP B
        *b = (int)(text + 3);
        *++text = JMP;
        b = ++text;

        statement();
    }

    *b = (int)(text + 1);
}
While 语句

While 语句比 If 语句简单,它对应的汇编代码如下:

1
2
3
4
5
6
a:                     a:
   while (<cond>)        <cond>
                         JZ b
    <statement>          <statement>
                         JMP a
b:                     b:
没有什么值得说明的内容,它的 C 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
else if (token == While) {
    match(While);

    a = text + 1;

    match('(');
    expression(Assign);
    match(')');

    *++text = JZ;
    b = ++text;

    statement();

    *++text = JMP;
    *++text = (int)a;
    *b = (int)(text + 1);
}
Return 语句

Return 唯一特殊的地方是:一旦遇到了 Return 语句,则意味着函数要退出了,所以需要生成汇编代码 LEV 来表示退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
else if (token == Return) {
   
// return [expression];
    match(Return);

    if (token != ';') {
        expression(Assign);
    }

    match(';');

   
// emit code for return
    *++text = LEV;
}
其它语句

其它语句并不直接生成汇编代码,所以不多做说明,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
else if (token == '{') {
   
// { <statement> ... }
    match('{');

    while (token != '}') {
        statement();
    }

    match('}');
}
else if (token == ';') {
   
// empty statement
    match(';');
}
else {
   
// a = b; or function_call();
    expression(Assign);
    match(';');
}
代码

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-5 https:
//github.com/lotabout/write-a-C-interpreter
本章的代码依旧无法运行,还剩最后一部分没有完成:expression。

小结

本章讲解了如何将语句编译成汇编代码,内容相对容易一些,关键就是去理解汇编代码的执行原理。

同时值得一提的是,编译器的语法分析部分其实是很简单的,而真正的难点是如何在语法分析时收集足够多的信息,最终把源代码转换成目标代码(汇编)。我认为这也是初学者实现编译器的一大难点,往往比词法分析/语法分析更困难。

所以建议如果没有学过汇编,可以学习学习,它本身不难,但对理解计算机的原理有很大帮助。
手把手教你做一个 C 语言编译器(8):表达式
整个编译器还剩下最后两个部分:语句和表达式的解析。它们的内容比较多,主要涉及如何将语句和表达式编译成汇编代码。这章讲解语句的解析,相对于表达式来说它还是较为容易的。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
手把手教你做一个 C 语言编译器(4):递归下降
手把手教你做一个 C 语言编译器(5):变量定义
手把手教你做一个 C 语言编译器(6):函数定义
手把手教你做一个 C 语言编译器(7):语句
语句

C 语言区分“语句”(statement)和“表达式”(expression)两个概念。简单地说,可以认为语句就是表达式加上末尾的分号。

在我们的编译器中共识别 6 种语句:

if (...) <statement> [else <statement>]
while (...) <statement>
{ <statement> }
return xxx;
<empty statement>;
expression; (expression end with semicolon)
它们的语法分析都相对容易,重要的是去理解如何将这些语句编译成汇编代码,下面我们逐一解释。

IF 语句

IF 语句的作用是跳转,跟据条件表达式决定跳转的位置。我们看看下面的伪代码:

1
2
3
4
5
6
7
8
9
if (...) <statement> [else <statement>]

  if (<cond>)                   <cond>
                                JZ a
    <true_statement>   ===>     <true_statement>
  else:                         JMP b
a:                           a:
    <false_statement>           <false_statement>
b:                           b:
对应的汇编代码流程为:

执行条件表达式 <cond>。
如果条件失败,则跳转到 a 的位置,执行 else 语句。这里 else 语句是可以省略的,此时 a 和 b 都指向 IF 语句后方的代码。
因为汇编代码是顺序排列的,所以如果执行了 true_statement,为了防止因为顺序排列而执行了 false_statement,所以需要无条件跳转 JMP b。
对应的 C 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (token == If) {
    match(If);
    match('(');
    expression(Assign);  
// parse condition
    match(')');

    *++text = JZ;
    b = ++text;

    statement();         
// parse statement
    if (token == Else) {
// parse else
        match(Else);

        
// emit code for JMP B
        *b = (int)(text + 3);
        *++text = JMP;
        b = ++text;

        statement();
    }

    *b = (int)(text + 1);
}
While 语句

While 语句比 If 语句简单,它对应的汇编代码如下:

1
2
3
4
5
6
a:                     a:
   while (<cond>)        <cond>
                         JZ b
    <statement>          <statement>
                         JMP a
b:                     b:
没有什么值得说明的内容,它的 C 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
else if (token == While) {
    match(While);

    a = text + 1;

    match('(');
    expression(Assign);
    match(')');

    *++text = JZ;
    b = ++text;

    statement();

    *++text = JMP;
    *++text = (int)a;
    *b = (int)(text + 1);
}
Return 语句

Return 唯一特殊的地方是:一旦遇到了 Return 语句,则意味着函数要退出了,所以需要生成汇编代码 LEV 来表示退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
else if (token == Return) {
   
// return [expression];
    match(Return);

    if (token != ';') {
        expression(Assign);
    }

    match(';');

   
// emit code for return
    *++text = LEV;
}
其它语句

其它语句并不直接生成汇编代码,所以不多做说明,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
else if (token == '{') {
   
// { <statement> ... }
    match('{');

    while (token != '}') {
        statement();
    }

    match('}');
}
else if (token == ';') {
   
// empty statement
    match(';');
}
else {
   
// a = b; or function_call();
    expression(Assign);
    match(';');
}
代码

本章的代码可以在 Github 上下载,也可以直接 clone

1
git clone -b step-5 https:
//github.com/lotabout/write-a-C-interpreter
本章的代码依旧无法运行,还剩最后一部分没有完成:expression。

小结

本章讲解了如何将语句编译成汇编代码,内容相对容易一些,关键就是去理解汇编代码的执行原理。

同时值得一提的是,编译器的语法分析部分其实是很简单的,而真正的难点是如何在语法分析时收集足够多的信息,最终把源代码转换成目标代码(汇编)。我认为这也是初学者实现编译器的一大难点,往往比词法分析/语法分析更困难。

所以建议如果没有学过汇编,可以学习学习,它本身不难,但对理解计算机的原理有很大帮助。
手把手教你做一个 C 语言编译器(9):总结
恭喜你完成了自己的 C 语言编译器,本章中我们发一发牢骚,说一说编写编译器值得注意的一些问题;编写编译器时遇到的一些难题。

本系列:

手把手教你做一个 C 语言编译器(0):前言
手把手教你做一个 C 语言编译器(1):设计
手把手教你做一个 C 语言编译器(2):虚拟机
手把手教你做一个 C 语言编译器(3):词法分析器
手把手教你做一个 C 语言编译器(4):递归下降
手把手教你做一个 C 语言编译器(5):变量定义
手把手教你做一个 C 语言编译器(6):函数定义
手把手教你做一个 C 语言编译器(7):语句
手把手教你做一个 C 语言编译器(8):表达式
虚拟机与目标代码

整个系列的一开始,我们就着手虚拟机的实现。不知道你是否有同感,这部分对于整个编译器的编写其实是十分重要的。我认为至少占了重要程度的50%。

这里要说明这样一个观点,学习编译原理时常常着眼于词法分析和语法分析,而忽略了同样重要的代码生成。对于学习或考试而言或许可以,但实际编译项目时,最为重要的是能“跑起来”,所以我们需要给予代码生成高度的重视。

同时我们也看到,在后期解析语句和表达式时,难点已经不再是语法分析了,而是如何为运算符生成相应的汇编代码。

词法分析

我们用了很暴力的手段编写了我们的词法分析器,我认为这并无不可。

但你依旧可以学习相关的知识,了解自动生成词法分析器的原理,它涉及到了“正则表达式”,“状态机”等等知识。相信这部分的知识能够很大程度上提高你的编程水平。

同时,如果今后你仍然想编写编译器,不妨试试这些自动生成工具。

语法分析

长期以来,语法分析对我而言一直是迷一样的存在,直到真正用递归下降的方式实现了一个。

我们用了专门的一章讲解了“递归下降”与 BNF 文法的关系。希望能减少你对理论的厌恶。至少,实现起来并不是太难。

如果有兴趣,可以学习学习这些文法,因为已经有许多自动生成的工具支持它们。这样你就不需要重复造轮子。可以看看 yacc 等工具,更先进的版本是 bsion。同时其它语言也有许多类似的支持。

题外话,最近知道了一个叫“PEG 文法”的表示方法,无论是读起来,还是实现起来,都比 BNF 要容易,你也可以学习看看。

关于编代码

这也是我自己的感慨吧。无论多好的教程,想要完全理解它,最好的方式恐怕还是要自己实现它。

只是在编写代码的过程中,我们会遇到许多的挫折,例如需要考虑许多细节,或是调试起来十分困难。但也只有真正静下心来去克服它,我们才能有所成长吧。

例如在编写表达式的解析时,大量重复的代码特别让人崩溃。还有就是调试编译器,简直痛苦地无话可说。

P.S. 如果你按这个系列自己编写代码,记得事先写一些用于输出汇编代码的函数,很有帮助的。

还有就是写这个系列的文章,开始的冲动过了之后,每写一篇都特别心烦,希望文章本身没有受我的这种情绪影响吧。

结语

编程有趣又无趣,只有身在其中的我们才能体会吧。
作者: zzz19760225     时间: 2016-2-2 23:33    标题: 4学习较底层编程:动手写一个C语言编译器

学习较底层编程:动手写一个C语言编译器

2013/07/19 · C/C++, 开发 · 1 评论 · C语言, 编译器
分享到:
本文由 伯乐在线 - 菜鸟浮出水 翻译。未经许可,禁止转载!
英文出处:Wilfred Hughes。欢迎加入翻译组。
动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。

编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧可用的编译器却不是这么困难。

秘诀就是首先去找到一个最小的可用工程,然后把你想要的特性添加进去。这个方法也是Abdulaziz Ghuloum在他那篇著名的论文“一种构造编译器的捷径”里所提到的办法。不过这个办法确实可行。你只需要按照这篇论文中的第一步来操作,就可以得到一个真正可用的编译器!当然,它只能编译程序语言中的非常小的子集,但是它确实是一个真实可用的编译器。你可以随意的扩展这个编译器,然后从中学到更多更深的知识。

受到这篇文章的鼓舞,我就写了一个C编译器。从某种意义上来说这比写一个scheme的编译器要困难一些(因为你必须去解析C那复杂的语法),但是在某些方面又很便利(你不需要去处理运行时类型)。要写这样一个编译器,你只需要从你那个可用的最小的编译器开始。

对于我写的编译器来说,我把它叫 babyc,我选了这段代码来作为我需要运行的第一个程序:

int main() {
    return 2;
}
没有变量,没有函数调用,没有额外的依赖,甚至连if语句,循环语句都没有,一切看起来是那么简单。

我们首先需要解析这段代码。我们将使用 Flex 和 Bison 来做到这点。这里有怎么用的例子可以参考,幸好我们的语法是如此简单,下面就是词法分析器:

"{" { return '{'; }
"}" { return '}'; }
"(" { return '('; }
")" { return ')'; }
";" { return ';'; }
[0-9]+ { return NUMBER; }
"return" { return RETURN; }
"int" { return TYPE; }
"main" { return IDENTIFIER; }
这里是语法分析器:

function:
        TYPE IDENTIFIER '(' ')' '{' expression '}'
        ;

expression:
        RETURN NUMBER ';'
        ;
最终,我们需要生成一些汇编代码。我们将使用32位的X86汇编,因为它非常的通用而且可以很容易的运行在你的机器上。这里有X86汇编的相关网站。

下面就是我们需要生成的汇编代码:

.text
        .global _start # Tell the loader we want to start at _start.

_start:
        movl    $2,%ebx # The argument to our system call.
        movl    $1,%eax # The system call number of sys_exit is 1.
        int     $0x80 # Send an interrupt
然后加上上面的词法语法分析代码,把这段汇编代码写进一个文件里。恭喜你!你已经是一个编译器的编写者了!

Babyc 就是这样诞生的,你可以在这里看到它最开始的样子。

当然,如果汇编代码没办法运行也是枉然。让我们来用编译器生成我们所希望的真正的汇编代码。

# Here's the file we want to compile.
$ cat return_two.c
#include <stdio.h>

int main() {
    return 2;
}

# Run the compiler with this file.
$ ./babyc return_two.c
Written out.s.

# Check the output looks sensible.
$ cat out.s
.text
    .global _start

_start:
    movl    $2, %ebx
    movl    $1, %eax
    int     $0x80
非常棒!接着让我们来真正的运行一下编译之后代码来确保它能得到我们所想的结果。

# Assemble the file. We explicitly assemble as 32-bit
# to avoid confusion on x86_64 machines.
$ as out.s -o out.o --32

# Link the file, again specifying 32-bit.
$ ld -m elf_i386 -s -o out out.o

# Run it!
$ ./out

# What was the return code?
$ echo $?
2 # Woohoo!
我们踏出了第一步,接下去怎么做就全看你了。你可以按照那篇文章所指导的全部做一遍,然后制作一个更加复杂的编译器。你需要去写一个更加精巧的语法树来生成汇编代码。接下去的几步分别是:(1)允许返回任意的值(比如,return 3; 一些可执行代码);(2)添加对“非”的支持(比如,return ~1; 一些可执行代码)。每一个额外的特性都可以教你关于C语言的更多知识,编译器到底是怎么执行的,以及世界上其他编写编译器的人是如何想的。

这是构建 babyc 的方法。Babyc 现在已经拥有了if语句,循环,变量以及最基础的数据结构。欢迎你来check out它的代码,但是我希望看完我的文章你能够自己动手写一个。

不要害怕底层的一些事情。这是一个非常奇妙的世界。
作者: zzz19760225     时间: 2016-2-3 01:07    标题: 5自制编译器:语法分析器 6楼

自制编译器:语法分析器(一)
2013-04-29 22:45 3502人阅读 评论(0) 收藏 举报
分类:  自制Compiler(7)  
版权声明:本文为博主原创文章,未经博主允许不得转载。

感觉语法分析器在编译器前端是一个较为庞大的东西,因此打算分两篇网志来描述,第一篇着重描述思想,第二篇具体论述实现。

1、语法分析器要做什么
在编写任何一个东西的的时候,都要先弄明白这个玩意儿是做什么的,接受什么输入,产生什么输出。
一个语法分析器要接受词法分析器所产生的词素作为输入,产生一个抽象语法树给中间代码生成器,然后再由中间代码生成器生成中间代码并递交给编译器后端。当然在某些理解中可以把抽象语法树就当做是一种中间代码的表示形式,直接递交给后端。不管怎么说,总之就是语法分析器是一个生成抽象语法树的东西。
值得注意的是,语法分析器不仅要生成抽象语法树,而且还要在这个生成过程中找出各种语法错误并生成和维护符号表。

2、符号表
什么是符号表?符号表有什么用?
所谓符号表就是一个记录各种标识符(也就是终结符号id,词素id)及其属性的表,比如记录一个int变量x的类型为int,它的作用域,记录一个函数名,记录其函数类型,参数列表等。
符号表有作用域,比如一段简单的代码:
[java] view plain copy
public void function()  
{  
   int i=0;  
   while(true)  
   {  
      int i=1;  
   }  
}  
因此一个符号表的构造一定是一个树状结构,我们在编译器中用以下结构来描述一个符号表:
[java] view plain copy
package ravaComplier.symTable;  
import java.util.*;  
public class SymTable {  
    private SymTable fatherSymTable;  
    private ArrayList<SymTable> blockSymTables;  
    private HashMap<String,Symbol> table;  
    private String blockid;  
    public SymTable(SymTable st,String str)  
    {  
        fatherSymTable=st;  
        blockid=str;  
        blockSymTables=new ArrayList<SymTable>();  
        table=new HashMap<String,Symbol>();  
    }  
    public void addSym(Symbol sym)  
    {  
        table.put(sym.id, sym);  
    }  
    public Symbol getSym(String id)  
    {  
        Symbol result=table.get(id);  
        if(result==null && fatherSymTable!=null)  
        {  
            return fatherSymTable.getSym(id);  
        }  
        return result;  
    }  
    public void addSymTable(SymTable st)  
    {  
        blockSymTables.add(st);  
    }  
}  
代码很简单以至于注释都懒得写了。
通过fatherSymTable来记录此符号表的父表,用于不断的向上回溯查找符号(getSym)使用。
blockid算是给此表一个id,用于打印调试信息时使用。
addSym在此表增加符号。除此之外还有个addSymTables来加入子表。
另外此类还重载了toString()方法,用于debug信息,限于篇幅这个方法没贴到网志里,可在我上传的资源里拿到完整的源文件。
也许在之后的分析描述写代码的过程中我会发现需要给这个类添加新的函数,到那时再对此类进行补充。
接下来看看简单的Symbol类,也就是表示一个符号的类:
[java] view plain copy
package ravaComplier.symTable;  
  
public class Symbol {  
    public String id;  
    public int type;  
    public Object value;  
    public Symbol(String i,int t,Object v)  
    {  
        id=i;  
        type=t;  
        value=v;  
    }  
    public static int TYPE_CLASSNAME=0;  
    public static int TYPE_MEMBERVAR=1;  
    public static int TYPE_LOCALVAR=2;  
    public static int TYPE_FUNCNAME=3;  
    public static int TYPE_CONSFUNC=4;  
}  
分为3个域,id,也就是标识符,type,枚举值已列出,value,根据不用的枚举值定义了不同的value,之后若用到了再贴代码吧。
总共分为5类符号:类名、成员变量、局部变量、函数名和构造函数名。
当然若之后根据需要,或许会使用新的符号也可以灵活的添加。

3、语法树的表示
一棵语法树不能使用普通的树结构因为每个不同的节点的行为、值太多且不同。语法树中的节点为非终结符号或者终结符号,对于其中的id,我们就让它指向符号表中的符号即可,对于非终结符号,每个非终结符号我们都建立一个新的类来描述其行为,对于非id的终结符号,其信息要么不记录(比如无意义的分好括号等),要么简单记录其类型(比如各种运算符)。
所以这种情况下每一个节点的建立都比较灵活,下面举两个例子:
对于产生式:ops --> bitop | logiop | artmop | cprop
我们建立如下的类来描述ops:
[java] view plain copy
package ravaComplier.syntax.nodes;  
  
public class ops {  
    private int type;  
    private Object value; //must be bitop,logiop,artmop,cprop  
    public ops()  
    {  
        //not implements  
    }  
    public static int TYPE_BITOP=0;  
    public static int TYPE_LOGIOP=1;  
    public static int TYPE_ARTMOP=2;  
    public static int TYPE_CPROP=3;  
}  
int描述运算符类型,然后根据响应的类型让value为具体的运算符类。接着给出cprop的类:
[java] view plain copy
package ravaComplier.syntax.nodes;  
  
public class cprop {  
    public cprop()  
    {  
        //not implemets  
    }  
    private int type;  
    public static int  TYPE_GREATER = 0;//>  
    public static int TYPE_GREATEREQUAL=1;//>=;  
    public static int TYPE_LESS=2;//<;  
    public static int TYPE_LESSEQUEAL=3;//<=;  
    public static int TYPE_EQUAL=4;//==  
}  
这是一个终结符,所以只有一个域来记录运算符的类型。
本篇文章到此就结束了,下篇文章讲着重分析语法树的展开过程。

自制编译器:语法分析器(二)
2013-05-16 23:13 5183人阅读 评论(1) 收藏 举报
分类:  自制Compiler(7)  
版权声明:本文为博主原创文章,未经博主允许不得转载。
这篇博文拖了好久才写完,其一是语法分析器本身的难度实在有点超出我的预料,以至于反复重构多次才完成,其二是因为弄了个xbox玩,占用了一部分的课余时间= =!。
本篇博文将分为以下几个部分来描述一下语法分析器的具体实现,理论、部分典型节点与结果。

一、语法制导翻译、LL与LL(X)语法、左递归等其它
为什么要写一个语法分析器?语法分析器的作用不仅仅是来检查词素列表中的序列是否是一个我们语言的语句,更重要的是只有借助语法分析器得到的抽象语法树,才能够生成中间代码或者具体的目标代码,这个过程叫做语法制导翻译(syntax-directed translation)。在紫龙书(编译原理第二版)的封面上,一个拿盾的骑士正在和一个喷火龙决斗,其中龙的身上写的是Complexity of Complier Design,而骑士的盾上写的则是Syntax Directed Translation,因此把语法制导翻译当作是编译器前端的核心也不为过。

展开语法树的过程实质上也就是将词素不断地对应到我们语言定义的递推式的过程,换个说法其实也就是不断地展开语言的递推式,使之符合已有词素的过程。这个展开的过程从方法上来讲可分为两种:LL和LR。其中第一个字母代表从左到右读词素序列,第二个字母L代表尝试最先展开最左边的非终结符号,R代表尝试从右边开始将词素归约为非终结符好。换言之,LL是一种自顶向下的展开方法,LR是一种自底向上的归约方法,本文采用的技术为LL,所以以下也以讨论LL为主。

为了使编译器能高效迅速,一个良好的语法设计必须是一个LL(1)语法,什么是LL(1)语法呢?举个例子,当我们面对如下推导式的时候:
ids-> id|               ----------1
          id.ids|        -----------2
         ids[expr] |   -----------3
         this
此时我们读到了一个词素id,是展开成1、2、3中的哪种呢?当然目前我们无法判断,因此需要多读入下一个词素才能进行判断。如果读到的是[,则展开成3。如果读到了.则展开成2,否则展开成1。但问题是有些情况下,多读入一个词素或许还不能进行判断,当一个语言的语法中,只要多读入X个词素就能唯一的确定推导式,则称其为LL(X)文法。很遗憾,我们的语法不是LL(1)语法,虽然有很多推导式的处理技巧可以将一个非LL(1)的语法处理成LL(1)的语法,但这样会失去语法的直观性。考虑再三我在“不是很合理但易于理解的语法” 和 “合理高效的不直观的语法” 之间选择了前者。
因此既然我们的语法并非LL(1)的,因此在语法分析的过程中,我们只是不断的去尝试展开,如果不成功,则回溯。虽然这是比较低效的,但文法中的大多数推导式并不复杂,所以处理的时间完全可以接受。
考虑如下 推导式:
expr -->  (expr)     ------------1
                ids|       ------------2
              number|    -----------3
              literal|      ------------4
             func-call|   ------------5
            expr  ops expr|
这个推导式不满足LL(1),假设当前读到了一个id,目前可供选择的有2、4、5,然后又读入了一个“。”,目前可供选择的还是2、4、5,又读入了一个id,可供选择的还是2、4、5,然后读入了一个“(” ,这时候才能确定唯一的展开式func-call。但这个表达式除了不满足LL(1)之外还有其它的问题:左递归。
假设expr上来就尝试去展开成5的形式,因为是递归展开的过程,5中最左边的expr又会尝试展开成5的形式,然后这个过程就不断递归下去最终导致stack overflow。虽然有很多方法和技巧可以改变推导式的形式来消除左递归,但是依然本着易于理解的原则,我们在语法分析中通过使用朴素的笨办法来避免这种情况的发生。所谓的笨办法就是:
(1)按优先级先展开1234,然后都失败再展开成5。
(2)设置最大展开深度为200,超过了直接报错。
虽然很笨很低效,但勉强够用了。

二、语法分析器结构
语法分析器在实现上分以下几个部分,第一部分为SyntaxTreeGenerator,负责读入词素,和词法分析器以及后端程序进行交流,算是语法分析器的对外接口。其次使用GlobalVars来存储各种全局数据,记录分析过程中的各种信息。最后就是各种节点,每个节点在分析的过程中若需要其它信息则通过GlobalVars来解耦。接下来通过几个例子来具体说明这些节点是如何展开语法分析的:

(1)id
[java] view plain copy
package ravaComplier.syntax.nodes;  
  
import ravaComplier.lexer.Lexeme;  
import ravaComplier.symTable.SymTable;  
import ravaComplier.symTable.Symbol;  
import ravaComplier.syntax.GlobalVars;  
import ravaComplier.syntax.SyntaxTreeGenerator;  
  
/*
* 该类尝试读入词素并生成id节点
*/  
public class id {  
    public SymTable curST;//这个节点的符号表  
    public id() throws Exception  
    {  
      
        Lexeme lex=SyntaxTreeGenerator.readLexeme();//读一个词素  
        curST=SyntaxTreeGenerator.getCurTable();//得到当前符号表  
        if(lex.type==Lexeme.ID)  
        {  
            //类型正确  
            symEntry=SyntaxTreeGenerator.getCurTable().getSym(lex.value.toString());//判断符号表中是否已有此id  
            if(symEntry==null)  
            {  
                firstappear=true;  
                  
            }  
            else  
            {  
                firstappear=false;  
            }  
            value=lex.value.toString();  
              
            symEntry=new Symbol(value,2,null);//生成一个入口  
        }  
        else  
        {  
            //类型错误抛出异常  
            throw new Exception("ID required!\r\n");  
              
        }  
        GlobalVars.idlist.add(this);//把所有id都添加进idlist里。  
    }  
    public String value;  
    public boolean firstappear;  
    public type tp;//类型,由调用者赋值  
    public Symbol symEntry;//指向符号表的条目  
}  
这个类代表id节点,首先尝试读入词素,如果不是id则发生语法错误。其次需要判断此id是否是第一次出现,在某些时候这个信息很重要(比如变量定义时),然后最后将已经初始化好的id添加到GlobalVars的list中。值得注意的是,GlobalVars里面有很多的list,主要是用于在生成语法树之后用于一些检查。
(2)vardeclare
来个稍微复杂点的,局部变量的定义
[java] view plain copy
package ravaComplier.syntax.nodes;  
  
import java.util.ArrayList;  
  
import ravaComplier.lexer.Lexeme;  
import ravaComplier.symTable.SymTable;  
import ravaComplier.symTable.Symbol;  
import ravaComplier.syntax.SyntaxTreeGenerator;  
  
public class vardeclare {  
    /*
     * var-declare --> type args|type[] args
     *         
     */  
    public SymTable curST;  
    public vardeclare() throws Exception  
    {  
        curST=SyntaxTreeGenerator.getCurTable();  
        tp=new type();  
        int pos=SyntaxTreeGenerator.savePos();//得到当前分析的位置  
        Lexeme lex=SyntaxTreeGenerator.readLexeme();//读取下一个词素  
        arrayDeclare=false;  
        if(!lex.value.equals("["))  
        {  
            SyntaxTreeGenerator.loadPos(pos);//若不是想要的词素则回溯  
        }  
        else  
        {  
            lex=SyntaxTreeGenerator.readLexeme();  
            if(!lex.value.equals("]"))  
            {  
                SyntaxTreeGenerator.loadPos(pos);  
                throw new Exception("] expected!");//发生语法错误,数组定义时括号没有闭合。  
            }  
            else  
            {  
                arrayDeclare=true;  
                  
            }  
        }  
        ags=new args();  
        ArrayList<ids> al=ags.getidsList();//获取参数列表,若args为   a1,a2,a3则返回的列表中含有a1,a2,a3  
        SymTable st=SyntaxTreeGenerator.getCurTable();  
        for(int i=0;i<=al.size()-1;i++)  
        {  
            id ID=al.get(i).getLastID();//id1.id2.id3则此函数返回id3。  
            if(ID.firstappear==false)  
            {  
                throw new Exception("id declared duplicated!");//定义的变量名已经出现过了,报错  
            }  
            st.addSym(ID.symEntry);//将id添加进符号表  
            ID.symEntry.value=ID;  
            ID.symEntry.type=Symbol.TYPE_LOCALVAR;  
            ID.tp=tp;//给此id赋予类型  
            if(arrayDeclare)  
            {  
                ID.tp.isArray=true;  
            }  
        }  
    }  
    public type tp;  
    public args ags;  
    public boolean arrayDeclare;  
}  
可以看出,id节点中的很多属性都是由其调用者决定的,这点在节点逻辑的编写中体现的尤为明显。

(3)memberfundeclare
来个再复杂点的,成员函数定义:
[java] view plain copy
package ravaComplier.syntax.nodes;  
  
import ravaComplier.lexer.Lexeme;  
import ravaComplier.symTable.SymTable;  
import ravaComplier.symTable.Symbol;  
import ravaComplier.syntax.SyntaxTreeGenerator;  
  
public class memberfuncdeclare {  
    public SymTable curST;  
    public memberfuncdeclare() throws Exception  
    {  
        /*member-func-declare --> private|public
                                  NUL|static
                                  type func-name(  NUL|def-args )  {  func-body  }*/  
        curST=SyntaxTreeGenerator.getCurTable();  
        af=new accessflag();//得到一个accessflag, 即public 或者 private  
        //尝试读取static ,若没有则回溯。  
        int pos=SyntaxTreeGenerator.savePos();  
        Lexeme lex=SyntaxTreeGenerator.readLexeme();  
        if(lex.type!=Lexeme.STATIC)  
        {  
            SyntaxTreeGenerator.loadPos(pos);  
        }  
        else  
        {  
              
            isstatic=true;  
        }  
        tp=new type();//得到type  
        fc=new funcname();//得到函数名。  
        fc.id.symEntry.value=this;  
        if(fc.id.firstappear==false)  
        {  
            //判断函数名是否重复,若重复则报错。  
            throw new Exception("function name must be unique!");  
        }  
        SymTable st=SyntaxTreeGenerator.getCurTable();  
        st.addSym(fc.id.symEntry);//把这个函数添加进符号表  
        fc.id.symEntry.type=Symbol.TYPE_FUNCNAME;  
        SymTable st1=new SymTable(st,fc.id.value+" symtable");//建立一个子表,每个函数都有自己的符号表因为里面变量的作用域和其外不同  
        SyntaxTreeGenerator.setCurTable(st1);//将子表设置为当前符号表,之后该函数体内的一切分析都使用该表  
        lex=SyntaxTreeGenerator.readLexeme();  
        if(!lex.value.toString().equals("("))  
        {  
            throw new Exception("( expected!");//语法检查  
        }  
        try  
        {  
            pos=SyntaxTreeGenerator.savePos();  
        da=new defargs();//尝试搜寻其后的调用参数,若没有参数则根据上一行存储的位置回滚  
         
        }  
        catch(Exception e)  
        {  
            SyntaxTreeGenerator.loadPos(pos);  
            da=null;  
        }  
        lex=SyntaxTreeGenerator.readLexeme();  
        if(!lex.value.toString().equals(")"))  
        {  
            throw new Exception(") expected!");//语法检查  
        }  
        lex=SyntaxTreeGenerator.readLexeme();  
        if(!lex.value.toString().equals("{"))  
        {  
            throw new Exception("{ expected!");//语法检查  
        }  
        fb=new funcbody();//构造函数体  
        lex=SyntaxTreeGenerator.readLexeme();  
        if(!lex.value.toString().equals("}"))  
        {  
            throw new Exception("} expected!");//语法检查  
        }  
        SyntaxTreeGenerator.setCurTable(st);//函数结束,重置符号表  
    }  
    public accessflag af;  
    public type tp;  
    public boolean isstatic;  
    public funcname fc;  
    public defargs da;  
    public funcbody fb;  
}  


通过以上的分析,我们可以总结出每一个节点的构造规则:
1、尝试将此节点按一定的顺序展开
2、其每一个部分当作该节点的成员变量
3、在展开的时候和符号表进行适当的交互

按照类似的思路,我们当我们完成所有节点后,编译器的前端也已经差不多了,下图是上篇博文中日志里的示例程序得到的语法树,可以看到即便是一个简单的示例程序,其语法树也相当复杂。

[ Last edited by zzz19760225 on 2016-2-3 at 01:15 ]
作者: zzz19760225     时间: 2016-2-3 01:22    标题: 6自制编译器:词法分析器 7楼

自制编译器:词法分析器
2013-04-21 23:03 1573人阅读 评论(1) 收藏 举报
分类:  自制Compiler(7)  
版权声明:本文为博主原创文章,未经博主允许不得转载。

词法分析器代码已上传到个人资源中。
当我们的程序源文件进入编译器,首先遇到的就是词法分析器。
词法分析器的作用就是解析源文件,分析出其中的词素,并把这个词素的顺序集输入给语法分析器。
接上篇把所谓的词素也就是终结符号列出来:
if else while ( ) { } cpreop bitop logiop armtcop number literal id NUL new [ ] basetype class private public static return break continue . this
其中cprop包括 > < >= <= == != 即比较运算符
bitop 为位运算符,包括<< >> & | ^
logiop 逻辑运算符 包括 && ||
armtcop 算数运算符 包括 + - * /
number 数字常量 例如12345整形火 1.2345小数
id 标识符 按java规则
literal 字符串常量 如"ROgerwong"
NUL 空串
basetype 基本类型 包括 int char double 三种
当然,为了简单,在这里并不打算讨论非确定有穷自动机和确定有穷自动机的理论以及其之间的转换算法,只是用最朴素的方法,不断的将字符读入缓冲区,然后和这些词素进行比较,然后把这个词素加入到一个ArrayList中。
按着这个方法定义几个数据结构:
定义词素数据结构,共含两个域,1个表示类型,一个表示具体的值,类型的取值也已经标出。
[java] view plain copy
<p>package ravaComplier.lexer;</p><p>public class Lexeme {  
public int type;  
public Object value;  
public Lexeme(int t,Object v)  
{  
  type=t;  
  value=v;  
}  
@Override  
public String toString()  
{  
  return new String("<"+type+":"+value.toString()+">");  
}  
   
public static int IF=0;//if  
public static int ELSE=1;//else  
public static int WHILE=2;//while  
public static int BRACKET=3;//各种括号  
public static int CPREOP=4;//比较符号  
public static int BITOP=5;//位操作符  
public static int LOGIOP=6;//逻辑运算符  
public static int ARMTOP=7;//算术运算符  
public static int NUMBER=8;//立即数  
public static int LITERAL=9;//字符串  
public static int ID=10;//id  
public static int NUL=11;//空  
public static int NEW=12;//new 操作符  
public static int BASETYPE=13;//基本数据类型  
public static int CLASS=14;//关键字class  
public static int ACCESSFLAG=15;//public 或者private  
public static int STATIC=16;//关键字static  
public static int RETURN=17;//关键字return  
public static int BREAK=18;//break  
public static int CONTINUE=19;//continue  
public static int DOT=20;//.  
public static int THIS=21;//关键字this  
public static int SEMI=22;//分号  
public static int EQUAL=23;//等号  
}  
</p>  
其次,因为是用朴素的笨办法,所以我们需要构造规则:
定义分隔符:空格、制表符、换行符、+、-、*、/、.、;、各种括号运算符等。
若遇到分隔符,则分隔符前面的缓冲区为一个词素,分隔符为一个词素(空格、制表符、换行符)除外。
但注意特殊情况,若遇到>和>=,&和&& 之类的,需要多向前看一个字符来确定词素。
然后再把分割出的词素实例化成Lexeme类型,并加入到返回结果中。
代码很简单,但写起来比较费事:
[java] view plain copy
  
[java] view plain copy
package ravaComplier.lexer;  
  
import java.io.*;  
import java.util.*;  
  
public class Lexer {  
    private static ArrayList<Lexeme> result;//返回的结果  
    private static BufferedReader br;  
    private static StringBuffer buffer;//缓冲区  
  
    public static ArrayList<Lexeme> getLexerOutput(InputStream is)  
    {  
        result=new ArrayList<Lexeme>();  
        br=new BufferedReader(new InputStreamReader(is));  
        buffer=new StringBuffer();  
        while(Read())  
        {  
            addLexeme();  
        }  
        return result;  
    }  
    //尝试将缓冲区分解出词素并加入词素集合  
    private static void addLexeme()  
    {  
        String str=buffer.toString();  
        String endstr=str.substring(str.length()-1,str.length());  
        //判断单字符的分割符号  
        if(endstr.equals(" ") || endstr.equals("\t")  || endstr.equals(";") || endstr.equals("{") || endstr.equals("}") || endstr.equals("(") || endstr.equals(")") || endstr.equals("[") || endstr.equals("]") || endstr.equals("+") || endstr.equals("-") || endstr.equals("*") || endstr.equals("/") )  
        {  
            Lexeme lex=getLexeme(str.substring(0,str.length()-1));  
            if(lex!=null)  
            {  
                result.add(lex);  
            }  
            lex=getLexeme(endstr);  
            if(lex!=null)  
            {  
                result.add(lex);  
            }  
              
            buffer=new StringBuffer();  
        }  
        //判断双字符的分割符号  
        if(str.length()>=2)  
        {  
            endstr=str.substring(str.length()-2,str.length());  
            if(endstr.equals(">=") ||endstr.equals("<=") ||endstr.equals("==") || endstr.equals("||") ||endstr.equals("&&") || endstr.equals("!=") ||endstr.equals("\r\n"))  
            {  
                Lexeme lex=getLexeme(str.substring(0,str.length()-2));  
                if(lex!=null)  
                {  
                    result.add(lex);  
                }  
                lex=getLexeme(endstr);  
                if(lex!=null)  
                {  
                    result.add(lex);  
                }  
                  
                buffer=new StringBuffer();  
            }  
            else if(endstr.charAt(0)=='=' || endstr.charAt(0)=='>' || endstr.charAt(0)=='<' || endstr.charAt(0)=='&' || endstr.charAt(0)=='|' )  
            {  
                Lexeme lex=getLexeme(str.substring(0,str.length()-2));  
                if(lex!=null)  
                {  
                    result.add(lex);  
                }  
                lex=getLexeme(endstr.substring(0,1));  
                if(lex!=null)  
                {  
                    result.add(lex);  
                }  
                  
                buffer=new StringBuffer();  
                buffer.append(endstr.charAt(1));  
            }  
        }  
    }  
    //根据一个字符串获取词素  
    private static Lexeme getLexeme(String lex)  
    {  
        Lexeme result=null;  
        if(lex.equals(" ") || lex.equals("\t") || lex.equals("\r\n") || lex==null|| lex.length()==0)  
        {  
            return null;  
        }  
        if(lex.equals("if"))  
        {  
            result=new Lexeme(Lexeme.IF,lex);  
        }  
        else if(lex.equals("else"))  
        {  
            result=new Lexeme(Lexeme.ELSE,lex);  
        }  
        else if(lex.equals("while"))  
        {  
            result=new Lexeme(Lexeme.WHILE,lex);  
        }  
        else if(lex.equals("{") || lex.equals("}")|| lex.equals("[") || lex.equals("]") || lex.equals("(") || lex.equals(")"))  
        {  
            result=new Lexeme(Lexeme.BRACKET,lex);  
        }  
        else if(lex.equals(">") || lex.equals("<") || lex.equals("==") || lex.equals(">=") || lex.equals("<=") || lex.equals("!="))  
        {  
            result=new Lexeme(Lexeme.CPREOP,lex);  
        }  
        else if(lex.equals("&") || lex.equals("|") || lex.equals("^"))  
        {  
            result=new Lexeme(Lexeme.BITOP,lex);  
        }  
        else if(lex.equals("&&") || lex.equals("||"))  
        {  
            result=new Lexeme(Lexeme.LOGIOP,lex);  
        }  
        else if(lex.equals("+") || lex.equals("-") || lex.equals("*") || lex.equals("/"))  
        {  
            result=new Lexeme(Lexeme.ARMTOP,lex);  
        }  
        else if(isNumber(lex))  
        {  
            result=new Lexeme(Lexeme.NUMBER,lex);  
        }  
        else if(isStr(lex))  
        {  
            result=new Lexeme(Lexeme.LITERAL,lex);  
        }  
        else if(lex.equals("new"))  
        {  
            result=new Lexeme(Lexeme.NEW,lex);  
        }  
        else if(lex.equals("int") || lex.equals("char") || lex.equals("double"))  
        {  
            result=new Lexeme(Lexeme.BASETYPE,lex);  
        }  
        else if(lex.equals("class"))  
        {  
            result=new Lexeme(Lexeme.CLASS,lex);  
        }  
        else if(lex.equals("private") || lex.equals("public"))  
        {  
            result=new Lexeme(Lexeme.ACCESSFLAG,lex);  
        }  
        else if(lex.equals("static"))  
        {  
            result=new Lexeme(Lexeme.STATIC,lex);  
        }  
        else if(lex.equals("return"))  
        {  
            result=new Lexeme(Lexeme.RETURN,lex);  
        }  
        else if(lex.equals("break"))  
        {  
            result=new Lexeme(Lexeme.BREAK,lex);  
        }  
        else if(lex.equals("continue"))  
        {  
            result=new Lexeme(Lexeme.CONTINUE,lex);  
        }  
        else if(lex.equals("."))  
        {  
            result=new Lexeme(Lexeme.DOT,lex);  
        }  
        else if(lex.equals("this"))  
        {  
            result=new Lexeme(Lexeme.THIS,lex);  
        }  
        else if(lex.equals(";"))  
        {  
            result=new Lexeme(Lexeme.SEMI,lex);  
        }  
        else if(lex.equals("="))  
        {  
            result=new Lexeme(Lexeme.EQUAL,lex);  
        }  
        else  
        {  
            result=new Lexeme(Lexeme.ID,lex);  
        }  
        return result;  
    }  
    private static boolean isStr(String lex)  
    {  
        if(lex.charAt(0)!='\"' || lex.charAt(lex.length()-1)!='\"')  
            return false;  
        for(int i=1;i<=lex.length()-2;i++)  
        {  
            if(lex.charAt(i)=='\"')  
            {  
                return false;  
            }  
        }  
        return true;  
    }  
    private static boolean isNumber(String str)  
    {  
        try  
        {  
            int i=Integer.valueOf(str);  
            return true;  
        }  
        catch(Exception e)  
        {}  
        try  
        {  
            double j=Double.valueOf(str);  
            return true;  
        }  
        catch(Exception e)  
        {}  
        return false;  
    }  
    //从流中读取一个字符  
    private static boolean Read()  
    {  
        int d;  
        try {  
            d = br.read();  
            if(d==-1)  
            {  
                return false;  
            }  
            buffer.append((char)d);  
        } catch (IOException e) {  
            e.printStackTrace();  
            return false;  
        }  
         
         
        return true;  
    }  
}  

然后自己写一段程序,试一试能不能正确的解析:
[java] view plain copy
class testclass{  
   private static int j=0;  
   public int i=1;  
   public testclass()  
  {  
     double c=1;  
     char[] d="123456";  
        
  }  
  private static double func1()  
  {  
     if(j==0)  
     {  
     return 1.5  
     }  
     else  
     {  
       while(i<=10)  
       {  
         i=i+1;  
       }  
       return i;  
     }   
   }  
}  

然后看一看输出的结果:
[java] view plain copy
<14:class>  
<10:testclass>  
<3:{>  
<15:private>  
<16:static>  
<13:int>  
<10:j>  
<23:=>  
<8:0>  
<22:;>  
<15:public>  
<13:int>  
<10:i>  
<23:=>  
<8:1>  
<22:;>  
<15:public>  
<10:testclass>  
<3:(>  
<3:)>  
<3:{>  
<13:double>  
<10:c>  
<23:=>  
<8:1>  
<22:;>  
<13:char>  
<3:[>  
<3:]>  
<10:d>  
<23:=>  
<9:"123456">  
<22:;>  
<3:}>  
<15:private>  
<16:static>  
<13:double>  
<10:func1>  
<3:(>  
<3:)>  
<3:{>  
<0:if>  
<3:(>  
<10:j>  
<4:==>  
<8:0>  
<3:)>  
<3:{>  
<17:return>  
<8:1.5>  
<3:}>  
<1:else>  
<3:{>  
<2:while>  
<3:(>  
<10:i>  
<4:<=>  
<8:10>  
<3:)>  
<3:{>  
<10:i>  
<23:=>  
<10:i>  
<7:+>  
<8:1>  
<22:;>  
<3:}>  
<17:return>  
<10:i>  
<22:;>  
<3:}>  
<3:}>  
<3:}>  

貌似比较正确
作者: zzz19760225     时间: 2016-2-3 01:37    标题: 7cucu: 一个易于理解的编译器 8楼

cucu: a compiler you can understand (part 1)
标签: compiler编译器
2013-01-13 20:33 1317人阅读 评论(0) 收藏 举报
分类:  编译器与原理(2)  
目录(?)[+]
译者序:
最近在学习一些编译器的基本知识,就找到了这篇英文的网志,在csdn搜了一下貌似没有人翻译,所以我干脆翻译了算了,反正都是学习。
原文地址:http://zserge.com/blog/cucu-part1.html
cucu: 一个易于理解的编译器 (part 1)
让我们来讨论一下编译器吧。你有想过自己去写一个编译器吗?
我将会让你看到这是一件多么简单的事情!但这个网志的第一部分有点偏理论,所以希望你们能够保持耐心。
我们的目标
CUCU 是一个“玩具”编译器用来编译一个“玩具”语言。我希望这个玩具语言能尽可能的像标准C语言,因此一个正确的CUCU程序同样能够使用C编译器进行编译。当然,整个C语言标准时非常复杂的,我们这里的CUCU所使用的语法只是C语言的一小部分。
比如说,这里有一个有效的CUCU程序片段:
int cucu_strlen(char *s) {
    int i = 0;
    while (s) {
        i = i + 1;
    }
    return i;
}
语法
接下来我们要定义我们这个编程语言的语法。这是一个重要的步骤,因为在设计我们编译器的时候将会依赖于这个语法。
让我们从上到下来设计语法。我们的源文件包含一个程序。什么是程序?根据经验我们可以知道,程序就是一个列表,包括变量声明、函数声明、函数定义等,比如:
int func(char *s, int len); /* function declaration */
int i;                      /* variable declaration */

int func(char *s, int len) { /* function definition */
    ...
}
让我们尝试着将它写成EBNF的形式(如果你不知道什么是EBNF也没关系,它看上去很直观):
(译者:关于EBNF的详细信息请参考http://zh.wikipedia.org/wiki/%E6 ... F%E8%8C%83%E5%BC%8F
<program> ::= { <var-decl> | <func-decl> | <func-def> } ;
这个表示法说明:一个函数是一个重复的序列,这个序列中的每一项是变量声明、函数声明或者函数定义。那么,这些所谓的声明和定义又是啥呢?让我们继续往下走。
<var-decl> ::= <type> <ident> ";"
<func-decl> ::= <type> <ident> "(" <func-args> ")" ";"
<func-def> ::= <type> <ident> "(" <func-args> ")" <func-body>
<func-args> ::= { <type> <ident> "," }
<type> ::= "int" | "char *"
因此,变量声明很简单:一个类型名加上一个标识符,然后在后面加上一个分号,就像我们经常在C语言中使用的那样。
int i;
char *s;
函数声明稍微要复杂一点,首先是“类型+标识符”,然后在括号里可以有选择性的加上 <func-args>
函数的参数表,是一个用逗号分割开的“类型+标识符”的序列,比如:
char *s, int from, int to
事实上,参数表最后的逗号在CUCU语言里是允许的,但不是必要的。之所以这么做是为了使我们分析代码变的简单。
语言所支持的类型只有int和char*,标识符是一串字母、数字或者下划线。
唯一没有说明的只有<func-body>. 但首先我们需要讨论一下语句(statements)和表达式(experssions)。
语句是指我们的语言中最小的独立元素。下面是一下有效的语句:
/* 这是一些简单的语句 */
i = 2 + 3; /* 赋值语句 */
my_func(i); /* 函数调用语句 */
return i; /*返回语句 */

/* 这是一些复合语句 */
if (x > 0) { .. } else { .. }
while (x > 0) { .. }
表达式是语句的一部分,它比语句更小。和语句不同的是,表达式总是会返回一个值。通常,表达式会是算数预算。比如在语句func(x[2], i + j)里,表达式是 x[2] 和 i+j。
因此根据上述分析,我们有:
<func-body> ::= <statement>
<statement> ::= "{" { <statement> } "}"                /* 语句块 */
                | [<type>] <ident> [ "=" <expr> ] ";"  /* 赋值 */
                | "return" <expr> ";"
                | "if" "(" <expr> ")" <statement> [ "else" <statement> ]
                | "while" "(" <expr> ")" <statement>
                | <expr> ";"
下面是一些CUCU语言中可行的表达式:
<expr> ::= <bitwise-expr>
           | <bitwise-expr> = <expr>
<bitwise-expr> ::= <eq-expr>
                   | <bitwise-expr> & <eq-expr>
                   | <bitwise-expr> | <eq-expr>
<eq-expr> ::= <rel-expr>
              | <eq-expr> == <rel-expr>
              | <eq-expr> != <rel-expr>
<rel-expr> ::= <shift-expr>
               | <rel-expr> < <shift-expr>
<shift-expr> ::= <add-expr>
                 | <shift-expr> << <add-expr>
                 | <shift-expr> >> <add-expr>
<add-expr> ::= <postfix-expr>
               | <add-expr> + <postfix-expr>
               | <add-expr> - <postfix-expr>
<postfix-expr> ::= <prim-expr>
                   | <postfix-expr> [ <expr> ]
                   | <postfix-expr> ( <expr> { "," <expr> } )
<prim-expr> := <number> | <ident> | <string> | "(" <expr> ")"
注意到递归定义的表达式了吗?除此之外这些表达式还说明了运算符的优先级,从下到上优先级以此降低:括号和方括号的优先级较高,而赋值的优先级较低。
例如,根据语法定义,表达式 8>>1+1 的运算顺序将会是  8>>(1+1)), 而不会是 (like in (8>>1)+1), 因为 >> 的优先级要低于 +.
词法分析器
当我们解决了语法问题,我们差不多可以开始了。第一件事是做一个词法分析器。我们的编译器使用一个字节流作为输入,而词法分析器的作用就是将这个字节流分割成更小的符号(token),以便于后续的处理。词法分析器为我们提供了某种程度的抽象使得之后的解析器得以简化。
例如,一个字节序列 "int i = 2+31;"将会分成以下的符号:
int
i
=
2
+
31
;
在一个普通的词法分析器中,一个词素是一个由类型和值组成的二元组。因此,相对于以上的列表,我们更期望能得到一个如下的二元组<TYPE:int>,<ID:i>, <ASSIGN:=>,<NUM:2>,<PLUS:+>,<NUM:31>,<SEMI:;>。为了简便我们现在是通过值来反推类型,当然这是非常不严谨的。
词法分析器的主要问题是一旦一个字节从流中读取了之后,它就再也不能被重新放回流中。因此,如果我们读到了一个字节,而这个字节不能被加入到当前的符号中,这时候应该怎么办呢?我们应当把这个字节存到哪里,等待当前符号处理完成之后再去处理这个字节呢?
事实上,几乎任何词法解析器都有预读的机制。我们的语法很简单,因此我们只需要一个字节 - nextc当缓冲区就足够了。它存储一个从流中读取出来的但还没有被加入到当前符号中的字节。
另外,我必须在这里提个醒- 我在CUCU的代码的词法分析器中使用了很多全局变量。我知道这是个不好的习惯,但如果我把所有的变量都作为函数参数的话,这个编译器的代码看起来就不是那么的简洁了。
词法解析器的全部就是一个函数 readtok() 。而它的算法也很简单:
跳过开头的所有空格
尝试读取一个标识符(一个字母、数字以及下划线的序列)
如果发现不是一个标识符,尝试读取一些运算符,比如 &, |, <, >, =, !.
如果不是运算符,尝试读取字符串文本,比如"...." 或者 '....'
如果仍然失败,或许是一个注释,比如 /* ... */
如果继续失败,尝试读取一个字节,或许是括号之类的字符,比如 "("或者 "["。
#include <stdio.h> /* for vpritnf */
#include <stdarg.h> /* for va_list */
#include <stdlib.h> /* for exit() */
#include <ctype.h> /* for isspace, isalpha... */

#define MAXTOKSZ 256
static FILE *f; /* input file */
static char tok[MAXTOKSZ];
static int tokpos;
static int nextc;

void readchr() {
    if (tokpos == MAXTOKSZ - 1) {
        tok[tokpos] = '\0';
        fprintf(stderr, "token too long: %s\n", tok);
        exit(EXIT_FAILURE);
    }
    tok[tokpos++] = nextc;
    nextc = fgetc(f);
}

void readtok() {
    for (;;) {
        while (isspace(nextc)) {
            nextc = fgetc(f);
        }
        tokpos = 0;
        while(isalnum(nextc) || nextc == '_') {
            readchr();
        }
        if (tokpos == 0) {
            while (nextc == '<' || nextc == '=' || nextc == '>'
                    || nextc == '!' || nextc == '&' || nextc == '|') {
                readchr();
            }
        }
        if (tokpos == 0) {
            if (nextc == '\'' || nextc == '"') {
                char c = nextc;
                readchr();
                while (nextc != c) {
                    readchr();
                }
                readchr();
            } else if (nextc == '/') {
                readchr();
                if (nextc == '*') {
                    nextc = fgetc(f);
                    while (nextc != '/') {
                        while (nextc != '*') {
                            nextc = fgetc(f);
                        }
                        nextc = fgetc(f);
                    }
                    nextc = fgetc(f);
                }
            } else if (nextc != EOF) {
                readchr();
            }
        }
        break;
    }
    tok[tokpos] = '\0';
}

int main() {
    f = stdin;
    nextc = fgetc(f);

    for (;;) {
        readtok();
        printf("TOKEN: %s\n", tok);
        if (tok[0] == '\0') break;
    }
    return 0;
}
如果我们把一个C语言的源文件作为这个词法分析器的输入,它将会输出一个符号的列表,每个符号一行。
搞定,让我们稍微休息一下,接着进入第二部分。

cucu: a compiler u can understand (part 2)
2013-01-14 22:08 748人阅读 评论(0) 收藏 举报
分类:  编译器与原理(2)  
目录(?)[+]
原文地址:http://zserge.com/blog/cucu-part2.html
到目前为止,我们已经定义了我们语言的语法并编写了一个词法分析器。在本篇文章中,我们将为我们的语言写解析器。但在开始之前,我们先需要一些辅助函数:
int peek(char *s) {
    return (strcmp(tok, s) == 0);
}

int accept(char *s) {
    if (peek(s)) {
        readtok();
        return 1;
    }
    return 0;
}

int expect(char *s) {
    if (accept(s) == 0) {
        error("Error: expected '%s'\n", s);
    }
}
peek() 函数若下一个符号与传入的字符串相等,则返回非零值。 accept()函数读取下一个符号,如果其与传入参数相同,否则返回0。expect() h帮助我们检查语言的语法。
较为困难的部分
从语言的语法中我们可以得知,语句和表达式是相互掺杂在一起的。因此这就意味着一旦我们开始写解析器,我们必须时刻记住这些递归生成规则。让我们从顶至底来进行分析。下面是最高层的函数compiler():
static int typename();
static void statement();

static void compile() {
    while (tok[0] != 0) { /* until EOF */
        if (typename() == 0) {
            error("Error: type name expected\n");
        }
        DEBUG("identifier: %s\n", tok);
        readtok();
        if (accept(";")) {
            DEBUG("variable definition\n");
            continue;
        }
        expect("(");
        int argc = 0;
        for (;;) {
            argc++;
            typename();
            DEBUG("function argument: %s\n", tok);
            readtok();
            if (peek(")")) {
                break;
            }
            expect(",");
        }
        expect(")");
        if (accept(";") == 0) {
            DEBUG("function body\n");
            statement();
        }
    }
}
这个函数首先尝试读取类型名,其次是标识符。如果在此之后紧跟一个分号,则说明是一个变量声明。如果跟着括号,说明是一个函数。如果是函数,就接着去逐一搜索参数,再次之后如果没有分号,则说明是一个函数定义(有函数体),否则就只是一个函数声明(只有函数名和类型)。
这里, typename() 是一个用来让我们跳过类型名的函数。 我们指接受int类型、char类型以及其指针(char*):
static int typename() {
    if (peek("int") || peek("char")) {
        readtok();
        while (accept("*"));
        return 1;
    }
    return 0;
}
最有趣的大概就是 statement() 函数了。它可以分析一个单独的语句,而这个语句可以是一个块、一个局部变量的定义/声明、一个return语句等。
现在让我们来看看它的样子:
static void statement() {
    if (accept("{")) {
        while (accept("}") == 0) {
            statement();
        }
    } else if (typename()) {
        DEBUG("local variable: %s\n", tok);
        readtok();
        if (accept("=")) {
            expr();
            DEBUG(" :=\n");
        }
        expect(";");
    } else if (accept("if")) {
        /* TODO */
    } else if (accept("while")) {
        /* TODO */
    } else if (accept("return")) {
        if (peek(";") == 0) {
            expr();
        }
        expect(";");
        DEBUG("RET\n");
    } else {
        expr();
        expect(";");
    }
}
如果遇到的是一个“块”,即{...}的部分,就继续尝试在块中解析语句直到块结束。如果以变量名开头,则说明是一个局部变量的定义。条件语句(if/then/else)和循环语句在这里没有列出,留给读者去思考根据我们的语法,这些部分应当如何去实现。
当然,大部分语句里都包含着表达式,因此我们需要写一个函数取分析表达式。表达式解析器是一个向下递归的解析器,因此很多的表达式解析函数会互相调用直到找到主表达式为止。所谓的主表达式,根据我们的语法,是指一个数字(常量)或者一个标识符(变量或者函数)。
static void prim_expr() {
    if (isdigit(tok[0])) {
        DEBUG(" const-%s ", tok);
    } else if (isalpha(tok[0])) {
        DEBUG(" var-%s ", tok);
    } else if (accept("(")) {
        expr();
        expect(")");
    } else {
        error("Unexpected primary expression: %s\n", tok);
    }
    readtok();
}

static void postfix_expr() {
    prim_expr();
    if (accept("[")) {
        expr();
        expect("]");
        DEBUG(" [] ");
    } else if (accept("(")) {
        if (accept(")") == 0) {
            expr();
            DEBUG(" FUNC-ARG\n");
            while (accept(",")) {
                expr();
                DEBUG(" FUNC-ARG\n");
            }
            expect(")");
        }
        DEBUG(" FUNC-CALL\n");
    }
}

static void add_expr() {
    postfix_expr();
    while (peek("+") || peek("-")) {
        if (accept("+")) {
            postfix_expr();
            DEBUG(" + ");
        } else if (accept("-")) {
            postfix_expr();
            DEBUG(" - ");
        }
    }
}

static void shift_expr() {
    add_expr();
    while (peek("<<") || peek(">>")) {
        if (accept("<<")) {
            add_expr();
            DEBUG(" << ");
        } else if (accept(">>")) {
            add_expr();
            DEBUG(" >> ");
        }
    }
}

static void rel_expr() {
    shift_expr();
    while (peek("<")) {
        if (accept("<")) {
            shift_expr();
            DEBUG(" < ");
        }
    }
}

static void eq_expr() {
    rel_expr();
    while (peek("==") || peek("!=")) {
        if (accept("==")) {
            rel_expr();
            DEBUG(" == ");
        } else if (accept("!=")) {
            rel_expr();
            DEBUG("!=");
        }
    }
}

static void bitwise_expr() {
    eq_expr();
    while (peek("|") || peek("&")) {
        if (accept("|")) {
            eq_expr();
            DEBUG(" OR ");
        } else if (accept("&")) {
            eq_expr();
            DEBUG(" AND ");
        }
    }
}

static void expr() {
    bitwise_expr();
    if (accept("=")) {
        expr();
        DEBUG(" := ");
    }
}
上面是一大段的代码,但是不需要感到头疼,因为它们都简单的很。每一个分析表达式的函数首先都尝试调用一个更高优先级的表达式分析函数。接着,如果找到了这个函数期望的符号,则它继续调用高优先级的函数。然后当它分析完了一个二元表达式(如x+y、x&y、x==y)的两部分之后,就将值返回。有些表达式可以链式连接(如a+b+c+d),因此需要循环的分析它们。
我们在分析每一个表达式的时候都会输出一些调试信息,这些信息会给我们带来一些有趣的结果。例如,若我们分析以下代码片段:
int main(int argc, char **argv) {
    int i = 2 + 3;
    char *s;
    func(i+2, i == 2 + 2, s[i+2]);
    return i & 34 + 2;
}
我们将会得到如下的输出:
identifier: main
function argument: argc
function argument: argv
function body
local variable: i
const-2  const-3  +  :=
local variable: s
var-func  var-i  const-2  +  FUNC-ARG
var-i  const-2  const-2  +  ==  FUNC-ARG
var-s  var-i  const-2  +  []  FUNC-ARG
FUNC-CALL
var-i  const-34  const-2  +  AND RET
所有的表达式都会被写成逆波兰式(比如2+3变成23+)。而这对于有堆栈的计算机来说,是更为方便合理的形式,当操作数在栈顶的时候,函数能够执行出栈操作并取得操作数,之后将结果压栈。
虽然对于现在的以寄存器为基础的CPU,这或许不是一个最优的方法,但这个方法很简单并且能够满足我们编译器的需要。

symbols
现在,我们已经完成了很多工作了,我们使用不到300行的代码写了一个词法分析器和解析器。接下来我们要做的事情是添加以下函数,以便让这些符号(比如变量名、函数名)能够正确的工作。一个编译器应该有一个符号表以便能够很快的找到这些符号的地址,所以当你在代码中写“i=0"的时候,实际上你是将0这个值放入了内存的0x1234的位置(假设变量i在内存的位置就是0x1234)。相似的,当我们调用函数”func()"时,实际上做的是跳转到0x5678继续执行而已(假设func这个符号的的值是0x5678)。
我们需要一个数据结构来存放符号:
struct sym {
    char type;
    int addr;
    char name[];
};
这里type 有不同的含义。 我们用一个单独的字母来标示不同的类型:
L - 局部变量。 addr 存储变量在堆栈里的地址
A - 函数参数。 addr 存储参数在堆栈里的地址
U - 未定义的全局变量。 addr 存储其在内存中的绝对地址。
D - 定义过的全局变量。 其余同上。

So far, I've added two functions: sym_find(char *s) to find symbol by its name, andsym_declare() to add a new symbol.
到此为止,我们还需要增加两个函数:: sym_find(char *s) 来根据符号名查找符号, sym_declare() 来加入一个新的符号。
现在我们已经可以去设计后端的架构了,详情见下篇文章。
如果你忘了前面的信息你可以到part1部分去查阅。


cucu: a compiler u can understand (part 3)
2013-01-28 15:04 824人阅读 评论(0) 收藏 举报
分类:  编译器与原理(2)  
目录(?)[+]
现在让我们谈谈编译器的后端架构。C语言应该是一个可以移植的语言,但是在移植的过程中,我们并没有必要为新的CPU架构去重新编写整个C的编译器。编译器后端用来产生低级别字节码,而编译器前端会调用编译器后端的函数。一个好的后端设计会使得编译器具有良好的移植性。
我希望CUCU成为一个可以移植的编译器(也就是所谓的交叉编译)。因此我打算将后端代码写到一个独立的模块里。
但在我们具体考虑一个后端代码之前,我们还有很多工作要做。
简化的cpu架构
我们间滑过的CPU架构含有两个寄存器(我们记作A和B)和一个栈。寄存器A是一个累加器。像很多RISC的CPU一样,我们将使用定长指令集,为了更加有趣一些,我们并不把指令变成16进制代码,而采用较为自然的方式呈现。
我使用一种简单的方式设计指令。每一个指令8字节长(的确,这有点长,但是没有关系,毕竟这是一个假象的架构)。开头的7个字节是ASCII的符号,最后一个是0x10('\n')。
这就让我们可以设计出更易于阅读的指令,比如A:=A+B, A:=1ef8,或 push A。这些指令基本上都是自解释的了(“将B寄存器的内容加给A寄存器”,“将0x1ef8放入A寄存器”和“将寄存器A的值压入堆栈”)。
A:=NNNN - 将0xNNNN放入寄存器A。
A:=m[A] - 将地址为寄存器A中的值处的内容(作为字节)存入寄存器A中
A:=M[A] -将地址为寄存器A中的值处的内容(作为int型变量)存入寄存器A中
m[B]:=A - 将寄存器A中的值存入寄存器B所指向的地址处(作为字节)。
M[B]:=A - 将寄存器A中的值存入寄存器B所指向的地址处(作为int型变量)。
push A - 将寄存器A中的值压入队长。
pop B - 将栈顶元素出栈并放入寄存器B。
A:=B+A - 将A和B的值相加并将结果放入A。
A:=B-A - B减A并将结果存入A。
A:=B&A - 按位与。
A:=B|A - 按位或。
A:=B!=A -若B!=A,则A为1,否则A为0.
A:=B==A - 若B==A,则A为1,否则A为0
A:=B<<A - 将B中的值左移A位并将结果存入A。
A:=B>>A - 将B中的值右移A位并将结果存入A。
A:=B<A - 若B<A ,则A为1,否则A为0.
popNNNN - 将栈中的NNNN个元素出栈。
sp@NNNN - 将栈中地址是NNNN的元素的值放入寄存器A。
jmpNNNN - 程序跳转到NNNN地址处继续执行。
jpzNNNN - 若A的值是0,则跳转到NNNN处执行。
call A - 调用地址存在A中的函数。
ret - 从函数中返回
cucu后端架构设计
当我们包含“gen.c” 这个文件时,实际上就是包含了一个后端架构的具体实现。让我们从两个最基本的函数开始:: gen_start() 和 gen_finish(). 这两个函数用来生成程序头(比如PE头和ELF头)和一些预处理过的字节码。
编译器使用一个函数 emit(), 来将字节码发射到code[]数组中。这个数组的每一个元素都代表着一个可以使用的编译好的程序。
因此,编译器只调用后端架构提供的借口,而后端架构调用emit()来生成特定的字节码,这就是编译器编译出机器语言的过程。
因此,现在我们需要定义出最常用的一些指令,然后让后端架构去实现。让我们从一个最简单的程序开始。
int main() {
    return 0;
}
让我们分析下函数调用的过程。这个过程也就是函数参数如何传递给函数体以及返回值如何处理的过程。我们在前面也已经说过了,参数是放在栈顶进行传递的(第一个参数第一个压栈)。让我们再做个约定,寄存器A带有函数的返回值。
事实上,我们使用寄存器A来存储所有的值,寄存器B只用来存储临时变量。
对于上述程序,我们期待的字节码应该有如下的形式:
A:=0000
ret
因此我们需要一个函数来将立即数存入寄存器A,还需要一个函数用来处理返回。我们把这两个函数定义为gen_const(int)和gen_ret()。
    当编译器发现一个主表达式是立即数的时候,gen_const就会被调用,当发现一个return语句时,gent_ret就会被调用。虽然,有些函数的类型是void,因此其没有显式的Return。但为了安全和简单,在每一个函数的结尾,我们都会去调用一次gen_ret(),即使其前面有一个显式的return。
我们的编译器并不追求优化、效率和安全,因此这种双return的方式对于我们是可行的。
数学运算
现在让我们来编译数学表达式。这些数学表达式都很相似,因此我们使用一个例子来说明编译器是如何处理的。还记得词法分析器如何工作吗?它分析(更严谨的说法是编译)表达式左值,表达式右值然后才是运算符。
这就是一个典型的数学表达式编译的过程(还记得把大象装进冰箱的笑话吗):
..计算左值
push A
..计算右值
pop B
A:=A+B
当我们计算完左值的时候我们需要暂存结果。使用堆栈是一个很好的选择。因此一个表达式1+2+3我们将会编译成如下的形式:
A:=0001  -+     -+
push A    |      |
A:=0002   | 1+2  |
pop B     |      |
A:=A+B   -+      | +3
push A           |
A:=0003          |
pop B            |
A:=A+B       ----+
一些其它的东西
处理符号也同样很简单。
为了调用一个函数,我们首先要把其地址放入寄存器A,然后使用gen_call()产生代码call A。
要访问局部变量则使用gen_stack_addr然后返回这个变量在堆栈中的地址。
访问全局变量则使用gen_sym_addr()。除此之外,每次建立一个新的符号编译器就需要产生一些代码(比如汇编代码),gen_sym用于处理这些情况。
gen_pop 从堆栈顶弹出N个元素,同时增加栈顶指针。
gen_unref用于产生一些指针相关操作。根据类型的不同(byte或者int),会产生A:=m[A] or A:=M[A] 代码。
gen_array将一个数组地址压入栈顶。
最后,当遇到if/while语句的时候,gen_patch用于追加产生地址跳转的代码。为什么说是追加呢?因为当我们遇到需要跳转的语句时需要跳转的地址是未知的,这个地址依赖于编译后的语句块的大小。因此需要在语句块编译结束后进行追加地址跳转的代码。
差不多要成功了,让我们试试以下的程序:
int main() {
    int k;
    k = 3;
    if (k == 0) {
        return 1;
    }
    return 0;
}

jmp0008 # 由gen_start()产生,跳转到main,地址为0x08
push A  # 为局部变量K申请空间
sp@0000 # 取得刚才申请的空间的地址
push A  # 将这个地址入栈
A:=0003 # 将3存入A里
pop B   # 取得之前存入的K的地址
M[B]:=A # 将A中的值作为int放入K中
sp@0000 # 取得K的地址
A:=M[A] # 取得其中的值作为int存入A
push A  # 存这个值
A:=0000 # 将A的值置0
pop B   # 取得之前存入的K的值
A:=B==A # 比较A和B的值 (也就是"k" 和 0)
jmz0090 # 如果是假(A!=B, k!=0) - 跳转到 to 0x90
A:=0001 # 把1放入A中作为返回值
pop0001 # 释放堆栈中存储k的值的空间
ret     # return
jmp0090 # else分支内容在此,下一条语句地址是0x90
A:=0000 # 把0放入A中作为返回值
pop0001 # 释放堆栈中存储k的值的空间
ret     # return
ret     # 之前为了安全考虑的第二次return
虽然我们的代码又乱又臃肿,但它的确能工作。更重要的是,你现在能弄明白编译器的工作原理并且可以自己动手做一个自己的编译器。
但是,我必须警告你。。。
警告
请千万不要按以上的步骤那么做!如果你要写一个自己的编译器,建议使用以下成熟的工具:
flex/lex/jlex/...
yacc/bison/cup...
ANTLR
Ragel
and many others
除此之外,你想要一些专业的文献,比如龙书(《编译原理》,译者注)。并且coursera.org上的课程或许对你会有帮助。
如果你需要使你的系统可以适应现有的语言,你可以去了解LLVM的后端和GCC的后端。
如果你需要一些更多地关于玩具编译器的信息,可以去了解一下SmallC。
如果你想写一个简单的语言编译器,可以去了解一下PL/0或者Basic或者C。
但是请千万不要去从头写一个编译器并把它用在实际的工作中。
后记
整个项目的代码可以在这里找到。授权给MIT,任何人都可以免费使用或者修改。
不管如何,编译器是个很有趣的东西。我希望你能喜欢它。
作者: zzz19760225     时间: 2016-2-3 12:08    标题: 8 kickout 转贴李家芳的《硬盘分区表详解 》 9楼

kickout

转贴李家芳的《硬盘分区表详解 》
http://www.cn-dos.net/forum/viewthread.php?tid=115&fpage=174

硬盘主引导扇区 = 硬盘主引导记录(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分区信息引导系统跳转至DBR;
读取: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>PHYSICAL DISK-—HARD DISK, 然后, 在OBJECT菜单中选择DISK PARTITION TABLE即可读取, 并使用TOOLS菜单中的 WRITE OBJECT TO 选项存入指定文件备份;
写入: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>FLOOPY DISK, 选择备份的DPT文件, 然后使用TOOLS菜单中的WRITE OBJECT TO——>PHYSICAL SECTOR 选项写入 001 (clindyer 0, side 0, sector 1);

详解:
000H--08AH MBR启动程序(寻找引导分区)
08BH--0D9H MBR启动字符串
0DAH--1BCH 保留("0")
1BEH--1FDH 硬盘分区表
1FEH--1FFH 结束标志(55AA)


活动分区引导扇区(DBR)
--------------------------
物理位置:1面0道1扇区(clindyer 0, side 1, sector 1)
大小: FAT16 1扇区 512字节 FAT32 3扇区 1536字节
功能:包含机器CMOS等信息(0000--0059), 核对该信息并引导指定的系统文件, 如NTLDR等;
读取: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>LOGICAL DISK-—DISK C,
然后, 在OBJECT菜单中选择BOOT RECORD即可读取, 并使用TOOLS菜单中的
WRITE OBJECT TO 选项存入指定文件备份;
写入: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>FLOOPY DISK, 选择备份的DBR文件, 然后使用TOOLS菜单中的WRITE OBJECT TO——>PHYSICAL SECTOR 选项写入011 (clindyer 0, side 1, sector 1);


详解:

000H--002H 3 BYTE的跳转指令(去启动程序, 跳到03EH)
003H--03DH BIOS参数区
03EH--19DH DOS启动程序
19EH--1E5H 开机字符串
1E6H--1FDH 文件名(IO.SYS, MSDOS.SYS)
1FEH--1FFH 结束标记(55AA)


硬盘分区表(DPT)
---------------------
偏移地址 字节数 含义分析

01BE 1 分区类型:00表示非活动分区:80表示活动分区;其他为无效分区。

01BF~01C1 3 *分区的起始地址(面/扇区/磁道),通常第一分区的起始地址开始于1面0道1扇区,因此这三个字节应为010100

01C2 1 #分区的操作系统的类型。

01C3~01C5 3 *该分区的结束地址(面/扇/道)

01C6~01C9 4 该分区起始逻辑扇区

01CA~01CD 4 该分区占用的总扇区数

注释: * 注意分区的起始地址(面/扇区/磁道)和结束地址(面/扇/道)中字节分配:

00000000 01000001 00010101
^^^^^^^^ ==~~~~~~ ========

^ 面(磁头) 8 位
~ 扇区 6 位
= 磁道 10 位

# 分区的操作系统类型(文件格式标志码)

4---DOS FAT16 32M
7---NTFS(OS/2)
83---LINUX>64M


DPT 总共64字节(01BE--01FD), 如上所示每个分区占16个字节, 所以可以表示四个分区, 这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因.


逻辑驱动器
-----------
扩展分区的信息位于以上所示的硬盘分区表(DPT)中, 而逻辑驱动器的信息则位于扩展分区的起始扇区, 即该分区的起始地址(面/扇区/磁道)所对应的扇区, 该扇区中的信息与硬盘主引导扇区的区别是不包含MBR, 而16字节的分区信息则表示的是逻辑驱动器的起始和结束地址等.


所以, 在磁盘仅含有一个主分区, 一个扩展分区(包含多个逻辑驱动器)的情况下, 即使由于病毒或其他原因导致硬盘主引导扇区的数据丢失(包括DPT), 也可以通过逻辑驱动器的数据来恢复整个硬盘.

例如: 以下是一个硬盘的分区情况.

道 面 扇 道 面 扇 起始扇(逻辑) 结束扇 总共扇区
MBR 0 0 1 - - - - - -
C 0 1 1 276 239 63 63 4,188,239 4,188,177
扩 277 0 1 554 239 63 4,188,240 8,391,599 4,203,360
D 277 1 1 554 239 63 4,188,303 8,391,599 4,203,297


如果主分区表损坏, 则可以通过手工查找扩展分区表中所包含的逻辑驱动器数据, 在本例中就是D盘所对应的数据, 然后将其起始扇(逻辑)减去63就是所对应的扩展分区的起始扇(逻辑), 将其起始地址(面/扇区/磁道)改为0面就是扩展分区的起始地址. 然后通过扩展分区就可以得到主分区C的信息, 然后就可以使用DISK/MBR命令和手工填写分区表恢复整个硬盘.

实际使用这种方法比较麻烦, 如果知道每个分区的大小, 则可以通过使用 PQ MAGIC 5 将磁盘重新分区为原来大小(注意: 千万不能应用, 我们只是通过它来获得数据), 并查看INFO来获得以上数据, 记录以后取消该分区操作, 然后使用NORTON DISK 2000手工修改DPT表, 恢复整个硬盘.

该例所对应的分区表数据:
                                          80 01
01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00
41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA

扩展分区表数据:
                                          00 01
41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00

注意: 逻辑起始扇区和总共分区数是左边为低位, 如该例的扩展分区的起始地址为50 E8 3F 00转换十进制时要先变为00 3F E8 50, 总共占用分区数60 23 40 00要先变为00 40 23 60, 同理当手工填写该值时也要进行高低位转换.



================================= kickout
大功告成,打个Kiss!
作者: zzz19760225     时间: 2016-2-3 19:06    标题: 9不可思议的物理——与加来道雄对话 10楼

《被禁止的知识》试读:第一章 不可思议的物理——与加来道雄对话
加来道雄博士是纽约城市大学(City University of New York)的一位教授。他是一个非常出色的物理学家,也是一位极好的老师,被誉为当今的“爱因斯坦”(Einstein)。他是超弦理论的创立者之一。他写过不少书,也在一些记录片中把“新”物理的复杂理论解释为通俗易懂的概念。

□加来博士,我面前放着你所有的书……请你谈谈知识的价值吧!感谢你为人类觉醒所做的一切。
对话开始前,我想说说自己是如何找到你的。一年前,我正在看探索发现频道(Discovery Channel)。我被一个节目吸住目光,然而不巧的是,节目已经播出一会了,再现了一个行走在商场的极其痛苦的女人的故事。人们从她身体上径直穿过,而她对此完全不知情,她只有一种强烈的感觉,知道自己不知怎的“隐形”了。镜头转向了你,你站在时代广场(Times Square)中央,解释其他维度的存在,你说记录片中的人们其实身处另一个维度。
你能详细地解释一下维度融合的世界吗?

可以。首先,我在旧金山(San Francisco)长大,小时候,我常常连续几个小时站在日本茶园中,观看鲤鱼游泳。我常常幻想自己就是一条鱼,一条在这个浅浅的池塘中游泳的小鱼。我冥思苦想,它们是如何生活在二维世界中的:它们只能向前、向后,或者向左、向右。那么,无论哪一条鱼敢于谈论“上层”的世界,即三维世界,或是多维空间,它就会被视为“疯子”或“白痴”。我想象那里有一条科学家鱼,它会说:“呸,骗子!没有‘上面’的世界。这里只有你看到的世界;你在池塘中看到的就是存在。就是这么回事。”
所以我那时想潜到水下,逮住那条科学家鱼,将它带到“上层”世界来——三维世界、多维空间。它会看到什么呢?它将看到一个奇妙的世界,那里的生物没有鱼鳍……一个新的物理学规律,这些生物离开水也能呼吸……一个全新的生物学规律。无论大家相不相信,今天,我们物理学家认为,并在试图证明,我们就是那条鱼。我们把自己的一生都消耗在这个三维空间中(向前、向后、向左、向右、向上、向下)。有人敢于提出存在看不见的世界,一个我们无法看到、触摸的世界。这些人就被视为疯子。

□顺便说一下,我就是其中之一。在我这一生中,我的那些在未知世界的深刻经历,一直遭到蔑视和讥讽。

不会再有人嘲笑你了。当今潮流已经发生了巨大的变化。如今,物理学家相信,事实上,我们也许可以考虑更高维度的存在,即我们看不到的维度,而这些维度就在我们身边,就好像对于鱼来说的“上层”世界。

□你说的“多维空间”是什么意思?你在书中提到了十维,意为现实的“分层”。我很好奇,你为什么把自己局限于十维空间中,又是如何得出这些结论的?

爱因斯坦曾有一个梦想,他花了30年去追求这个梦想——创造一个“万有理论”(Theory of Everything),一个有一英寸长的方程式,将宇宙中的所有作用力归纳在内,让他读懂上帝的想法。然而,每当我们将重力方程式、光的方程式、比率方程式合并到一起时就会发现,在三维世界里没有足够的空间。即没有足够的空间将所有的作用力填塞在一起。然而,如果你假设存在一个更高的维度,事实上,可以假设到十维度,那么所有的作用力都会完美优雅地落到一个简洁的关联理论中。这将震惊整个物理界。但是爱因斯坦走得不够远。他在四维度就止步了,而你如果走到六维度、七维度、八维度……一直走到十维度,那么可以简单又完美地描述这些更高维度的世界。
现在,我们假设宇宙是一个类似肥皂泡泡的东西。我们生活在肥皂泡的表面,无法离开。我们被困在这里,就好像苍蝇被黏在苍蝇贴上,而肥皂泡正在膨胀——这一点可以用我们从卫星上获得的很多数据来证明。但是我们至今仍相信还有其他肥皂泡存在,那些肥皂泡上漂着的是什么?那些肥皂泡会膨胀成什么样子?如果宇宙膨胀了,会变成什么样子?
我们认为它将会变成更高的维度空间。这令我非常高兴。当我长大时,我去了主日学校。在那里,我学习了《创世纪》(Genesis)和宇宙的起源。但我的父母都是佛教徒,他们相信涅槃,涅槃既不是起源也不是末日。现在,我们物理学家认为,我们可以将佛教与犹太教和基督教中的“创世纪”融合在一起。
我们的确相信,宇宙起源于一场爆炸,但是这些大爆炸却每时每刻都在发生。它们发生在一个更为广阔的涅槃之海中,我们目前甚至给它命名为“十维超空间”。我们认为,我们有一张漂亮的图片,上面描绘了宇宙起源、成长、膨胀以及其他已经形成的宇宙,那些平行的世界,以及一个更为广阔的永恒的领域:涅槃——佛教中的涅槃;物理学上的涅槃;十维超空间。

□那么,你说的是我们可能会接受这些概念:那就是一切,那从来就是一切,那永远将是一切。大爆炸将成为一切永恒存在的证明?

说对了。人们很难将大爆炸和一些神学理论相协调,然而这张大图片,这张多元宇宙的图片,呈现了诸多过去模式的漂亮、完美的和谐。无论你信不信,这张图片与卫星数据相吻合。
我们目前有绕地卫星,即WMAR。卫星显示宇宙年龄为137亿年,展示了所有和图片相吻合的数据:我们手中的这张图片——泡泡们,就像来自一场泡泡浴;设想一次泡泡浴或是一个跳出来的、不断膨胀的泡泡,一些是小泡泡,一些是与其他泡泡相撞的泡泡。这就是从现实中创造出的新图景。纵观历史,我们可以在宗教中看到这一图景。

□这一图景是如何与宗教产生联系的呢?

如果你看一看《创世纪》的第一章第一篇,就会看到在上帝创造宇宙的时候,书中提到的瞬间。这与宇宙大爆炸理论是一致的。事实上,曾经有一位天主教大主教说,宇宙大爆炸理论与“创世纪”是能相提并论的。但后来,我们有了印度教和佛教的一些模型,宣称宇宙没有起源,也没有结束。宇宙是永恒的,所以我们有了涅槃。因而,我们不仅仅看到了两种观点的融合——宇宙大爆炸发生在涅槃之中,也看到了大爆炸一直在发生。
甚至在我们说话的瞬间,很多宇宙诞生了,我们的卫星数据与这张图片吻合——永恒的大爆炸,永恒的膨胀。事实上,我的一个朋友艾伦•古斯(Alan Guth)也许会因这张图片与卫星数据相吻合而获得诺贝尔(Nobel)物理奖。我认为,我们有一门非常好的综合科学,它来自卫星数据、爱因斯坦的统一场论以及宗教理论框架。

□由于你出色的工作,让普通人也能够理解物理学领域的复杂概念,我们对此表示衷心感谢,因为这些概念实在难以掌握。你可以给我们简单说说超弦理论(你被认为是该理论的创立者之一),以及这一理论是如何与量子物理产生联系的?

两千多年前,毕达哥拉斯(Pythagoreans)哲学派的希腊哲学家们对希腊的七弦竖琴进行分析,希望由此找到音乐的数学比率:和声数学。我们为什么有升半音和降半音,三分音符和五分音符,以及大三和弦和小三和弦?利用希腊人对它们的数学理解,得出的结论是,音乐遵循了数学规律。当他们意识到这一点时,大为震惊,由此他们认为:或许也可以用音乐语言来解释宇宙。然而,他们失败了。那时,他们不知道原子,也还没有发展出化学和物理学,这些概念还不为人知。
现在,我们已经圆满地完成了任务。我们有太多的离子、电子和中微子;我们有伽马射线和希格斯(Higgs)玻色子粒子。为了获得加州大学(University of California)的博士学位,我不得不记住成千上百个亚原子的名字和它们的外国名字。
今天我们相信,所有的粒子只不过是音符——在橡皮筋上震颤的音符。如果我用一个显微镜来观察电子,会看到它完全不是一个点(那是一张旧照片),不过是一根震颤的橡皮筋。如果我改变振动的频率,它就会变成中微子;如果我再改变,它会变成和声。我又一次改变频率,它会变成上百个我为了获得物理学博士学位而记下的亚原子之一。
我希望,将来申请物理学博士学位时,你只要说“超弦理论”就能拿到博士学位。如今我们物理学家认为,物理只不过是振动弦的音乐。化学是在这些振动着的琴弦上你弹出的旋律。宇宙是这些振动弦的交响乐,那么,上帝的想法是什么呢?
我刚刚说到,爱因斯坦花了30年时间去追求一种能够让他读懂上帝的理论。不管我们信不信,我们现在已经有了另一个候选人,一个能够读懂上帝的候选人,他已经让整个物理界为之振奋。《时代》(Time)杂志、音乐杂志以及所有的主流网络写了很多这类故事——上帝的想法。我们物理学家认为,它是通过超空间共鸣的宇宙的音乐,那就是我们认为的上帝的想法。

□出于这一原因,我被你的工作深深吸引。因我在灵性方面的小小贡献,我写的所有东西都是关于宇宙音乐的。当我读到你写的作品时,从科学的观点来说,我会想:“哦,天哪,科学和灵性真正融合在一起了!”

那是真的,顺便说一下,下个月我们将首次在瑞士的日内瓦(Geneva)推出目前科学界所能制造出的最大的机器——“大型强子碰撞型加速装置”(Large Hadron Collider)。它有17英里长。我们希望真正创造出一个无法看到的、更高的音乐粒子,因为我们是八度音阶中的最低音。你在我们周围看到的一切,都是在小橡皮筋上以最低频率发生的振动。我们计划在“大型强子碰撞型加速装置”上生成更高的频率。
当然,目前媒体已经扰乱了整个计划。媒体说,这也许会创造出能够吞噬地球的黑洞,那是非常愚蠢的无稽之谈。我们不可能在瑞士的日内瓦制造黑洞。我们希望获得更高音阶的音乐。那就是和这台机器有关的一切。

□这与球体音乐有何联系?

几个世纪前的音乐家尝试用球体音乐来解释星球的运动和我们看到的周围物体的运动,他们想用音乐来解释运动。
这一想法没有在科学上实现,因为伊萨克•牛顿(Isaac Newton)来了。他给我们带来了运动定律,这一定律对我们的卫星和星球都很有效。之后爱因斯坦来了,他说牛顿走得不够远,星球的运动不仅能用重力来解释,也可以用时间和空间(即空间和时间的曲度)来解释。现在,我们意识到,爱因斯坦也走得不够远。我们不只要走到时间和空间里,还要走到多维空间,穿过创造音乐的震动弦——多维空间震动的音乐,把我们带回到球体音乐。从某种程度来说,我们已经完成了一个哲学意义上的完整的循环。

□让我试着跟上你的思想。根据你的橡皮筋暗喻和振动改变现实的概念,难道是说,假如这个星球上有足够多的人提高他们思想的频率,那么我们就可以改变星球上的物质本质?

在这种情况下,我不能完全肯定如何改变这些粒子的频率——当然有一种方法,即通过大型强子碰撞型加速装置来实现。

□当然,这就是音乐,是吗?

是的,另一种可能是,使用我们的绕地卫星来完成。顺便提一下,我刚才忘了说:我们现在有一张宇宙初期的照片……宇宙大爆炸初期的照片。人们经常抱怨我们物理学家,我们没有图片证据证明137亿年前发生过爆炸。但是现在,我们有了图片:爆炸自身的图片。这些图片是在微波的环境中拍摄的。如果你去美国宇航局(National Aeronautics and Space Administration,以下简称为NASA)的官方网站www.nasa.gov上,输入WMAP,就可以看到有关大爆炸的图片了。这的确是一张令人满意的基础照片。那里有“创世纪”,有起源,也有宇宙的突然爆炸。我们现在拍到了这一场景。那么下一个问题是:“大爆炸之前发生了什么?”
我们认为,那就是超弦理论出现的地方。
大爆炸是在137亿年前发生的。实际上,超弦理论将你带到爆炸之前,因为在爆炸之前,时间还没有开始。超弦理论预言,那里可能存在其他宇宙——因此,如果多元宇宙像一次泡泡浴,那么我们的肥皂泡会从另一个肥皂泡中分离出来。就好像你在洗泡泡浴的时候,肥皂泡一分为二或者两个泡泡猛力撞击,融合成了一个泡泡。
那就叫做超弦理论。
一些物理学家,特别是我在普林斯顿(Princeton)的一些朋友,大力推崇大啪理论(Big Splat Theory);然而,我的一个在MIT的朋友推崇成长理论,也就是“膨胀理论”。这一理论认为,我们的宇宙是从另一个宇宙中发育而来的。我们不确信哪一个理论是正确的。但关键是,我强调,宇宙和时间并不是从大爆炸开始的。我们认为,我们可以来到大爆炸之前,我们将在2014年左右测量出这一时间。届时,我们将发射新一代的卫星,帮助我们搜集图片,不只是大爆炸的图片,还有形成那一瞬间的图片,那一瞬间我们的宇宙正从子宫中分离出来。
也许,我们甚至将发现脐带——联系婴儿宇宙和母体宇宙的脐带。目前我们还未实施这个方案。然而,我们早有安排。现在我们没有证据,但是到2014年,当我们发射新一代卫星去寻找联系我们的婴儿宇宙和母体宇宙的脐带时,一切都将振奋人心。

□这的确是振奋人心的,特别是因为它与一些更为深远的概念联系到一起。这些概念来自玄学界。我的几本书也讨论了太阳的星际脐带。请你谈一谈宇宙的脐带。这很吸引人。

平行宇宙的观念是出自宗教和精神领域的另一主题:存在的其他平面。例如,天主教会一直相信天堂和地狱代表两个不同的精神层面,且与我们的宇宙并存。我们物理学家暗地里嘲笑这一观点,但是我们不嘲笑任何人,因为一切证据证明,确实存在其他宇宙,其他平行宇宙。
例如,想一想你客厅中的收音机。你的收音机收到某一个频率,但你要知道你的客厅中还有几百个频率——有莫斯科广播(Radio Moscow)、哈瓦那广播(Radio Havana)、BBC……很多你不能听到的频率。现在提出疑问,你为什么听不到呢?这是因为你的广播与其他波段不一致(我们说不再匹配)。那是科学术语:它与BBC隔离了。你收听美国的摇滚电台,而听不到来自伦敦的BBC;你与BBC电台隔离了。
目前,我们认为,周围的一切都在一个特定的频率上振动;有在房间里振动的短波,也有来自其他频率的波段。每个频率都代表一个不同的宇宙;比如,在你的客厅中也许有恐龙的波动函数,还有一个埃尔维斯•普雷斯利(Elvis Presley)依然活着的世界的波段函数。
这些是我们从未接触过的频率,我们与它们分隔了;这一理论被称为“多世界”(Many Worlds),它是由一位名为休•艾弗雷特(Hugh Everett)的物理学家于20世纪50年代在普林斯顿提出的。
这个理论第一次提出来的时候,遭到人们的嘲笑,但是现在,我们开始相信艾弗雷特是对的,相信多世界真的存在。我们只不过与它们分离了;我们不再与它们联系了……但是我们和它们是共同存在的。

□加来博士,你认为有人会从其他的维度中找到这些频率吗?

我道听途说了类似的一些故事。我不知道可信与否,因为我需要检测这些人是否具有好的音感,但是如果你去看物理著作,会发现我们物理学家再也不会嘲笑休•艾弗雷特的观点了。“多世界”理论也是目前理论物理学界的首要主题之一。你可以去世界上任何一个物理图书馆寻找“多世界”理论,在那里,你会发现有500篇论文是关于量子力学的,它是“多世界”理论的量子理论基础。
爱因斯坦并不喜欢这一理论,在这个问题上,爱因斯坦是错误的。爱因斯坦不相信量子理论,但是,我们现在认为,量子理论确实描绘了这个世界。那就是我们为什么会研发出激光束,晶体管。没有量子理论,就没有广播,没有电视机,也没有激光束和卫星。所有的这一切都依赖于量子理论,量子理论的扩展就是“多世界”。

□我读过你的一本书,在书中,你讨论了“穿越维度的生命船”。你可以具体解释一下吗?我觉得它非常迷人。

很多人都跟我说:“教授,这一切都很好。你谈论了更高的维度,十维度,但是我怎样才能访问其他世界呢?我怎么到这些地方呢?”
那很难。
首先,宗教和教会的人已经谈论过冥想和宇宙穿越。而我们物理学家正在实践。我们会制造一个机器,按一下按钮,它就会带我们走,而不是通过吃一些能产生幻觉的药物或是通过冥想。在我的《平行宇宙》(Parallel Worlds)一书中,我甚至描绘了这个机器会是什么样的。
你必须理解爱因斯坦说的话:“空间和时间像一匹布,而时间像一条河。”当这条河漫步穿过宇宙时,它可以加速,也可以减速。
我们一直用卫星GPS系统获取这些测量数据,比如你的租赁车就安装了它。在外层空间,这一系统依靠加速或减速的时间。但是有一个新的难题,星球之河可能有新的涡流,分成了两条河。在这种情况下,我们无法排除有穿越宇宙的生命船的可能性。我们不能排除有带我们穿越时间之河的时光机器的可能性。
当然,现在这些都被认为是“不切实际的”,然而爱因斯坦自己也意识到,在他的方程式中,时间旅行是可能的。1949年,第一个时间旅行的方案在爱因斯坦的方程式中发现。自那时起,我们物理学家已经发现了几百种时间旅行的方案,它们能让我们在多个宇宙中穿梭。斯蒂芬•霍金(Stephen Hawking)甚至称它们是“婴儿宇宙”——让我们时光倒流回到过去或连接不同宇宙的小宇宙。
老实说,能在几个维度间穿越的机器一定是庞大的。我们正在谈论的机器是非常巨大的,因此它只能放在外太空,但我认为,事实上我们考虑的这些东西是非常令人惊奇的。通常,科幻作家和幻想作家会提到时光河中的漩涡:其他宇宙的入口。这就是交接区。我们目前正非常严肃地对待它,甚至描绘出了这种机器的蓝本。

□你希望科学何时能够实现这一重大的成就?

这不仅仅取决于我们,从某种意义上来说,我们谈论的是巨大的能量……但是有一天,如果有人敲你的门,声称是你的曾曾曾曾曾曾孙女,你不要砰地一声把门关上!这是真的,当时光机器出现的时候,你的曾曾曾曾曾曾孙女生活在另一时空,而且决定拜访她的祖先,如果有人声称是你的还未出现的后代,请不要把门关上。

□毫无疑问,斯蒂芬•斯皮尔伯格(Steven Spielberg)肯定会喜欢这一场景。

事实上,我的一个朋友,加州理工学院(Caltech)的一位物理学家,正在为斯皮尔伯格的下一部电影做顾问,这部电影就是关于时光旅行的。
斯皮尔伯格很严肃地对待这个问题。他和物理学家一起探讨,共同创造他的下部电影,就像卡尔•萨根(Carl Sagan)制作他的电影《接触》(Contact)时向一位物理学家咨询一样。他的确与朱迪•福斯特(Jodie Foster)一道,用最先进的物理学知识创造了这部电影,电影讲的是一个与外星球文明接触的故事。

□加来博士,你何时去拍一部电影呢?

近来还没这个打算。我自己都很惊讶,自己的书竟然能上《纽约时报》(New York Times)的畅销书排行榜!我真的很震惊!

□那真的很棒,我要列举你的一些重要著作:《多维空间》(Hyperspace)——不得不读的一本书;《平行宇宙》——另一本绝妙的书;而现在我们也打算拜读这本新书——《不可思议的物理》(Physics of the Impossible)。但是在我们读这本书之前,我想去瑞士看看那儿将发生什么事。你能告诉我们是具体哪一天吗?

下个月,在瑞士的日内瓦,科学家将启动一台17英里长的机器。它不具破坏性,放在地下,所以没有任何辐射会泄露出来,它也不可能制造出一个能吞噬地球的黑洞。我认为媒体的报道在这一方面出现了偏差。
2008年5月,我们将启动那个机器。我们获得了某种电磁波,只有当它达到一定速度时,才会产生这种电磁波。这种电磁波将会重新创造一个宇宙,像小熊维尼一样极小的一个宇宙——大自然母亲将会创造能量,不会有任何危险发生。
地球在这些宇宙射线中洗了一个澡,这些射线比我们弱小的人类在地球上创造的任何东西都要强大,但是我们创造了这台机器,它可以为我们打开一扇“创世纪”的动力学上的窗户。我为之振奋,因为它可能会帮助我们证明超弦理论。
有人说,超弦理论无法证明,因为必须在实验室中创造一个微型宇宙。当然,我们不是神,无法在实验室中创造一个微型宇宙。但是你可以做的最好的事情就是,创造音乐的高级形式。我们希望创造“超对性粒子”。“超对性粒子”是超级粒子,它们从五维空间中振动的小橡皮绳上发射出来,而我们处于这根绳上的八度音阶中的底层。但是那里有更高的音符——我们还没有看到它们,那就是我们想利用瑞士日内瓦的欧洲核子研究委员会(CERN)的机器来创造更高振动的原因。
如果目的达到了,它将冲击整个物理学界。它将重击那些嘲笑者。后者认为,由于我们无法在实验室中创建微型宇宙,超弦理论就无法论证。我们可以把大多数事情做好,比如创造超对性粒子,我们认为这将是振动弦上的振动的下一发展阶段。

□如果在著名的2012转变前,将这一具有重大意义的努力付诸实践,将令人激动,也非常有趣。很多人表现出他们对2012的恐惧。我想请教你:我们将何去何从,你有何感受或看法呢?

让我来说一些与此相关的事吧。我看过一些玛雅人(Maya)的翻译著作。在玛雅人的历法中,他们讨论周期,当然,这些周期长达几千年。我们正驶向周期的尽头。这里有两种看问题的方法。第一种当然是我们处于周期的尽头,世界的尽头。但是我认为,玛雅人看问题的方式却是第二种,他们认为这是一个开端。它是循环,是重生,因此它并不意味着万物的结束,只是代表着重生和再循环。我们过去已经经历了几个周期,而且并没有发生什么,我们将来也会经历更多的周期。我认为这是复兴,而非毁灭。

□我也有同感。我把它看成我们个体再生过程的一个难以置信的原型。

是的,如果是这样,我们就不再需要用悲观者的幽暗的眼睛来看待它了,我认为我们应该把宇宙看成是光辉灿烂的。宇宙的存在绝对是令人惊奇的。宇宙是一个辉煌、奇妙的地方,我们就住在这里,很难相信,一个循环将在一瞬间结束一切,而大多数循环代表着重生。那就是我对世界未来报以乐观态度的原因。当然,目前世界面临着诸多挑战,但是我相信人类有着不屈不挠的精神,我相信我们能克服一切困难。我们已经这样做了,我相信我们今后也会这样做。

□听到你这么肯定,我非常高兴。不管现在我们的星球上有多少黑暗和困难,我们需要积极的思想和庆祝的声音。我完全同意,人类的精神是不可战胜的,当我们面临最艰难的挑战时,我们也有很大的机会去战胜它们。

从循环的角度看待世界的一个好处是,你会看到过去的周期,你会开始思考:“我们曾在哪里?过去我们战胜了什么困难?”而那是未来的一个向导。我们不看阴暗和死亡,而看那些我们可以重新审视我们曾待过的地方。除非你理解了我们一直处在什么位置,否则我们无法理解自己将前往何处,这是一个事实,我们通过循环看待自己的历史,这将迫使我们重新审视历史,我认为,这会给我们带来希望,我们有能力铸造未来。

□你认为在我们身上将会发生什么呢?你如何预言近在眼前的转变?要知道,在我们前方,我们面临黑暗事物的挑战,不需要一一列举,而相对地,我们也拥有很多积极的、具有革命意义的变化。你认为未来几年这个星球会发生什么?

让我来告诉你下个世纪将要发生的事情,因为我坚信诞生与重生。物理学家兢兢业业地寻觅宇宙中的智慧生物,我们也必须严肃地分析这个问题:“我们一旦与这些外星生物接触上了,我们如何定义我们的文明?”对于我们来说,这不是一个学术问题:我们有望远镜、卫星。总有一天,我们会和他们有所交流。
一些物理学家已经提出了一种理论,认为文明有三种形态:第一形态、第二形态和第三形态。
第一种是真正的星球文明:他们有一种星球文化;他们应该能够控制天气,比如飓风和地震;他们在海洋上建造城市。100年后,一种与此描述相应的星球文化将出现在我们面前。
第二种文明形态现已在多颗行星上发展起来了,他们控制了行星……一些邻近的行星。他们将一些邻近的太阳系行星作为殖民地,并控制了整个星球的能源输出量。
然后是第三种:这种文明形态是银河的,他们真正控制了能量,不是一个星球的能量,也不是100个的,而是行星系统中几十亿个行星的能量。那就是第三形态,如果有天外文明来造访我们,那大概就是第二文明形态或第三形态。
现在,回过头来看我们自己,我们处在哪个阶段呢?我们处在零文明形态。

□好吧,那么你是如何定义零文明形态的?这一文明形态听起来好像是一种没有进化的文明。

好的。让我们来谈谈零文明形态。这种文明形态从死去的植物身上获取我们需要的能量。丛林中的野蛮人、宗教主义的原始状态、无知、贫穷和疾病仍然存在。他们只能梦想造就一种星球文明社会,但是如果你用一个计算器做些计算,得出的结果是:我们要建立一种星球文明社会还要100年,每当我读报纸的时候,我总看到第一文明形态诞生时的痛苦。
比如,什么是因特网?因特网是第一形态电话系统的开始。历史上,我们第一次看到一张星级电子通讯系统的略图。因特网是第一形态电话系统的婴儿、萌芽和种子。他们将会说什么语言呢?他们很可能会说英语。英语已经是精英语言。我在每一次会议上都用英语发表演讲,而精英商人、政客和科学家也都说英语。从现在起的100年之内,英语也将成为中层阶级的语言。中层阶级也都会说英语,就像说他们自己的语言。
欧盟是什么?欧盟是第一形态经济的雏形——我们为什么要有欧盟?为了与北美自由贸易协定抗衡,也就是与美国抗衡。因而我们看到了第一形态经济的雏形,我每到一个地方,包括我听广播、看电视,我都能看到第一形态文化的开端。年轻人喜欢摇滚音乐。他们喜欢RAP(边说边唱),并跟着最流行的拍子跳舞。精英喜欢更高级的时尚,我认为在全世界范围内,一贯如此。我们都喜欢电影,那也给了我们一个第一形态的文化形式。
每到一处,我们都能看到第一形态文化的开始,但是也有反冲,这就是我所担心的。有些力量不想拥有第一形态的星球文明,因为这一文明是多元文化的,是启蒙的,是进步的;它相信平等和未来的进步。这些力量就是恐怖分子。
恐怖分子信任负一形态的文明—— 一种由教条、严厉的宗教信条和一个非常严格的等级制度控制的文明,在那样的文明中,男性高高在上,女性被踩在脚底。
那就是恐怖分子,他们不相信进步的第一形态的星球文明。现在还不知道我们能否从零形态转化到第一形态。一些人认为,也许在2012年,我们会转化到第一形态,但是我认为2012年只不过是复兴,一个新的开始。我们将驶向何方?人们一直讨论的宝瓶座时代在哪里?对于我来说,那就是第一形态文明——星球的、包容的、进步的、科学的、民主的——我认为,那就是我们前进的方向,除非我们先把自己炸死。

□我想在你的星球级别的区分中加上一些想法,不只有所谓的“恐怖分子”不想让我们这个物种进化。在恐怖分子的身后,还有另外一些力量正在发挥作用,你认为呢?

哦,是的,我赞同。

□我明白,所以我们不必扮演任何人。

是的,当然,我们有核武器、人口增长、生化武器、温室效应和全球变暖这一系列的问题。有一些力量不想让我们进化到星球文明,因此我认为有一个抗拒时间的种族。那就是我看到的一个模式。
一方面,我们有启蒙和教育的力量,这些力量正成长为卓越的、多元文化的、星球的文明;另一方面,我们有无知、宗派意识、原教旨主义以及种族主义的力量。我们自身有黑暗的一面,这一面来自原始森林。我们仍然有自己古老的大脑,不得不在沼泽地和森林中对抗所有人,我们身上仍然有这些不好的东西。我们不知道谁会赢,但是我认为,总体上,我们会生存下来,我们将平安度过2012,最终我们的文明将走向第一形态。我很乐观。

□我也是!话说回来,请你告诉我们,你的《不可思议的物理》一书的总体意义和目的。

刚刚去世的阿瑟•克拉克(Arthur C. Clarke)曾做过一个非常有名的论断,我引用一下:“任何足够先进的技术都是无法与魔术区分开的。”
现在,想一想魔术。
魔术能够消失、隐形,又在另一个地方出现。魔术是一种将一个物体变为另一个物体的能力,它使它们消失,又使它们在某个地方出现。未来我们将拥有这种能力,比如,隐形术。两年前,在杜克大学(Duke University)和伦敦的帝国理工学院(Imperial College),我们在隐形能力研究方面获得了重大突破。我们能够使一个物体消失不见,至少在你使用微波射线的时候才能看到它。就在几个月前,在加利福尼亚理工学院,他们展示了同样有此功能的可见光。我认为,在未来的几十年中,我们将能够使物体隐形——所以,哈利波特(Harry Potter),你要小心了!

□那不就是著名的“费城实验”的本质吗?

从某种意义上来说,是的。我们现在有能力展示隐藏一个物体的可见光了,这种光还可以在另一头将物体重现。我们以前都认为这些是不可能实现的。我在大学里给学生上光学课,我常常告诉他们隐形能力是可能的,因为光和水不一样,光可以缠绕一块大圆石,然后在另一头使物体重现,就像一条河一样。

□你是怎么做到的?

有一种新的物质叫做“超物质”(metamaterial)。它上面有很多杂质,以前我们从来没有想过这些杂质,但是这些杂质可以与光线反冲,这样它就能隐藏一个物体了。
把哈利波特带过来,然后把他放进一个圆柱体中。触碰到圆柱体的光线包围着圆柱体,然后在另一头重新成形。这一原理已经在两年前被证实了。这震撼了整个物理学界。在此问题上,每一本物理教科书都是错误的。

□但这是多么奇妙啊!这就是“不可思议的物理”,是吧?

是的,这就是不可思议的物理。现在,另一个“不可思议”的东西,像魔术师一样消失,然后在另外一个地方重新出现。我们物理学家称它为“心灵感应”。在原子层面上,我们在实验室里已经能够做到这一点了。我们已经能使一个光子消失,然后让它在100英里之外重新出现,比如从加那利群岛(Canary Island,又名金丝雀岛)到另一加那利群岛。
下面,我们希望做一些有关航天飞机的事情。我们想要在地球上取一粒光子,使它消失,然后让它出现在航天飞机上。2020年之后,我们计划在月球上做这个实验。
这种实验是没有止境的。我们确实能够使一个物体在月球上重现。现在,对于原子来说,不只是光子,我们用铯原子和铍原子做的实验已经取得成功,当然,这些都是在实验室里试验成功的。我估计,在未来10年时间里,我们应该可以让一个分子,例如DNA消失,然后让它出现在别的地方,也许还可能是一个病毒或一个细胞。
在人类身上做隐形实验也不是不可能的。老实说,一个人有着50万亿个细胞。我们无法传输所有的细胞,但是我们的技术已经达到这个水平了,我认为应该考虑一下哲学上的限制。当你被传输的时候,你事实上已经死了,你消失了。你在这一过程当中分解,然后你在别的地方重现。这个场景常常在电影中出现,比如《越空行者》(Jumper)和《星际迷航》(Star Trek)。你刚刚看到寇克舰长(Captain Kirk)在一个房间中死去,又看到冒充他的一个人——寇克舰长出现在那里,说:“我是真的寇克舰长。我有他的记忆、基因、神经系统以及他的怪癖。”
这会让你怀疑灵魂。如果你看到他分解,而他带着自己所有完整的记忆重现,他的灵魂发生了什么变化呢?

□那也是一个我和其他玄学家们所担心的问题。

我们物理学家也觉得这个问题非常棘手。对你来说,自己身上的所有原子分解意味着什么?你已经不在这儿了,无论你曾经是谁……你已经走了吗?站在那儿的另一个人是谁,长得如此像你,拥有和你一样的思维模式、一样的记忆,而且他声称他就是你?在未来几十年中,这将是一个学术性的问题,我们该如何处理?有灵魂吗?我们在实验室中将要面临这样一个问题。
在《不可思议的物理》一书中,我描述了很多你在电影中看到的技术(比如《哈利波特》[Harry Potter]、《终结者》[The Terminator]、《外星人》[E.T.],《星球大战》[Star Wars]以及很多好莱坞大片),这些其实都是建立在我们物理学家认为将来会实现的技术上的。关于我们何时才能拥有这些技术,我无法给你一个时间框架,几十年,几个世纪,几年,或是一千年。

□这项技术的实现会比想象中更快些吗?让我们再回顾一下《星际迷航》,再看看那些掌上通信工具。我的一个同事说,诺基亚(Nokia)是按照《星际迷航》中的模型生产的。

是的,我们也有这样的感觉。

□我们已经有这些产品了,而且它们看起来完全一样,功能也一模一样。

是的,再看看心灵感应。你知道,心灵感应曾经被认为是占卜者和拉斯维加斯(Las Vegas)魔术师的无聊伎俩,但是我们物理学家实际上已经能够复制心灵感应的有限的几种模式了。比如,在布朗大学(Brown University),他们在完全瘫痪的中风患者的大脑中放上一块芯片,芯片大约有一美分的1/4大,然后将芯片与一台手提电脑连接起来。我们在3小时内训练他们阅读电子邮件、打字、猜字谜、打电子游戏、上网。

□那听起来有点毛骨悚然,加来博士……但是你看,想一想所有的植物人,陷入全身瘫痪,他们无法做任何事……而现在他们可以写电子邮件了。

是的,但是容我插句话,那么健康的人接入一个电脑会怎样!
将来有一天,人们会有选择的。
他们会有选择。一些人也许真的想插入一根微型植入管,他们只需要想一想就可以上网。这些都是可能的。他们会有选择吗?我们希望他们会想得更多一些,想一想插入芯片的意义,插入芯片意味着什么。
现在,如果你想知道一些毛骨悚然的事情,这里还真有一些。
我们可以利用核磁共振成像仪和脑部扫描,查看一个说谎者的脑部模式。当你说谎的时候,需要更多的能量。为了说谎,你必须要知道真相,还要制造一个借口。这些都是大量的能量,在一张脑部扫描X光片中很容易看到这些。将来,我们也许能通过读取大脑扫描的X光片结果,就可以看到思想和感情的轮廓。当然,这可能需要上法庭。
有一家保险公司拒付一个保险索赔,原因是公司认为那个人自己烧毁了房子。保险公司说:“你自己烧毁了房子。因此,我们不会陪你一分钱。”那人非常气愤,回答说:“我要去告你们,将我的大脑扫描X光片呈给法庭,我要证明自己并没有烧房子。”
将来,这些手段也许都会走向法庭。我们也许能够通过读取嫌疑犯的大脑扫描X光片,判定其是否有罪。

□你认为这将把我们带入第一种形态的星球文明吗?

一旦用激光扫描这个屋子里的人,他们的灵魂将发生什么变化呢?伦理学上的问题随之被提出来。如果你读取了一个人的大脑,那么隐私呢?我们有没有隐私呢?我们希望像科幻小说中那样剖析自己的思想吗?这些问题我们都要面对。无论我们喜欢与否,有些事情总是要来的。这本《不可思议的物理》告诉你这条路上将要有什么来临……无论你是否喜欢。
我也讨论了未来几十年星际飞船出现的可能性。
NASA已经开始考虑在将飞船发送到那些行星上去时,顺便携带些什么。事实上,我是NASA的顾问。我必须考察一些向NASA提出的建造星际飞船的提议,实施起来当然还需要几十年,不会是马上,但是我们正在考虑与外太空的外星文明建立联系。
这不再是电影中的东西了;我们科学家正在认真研究之中。微软的亿万富翁保罗•艾伦(Paul Allen)已经投资了2600万美元建造一个新的望远镜(电子望远镜)来窃听外星文明之间的对话,因此这是一项非常大的买卖。亿万富翁们开始把钱投在这一领域中,一些人声称,在25年时间里,我们也许可以与另一种有智慧的文明进行第一次接触。

□我认为已经不远了,也许在未来的某个时间,在你还记得这次对话时,但是我认为可能比25年还早些。

可能吧……很有可能马上发生。

□我真的很想问你,你想看到一个什么样的“不可思议”的发明被创造出来?你认为,人类最需要什么?

啊!我们现在最需要什么?我想我们需要解决这些古老冲突的途径,这些从人类出现就已经存在的冲突,我们还需要一些公平的途径。
当然大多数人宁愿要更小的东西:更多的钱用于医疗保险;少投一点钱给……在政治领域发生的欺诈现象。我希望我们能做一个大一点的馅饼。我们不是为小馅饼和陷入内战和进行侵略而奋斗,我希望科学和技术可以给我们一个更大的馅饼,这样我们不必常常为了分馅饼而陷入宗派斗争。
但如果要我现在考虑一个能真正解放我们的机器,那也许就是建造一个时光机器来观察未来。我们可能看到事情是如何发生的,从那里学到教训,也许有一天会改变自己的未来。

□发现这些,会不会给我们带来更多的快乐呢?

是的,但也会带来苦恼和痛苦。这是一种交易。

□好,这里我不禁想到:在你不可思议的人生和头脑中,正寻找着创造不可能的途径,也许将来出现在我们面前的一种机器就是源于你在瑞士的发明,在瑞士你建立了更高的领域。我也相信,一切都是音乐,希望有一天我们能通过外太空和外宇宙,看到在这个星球上更高的八度音阶。

是的,我也希望如此;我希望我可以实现爱因斯坦的梦想,读懂上帝的想法。我认为目前我们大家都向着一些宇宙问题前进,我们可以在自己的后院中解决这些问题吗?我们如果能活着看到这些问题因技术突破而得到回答,将是多么美妙的一件事啊。
超弦理论很有希望能把我们带上这条道路。
作者: zzz19760225     时间: 2016-2-3 19:26    标题: 10 LOLI地狱 尼古拉的遗嘱 11楼

10 LOLI地狱     11楼

之前(几个月之前了吧)在yinyfly兄那看到了一篇关于炼金术的文,我就告诉他《尼古拉的遗嘱》很有意思,没想到他竟然误以为这是本小说,既然你诚心诚意的问了,我就大发慈悲的告诉你,为了防止世界被破坏,为了维护世界和平……飘远了……

《尼古拉的遗嘱》主要讲述了伟大炼金术师尼古拉勒梅(法文Nicolas Flamel,英文翻译Nicholas Flammel或Nicholas Flamel,中文翻译就更多勒)充满传奇的一生,以及与其相关的神秘的炼金术。所以这本书并非是杜撰出来的小说,而是徘徊在史实与传说之间的历史文献,因为其中含有大量的精美插图,所以应该没有电子书了!

←这就是生于1330年,原法国代书人大街的抄书员,伟大的慈善家,伟大的炼金术师,贤者之石的始造者尼古拉勒梅先生!他的一夜暴富,在圣婴公墓留下的神秘图案,空空如也的棺木,两百年后的自传都将的这位看似弱小的老头紧紧的与炼金术连在了一起!
←直接导致尼古拉先生走上炼金之路的《犹太人亚伯拉罕之书》上记载的传承炼金术的七幅图之六。虽然我们看到这些蕴含着世界的真实的图就像读《相对论》一样茫然,但也不难看出炼金术与《钢之炼金术师》里的有着本质的不同。
←眼熟吧!惊讶吧!下巴掉在键盘上了吧!没错,这个图案看起来很想世界卫生组织的LOGO对不对!谢谢各位送了我一栋房子,虽然你们只是一人送了一块砖……好吧,我知道你想到了荒川弘设计的那个LOGO,这个同样是《犹太人亚伯拉罕之书》上记载的传承炼金术的七幅图之一。
←       最早传入欧洲的炼金术文献之一的       →
《翠玉录》短短的13句话揭开了炼金术登上历史舞台的序幕。左边是20世纪初由一些拉丁文研究者根据一份12世纪的拉丁文手稿译出的,而左边是牛在1680年译的。什么?哪头牛?就是牛123的牛。还是不知道?就是Issac Newton啦!但牛顿的那份貌似是古英文,看不懂呢!
之前提到的尼古拉先生在巴黎圣丹尼大街的圣婴公墓第→四存尸房的墙上留下的神秘的图案。1612年《解读尼古拉勒梅刻在巴黎圣婴公墓第4墓室拱墙上的难以理解的符号》在巴黎首次出版,作者署名尼古拉勒梅,如果看到这里还没有什么疑异的话请拉到第一幅图再看看。冗长的名字显然是编者加注的,而作者用第一人称讲述了自己寻访贤者之石,探究真理的艰辛过程,同时解读了那神秘的壁画,揭露贤者之石制造工艺的壁画。
←这是现藏于麻省理工学院的1693年牛译《解读尼古拉勒梅刻在巴黎圣婴公墓第4墓室拱墙上的难以理解的符号》手稿,什么又问牛是什么?自己拉回去看啦!牛顿热衷于炼金术并不仅仅限于他“无所作为”的后期,有人认为牛顿早已从《解读尼古拉勒梅刻在巴黎圣婴公墓第4墓室拱墙上的难以理解的符号》中获得了灵感进而得出了重力和光的理论!所以牛顿被称为“牛”!不对,是“第一位科学家,最后一位魔法师”!
黄道十二宫在炼金术中有独立的意义。《尼古拉的遗嘱》中还→有很多此类的图,例如yinyfly兄那篇文章里的那幅出自1772年丹尼莫里耶《尼古拉勒梅的炼金术》中的拟人化的七大金属。
←   尼古拉先生的故居。左为1990   →
年,右为2004年。现在已经是“尼古拉勒梅餐馆”了。记得《钢之炼金术师》里贤者之石也是记录在菜谱上的吧!
←伟大的面孔。炼金术师图谱。除了那个→很牛的牛,还有很多在其他领域也有很高造诣的人物,例如化学家波义耳也被列入其中了!什么?你问我右边那幅图右下角那是谁?既然你诚心诚意的问了,我就大发慈悲告诉你,为了防止世界被破坏,为了维护世界和平……前后照应嘛……OTZ
我要说的就这么多!
作者: zzz19760225     时间: 2016-2-3 19:43    标题: 11《关于时间》 12楼

11《关于时间》     12楼

《关于时间》
         
根据央10最近推出的四集探索宇宙大爆炸、宇宙密码科教片理论,宇宙中若干的星系在形成之前都集中在比原子核还小的空间里.那么,这包括太阳系,包括负载太阳的银河系.那么,所谓时间,在此之前已是一个无法比拟的废话.即在星系特别是太阳系形成之前不可能说时间的.因为,如今地球上的一切时间,包括生活的,工业的,科研的,都是依照地球自旋和公转而定格的.
没有地球自旋和公转就没有我们理解的时间语言。没有我们语言所指的实际运动事实,也就没有时间事实。
     
所以,时间从根本上说就是太阳系内地球运动的记录.地球匀速运动过程的记录.从一个运动点,到另一个运动点的记录.就分段描绘成时间.即把地球绕一圈分成24格就成了一天的时间,一格叫做一小时,一天24小时,一小时再细分为60格,为60分.一分再分60格,为60秒.生活上,到分就可以了,运动比赛上要到秒,而科研科技上更细分毫秒,微秒……
     
所以,时间只是当今地球绕太阳匀速运动过程的一个描绘.离开了这个运动,现在使用的时间就不存在了,而,现今对星球天体过去未来的时间计算,都是鉴于地球运动的照搬假设.并不代表星球,天体过去未来的事实.过去和未来物质天体的运动与现在根本不是一回事儿,在那非匀速的四维空间,你怎么去对等?也就是说宇宙大爆炸以来120亿年了,这只是根据现在的数学模型演译.当说,宇宙在膨胀,星系在远去,在过多少亿年……..等等,这样的语言都是依照今天的常话所假设.都是依照数学模型所认定,所推论.
     
那么,余此到过去未来那个运动事实如何呢?我们今天地球上的人没有理由推翻,也没有权力描述.如今的种种描述也许可能就像哥白尼的地球中心学说被后来哈勃推翻那样,被亿年后的事实推翻..
     所以,时间,时间,时间.实际是宇宙时段中地球这个天体运动一个很狭小的概论.它只存在当地球太阳这样一个运动关系的狭小过程.
    因此时间,只表达地球与太阳运动的关系,特别是现今文明社会时代的关系.比如,在32亿年前,三叶虫时代,后来的恐龙时代地球都没发生时间语言事实.
   
所以,时间,是文明社会人类对地球与太阳运动关系的一种理解而理论成立.可是,对此五年前,2003_____2005年时,在央视网站科技论坛上,曾有一大批网友为时间与运动的关系发表个若干讨论.本人也参加了这个讨论.为此,集结了一些文章共十四篇,为了使喜欢本思维.永恒网页并且对什么是时间感兴趣的朋友略知一二,故而今天把这些文集结按发表时顺序排列.转余此.
     是谬是实孰尔评判.
                                                       思维.永恒    2008`3`24

  ,
   一,时间你躲在哪里?
   
时间,你可知道,我们目前的央视网论坛科技频道正在展开,时间辩论大战,无数只眼睛在盯着你,无数张嘴在对你说七道八议论纷纷.那场面,仿佛古战场的尘埃与硝烟腾起,还夹杂着战马嘶鸣声.........
    “时间"==???..时间的身份?时间属于哪一家的主人.......
     
时间,在科技生产中以秒计,以微秒毫微微秒计,每秒万亿次的电子计算机其时间,间隔已精确到1秒/万亿.时间在高科技中已具有绝对位置.时间在生活中已用之为常,早晨出门看时间,乘火车看时间,过年过节想时间.可以说,没有时间概念这世间的生活一切皆乱套,皆停顿.....我们珍爱时间和稀奇时间都是因为"时间"里包含了这么多物质和事情..时间在哲学家的眼中已经是一个抽象的至尊.那么,我们能走近时间么?同时间对话么?同它辩解辩解,理论理论,交流一番?
   
其实,时间从人类社会一出场,就并没有亮明它的身份.而对时间的拷问,是在人们意识到时间的无比珍贵,又有了高度抽象高度反思高度省悟能力之后.看吧,那许多关于时间的话题都勾起了人们无尽幻想,比如电影<<侏罗记公园>>,把人们引到了恐龙存在的时空里去,特别是科学发现120多亿光年以远的天体存在,更是引起了无尽遐想.于是有人幻想时光倒流,有人特别爱哼唱"让地球忘记了转动,让时光懂得倒流......"的歌.这等等都是我们的思维活动,我们的意识活动,我们对发生在自己身上和周围客观事物中的事物反省.
   
然而,这时,时间却和我们藏猫猫了,它躲在哪里不见了.于是,关于"穿越时空邃道"的争论,就争论不休.持"有时间邃道",可以穿越时间邃道观点的人.和据守无"邃道",不存在穿越的人,均愈战愈勇,近乎白热化.于是,我们曾在央10节目中看到专家出场"摆平".却原来,时间看着我们,找它找不着万分着急的样,竞躲在一个地方偷偷发笑呢.时间",你让我们不能忘记你,因时间带给我们理想与财富.时间抓得越紧骤带给的财富越多,叫我们怎么不怀念时间嘛.伟人曾说过."多少事从来急,只争朝夕".平民常说"少壮不努力,老大徒悲伤"

:通过时间,会反映出很多物质和事情出来."早晨,阳光爬上了山坳东边的山坡",早晨是时间,山坳和山坡是物质,阳光也是物质;"1949年10月1日",这个时间里在天安门前升起了五星红旗.天安门和五星红旗都是物质.时间对我们这样亲切,它仿佛就在我们身边,我们再仔细找找看啦.....门仿佛"吱呀"一声打开了,是谁打开的!!对,是他,______就是思维,人人都有的思维.哟嗬.....终于找着你了,逮住你了,你这个"坏东西"!!你这个调皮捣蛋家伙.我们找你找得这样费心费神费情的时候,你竞躲在大脑记忆库里发笑呢!........此是童话,趣事之后,我们不得不深思,时间到底怎么________
时间是人从主观出发,从主观,对客观的概括`综合`把握规律.首先,时间是主观对客观匀速运动的描绘,时间是意识的产物.时间是一种意识结果.时间并非宇宙内的物质本身.包括,对远在宇宙天际120多亿光年以外的物体描述(科学探测),也是借助光速匀速运动计算的.如果,假如,也许,光速经过银河系以外的那些大大小小星系时,光速有所"逗留",亦或"突然"快跳.那么,"这个测算就不为真".只是,在至今,这"突跳"与"逗留"的假如,不能成立的情况下,我们依然.........而,其次,时间是记忆(记忆与意识在概念上不完全重叠)对匀速运动的回顾,描述与表达.因此,时间的本质是匀速运动.时间的机会因素是记忆,并且由这记忆上升成为意识.而意识对匀速运动的回顾`描述,与开发简直千奇百种.比如,用来纪年,用来记岁数;比如制造手表;比如按排机器运动的先后次序`自动流程.包括气缸活塞与连杆之间的衍接,机械手臂的操作.试想,在所有机械化运动和自动化运动中.如果没有一个匀速可以"抓住"[被用来计算,调控,排次序],那么,就达不到机械化,自动化.运动员在短跑赛中的运动"不是匀速"的,所以他们在这中间的运动无法用时间来描述.但是有一个办法,人们采用"算总帐"的方法,从起点到终点计时.所有不是匀速的运动,运动过程中都不能用数学时间来表达.比如,一张飘飘摇摇落下来的纸,非匀速的运动无法产生一个"纸张下落公式".而著名的自由落体公式F=1/2gt平方,其中的米/秒则是由地心引力支配的匀速.在小学算术中常有从甲地到乙地,相距多少公里,汽车时速多少公里,算出用时多少的作业.要知道,这个算出来的"时间",在实际中是没有支持的.任何一个汽车(哪怕封闭的高速公路,航空也会遇气流雷雨改速)都绝对做不到真正匀速.所以凡是由人的意识支配的运动都不是绝对(真正)匀速.时英钟再多么"准确",都还得被迫与地球旋转周日,定期"核对".发电厂发电机的转速也不是恒匀速50周/秒.目前我们真正"信得"过匀速是地球旋转,它是发布匀速运动的绝对权威.如果,地球匀速改变时,也许是地球未日来临之日,至少生物钟会.........还有碳14的测定,同位素的测定,都依赖了宇宙中某一特定的匀速机制,元素的运动衰变必须是匀加速或是匀减速才行,才有可能给人提供联想的机会,最具说服力的高等数学物衰公式才能建立.
     因此:记忆+匀速==时间
   
时间不是物质.时间不是运动本身.时间是思维里的概念.时间之所以让我们看不见"全身",我们能看见时间的原体(物体运动),却看不见时间这个影子.时间是物体运动后产生的"影子".时间经人的思维抽象`概括,已经蹲在我们头脑里了,若问它在哪里?!嗬,好哇,我们看见你了,你猫在大脑记忆库里呢!?你让我们好找!!!找死个人了哟.....嗬.记忆概括了时间的起端和终端,没有起端的记忆,就没有终端的概括.留在大脑里的记忆可以把时间重叠.这个"重叠"过程就是意识加工的过程.思维的过程,抽象与综合的过程.从而完成主观对客观的认知.认知的结论,又留在记忆库里.所以记忆是"时间"涎生的桥梁,是时间的元素之一,匀速是元素之二.一些大跨度的忆,比如山体擦痕对冰川的记忆,化石对古生物的忆,陨石对天外来物的记忆.又得经过人的认知能力方能化解为时间.而这时,人头脑里则动用了知识的记忆.
   
所以,无记忆不成时间,无匀速不成时间.时间,时间呀,时间啦.我们要认识时间必须从思维的逆向之路,倒转回去才能在路上找到.在逆向路上总会有人告诉你时间的身份,告诉你时间是哪一家的人.而,始终沿着思维(意识`认知能力)的来路寻找,朝来路方向继续探望,张望,"打听".是不会有结果的.
     
     二,
    电影拷贝"时间"无效
   作者:思维.永恒3   时间:2003-09-18 16:39:00
________写此文是针对有网友坚持“时间可以倒流”,并举电影拷贝时间,现场可以看到几十年前的事实,而就此讲时间倒流,因而写此文.___2005`8`11加注
     
现在人们已公认,时间与运动(运动里必须有物质)有关系,只是还没有公认:匀速+记忆==时间.(匀速.必然是运动的匀速,物质运动的匀速.匀速不为空).如果你愿意确认,这个大家还没公认的等式,以此为基础来讨论拷贝的话,.那么,我就说,在电影倒放的拷贝里,没有匀速这一项.注意:片子本身(胶片转动)的匀速,和片子上面记载的信息匀速是两回事.这里的信息己是"照射"了物体和走动人物后的信息,是物体(从信息而言人也成了物体)运动的代码`代号`象征.己经高出了物体一个级别,物体(和物体运动)在低一级别,两个不在同一个级别(哲学叫范畴)的概念不能平等同质互换.信息(画面`伴音)在倒流,仅仅是信息倒流,是信息倒流的事实.不是原物质体运动的事实.所以也就没有"时间"倒流的事实支持.这种"信息时间"倒流的事实,在我们每一个人头脑里都轻易发生着,比如,回忆1秒钟前,十年前,甚至六十年前发生的事,自经亲手做过,亲身经历过的事,都时不时在发生.这等等"时间倒流"中的时间,不是大家正在讨论中的"时间"
    三,,
   且不鱼目混珠
   作者:思维.永恒3 时间:2003-09-26 12:10:27 ________为了我的鱼目,不去与珍珠混在一起.
______当时写这一篇的原因, 是因有网友出于恭敬对本人“时间你躲在哪里”文恭敬有加,为不冒牌站领那位置而写此文.__2005`8`11加注
    1,这不是一个时间计算公式(指匀速+记忆=时间).
    2,时间的计算公式,国际上已很完美,运行很准确,很可靠.
    3,我不善于列计算公式,也不会列计算公式,我的数学能力很差.
    4,我只是在回答意识上(关于时间)的一些问题.一些困惑,一些未解的争论.
    只针对"时间与运动的关系", "时间邃道", "时间倒流"这样一些问题.这些都是一些意识问题,而不是科技计算问题.
这个(匀速+记忆=时间)等式是个概念"加",是三个概念的等式.这种做法有悖于人们的习惯,可能正是由于人们习惯的做法才产生那些(关于时间)未解和困惑.可能只有通过悖于习惯的做法才能求出(意识上关于时间的)未解,不是么??对两个概念的加"+"号,在脑内实质是在进行综合`归纳的过程,用俗话讲成复合`重叠的过程.等号"="则巳是出结论了,结论写在"="后面.所以"+"号和"="号(只)是反映脑内的两个运动(思维)状态,这里不用"+"
"="表达普通数学意义.
   
下面,这样来描述这个等式的流水线过程:当关于匀速的事实发生了,"事实"经脑内意识(思维)第一次处理后,判断为匀速(概念),这匀速概念经脑内记忆贮存(也有不贮存的,那都是以生活理念的形式而流走了),贮存目的是为了思考(对于颁布时间和开发时间的人,这一步是绝对不能少的.舍此便无法颁布和开发.舍此,公众意义上和科技意义上的"时间"就不能诞生)和(集体)研究,用一句话表达:等式左边表示,脑内完成了对物体(物质)匀速运动事实的概念贮存,等号本身则是个过渡,它表正在思考(研究,讨论,征求意见,验证数据,作数学模型等等)之中,思考的本质还是在进行综合`归纳等,一俟"思考"结束,结论就写出来了,放在等号右边了.
      那么,列这个等式的与意义?再整理如下: a,解决哲学家都回答得吃力的"是否有时间邃道?"问题;b,匡正<<时间与运动的关系>>主题辩词的偏执与缺陷;
c,勾引起人们对时间的想往与钟情.这便是为了不引起误解,我对该等式进行的修饰和限制.以避勉和国际流行理论"鱼目混珠啦.
     
那么,保留这个(异类的,业余的,自编的)等式目的,是在于它一目了然,有利于简化对时间的理解.这个等式所蕴含的概念内容(步骤,关系,起因,结果)都很准确,(很)不可动摇.只是等式书写符号需另加标识,欢迎网友凑兴.我(对时间的)这(论证究方法)实际是在做着意识与物质交界的工作,在意识与物质的临界点上.在自然科学与社会科学的结合部.它们(临界点或结合部),曾经是一个"几不管"的东西,一个未曾开发的沼泽地.于是,在未说明之前,这位网友"置疑"的出现,便很理所当然了.也不知这样说明和解释之后,离您的想象还有多远??
    5,我对意识的纵深理解
   
其实,时间也好,运动也好,匀速也好.这些都是人的意识产物.没有人去发现一个物体正在运动,它就没有我们生活中的运动意,人发现了,才创造了(针对这个物体的)运动这个词(概念).世界上所有的知识(无论科技的文学的......)都是人的意识对物质的反射_______物质发出信息,人类接收信息,"信息"经脑内处理后,又对该物质赋予,照射在该物质上_______实质是关于该物质的什么什么......的知识
.这份知识在脑海里一出现,就立即在脑海里出现该物质的景象,引起对该物质的注意........
所有在意识的哲学和概念,认知上的争论,都是由于"没有打开意识这个核挑壳".很多事,大家都是"不被知道"地蒙在鼓里,被争论不休.
     
我们的意识,在面对现实时,也象面对地心引力一样________被"现实"这个引力"引"得失去了知觉_______失去了对现实以外的知觉.瓦解了醒悟能力.失去了(这种知觉)就等于有一个"核挑壳"在包裹着我们________的意识.
于是对于时间的(受)蒙蔽也就产生了.而,在我看来,(认识时间,揭开意识的蒙蔽,己经)是轻而易举的事(了).
他(对时间的认识)准确的意思是:有了匀速运动,再有了对这匀速运动在脑内的记忆,(即必须将这匀速运动的信息数据资料传到脑内来,并且发生记忆.即把信息在脑内"固定"下来);再在脑内发生对这已固定的信息,进行一系列思维活动.包括判断,推理,综合,归纳等活动.由此,依据(头脑内)曾经有过的关于"时间"概念的记忆(叫知识),作对比,类比,最后作出判断,作出结论________于是"时间"就在脑内诞生啦.(经过了这样的过程,我们也不怕别人说"因时间在脑内产生的"而唯心不唯心).或说,有了这样过程的,有了这样经历和这样"加工"的________"时间"就在脑内涎生啦.脑内诞生"时间"!!!"时间"一定涎生在脑内!!!只有脑内才涎生"时间"!!!不敢于承认这(三句话)一点,就不能解开"时间"那个包袱.时间是意识对运动(特别是匀速)的加工,对运动的确定,经过确定后又贮存(记忆)在脑内.现实生活中,并非完全贮存,大量的都删除了.
    6,"时间"是意识的产物
   
(仅凭)物质的运动本身,是没有时间意义的.比如说"电子绕着原子核在运动".并且电子还在自旋,有了这样的运动却没有关于电子绕行运动的时间.设有电子绕行"时间"这一事实发生.没有发生的事实就不叫客观存在.客观存在的只是电子绕行运动本身______正在发生着.[这一点,将在下次用来排斥"绝对时间"].这说明,必须要有人把意识加(加注,关注,领会)在运动中的物质(物体)上,才能(在人的脑内)出现时间.成为我们心目中的时间.那你再说,现在天上看到的那些星星,它们不在运动吗?该星星上有没有时间?[其实,我们人总是把自己排斥在客观世界之外,自已钻到那个"核挑壳"里去受蒙蔽.对于宇宙天体而言,我们头脑里意识(包括"时间"概念,包括我们的躯体在内).不也是宇宙自然吗?也是宇宙的客观,甚至脑内神经元上信息的运动,也是宇宙的客观].
     
再如,当一个钟挂在一个长期没有人去的积满灰尘与布满蜘蛛网的房间里,不管它是多么石英钟地准确.都不会从这个钟上,反射出"八点了,十点了"的意识活动.钟表大小指针的格位,只是一些符号,没有人去"读",它能变成时间??又如,当人类没出现时,从地球混沌洪荒到类人猿阶段,地球早晚,日起日落,地球的旋转与现在一样准确(而且匀速).可是那时,在地球上并没发生"时间"的意识活动事实.直到地球上有人说出了第一声"哦,太阳落山了"
,"喂,该吃早饭了".于是,地球上发生了时间事实.地球球的意识"时间"诞生了.
     于是,延伸到: 所有的物,只有人的意识去发现,才能成为事.
所有的事,都是由人的意识生成的.事物不是一个整体.有物不一定有事,有事一定有物.有(物的)运动不一定有时间,有时间一定有物.这是一个可逆(后者)和不可逆(前者)的关系.
人的所有意识都可以生成事,"时间"是一个事,不是一个物.
__________所以,"时间"是意识的产物.

    宇宙中发生了什么?
________关于时间的肯定回答
     目录:1, 宇宙中曾经发生过什么?
            2,抽象
           3,时间梦幻
           4,时间的身份
           5,理解时间困难的艰硬点在哪里
           6,尾声
_______,
      1,宇宙中曾经发生过什么?
      关于地球起因和宇宙起因, 的描述正在日趋成熟, 人们已基本接受了"宇宙由大爆炸而来,
地球40多亿年前才由炽热岩浆冷却下来"的观点.地球上开始没有生命, 也没有意识.
宇宙中迄今也没找到地球以外的生命.没有生命,没有意识.而且只有高级生命才有意识, 高级生命不过以百万年计的历史.
     在人类出现以前,地球上没有发生______由意识产生的时间事实.( 哪怕说说"早上太阳升起来了"这样的意识时间),地球在宇宙中本己不为再说,于是,
在人类没出现以前,宇宙中没有发生"由意识产生的时间事实".发生的才是事实,没发生的不是事实.发生在什么时候,就是什么时候的事实.脑内正在进行意识的时候,思维的时候,思考的时候.也有一个发生事实存在.
既然,人的肉体也是地球上物质的一部分,人的头脑也是这一部分,
内神经元的运动(产生意识),也是地球上发生的事实,那么,也是宇宙中发生的事实.神经元运动发生的事实(即意识发生事实),直到今天,如果不是脑神经解剖学告诉我们,我们谁也不知道这个发生事实(直到今天,了解和知道,理解这个发生事实的人为数还不多).
     
我相信并且理解这个发生事实.我所有关于意识产生时间的论证都是从,这一线索出发的,这一理论依据出发的,这一理论武器.迸而这一认知能力将为我们打开时间的门.(不指时间工程计算角度,仅指意识时间感知).于是,头脑中思维(神经元运动)的发生事实______意识正在发生中的事实."他"不仅是本人(头脑)的事(事实发生),也是地球上事实发生______也是宇宙事实发生.于是,在人类以前,宇宙中没有任何关于时间的事实发生!!!
______因为,那时宇宙还没有头脑这个容器, 这个工具,这个载体.
     
于是,在宇宙中,牛顿的绝对时间是1687年间在他头脑里发生的事实;霍金的<<时间简史>>是在他头脑里二十世纪发生的事实.牛顿的头脑和霍金的头脑都不是120亿年前发生的事实.霍金用他(20世纪实际发生的)神经元上信息组合的(120亿年时间)词,这只是一个抽象的词,而不是120亿年前发生本身.神经元运动是事实发生.是20世纪的事实.20世纪思维运动结果符号,代码,所象征意义不象征120亿年前发生了那种………那种什么呢?把那种…….说成“运动”词是今天的事,那时谁也没在那里发生“运动”词事实.因为,宇宙(那时,现在,将来)不会自已说话,因为人在那个熔炼阶段无法……..
连“运动”词也没诞生,哪里还有从运动上升到时间的事实发生呢?嘴里说出(和文字写出)“120亿年”词语,是20世纪实际发生的事实.120亿年前只发生了那种……...[既不能叫“运动”词,也不能叫“时间”的事实].对待任何_______我们只要说,你实际发生了什么吗?你曾经实际发生了什么事实,你正在发生什么事实.实际发生事实.这是唯一澄清点.唯一可以用来澄清时间的各种纠纷,困惑,名种未解.
     
120亿年前只发生了那种………人类出现以前只发生了“那种”…….至今地球上也许还没有被人类发现的,将来到人们发现了可以用运动和时间来描述的_______目前,它们正在那里发生着它们的那种………..在它们那里,没有人的意识发现事实,它们自己也不能发生“运动”词,或“时间”事实.于是在人类意识以前,尽管宇宙中有今天我们说的运动存在,却未曾发生今天我们的时间.它们在那时,只实际发生了那种…………混沌?_______
     2,抽象
     
人接收的所有信息都是抽象的.人接收信息有视觉和听觉.仅就抽象程度而言:听觉中(从耳朵进)得到别人的语言声音,和视觉(从眼睛进)得到的文字形象,抽象程度最高.所有从视觉(从眼睛进)得到的自然(图景)形象,和从听觉得到的非语言声音.抽象程度同阶.都是"原创",真迹,第一手资料.
   
最基本的抽象是什么?当,看一张桌子,桌子物质分子结构中的分子,一个也没跑到眼睛里来,桌子分子的元素不计其数,它们作为桌子的物质信息一个也没到眼睛里来.我们所看到的"桌子",其实是光线的变形______按照“桌子”的要求作的变形.是按照桌子要求变形后的光线进到了眼睛里来._______光线到桌子那里去“取了样”,光线完成了最原始的抽象.所以我们需要了解的桌子信息,是经过光线转达的.光线的这一转达,完成了对物体(质)的原始第一次抽象.光线的这一转达,虽不是(桌子)面目全非,却已是(桌子)本质全非.所以,我们往往要“透过现象看本质”.却要花另外的很大功夫.起转达(传递)作用的是一些光素.这些光素已不是桌子本身,只是桌子浅表信息面.再经过视网膜的光电转换效应,又完成了第二次抽象.又完成了第二次质(光---嗟?的转换,虽然光线所夹带的意义没有丢失.进到脑内后还有判断`归纳`综合等多层抽象…….(也可把多层称为"第三次"抽象.在第三次抽象中,还有某些质的转换,虽然桌子浅表信息的老祖宗意义还在)所以.当我们意识作出(对桌子和其它任何可见物体)结论时.巳经抽象了"千山万水",已经跋涉翻越了“千山万水”.成为一个(只具原物体意义,不具原物体质量重量的)抽象概念符号了.而,语言信息在进到你的耳朵时,文字信息进到你的眼睛时,更早己是经过别人的头脑(治炼过)抽象过一次的(意识信息)了.所以抽象程度最高.这样的抽象性,带来了人类在脑内作信息交换[各种信息在脑内“短距离”`“近距离”`“零距离”地交换]的可能(性),和产生逻辑推理的条件.这样抽象的结果,使没有质量没有重量的抽象符号,已经不能沿逆路(抽象符号不能--?第三次"--嗍油?-喙馑?--嗤渡渥雷?回转去推动桌子(物体)本身,______象桌子推(反射`反挡`反抵)动光线那样.
     
抽象的符号只用于(投入到)人这样的高级智慧间交流,只在意识的范畴交流.这些交流构成(人的,社会的,人类的)意识活动.这些意识指导人自已的行为,却不能直接(通过手动,己经把意识在小脑转换成指令了,"小脑里没有意识"[见某书xx页])指挥物质(物体)……运动.(那些"意念移物"者就是在玩弄这种把戏.).所以抽象的符号(意识)只在意识范畴交流,不能直接触及物质.所以!!!你在屏幕上论文里写的"运动,物质,物体"也只是抽象的意识,而不是运动`物质`物体本身,_______那"…...."号里只是三个词而已.词属性抽象.词只是意识的表象.为什么,我们议到意识与时间时还那么惧怕说"时间是意识产生的"呢?!!"时间"这两个字是通过意识说出来的,为什么不是意识产生的呢?也不是一块木头和另一块木头交流的信息.所有的语言文字交谈本身就在意识之中(摆在每一个网友屏幕面前的不是语言文字是什么?).只有意识才能产生语言文字,理解语言文字,从而实现语言文字的交流______即在意识范畴的交流.这是在高级智慧间的交流,而不是人与物的交流.在物与物之间也不存在这种交流.就人的本质而言,一个人的意识也不能直接指导他人的行为,因为一个人的大脑不能直接和另一人小脑直接连,不能直接完成转换.只有通过语言和文字.语言和文字在人体(包括头部)发出来时,虽然把(意识)信息转变了形式,并且在声波(语音)和光线(纸上文字反射光线)于空间的传递过程中,信息形式又再次发生了转变.但其抽象的意义还在,(意识内容在传真过程中).所以阅读文字和听取语声都,比直接看桌子和听水声等要抽象得多.由于文字(比自然物更抽象)的抽象性,所以,我们此刻在网上就屏幕上的文字作讨论,就比直接面对实际物要抽象得多.
    抽象给我们带来什么?抽象最伟大的意义是带来人类,从其它生物中迅速提升(升格)智慧的效果,______使人为什么是"人"而  
成为可能!!!由于愈抽象(信息愈简便集中,愈零距离),我们人类认识事物的能力愈具有普遍性广泛性和闪电性.愈具有超越凌驾于其它生物和无机质之上的能力.这便是人为什么是"人"基本素质所在.越是更充分具有"人"的意义(高智商者),其思维的境界越远离最原始的事物,时间就是最始的一件事,从黄帝尧舜开始就有纪年了,在21世纪我们大家反倒都在问:"时间是什么?"`"
时间是物质吗?"`"时间是能量吗?"……,踩在脚下的鞋我们却己经不知道它是鞋了._______这皆因为我们都已经有了高等的抽象思维的能力.
   
抽象还给我们带来谨小慎微,感觉陷井很多.由于(思路,思维)无法沿着逆路回去,就不敢到原物质中去找证据.就象时间从原物质来,来到我们头脑里.我们(有的人)却无法到原物质(物体上)中去,以思维从桌子(前例)起点,沿途一直跟着光线,再跟着视网膜转换信号,再……..沿途一直亲自看到!!!然后有足够的勇气和底气______然后…….于是(在对自然界的认识上)混乱和纷争十分泛滥.对时间是由意识产生所进行的纷争便是一例.
   
我似乎想建立勇气和底气这样说:地球上的"时间"[之所以打引号,总觉得这个时间应该是意识的.如果不打引号,可能就是原来那个身份不明的时间],是经过这样的抽象过程(光素)和抽象能力(抽象思维)产生起来的;其它(星体)地方没有这样的抽象思维能力,就没有这样的"时间".[至少没有我们(地球上)这样的时间];其它时段,(比如混沌,及地球可能毁灭的以后),没有这样的抽象思维能力,
也不会产生我们现在这样的地球"时间".
   
从哲学上说,(哲学界已有人把)全部哲学都归结为语言逻辑.把文字语言分为0阶`一阶`二阶(<<语言逻辑哲学>>20页).现在,我们央网科技版正发生的,对"时间是意识产物"______的置疑,抵抗,及迷惑.之所以发生,(我说)是完全出在哲学的语言逻辑里,(对"时间是意识产物"不理解者)把:事实发生`抽象(思维)过程`词语(在脑内)形成,这三个阶段`这三个状态`这三个意义.模糊了,混乱了,或忽视了.鉴于主题篇幅问题,不展.
     
并且,本网版内,有网友"时间并不是一个和质量及运动并列的范畴"`"时间都是人以自已的需求给我们认识的世界所加注的"`"时间只是我们为了方便计算生活的步骤所制定出来的"…….都很肯定和醒目.他们的理解一定比我更深更广泛更高明.我相信我们绝大多数人的灵性都是准的.我们生活在一个准确的时间里对生活有准确的信心..当然,还有人说,"时间是人给地球涂的绿油漆"!!,虽然那个了些,却也有趣,令人深思..______在运动和意志(意识)之间……
    3, 时间梦幻
   
时间在我们身边慢悠慢悠地流淌,与我们随风而行.看梦幻吧,"我今天的日程排满了,上午去文化宫听课,中午参加一个朋友酒会,晚上还要演出…….";"我们必须赶在天黑以前翻上那个山坡,才不会摸黑进屋.";"你排必须在拂晓前占领5号制高点,封锁敌人退路……下命令!!.".我们警告罪犯:"你没有多少时间了!";与人商榷事:"我需要时间考虑考虑";交待任务:"你抓紧时间办吧.";人情交往,"唉呀,我一天忙得没得时间来看你";见面打招呼,"最近忙啥呀,好长时间没看见你了?"闲得的人说,"唉呀,这日子不晓得一天怎么打发!"梳理情感,"时间过得真快呀,一晃就是十六年了";峥嵘岁月,"把失去的时间夺回来!";催促学习,"一寸光阴一寸金,寸金难买寸光阴";唱悠悠的语句,"光阴似箭,时光任荏";上世纪有一首歌唱"我们要和时间赛跑………[赛跑?赛跑对象_____时间在哪里都不晓得呢],有趣.;(方言)"一哈哈儿"[一会儿的意思],"转过身就不见了"`"贬个眼的功夫"_____这些时间语言来得模糊,却很实用,生活中必须要有这样的时间语言,否则,人与人之间无法粘连.
     
在生活中,我们每每总有珍惜时间的思念,总觉得自身行动或他人行动,还不如人意.所有对时间的紧迫感,都出在对我们身体行动速度的紧迫感______希望身体行动速度快些快一些.象闪电更好(这一点有个潜机:头脑思维速度正是闪电).甚至有时能分身更好,同时在几个地方干事.我在梦幻着的时候就觉得:时光在流失,岁月流逝.或觉得时间很悠闲.或觉得时间是那样充足而又无限供应._____幻想这,时间是宇宙天空开启的门?幻想于,我明显地感到时间骑在地球这个园球上滚动.时间存在使我感觉地球好象永恒.甚或,时间的存在使我感觉地球就象宇宙的中心了那样……..我们人人都有梦幻这些时间的能力,我们都是常人,我们人人都能了解和体验时间.但是,议论到份儿上,大家都不知道“时间”是什么了.就好象头脑长在自已身上,却不知头脑为何物.用得来,说不出来.看得见,模不着.让我们灵魂困惑!兴许,我们人人都不习惯于“打开”自巳的脑.哪怕借助知识借助介绍_______来打开.于是,本来就装在脑内的(时间),我们就说______不在脑内了.“那怎么行?”,“那不唯心论了吗?”那不这,那不哪.如此,如此.因而使得,我们有时(很多人)对时间这种了解和体验,停留在:只能意会,不可言传,的程度.
______这是因为,放弃,遗忘,省略了抽象(放弃遗忘省略把抽象思维用来思考这些).或抽象思维能力从来就不足,(我自巳常常对自已的抽象思维能力感到捉襟见衬.)
______由于放弃遗忘省略,(或别的什么原因),就出现了把"只要有运动…….没有人的星星……."说成也有时间的怪事.愚弄不浅.
     五 时间三解
解一:模糊时间法_________拂哓,黎明,清晨.中午,正午,响午.傍晚,黄昏,擦黑.深夜,半夜,鸡叫头遍.这个方法是模糊时间,其由来及演变想必很古很古了.这法全凭人的习惯感觉,约定俗成,估摸着办.
     
解二,简易技术法_________(中国特产)子丑寅卯辰巳午未申酉戌亥.12个时段,子时约凌晨0点,从子到午6个段,6x2=12点.午时为12点.每一个段为2个小时,全天12段,24小时.这是在夏至那一天,以正午太阳位置,通过特置光孔投射,确定太阳正当顶时为午时.再以沙漏或水滴法,测定全天12个时段,再命其名为子丑........这个方法,利用了简易技术,分段精确度差,使用起来不方便,细分时不够,满足不了当代生活需要,更不用说现代工业化的分秒计时需要.
     解三,现代科技法__________24小时.将地球分成24格(经线),确定国际日期变更线..
________至于说(有人提出)"洗澡时间感觉"`"忙闲不均时间感觉",这本身很有趣,也由此引人对生活思考和联想.但巳属于人的情感范畴.不是科技范畴.(他又)"再论时间的本质"也没道出时间的本质.硬牵扯过来.总之,是对(时间的)

概念消化不够.
     
而,即使这样(三解),也还有人躲在宇宙深处发笑呢?!他笑我们地球人受骗啦!他说,你们地球上的24小时,那也是地球独自创造.因为地球的旋转(自旋和公转)没有对照物哦!无法"相对论"?地球的运转没有公证处与监督机构,谁知道它旋的准不准呢?
_________可是,我们(地球上的人类在时间取样定基准上)除了受地球的"骗",(还)有别的办法么?....
   
    六,
    时间可以看到
   作者:思维.永恒3 时间:2003-10-16 08:25:16__________回复某网友"时间可以看到吗?"的诘问
可以用眼睛看到时间.
   
可以用眼睛看到那些以一定形式表现出来的时间.时间(源)本是一种概念(在意识内,在头脑内),当这种概念以一定形式表现出来的情形下,我们就看到了时间的表现形式(和情形).时间既不是物体本身,也不是运动(运动其实巳为概念了,对一种情形的概念)本身,也不是"能量"什么的..
     当太阳升起来了,我们看到了早晨的情形,我们概括成早晨(时间概念).当日头当顶,我们看到了响午时间.当太阳滚下山那边,我们看到黄昏来临.
     
当打开世界地图,我们看到了(早已将地球运动情形转换成概念并刻写[和划]在地图上的)国际日期变更线,当用手旋转地球议,经度上的时间就在跑........在,大型宾馆,飞机场候机厅,都挂有让我们看得到的:东京时间,北京时间,伦敦时间,纽约时间.........这些时间概念的表现形式.
    时间是用刻度和标记制定出来的,就是让我们看得到.
   
时刻,时刻,也许"时刻"的思考意义就含在里面.时间是以物体运动为背景,刻画出来了,难道不是么?看不到的,始终也拿不出来看到的,不是现实时间.看不到的时间,要么是思维游戏,要么是历史,历史(也)不是现实.或将来......(将来是非现实的未知).
所有没有人(人类参与,知觉,认识)的时间,不是现实时间________顶多是种科幻,充其量是预言.
时间,时间.它(这个主题)与本科技频道"延续与终极"`"隔空移物"相对照,这个主题是躲不过人们现实眼睛的.某些科研用到的时间,也在科研手段的现实中.
   
所以,眼睛看___________有人感叹地说,“人事的变迁莫过于时间的伟大”.时间,在我看来,这表明了物质不永恒,物质在运动.时间的本质是对物质运动过程的记忆,时间并不发生在物质上,物质与物质间的运动也不会显示出时间.因为,所有物质没有记忆,没有记忆就不能联想,不能思考,不能综合与判断.不能判断就不能定格出时间.只有人这种具有物质与记忆两种属性的存在,才能定格出时间.时间是人意识的认定.人也有作为物质的属性,人也在运动.旅游运动到这里到那里,工作调动到这里到那里.这两种都有身体物质运动在里面,旅游身体物质运动为主要,身体物质变迁为主要.工作调动身体物质运动占次要,身体物质变迁为次要,思维内容变迁为主要.因思维内容是寓载在人体物质里的,所以,思维内容关于工作的变迁还是要身体物质运动来实现.只有写作恰恰相反,恰恰不需要身体物质移动,这样才能保证更好的思维运动,思维内容变迁,所以,在现实中,因运动带来的事和物之间关系改变,即时间变迁,在人们心中叫做“苍海桑田”,叫做物换星移,斗转星移.叫做“三十年河东,三十年河西”.被称为人生轨迹.所以,时间的伟大莫过于记忆的伟大.只有记忆才可能在地球上发生理解时间,应用时间的事实.

    七,
    时间灵魂
    作者:思维.永恒3 时间:2003-10-20 21:20:14
    这个被我们地球人叫为时间的是个什么东西呢?地球上原本没有时间,地球不产时间,至今地球也没有(它的)时间.
   
但是,在人类生活中,时间的词语却很多,时间概念很多,用场很多,时间很重要![在这里,语言词是从脑内发表的.概念是在脑内没发表的],[并且语言词包括文字词和语音词.概念既可以文字发表,也可语音发表].形形色色的“时间”都出自人的语言文字,那么,“时间是人给地球刷的油漆”简直太形象不过了.在人们的声音中,在人们制作的文字中,在人们制作的钟表上.还有一部分留在人的头脑里.这(“油漆”)颜色存在于人们的意识形态中,人们感觉它存在就存在,感觉是什么颜色就是什么颜色.
人们为什么要产生时间?  人们拿什么,依照什么,参照什么产生时间? 沿着这两个“?”`“?”号进发,我们就可以找到时间的灵魂!
    1,人们拿什么……产生时间?
    人们以自己的头脑为工具,以地球运动_______这信息为材料     
地球运动(自转和公转)这一物质现象,是以信息身份进到头脑里来的,而不是地球本身和运动形式下的地球本身.光线是唯一媒体,光线本身(即使所谓光线在这里作了运载工具,蕴含了信息量)是无言的,无语的,无意识的,把这种光线,解释(理解,诞生)可以用语言表达的时间,
用文字表达的时间,存在于意识形态中的时间,是人头脑的智慧.时间作为一种信息(也既不是地球物体本身,也不是运动本身),完全是由人的意识产生的,把现有信息(除非信息源泉,地球运动及其相关环境变)创造成人们需要的时间信息(包括语言文字时间和常驻于脑内脑的时间概念)完全是以人们的意志为转移的,包括时间的形式和内容.仅从形式上,比如我(世界当初)把一天定为“48”时节可不可以?只要在地球经度上每15度一格处标明为2时节即行.换算单位和名称变了,地球在每一经度格运动(自转)的角度仍为原发生事实,地球转360度的自然事实谁也没去改动一下,也改不了.再把每2时节细分(成一个什么名称一些什么单位)即行,亦或把每7.5度分成一根经度线间隔,则每一格一个时间。。。。。无穷.
    现在24小时分法,1小时60分,1分60……..是根据人的意志,更适合人的生活和心理习惯,更适合现代工业生产和科技研究,而由智慧(意志在其中)凝结晶的.
   
人的智慧创造了(用于语言文字和贮于脑内)的时间概念,时间概念(语言形式,文字形式),由人的意志决定的是这种(关于时间的)信息的形式和内容.只要你记住意志决定的是信息,而不是物体及物体运动,就不必为此而惊慌了,而神经衰弱地滑到唯心唯物什么的上面去了.
   
意识创造时间,只是创造概念本身,并不(没有)回到地球体运动上去哦.意识对宇宙的认识,也只停留在(每一个人的)头脑的概念里,并不去触动一下宇宙(各星体)的原物原貌啊.还有什么唯心不唯物的帽子敢拿来?!!真正是神经衰弱.
   人的意志决定时间的内容.
人的意志是人的灵魂主要象征.人的意志(于是就)是时间的灵魂.人的灵魂拿地球运动的事实为依据,再按照自己的需要产生时间,产生了文字的语言的(以及仍存于脑内的概念)时间.脑内概念本身还是关于时间的概念,这时概念是其性质内容,语言文字是其形式,而仍存于脑内的概念由于没有表现形式只能谓概念.
     2,人们产生时间是为了人的行为需要.
   
人是一个可以移动之物,人除了移动自身(也说自身物体有什么不防?)身体,还移动地球上别的物体(物质),这“二动”均为行为,要行为得有个相关连系(也包括人与人的连系),要连系就得有个运动次序.时间就是来为这个次序定一个抽象的格.因为人发生了行为,还要发生行为,发生了一个行为过后还要再发生一个行为.人的一生要发生很多很多行为……..人的行为不会在“奇点”发生完.象宇宙大爆炸于一个“奇点”那样……..于是“过程”(人生的过程)就免不了.于是,有过程就有次序先后,有先后,就有了时间来描述(记忆,记录,记载)这先后.所以,时间是人对己行为的定格,有一个抽象的格位,便于准时(准确)入格,准时于8:30到达办公室…….以及记录下某一时刻发生大事……..
    而钟表,则是对这一个抽象格位的有形表示,人们按照这有形的格位办事(发生行为),但当我们按照这有形格位办事时,不要忘了它还是人(地球人)的灵魂产品哟
时间的灵魂,时间(词)本身无魂,时间(词)无魂而诞生,无魂而来.它的远祖在地球球体运动本身(相对于太阳的运动),是人的灵魂一手把它从一些普通的光线转化成时间的.所以时间的灵魂,就是灵魂的时间.地球太阳和所有天体一样都没有灵魂,只有人才有灵魂(意志).
     灵魂的时间!!————它就是这么一个东西.
   
     八,
    时间存在
  
   
首先存在于意识中,我们(我们人类中的科学者)已这样的(时间意识)意识去解读世界(宇宙),认识世界(宇宙),开发世界(宇宙).比如“神舟五号”上天的全过程.无不充满了,以地球24小时时间为单位的计算设计.诸如轨道飞行,速度控制,程序转换等等.“神五”在天上运行了21个小时.这个21小时就是地球上的时间。(地球的24小时时间)而当“神五”在太空运行时,它不可能自定时间.科学家不可能给它创生一个时间.其舱内,每秒多少公里的速度(表针)也是在地球上,按照地球24小时标准产生的.地面上,再根据多少秒,多少分,它将运到太空中什么位置,发出什么指令,.这些操作指令,都是以24小时(60分,60秒)的常规来计算的.计算后,再加太空的修正量……..地面上其它科技与生产的各种时间与计算也都要加计算修正量.
没有24小时的基础,就没有对“神五”太空运行作计算的前题.还有,对生物的生命时间观察,也借代了24小时分秒微秒时间.
对考古物碳14测定和同位素测定,也是以24小时作参照系的(换算单位标准)..24小时与”碳14测定的结果之间,24小时与同位素测定结果之间,存在一种相对应关系.[相对论吧].由这种相对关系就得出时间的论点_______该古物[相当于于]多少多少年历史.我们实际解释时都省去了”相当于”,而直接解释为古物多少年历史.
   
其次,时间存于各种形式中:有钟表的,机械钟,电子钟.木壳钟,座钟,桂钟,闹钟,报时钟,手表,怀表.有文字记载的,列车时刻表,课时表,会议日程表………还有电话座机显示的间,电视机字幕时间……时间的这些形式,万变都不能改变其时间灵魂.其形式仅因为有其内容才有意义.若不是这样,那它就(仅仅)成了装饰品.
   
再其次,时间(以概念)存在于人们的脑内.我们平时,总是强调,某人工作要负责任,要有时间概念.又比如,某某艺术节会议,倒计时了.申奥冲刺倒计时了,这些概念的提出,都是在重重地,强调人们头脑内注意此时间概念,树立此时间概念,提醒这一时间概念.由这些概念在(各个)脑内的运行,来激发统一的整体力量.有了这样的注意,树立,提醒,人们(各自独立的)意识,就会受时间概念的驱动而演译出意识决定行为的集体辉煌..
   
这里假设.意识和概念略有区别.这里的”存在于意识中”所包含的意思是:脑内的时间概念,已经与脑内的其它信息结合,结合了的意识,即可以指挥行为.而”存在于概念中”则尚未进入与什么结合.尚处于单独存在状态.要俟结合后才能生效指挥行为..存在于各种形式:.意识的,概念的,钟表的,文字的,_______24小时时间制!!!由于所有的时间都要在24小时制中,来找换算标准
.所以宇宙中除了24小时时间,再也没有别的时间了.时间(24小时)的存在,决定着人们的生活序列.约束着一个庞大社会机制的运行.也表明着各个历史运行进程的状态……..
     
那些,通过思想和情绪,精神和意志,去创造时间(概念).这,是一个对(现实存在)”时间存在”的延伸[延伸到人类以外]与发挥[发挥到情感中去].是对舆论的愚弄.(科技方面的愚弄).
    十
    思维方式一瞥
有一个帖中,有一句“`地球早晚`怎么不是时间呢?”(当然还有好几句).这单引号中的话是引自2003`9`26,12:!0帖<<且不鱼目混珠>>中.引用目的,
是想证明地球洪荒也有“时间”.在9`26帖中, 原本有一个基本观点:发生了才是事实,什么时候发生的就是什么时候的事实.余此,可以瞥见一个思维方式.
   
首先,9`26帖中阐述的,(原始社会吧)有人说了第一句“哦,太阳落山了”,“喂,该吃早饭了”.这两个语言都有地球绕太阳运动的背景,它符合了今天24小时制时间的体系.在原始人只用这种语言表达时间就不错了.所以叫,这样就发生了“时间”事实..
     
其次,为什么又必须有人说出了第一声“哦,太阳…..”,“喂……早饭”了,才有时间呢?因为,没人说,就等于地球上从没发生(地球在宇宙中,也是宇宙没发生),通过语言表达时间的事实发生.地球无嘴,它说不出“喂,……早饭了”的时间,它请,山涧泉水唱的那几首歌.我们反复听,也听不出语言..地球是文盲,它无钱请识字先代写文字(时间的文字).它本想拿录音机去别的星球录点包含时间的谈话,又无录音机.也无传真机,架个线接受宇宙中不知什么星体传来的反映了时间的传真文字.更不消说办工厂制造钟表了,办工厂要头脑…….它没有头脑,它把全部希望都寄托在人的头脑了,人是大地之子啊_________
     
再其次,(1.6.23:56帖中语)“他所说的`地球早晚,日起日落,地球旋转,是在地球从混沌洪荒到类人猿阶段也发生了的”.于是23:56帖中就抓住这一句“地球早晚”,下狠心断定
  
______“这怎么不是时间呢”.以此反推:你自已都在说原始人(或类人猿)以前就有时间了.[可惜,这一句话原本并不能作为他的论据,他(却)拿去作了论据.].
     
这是一个荒谬!!!这个反推是一个荒谬的逻辑!荒谬在于什么?__________在于,(对于,或受了)哲学的蒙蔽,蒙蔽的哲学.(对于,或受了)哲学的误解,误解的哲学.
   
谁都知道,(比如)考古挖出了人骨,考古学根据检测这人骨的性别,年龄,死因,并配合随葬品推测死者生前地位乃至死亡年代时间……….当学者们在议论与这块骨头有关的时间时,是议论在场时发生的关于”时间”的事实.并不代表死者下葬时也作了这一系列议论,也要作性别检测,(滑稽:他们知道性别,还检测啥?)也就是
     十一,
     思想速度
    换一种理解_______回"大印"02_01 10:57帖作者:
    思维.永恒3  时间:2004-02-09
17:07:11对网友“思想速度”的换一种理解.“思想速度”原本是存在的.思想,无非思考,回忆,逻辑,意志,情绪,意愿……..等等脑内信息运动形式,包括存入(记忆),取出(回忆),组合(思考等等),等运动形式.这些信息运动,信息总是(在脑内)从一个物质到另一个物质,这在脑内距离之短,已短到了极限,这速度之快,医学解剖已有充分理由证明它们是电速!极快的速度在极短距离完成的“思想”,你说思想速度快不快!!
     正因为快, 所以, 我们才有一闪念, 才有心驰神往, 才有思想灵活,
才能实现机智与敏锐……这里换了一种理解的,思想速度不是抽象的思想速度.在他们那些讲的是抽象的思想速度.抽象的思想速度会有很多困惑与无知(取无法知道之意,
绝非通常的贬意.
望凉).他们那种讲法的抽象思想速度和抽象逻辑思维,会使哲学家先生们痛苦不安……..在理论里打架斗欧……….在理论里纠纷绵绵………在精神空间里永……
     十二
     时间切磋
     作者:思维.永恒3 时间:2004-07-29 09:02:44
_______这是针对网友“我是极”一帖中内容切磋.从能量到以论时间为主.
   
“物质是能量的凝固状态”似乎为不要空间而只有能量的世界,找到一点出路.任何一个物质里的电子都在动(自旋和绕核公转.质子与中子及种微物质都在发生着力的聚合与对抗.原子弹释放的这种力量,核电站也是.所谓核聚变,核裂变.所有未能象铀等那样成为核能开发材料的物质,并非无能量.我想,可能是它们没有铀等那样易于开发罢了).
     但,把“时间”也说成是承载能量的场,这绝对是死胡洞,没有出路.
     何以见得!因为,时间压根儿就是人头脑里“自已”产生的,[注意,是整个为人的人类,绝非某一个先知先觉,若那样,就唯心主义了],它,哪来场,何沦为场?
     关于时间(及时空)的这个误区,是很多聪明的人都正在犯着……
     这恰恰就是,人缘于意识,又蔽蒙于意识.越聪明的人意识越多越厚越深…….由于意识越多越厚越深建立的“我圈”………[而,相比而言,我确是个笨蛋.].
     最简单的启蒙就是:有人站在小木船上,用竹竿撑自已船头,能用力使船前进吗!
    所以我们的时空宇宙有限无边,而那个真空宇宙则无边无界也无始无终,从时空是和能量一起从极点中迸发出来的现象看,这个真空宇宙里能量可以以真空方式存在。
     
你可以不要.除非傻瓜,傻瓜头脑里什么概念也没有.正常人,你想不要时间概念也不可能.清晨,你从梦中醒来,时间概念就找上门来了.(己有了常识的)人一舒醒.时间概念就从大脑仓库里取出来摆在运算平台了.....现实生活中也有不要时间的."不分白日昼夜",便是一种一定程度上不要时间现象.
     "人可以不要时间"这一句话,从逻辑上不成立.因为,"时间"包含了两个语言阶段_______物质阶段,意识阶段.
     人只可以不要这一个阶段,不能同时又不要那一个阶段. 所以,原句不成立.
     十三,
    时间是个大问题
    作者:思维.永恒3   时间:2004-07-30 18:46:57
    时间是个大问题. 它决定了物质运动. 决定物质运动的间隔, 没有间隔(运动)的物质是封闭的. 决定物质运动的继续, 没有继续运动的物质是死的.
    那么,是什么推动物质运动有间隔,运动能继续?就是时间本身吗? 可以想见, 时间,对我们人来说,是从A_______到B.
时间,对于意识(思维)来说,是信息转换. 从A______到B的时间更长,思维信息的转换时间极短,但极短也绝不为0.
    然而,其实, 在物质世界没有时间.. 由于有记忆才有时间.人从A________到B,到了B点后, 还记忆着A点.所以,就有这个时间.
而在物质世界,物质世界本身对自已的行为是没有记忆的[山体记忆了冰川时期冰川擦出的痕迹,但并不将信息交流起来思维.或者说,人在有限生命内实现了信息的立体交流.这一点目前已知的宇宙中除人以外再无第二],物质世界不记忆过去,也不计划将来.它们的运动是不确定的,所以,
就用不着(也不可能)计划将来. 物质状态(运动状态)的本身不确定性, 也就无法记忆..
所以,因而.人因为有记忆_______而意识_______而思维,思想,立志,知识,文化等.但是,所以,因为.人的记忆不说就是短暂的吗?一般六七十岁,充其量,204岁(据说匈牙利曾有过的一位世界最长寿者),就短暂而结束,成了消失的永恒.
成了“不可再返”的短暂.至于人类本身的文化沉淀数千年.那是另一种“记忆”形式,另一种物质“运动”.
    所以,我们不要拿我们得到的世界的知识(时间概念)去诱骗物质世界也有“时间能量”!!!
    若令时间有能量,这将是100%的谎言.
   未了,“我是极”网友,在这一点与您针锋相对,你大肚能容量吗?顺致谢!!
   
     十四
     驳时间倒流
______有网友说时间可以倒流,象岁月流逝了,又可以流回来……
    作者:思维.永恒3 时间:2005-08-04 18:28:20
    1,时间不是物质.
    2,时间只是概念.
    3,概念只是头脑信息变幻的形态.
    4,头脑信息形态的变幻已经不能要物质运动同步.
    而倒流必须物质运动.所以,
因物质运动而人可塑性思维产生的时间概念不会发生倒流.即时间不倒流.4,人的可塑性思维已经超脱了造物主的原意.______a,可塑性思维在脑内的信息活动不再受地心引力限制,信息活动在脑内交流不分上下空间,上下交流平等.b,可塑性思维不再受太阳光限制,白天黑夜均可思考.c,信息在脑内运动也是物质.只因这物质太轻,引力巳处于忽略份量.所以不受引力限制.
    5,正是由于这些原因,才使有人误为时间可以倒流.
作者: zzz19760225     时间: 2016-2-3 20:27    标题: 12Linux下的经典软件(史上最全) 13楼

12Linux下的经典软件(史上最全)  13楼
Linux下的经典软件(史上最全)
标签: linux软件经典史上最全
2016-01-30 10:30 36人阅读 评论(0) 收藏 举报
分类:  linux(18)  
目录(?)[+]
转载说明:
一直想对linux下的软件做一个大汇总,包含各类型软件的推荐、介绍、安装,以免新手走弯路。不过发现网上有大神总结了一份很好的文档。以下内容转载自:http://blog.csdn.net/lnxfei/article/details/45821925

前言

从2012年接触Linux系统以来就被Linux系统所吸引,2个月后便完全抛弃了Windows。在这2年的时间里,我尝试了很多Linux发行版: Gentoo, Fedora, Ubuntu, Debian等。在这些系统中又尝试了很多种软件,这里根据自己的使用经验并结合网上的一些资料,对Linux下常用的软件进行整理,供大家参考,希望能帮助到大家。每款软件都有它的优缺点,适合自己的才是最好的。在这篇文章中我是按自己的喜好推荐给大家或者进行排序的,并不是说它们就是最好的,其它的就不行。建议大家多尝试几款同类的软件,找到最适合自己的。我虽算不上Linux新手,但也不是什么大牛,所以文章中有不足的地方,还请大家多多包涵。

网页浏览器

工具

Firefox

Linux下最成熟也是人气最高的浏览器,有众多的插件可供选择,还支持支付宝。Firefox一般是Linux系统自带的默认浏览器。Firefox对各类网页的支持非常好,而且非常稳定。这也是我最喜欢的浏览器,唯一感觉不方便的是快捷键不能自己定制。最新的Firefox 37.0.2还有视频功能呢,边工作边偷摸的跟媳妇儿视频,感觉是不是很棒?Firefox还有开发工具,比如著名的Firebug.

Firefox有一个vimperator插件,允许你用Vim的快捷键来进行一些操作。喜欢VIM的朋友可以尝试下。Windows下还有款Waterfox(水狐)浏览器,有意思,这事要跟Firefox对着干的节奏吗?

Konqueror

Konqueror是KDE桌面系统的一部分,主要用于文件管理、各种格式档案的查看,以及网页浏览。它有以下区别于其它浏览器的优点:

支持用Firefox, Chrome打开网页

丰富的快捷键功能

Web浏览器, 文件浏览器于一体

运行速度非常快, 快于Chrome

跟KDE结合的非常紧密!

Konqueror“狗皮膏药”。konqueror称它们为”access key”,按ctrl键之后显示出来,用户只要再按一下对应的按键,就可以跳到对应的链接去了。

当然它也有一些缺点: 没有Firefox, Chrome稳定,有些网页支持不太好,但不多。有时候还会占用很多的系统资源。

Chrome

Chrome是Google公司开发的开放源代码的网页浏览器,是一款成熟且有发展前景的浏览器,毕竟它的东家可是Google。Chrome最大的特点是简洁高效,速度快。因为Chrome在我的Fedora系统中有些网页的字体显示有问题,所以目前我把它作为我的第二浏览器使用。不得不说Chrome现在有赶超Firefox的势头。使用Chrome浏览时,还可以充分利用Google的功能。将Chrome与Google结合使用时,您不仅可以获得相关度更高的查询建议,还可以利用各种Google产品(包括语音搜索和Google即时)的功能。

Opera

首先Opera不是一款开源的浏览器,但它是免费使用的。Opera给我的最大的感觉是定制性比Firefox, Chrome强太多,尤其是快捷键,你几乎可以给任意想要的操作分配快捷键。虽然插件没有Firefox多,但是不得不说Opera的功能是非常强大的,我最喜欢它所集成的邮件功能。Opera是Linux系统下又一款不错的浏览器。我把Opera放在我的第三个选择上,原因是Opera不稳定,有时候这种不稳定已经影响到我的工作。期待Opera能够越来越好。

Opera也有手机版,手机版和电脑版之间可以同步书签。

Seamonkey

这是一款自由开源、跨平台的互联网套装软件(包括一个Web浏览器,电子邮件和新闻组客户端,一个HTML编辑器,一个IRC聊天和网页开发工具),由Mozilla基金会创建,之后转由旗下的SeaMonkey项目领导团队开发。它是Firefox经典版 + Thunderbird经典版的组合。

Conkeror

这是一款非常有趣的浏览器。写在这里主要是因为它的操作模式非常不同。Conkeror是为Emacs狂热粉丝准备的。通过它,你可以以Emacs之道来畅游网络。用它来操作网页和用Emacs来操作文本非常非常的像,如果你是Emacs控的话,推荐尝试下。个人感觉它只能作为一款初级的浏览器,主要原因有两个, 一个是它对很多东西支持不是太好,比如图片和图像。另一个原因是因为它有很多Bug。其实还是蛮期待这款浏览器的,可惜它的社区力量有点薄弱。

Orphne

成人浏览器,你们懂的。官方网站:http://orphne.sourceforge.net/main.html 感兴趣的童鞋自己试吧。大千世界无奇不有,Linux世界如此的精彩和多样。

其它

dillo

一款小巧的网页浏览器(源代码约420 KB,二进制程序约350KB。),遵循GPL协议。用C语言编写,使用了GTK+ toolkit,该浏览器特别适合运行于老计算机,以及嵌入系统。

选择

KDE环境下: Firefox > Chrome > Opera > Konqueror > Seamonkey

非KDE环境: Firefox > Chrome > Opera > Seamonkey

文本界面的网页浏览器

工具

文本浏览器我平时用的很少。如果用也只是用w3m。w3m是一个成熟、稳定且强大的命令行web浏览器,在各个发行版上都能稳定的运行。其实命令行的浏览器,用习惯了都差不多。w3m对中文的支持应该是最好的。elinks和links对中文支持都没w3m那么好。

比较有名的应该就是w3m, lynx了,elinks也不错。当然还有其它的比如links, links2等

选择

w3m >lynx > elinks >links2 > links

聊天软件

工具

因为我平时主要通过QQ,IRC和Skype聊天,所以这里只介绍QQ,IRC和Skype相关的客户端软件。IRC的客户端软件其实有很多,功能都差不多,所以找个界面舒服、功能多、稳定的客户端就可以了。至于QQ,在Linux中用的最多,最好用的还是Webqq。至于腾讯发布的QQ for Linux(linuxqq), 大家还是忘了它吧。Skype客户端就一个,那就是Skype。

Xchat

Xchat是非常流行的IRC客户端,利用它你可以登陆到任何的IRC服务器和别人交流! xchat运行在X11环境下,有着良好的用户界面,和许多聊天所需要的功能,例如私聊、支持多个聊天室等等。总的来说Xchat给我的印象就是非常稳定和简洁,功能能满足我基本的需要,所以我基本用Xchat作为我的IRC客户端。

Pidgin

Pidgin(原名:Gaim)是一款IM即时通讯软件,支持除qq外几乎所有IM软件。功能很强大,界面友好,也稳定。它还拥有不少独特的功能。最流行 的要算是好友提醒功能了,当某个特定的好友离开或者脱机,它会用某种方式对你进行提醒,比如发送消息、播放声音甚至运行某个程序。所以如果不喜欢xchat,pidgin是个不错的选择。

Empathy

从Empathy的功能描述来看,比较吸引人的特性包括:支持多协议,语音/视频支持,以及强调协作等方面。

WeeChat

WeeChat是个基于终端的快速的轻量级IRC客户端,可以在多种操作系统中运行。所有的东西都能用键盘完成,而且可以自定义。看它的官方文档貌似很不错,如果大家喜欢在终端下使用IRC的话可以尝试下WeeChat, 当然还有其它能够运行在终端中的IRC客户端,但是貌似都没有WeeChat好用。

ERC

ERC是Emacs的一个插件,可以作为IRC客户端用,所有的操作都是用Emacs快捷键来完成的,非常不错,我基本上都是用ERC在freenode中聊天的。Emacs控一定要尝试下。

Firefox/Thunderbird IRC插件

Firefox/Thunderbird中也有一些插件可以作为IRC客户端,但都不好用,主要是有新消息来了,不太容易注意到。

Webqq

如果想在Linux下用QQ,Webqq是最理想的选择,虽然有些功能还不支持,但是绝大部分的聊天功能都支持的很好,最重要的是稳定。目前腾讯还在积极开发Webqq,以后的Webqq用起来会更舒服。

QQ for Linux

腾讯官方出的Linux版QQ,功能有限,Bug多,很久没更新了,腾讯也放弃了对它的支持,所以基本上可以说这款软件是废了。

Wine

相信想在Linux下跑QQ的童鞋都想过或者尝试过这种方法,当然我也尝试过,给我的感觉是中文支持不好,界面不好,Bug很多,有些功能还不支持,所以不推荐用这种方式来用QQ。

在虚拟机中用QQ

虽然说小题大做,但是不得不说效果非常不错。大家可以起一个Xen/KVM/VMWare/Virtual Box的Windows虚拟机,在里面装上QQ,使用起来跟在物理机上Windows系统中运行的QQ效果完全一样。

Skype

Skype是微软的一个聊天工具,有Windows和Linux两个版本,Linux版本的Skype功能强大,简洁,稳定。Skype也是我最喜欢的聊天工具,它的目的很明确就一聊天工具。Skype还支持视频聊天,效果不错。QQ我是越来越讨厌了,腾讯出于商业目的绑定了很多非聊天的功能,把QQ搞的异常臃肿,也是无奈。另外说下微软现在也在大力推广Skype,所以Skype还是很有前景的。

其它

Kopete

Kopete是KDE的一个子项目,支持多协议的即时通信,包括ICQ、AIM、Gadu-Gadu、IRC、.NET Messenger Service、Yahoo! Messenger等协议。

选择

IRC客户端: pidgin > xchat > empathy > WeeChat > ERC > Firefox/Thunderbird IRC插件

QQ客户端: Webqq

Skype客户端: Skype

Email 客户端

工具

Linux下的邮件客户端有很多,还有一些是适用于不同桌面环境的,比如KDE下的KMail, GNOME下的Evolution。在众多的邮件客户端中最好用的当属Thunderbird和mutt了。

Thunderbird

Thunderbird是由Mozilla浏览器的邮件功能部件所改造的邮件工具。应该是目前Linux系统下应用最多,功能最强大,稳定性很好的邮件客户端了,支持垃圾邮件过滤、反“钓鱼”欺诈、高级安全等,可进行个性化配置。这个是我目前的第一选择。

mutt

Mutt 是一个很小型但功能强大的,使用文本界面的MIME邮件客户端,Mutt具有高可配置的特性,适合高级邮件用户使用。喜欢在终端下管理邮件童鞋的首选。

其它

Gmail

Kmail

选择

命令行: mutt

图形界面: Thunderbird

下载工具

下载工具很多,没有什么好不好的,看个人喜好。这里推荐几个常用的。

BT下载工具

kTorrent

KTorrent是KDE下的一款BT下载工具,具有速度快而内存占用小的优点,设置也比较简单实用,感觉和Windows下的uTorrent不相上下。

rtorrent

一个Linux下控制台的BT客户端程序。

非BT下载工具

wget

wget默认在各Linux发行版都有安装,成熟稳定,方便。我一般用这个来进行下载。

axel

Axel通过打开多个HTTP/FTP连接来将一个文件进行分段下载,从而达到加速下载的目的。对于下载大文件,该工具将特别有用。这个工具主要特点是速度快。是一款非常不错的下载工具。

curl

它是对libcurl库的一个命令行工具包装。libcurl库中提供了相应功能的API,可以在程序中调用。curl使用URL的语法来传输文件,它支持FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET等多种协议。curl功能强大,它提供了包括代理支持,用户认证,FTP上载,HTTP post,SSL连接,文件续传等许多特性。

选择

BT下载工具:kTorrent和rtorrent都不错,主要看个人喜好。

非BT下载工具:wget和curl的选择,主要看什么场景,一般的下载用wget, 主要是操作简单。如果需要用到特殊协议可以选择curl。如果想要下载速度那么就用axel.

curl和wget的比较

文件传输

工具

rsync

rsync是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件。rsync功能非常强大,经常被用作企业级的数据备份。rsync更适用于大数据量的每日同步,当然也可以用来进行简单的文件传输,但没有scp命令简洁。

scp

scp命令是SSH中最方便有用的命令了,scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用ssh,并且和ssh使用相同的认证方式,提供相同的安全保证。这个是Linux下最常用的文件传输工具。

rcp

rcp不是一种安全的的传输文件的方式,rcp通过rsh来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输。

选择

如果是传输简单的文件: scp > rsync > rcp

如果是用来做数据备份: rsync

FTP客户端

工具

lftp

比ftp好用,支持TAB自动补全。功能全,稳定。可作为首选的FTP客户端。

ftp

在命令行中ftp命令够资格,很实在。但是它不支持TAB自动补齐,这很让人头大。功能也没有lftp强。

FileZilla

图形界面的FTP客户端。支持Linux和Windows平台。个人感觉是最好用的图形界面FTP客户端

选择

命令行: lftp > ftp

图形界面: FileZilla

文件管理

工具

在平常使用Linux的过程中,为了管理自己的文件,恐怕谁也离不了文件管理器。Linux中有大大小小的文件管理器,有基于控制台的,也有图形化的;有单窗口的,也有双面板的;有轻巧型的,也有笨重化的。哪一款文件管理器最好? 套用一句广告词:“适合自己的就是最好的”。

Dolphin

KDE4中的默认文件管理器。Dolphin专注于文件管理本身,是我目前用到的文件管理器。

Nautilus

又称鹦鹉螺,是GNOME桌面环境中的默认文件管理器。虽然Nautilus稍显笨重,但是功能非常全面。Nautilus具有树状视图,支持通过脚本来扩展其功能,并集成了光盘烧录特性。

Konqueror

KDE3桌面环境中的默认文件管理器,在KDE4中被Dolphin取代。Konqueror集文件管理、网络浏览、文档查看于一身,具有多种不同的“身份”。

Pcmanfm

这款文件管理器还真不错,界面简洁,运行稳定、高效,支持多标签(这一点dolphin和nautilus都支持的)。是LXDE默认的文件管理器。

Thunar

Thunar是Xfce桌面环境中的默认文件管理器。它的优点是运行快速,内存占用少,很不错的文件管理器。

Gnome Commander

GNOME Commander是一个快速和强大的图形文件管理器,使用双面板进行文件管理,主要适用于Linux系统下的GNOME桌面环境。界面和操作都和Total commander相似的Linux下的资源管理软件。

Rox-filer

用fvwm,xfce的人经常拿这个做桌面和默认的文件管理软件,小巧快捷,但使用和常规的文件管理软件不同。

ranger

Ranger是一个控制台下的文件管理器。Ranger用Python完成,默认为使用Vim风格的按键绑定,比如hjkl(上下左右),dd(剪切),yy(复制)等等。功能很全,扩展/可配置性也非常不错。

Vifm

Vifm是一个基于ncurses开发的文件管理器,使用类vi的键盘操作方式。

Midnight Commander

Midnight Commander,简称mc,是一个基于文本模式的文件管理器。

选择

文件管理器,个人感觉,基本功能都差不多。所以选择哪个完全根据个人感觉,不必过于纠结使用哪款软件。如果想功能比较全,比较稳定的,那么就用你桌面环境默认的那款:比如KDE下的Dolphin, GNOME下的Nautilus, Xface下的Thunar。基于文本模式的文件管理器我最喜欢Ranger, Ranger功能多,而且稳定,操作非常方便。

文本模式下的文件管理器: Ranger > MC > Vifm

参考

推荐几款Linux常用的文件管理器软件

文本编辑

工具

文本/文档编辑器有很多种,不下于287种,它们都能完成基本的编辑任务,下面介绍在Linux下比较火的编辑器。其它的编辑器没怎么用过不做介绍。

vim

编辑器之神,定制性强,稳定性高,轻量但功能却很强大,所有Linux发行版的默认编辑器,用过的朋友都说好。vim应该是Linux下应用最多编辑器了。

emacs

神的编辑器,和vim一样都是我最喜欢的编辑器。定制性和功能要比vim强大很多,但多功能带来的是emacs要比vim庞大很多,启动的时候由于要加载很多东西导致启动比较慢,不过还好emacs有server模式,完美的解决了这个问题。在emacs里你几乎可以做所有的事情,写代码、读新闻、发邮件、写slides等,总之只有你想不到的,没有它做不到的,喜欢捣腾的童鞋可以去尝试下,没准你真的会喜欢上它。

xemacs

emacs 的X Window版本。

Sublime Text

Sublime Text是一个轻量、简洁、高效、跨平台的编辑器。定制性和扩展性非常强,非常值的一试。

kedit

KDE下默认的图形界面的编辑器,轻量,稳定,编辑器有的功能它都有。

gedit

GNOME下默认的图形界面的编辑器,轻量,稳定,编辑器有的功能它都有。

选择

终端模式: emacs/vi > sublime

图形界面: GNOME下用gedit, KDE下用kedit

在日常工作中我一般是vim和emacs有选择性的用,用emacs写代码,写文档。用vim编辑/浏览一些小的文件。

2/16进制/编辑/查看软件

查看软件

xxd

hexdump

编辑软件

vim+xxd

Vim来编辑二进制文件,因为Vim本非为此而设计,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,其它的就跟原来那个一模一样。

hexedit

HexEdit是一款非常好的十六进制编辑器(文本界面)

Bless

Bless是一个十六进制编辑器,其主要功能包括:支持编辑大数据文件及块设备、能够执行搜索与替换操作,具有类似Firefox的标签浏览特性、可将数据输出为文本或HTML、包含插件系统等等。

ghex

GNOME下的十六进制编辑软件(图形界面)

khexedit

KDE下的十六进制编辑软件(图形界面)

选择

hexedit > bless>ghex/khexedit >vim+xxd

PDF阅读软件

工具

okular

Okular是一个在KDE4下的PDF文档浏览器,基于KPDF开发。功能强大,稳定。KDE用户的首选。

evince

evince是一个支持多种格式的文件浏览器,如的PostScript,PDF格式,单页和多页TIFF,DVI接口,DjVu等等。它具有网页的缩略图,通过Gnome或基于GTK+印刷框架和范围内搜索文件。它支持显示的PDF索引和浏览PDF文件的加密。

选择

也是要看使用习惯的桌面环境了,gnome/evince 与 okular/kde 应该是主流,另外还有epdfview与appvlv可供挑选。但是这些阅览器自己感觉还不完美。我用的是KDE环境,所以选择了Okular,感觉很不错。

翻译软件

工具

goldendict

GoldenDict是一款不错的、与StarDict(星际译王)类似的词典软件。它使用WebKit作为渲染核心,格式化、颜色、图像、链接等支持一应俱全。可以屏幕取词,支持本地字典和在线字典,还支持维基百科和wordnet。

stardict

星际译王是跨平台的国际词典软件!它功能强大,实用性强,“通配符匹配”,“鼠标查词”,“模糊查询”等功能倍受青睐!

选择

Goldendict > stardict

文件差异比较工具

工具

kdiff3

KDiff3是一款用来对文件或目录进行比较/合并的工具,在比较时它可以同时针对两个或者三个文件/目录而进行。通过比较,它将文件/目录的差异按行加以显示。同时,KDiff3提供有自动化的合并工具,方便使用者进行有关合并的操作。虽然KDiff3主要为KDE桌面而开发,但是仍然可以运行于其它的Linux环境。甚至对于 Windows、Mac OS X,KDiff3也有相应的版本

Diffuse

可视化比较,非常直观。支持两相比较和三相比较。这就是说,使用Diffuse你可以同时比较两个或三个文本文件。能够直接在Diffuse中编辑文件。可以使用快捷键轻松导航。

Kompare

Kompare是适用于KDE桌面的文件差异比较工具。它允许你以图形化的方式来比较两个文件,并通过不同的颜色来直观的显示文件之间的差异。

colordiff

在Linux下,使用diff命令可以对文件进行比较,从而了解其差异。不过,diff命令的输出结果以同色显示,对于这种差异的表现可能不够强烈。好在我们还可以通过ColorDiff来加以改善。ColorDiff是一个Perl脚本,它通过不同的颜色来高亮显示diff命令的输出结果,非常显眼。

Meld

Meld的目录对比可以对比两个工程有多少文件不同,每个文件做过哪几行修改,非常直观。好东西~

vimdiff

当远程工作在Unix/Linux平台上的时候,恐怕最简单而且到处存在的就是命令行工具,比如diff。可惜diff的功能有限,使用起来也不是很方便。作为命令行的比较工具,我们仍然希望能拥有简单明了的界面,可以使我们能够对比较结果一目了然;我们还希望能够在比较出来的多处差异之间快速定位,希望能够很容易的进行文件合并……。而Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的强力工具。

diff

非常常用的对比命令, 别说你没用过。

Beyond Compare

Beyond Compare是一款不可多得的专业级的文件夹和文件对比工具。使用它可以很方便的对比出两个文件夹或者文件的不同之处。并把相差的每一个字节用颜色加以表示,查看方便。并且支持多种规则对比。对软件汉化者来说,这绝对是一款不可多得的工具。该工具有Windows和Linux下两个版本

选择

其实每个工具都各有优缺点吧,这里是我的选择优先级,仅作参考:

文件夹比较: bcompare(Beyond Compare) > Meld > Kdiff3

文件比较: vimdiff > diffuse> diff/colordiff

当然非常简单的比较直接用diff就好了。我平时用的最多的就是vimdiff和kdiff3

Kompare没用过不作介绍。当然如果仅做简单的比较其实这些工具都是很不错的。

音频播放器

工具

Audacious

Audacious是linux或其它基于linux系统上的免费播放器。我比较喜欢它的稳定和简洁。占用资源也比较少。推荐大家试一试。

Rhythmbox

Rhythmbox是一个伟大的linux版本的音乐播放器. 它可以容易的帮你组织音乐内容,并且是免费的. 它的灵感来自于苹果的iTunes,它使用GStreamer多媒体库开发,在GNOME桌面环境中执行结果和效果者让人感到惊艳。

Amarok

Amarok是linux和unix上另一个伟大的音乐播放器. Amarok的界面非常直观. 它是免费的自由软件。KDE用户的不错选择。

XMMS

XMMS可以称得上是Linux下优秀的音频播放器,是专门为X-Window设计的版本。目前几乎所有的Linux发行版都预装了XMMS。XMMS以强大的播放功能、多变的皮 肤和各具神通的插件在众多的Linux播放软件里占据重要地位,完全可以和Windows下的Winamp相媲美。现在不推荐使用。因为你可以选择比它更强大的播放器。

foobar2000

我最喜欢的播放器,可惜没有Linux版本,之前在Wine上试了试感觉很不错,如果是foobar2000的忠实fan可以在Wine上试试。

其它

Banshee

SongBird

GmusicBrowser

Bmpx

选择

Rhythmbox,Audacious,Amarok这三个应该是Linux下重量级音乐播放器,大家任选一个吧,都很不错。我都是换着用的。KDE下Amarok应该比Rhythmbox要好些,GNOME下Rhythmbox应该比Amarok要好些。

Amarok比Audacious功能上要强大,Audacious比较简洁,还是看个人选择。我比较喜欢Audacious,因为它比较简洁稳定,系统资源占用也比Amarok少。

音频编辑软件

工具

Audacity

Linux下最受欢迎的音频编辑软件。最类似于cooledit的linux音频处理软件,功能上也比较类似,适合于翻唱和后期处理,在截取、降噪、渐变改变音质等方面表现的相当专业。

Ardour

Ardour是一个数字音频工作站,它可不是给一般人用的。Ardour对于音乐家、工程师、原声带编辑人,和作曲家就如Audacity对于播主们——是最好的工作助手。

其它

FFmpeg

选择

Audacity > Ardour > FFmpeg

视频播放器

工具

VLC

VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或 multicast的流式服务器在IPv4或 IPv6的高速网络连接下使用。它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。

MPlayer

MPlayer基于命令行界面,在各操作系统也可选择安装不同的图形界面。

SMPlayer

SMPlayer是MPlayer的一个图形化前端,基于qt4库开发的。具有十分完备的功能,可以支持大部分的视频和音频文件。它支持音频轨道切换,允许调节亮度、对比度、色调、饱和度、伽玛值,按照倍速、4倍速等多种速度回放,还可以进行音频和字幕延迟调整以同步音频和字幕。

选择

Linux下的视频播放器前三绝对是它们三个了。

vlc ; MPlayer ; SMPlayer

其实对我来说VLC和SMPlayer都差不多,上面的优先级是按受欢迎程度来排的。

视频编辑

工具

Kdenlive

Kdenlive是一套开源的视频非线编辑软件。Kdenlive可以通过FFmpeg 编辑所有格式的视频文件,这就意味着DV、HDV、mpeg、avi、mp4、mov、flv、ogg、wav、mp3和vorbis这些格式都将被支持。Kdenlive是一款非常专业的视频编辑软件。可以毫不夸张的说Kdenlive是Linux下最好的视频编辑软件。

其它(按受欢迎程度顺序列出)

Blender

Avidemux

Openshot

Cinelerra

选择

kdenlive > Blender > Avidemux > openshot > Cinelerra

云存储

工具

Dropbox

Dropbox是一款非常好用的免费网络文件同步工具,是Dropbox公司运行的在线存储服务,通过云计算实现因特网上的文件同步,用户可以存储并共享文件和文件夹。Dropbox提供免费和收费服务,Dropbox的收费服务包括Dropbox Pro和Dropbox for Business。在不同操作系统下有客户端软件,并且有网页客户端。

ownCloud

不了解,这里不做介绍。

Google Drive

Google Drive是谷歌公司推出的一项在线云存储服务,通过这项服务,用户可以获得15GB的免费存储空间。同时,如果用户有更大的需求,则可以通过付费的方式获得更大的存储空间。

选择

Dropbox ; ownCloud ; Google Drive

对于国内Linux用户来说,百度网盘是一个不错的选择。目前仅有网页版本可用。

网志工具

工具

Hexo

Hexo是一款网志程序,基于Node.js的,功能非常强大,适合有技术的人才搭建网志。Hexo是快速、简洁且高效的网志框架。

CSDN网志

CSDN个人感觉国内做的最好的IT技术网站,现在越来越喜欢CSDN的网志功能,尤其是其支持Markdown格式,真的是技术控的福音。各位骚年,赶紧去试一试吧!

Wordpress

WordPress是一个免费的开源项目,在GNU通用公共许可证下授权发布。WordPress是一种使用PHP语言开发的网志平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。

Jekyll

Jekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。

Octopress

Octopress是一个基于Ruby的开源Blogging Framework,在我看来Octopress天生就是为技术控准备的Blog,因为从写blog,到发布,你完全可以用Shell里面的命令搞定。这样,写起Blog来,会让技术控们觉得很有成就感。

选择

Wordpress, Jekyll, Octopress用的人都挺多,都挺不错的。我没用过,具体的这里不做评论。介绍下我写网志的方式:Hexo + Github + CSDN网志。

我会在本地搭建Hexo网志框架,然后在该框架中用Markdown的文本格式写网志文档,然后通过Hexo生成静态页面,push到Github上,然后通过Github生成Github网志。最后再将该Markdown文件导入到CSDN网志。所以基本上很容易就实现一式三份:本地一份,CSDN网志一份,Github网志一份。

办公套件

工具

LibreOffice

LibreOffice是OpenOffice的一个分支,但功能要比OpenOffice多。LibreOffice是目前最好的办公套件。

OpenOffice

OpenOffice是一套跨平台的办公室软件套件,能在Windows、Linux、MacOS X (X11)和Solaris等操作系统上执行。

Google Docs

谷歌办公套件,类似于微软的Office的一套在线办公软件,可以处理和搜索文档、表格、幻灯片,并可以通过网络和它人分享,有google的帐号就能使用。使用感觉很不错,但缺点是在线的办公软件。

Koffice

KDE环境下的办公套件,比Libreoffice小巧。

Gnome Office

Gnome环境下的办公套件。

选择

LibreOffice > OpenOffice。

图像处理

工具

GIMP

GIMP是GNU图像处理程序(GNU Image Manipulation Program)的缩写。包括几乎所有图象处理所需的功能,号称Linux下的PhotoShop。

InkScape

Inkscape是开源的矢量图形编辑软件,与Illustrator、Freehand、CorelDraw、Xara X等软件很相似,它使用W3C标准的Scalable Vector Graphics (SVG)文件格式,支持包括形状、路径、文本、标记、克隆、alpha混合、变换、渐变、图案、组合等SVG特性。它也支持创作共用的元数据、节点编辑、图层、复杂的路径运算、位图描摹、文本绕路径、流动文本、直接编辑 XML等。它可以导入 JPEG、PNG、TIFF等格式,并输出为PNG和多种矢量格式。

Blender

Blender是一套三维绘图及渲染软件。有了Blender后,喜欢3D绘图的玩家们不用花大钱,也可以制作出自己喜爱的3D模型了。它不仅支持各种多边形画图,也能做出动画!倘若你觉得free版的不够使用,还能注册C-key,购买更强大的版本。Blender虽然是免费版本,不过它的功能可是又强又复杂。

Dia

Dia是开放源码的流程图软件,是GNU计划的一部分,程式创立者是Alexander Larsson。Dia使用single document interface (CSDI)模式,类似于GIMP。

Graphviz

Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具,它提供了“所想即所得”的理念,通过dot语言来编写脚本并绘制图形,简单易懂。感觉很酷!

其它

ImageMagick

yEd

选择

图形编辑: GIMP

3D作图: Blender

画流程图: Dia,想用编程的方式画就Graphviz

看图软件

工具

DigiKam

DigiKam是一款KDE桌面环境下的数字照片管理软件。非常专业。Linux下最受欢迎的照片管理软件。

Shotwell

Shotwell是一款GNOME桌面环境下的相片管理软件,适用于GNOME桌面环境。你可以使用它来从数码相机中导入相片,然后进行编辑并分享给朋友们。

F-spot

F-Spot是应用于GNOME的全功能的个人照片管理程序。利用F-Spot可以方便的从数码设备获取照片,并且可以创建属于自己的照片分类和电子相册,也可以上传到 Flickr,Google相册与朋友分享数码照片。

GwenView

是较好的一项应用,支持几乎所有图片格式,可进行基本的编辑、标签、缩略图、全屏、幻灯显示功能等等。

gThumb

gThumb 是一个GNOME桌面环境下的开源图像浏览器,遵循GPL版权协议。原先基于GQView,设计成为一个简洁的界面。

Eye of GNOME(eog)

是GNOME环境下较好的图片查看器,支持JPG,PNG,BMP,GIF,SVG,TGA,TIFF or XPM等图片格式,也可放大、幻灯显示图片、全屏、缩略图等功能。

display

Linux都默认安装的,非常原始的在X Window上展示图片的命令行工具。

选择

如果是想作为一个照片管理器用:DigiKam > Shotwell > F-spot > GwenView > gThumb

如果仅仅想查看一个图片: Shotwell > GwenView > eog > display, 如果在GNOME环境下GwenView要好于Shotwell。eog占用资源要比GwenView少,启动要比GwenView快。

当然还有其它的图片浏览工具,上面的是Linux下比较常用的。

科学制图

工具

Gnuplot

Gnuplot是一个比较强大的绘图软件包,可以进行绝大多数的科学绘图。

QtiPlot

完全成熟的绘图软件。从功能上讲,QtiPlot与windows下的origin几乎是一样的,连界面设计也极其相同,因此网上有人称它为 an open origin。这个在Linux上如果要用免费版的需要手动编译。

Metapost

一种画图语言,可以精确的画出你想要的图形。常与Latex配合使用。

Asymptote

与metapost相似但更易用的类C语言。

Geogebra

非常直观的几何作图软件。

MayaVi

MayaVi 在梵语中的意思是魔术师,它是一种数据可视化工具。

选择

这些绘图工具我只用过Gnuplot, 如果是比较简单的绘图Gnuplot就适合你。如果是比较专业的绘图Metapost,Asymptote,QtiPlot会有一款能满足你的。

参考

Linux下的绘图和图形处理

科学计算

工具

Octave

一种高级语言,主要设计用来进行数值计算,多数语法与matlab兼容,qtoctave是它的一个与matlab相似的前端。

Scilab

诞生于1994年,由法国的INRIA和ENPC设计。

PSPP

GNU用以取代SPSS的统计软件。

Qalculate

Qalculate是一个功能超级强大的计算器。它具有多种用途,不仅可以用于一般的计算工作,而且对于函数、单位、各种精度、制图等的计算同样能够胜任。当前,Qalculate包括命令行端的程序、GTK+界面的程序、以及KDE界面的程序。感觉使用上并没有什么门槛,但要熟悉的话,还是需花一定的时间去琢磨。

Galculator

galculator是一个基于GTK2/GTK的代数模式、RPN和公式的输入模式3为基础的科学计算器。功能包括算术运算,加上优先处理,全键盘的支持,三角函数,乘积,平方根,自然和常用对数,常数(E,PI),和反双曲函数。它支持不同的数字进制(十进制,十六进制,八进制,二进制)和角度基地(radiant, degree, 和grad)。

SpeedCrunch

SpeedCrunch 是一款强大的高精度桌面计算器,支持包括Windows、Linux和MacOS系统。

Kcalc

Kcalc这个工具更像你的标准计算器,捎带一点点附加功能。Kcalc提供了一个更加标准的界面),因此各式各样的人们都能够很容易地使用这款计算器。Kcalc是个非常轻量级的图形界面的计算器,如果你只想做一些简单的计算,那么可以考虑它。

bc

bc是一款字符界面的计算器,所有Linux发行版都会默认安装的任意精度的计算器。能满足大部分科学计算,性能高,使用方便。Linux下我最常用的计算器。

Awk

Awk本是专门用来处理文本的, 但它同时提供了一些基础的数值函数, 如:

atan2(y, x) 返回y/x的正切值;

int(x) 返回x的整数部分;

srand(x) 设置虚拟随机产生器的种子;

rand() 返回平均分布的虚拟随机数r, 0<=r<1;

sin(x), cos(x), exp(x), log(x), sqrt(x).

Awk支持标量变量, 数组变量, 赋值, 算数运算, 逻辑运算, 函数和控制结构, 可构造复杂的运算过程.

expr

expr命令可不光能计算加减乘除哦,还有很多表达式,都可以计算出结果,不过有一点需要注意,在计算加减乘除时,不要忘了使用空格和转义。

dc

用dc来进行计算的人可以不多,因为dc与bc相比要复杂,但是在进行简单的计划时,是差不多的,不算难。dc为压栈操作,默认也是交互的,但也可以用echo和|来配合打算。

echo

echo用来进行回显,是周知的事。上面也配合bc来进行计算。其实echo也可以单独进行简单的计算,如:

`# echo $((3+5)) 8 # echo $(((3+5)*2)) 16` * 1 * 2 * 3 * 4
选择

如果你要做专业的科学计算那么Octave是最好的选择,Scilab可以作为第二选择。

如果你只是想在图形界面下进行稍微复杂点的计算,Galculator是我的第一选择,Qalculate我会把它作为第二选择。SpeedCrunch没用过这里不做评论。至于Kcalc类似于Windows附件中的计算器,非常的轻量级,当然功能也有限。

字符界面下我一般用bc,因为它很方便。dc几乎没用过,但功能应该跟bc差不多。至于awk和expr我会在编写shell脚本时有选择的使用。比如在一个awk程序块中当然是用awk来进行计算了。

虚拟机

工具

VirtualBox

VirtualBox是一款功能强大的x86虚拟机软件,它不仅具有丰富的特色,而且性能也很优异。

VMware

VMware不是开源软件。VMware公司是全球著名的虚拟机软件公司,目前为EMC公司的全资子公司。

在Linux下可用的VMware虚拟化产品为:

VMware Workstation是vmware面向桌面的主打产品。与VMware Server不同,VMware Workstation专门针对桌面应用做了优化,如为虚拟机分配USB设备,为虚拟机显卡进行3D加速等。VMware Workstation是收费的。

VMware Player是简化版的Workstation,是免费版的。

KVM

KVM是一款开源的虚拟机管理软件,性能优异,稳定性好。在Fedora上安装非常方便,只需要打开BIOS的虚拟化开关,安装用户空间模拟器qemu-kvm即可。KVM有众多的命令,对于刚接触KVM的用户来说,可能会不太好上手。但Fedora已经提供了virt-manager,virt-viewer,virt-install等图形界面的管理工具。使用起来还是很方便的。

Xen

Xen是一款非常成熟的开源虚拟机管理软件,是类虚拟化的典型代表,但Xen安装起来相对麻烦一些,在Fedora没有图形界面的管理工具,只能通过xl/virsh命令行工具来管理虚拟机,所以不推荐使用。

QEMU

QEMU这是比Xen更老的模拟器,功能有限,操作麻烦,不推荐使用。

Citrix XenServer

这个就更不推荐了,因为XenServer是Xen + CentOS5的结合体。你不可能在你的Fedora或Ubuntu上安装XenServer。

选择

如果你想要快速的在一个图形界面的管理器上创建虚拟机,那么VirtualBox是你的首选,KVM作为你的第二选择,VMware Player作为你的第三选择。

如果你喜欢在命令行下操纵你的虚拟机,那么KVM是首选,Xen作为你的第二选择。

监控应用

工具

Nagios

Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。Nagios本身并不包含任何监控机制,其所有的监控工作都是通过插件(plugin)来实现的。

OpenNMS

OpenNMS是一个企业级基于Java/XML的分布式网络和系统监控管理平台。OpenNMS是你管理网络的绝好工具,它能够显示你网络中各中终端和服务器的状态和配置,为你方便地管理网络提供有效的信息。

Zabbix

Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。

Wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

Wireshark不是入侵侦测软件(Intrusion DetectionSoftware,IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark撷取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark不会对网络封包产生内容的修改,它只会反映出目前流通的封包资讯。 Wireshark本身也不会送出封包至网络上。

Zenoss

Zenoss Core是开源企业级IT管理软件-是智能监控软件,它允许IT管理员依靠单一的WEB控制台来监控网络架构的状态和健康度。Zenoss Core同时也是开源的网络与系统管理软件。

htop

htop 是一个Linux下的交互式的进程浏览器,可以用来替换Linux下的top命令。

atop

atop是一个用来查看Linux系统负载的交互式监控工具。它能展现系统层级的关键硬件资源(从性能角度)的使用情况,如CPU、内存、硬盘和网络。

top

经典的Linux下的监控命令。用过Linux的都知道这个命令。

其它

Icinga

ICINGA项目是 由Michael Luebben、HendrikB?cker和JoergLinge等人发起的,他们都是现有的Nagios项目社区委员会的成员,他们承诺,新的开源项 目将完全兼容以前的Nagios应用程序及扩展功能。在新项目的网站上,他们是如此定义ICINGA的,这将是一个介于Nagios社区版和企业版间的产 品。特别将致力于解决Nagios项目现在的问题,比如不能及时处理Nagios项目的bug、新功能不能及时添加等。还有在新的ICINGA项目中,将 更好的实现数据库集成方面的功能,标准化第三发应用程序的接口等。期待中。

选择

监控系统和网络: Nagios > OpenNMS > Zabbix > Wireshark > Zenoss

命令行监控工具: htop,atop,top都不错,可以根据自己的习惯进行选择。

编程IDE

工具

Eclipse

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来进行Java语言开发,但是目前亦有人通过插件使其作为其它计算机语言比如C++和Python的开发工具。

VIM

Linux下非常好用的编辑器,配置型强,可以配置为自己喜欢的IDE。VIM控的首选。

Emacs

Emacs是比肩VIM的又一款编辑器,它也有非常强的配置性,也可以配置为自己喜欢的IDE,Emacs控的首选。

Kdevelop

KDE下集成开发环境,支持多种程序设计语言。

选择

图形界面IDE: Eclipse

VIM控: VIM

Emacs控: Emacs

运维配置管理工具

工具

Puppet

Puppet是一种Linux、Unix、Windows平台的集中配置管理系统,使用自有的Puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。Puppet把这些系统实体称之为资源,Puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

Ansible

Ansible提供一种最简单的方式用于发布、管理和编排计算机系统的工具。

Foreman

Foreman是一个集成的数据中心生命周期管理工具,提供了服务开通,配置管理以及报告 功能,和Puppet Dahboard一样,Foreman也是一个Ruby on Rails程序。Foreman和 Dashboard不同的地方是在于,Foreman更多的关注服务开通和管理数据中心的能力,例如和引导工具,PXE启动服务器,DHCP服务器及服务器开通工具进行集成。

Foreman 机器统一管理平台:

Foreman可以与Puppet集成使用,通常是作为puppet的前端接入。

Foreman takes care of provisioning until the point puppet is running, allowing Puppet to do what it does best.

Foreman能够通过Facter组件显示系统目录信息,并且可以从Puppet主机报表中提供实时信息。

Foreman能够准备你管理新机器的所有工作。它的设计目标是能够自动化的完成所有手工管理的工作,通过Foreman可以重新配置机器。

Foreman能够管理大规模(当然也包括小规模)的,企业级的的网络,可能有很多域,子网和很多puppet master节点。Foreman也可以实现配置版本的回溯。

其它

Cron jobs

Subversion

Chef

SaltStack

CFEngine

NixOps

选择

Puppet(Puppet + Foreman)> Ansible

如果需求比较简单就:Ansible > Puppet(Puppet + Foreman)

桌面环境

工具

KDE

KDE,K桌面环境(Kool Desktop Environment)的缩写。一种著名的运行于 Linux、Unix 以及FreeBSD等操作系统上面自由图形工作环境,整个系统采用的都是TrollTech公司所开发的Qt程序库。KDE和Gnome都是Linux操作系统上最流行的桌面环境系统。

GNOME

GNOME是一种支持多种平台的开发&桌面环境,可以运行在包括GNU/Linux(通常叫做Linux),Solaris,HP-UX,BSD和Apple’s Darwin系统上。GNOME拥有很多强大的特性, 如:高质量的平滑文本渲染,首个国际化和可用性支持,并且包括对反向文本的支持(注:有些国家的文字是从右到左的排版的)。

XFCE

Xfce是一款适用于多种Linux系统的轻量级桌面环境。它被设计用来提高您的效率,在节省系统资源的同时,能够快速加载和执行应用程序。

LXDE

LXDE专案旨在提供一个新的轻量、快速的桌面环境。相较于功能强大与伴随而来的膨胀性,LXDE注重于实用性和轻巧性,并且尽力降低其所耗系统资源。不同于其它桌面环境,其元件相依性极少。取而代之的是各元件可以独立运作,大多数的元件都不须倚赖其它套件而可以独自执行。

Fluxbox

Fluxbox是一个基于GNU/Linux的轻量级图形操作界面,它虽然没有GNOME和KDE那样精美,但由于它的运行对系统资源和配置要求极低,所以它被安装到很多较旧的或是对性能要求较高的机器上,其菜单和相关配置被保存于用户根目录下的.fluxbox目录里,这样使得它的配置极为便利。

Fvwm

FVWM作为一种虚拟桌面的代表,宗旨为以最小的内存换取最多的特性。FVWM可以轻而易举的模拟大多数的桌面系统和自定义的桌面。

FVWM的优势:

FVWM启动/重启速度很快;

FVWM界面很漂亮,可以说FVWM的截图是最值得欣赏的,而且虚屏功能是所有WM中最强大的;

FVWM占用内存很少,与TWM相比,相差不到1M(用free查看),但是界面可以很酷;

可以对多种系统统一桌面,使各种系统桌面一致,并且部署容易,简单的配置文件直接拷贝就行;

FVWM可以把桌面发挥到极限:(256M内存)曾经同时跑6个 Bochs系统(虚拟机),openoffice,mozilla,gthumb,gaim等,窗口反应迅速,虚拟桌面有10*4个,依然切换迅捷,整个桌面看起来依然简洁。而且调整FVWM配置,重启FVWM很多次,从来没有崩溃过;

FVWM简单的通过配置实现桌面的新功能,例如:自动伸缩的邮件通知等等;

最有潜力的扩展方式,用perl语言可以快速的扩展FVWM的功能;

选择

桌面环境的选择,完全由自己的喜好决定,适合你的就是最好的。下面是我使用KDE,GNOME,FVWM后的感受。XFCE、LXDE因为没用过,这里不做评价。

KDE是我目前所使用的桌面环境,KDE给我的最大感觉是定制性强,尤其是快捷键。KDE的定制性要比GNOME强。KDE功能强大,里面集成了不少非常优秀的软件,尽管如此KDE也是非常的稳定。

GNOME3给我的感觉是很前卫,界面很漂亮。GNOME3里有很多新颖的设计和非常不错的软件。但是因为不太喜欢GNOME3的设计,所以在2013年的时候转投KDE,从那时起便喜欢上了KDE。

FVWM给我的感觉是一切你都需要自己定制: 桌面、任务栏、鼠标左右键选项、定义各种行为等等。你可以把桌面配置成任何你想要的形式。总之FVWM非常灵活,跟KDE,GNOME,XFCE等等感觉完全不一样。建议大家尝试一下。FVWM有很多优势(上面有列举),也有自己的缺点比如配置量大,功能没有KDE、GNOME和XFCE功能强大等。但对追求简约的Linux用户来说还是一款值的一试的桌面环境。

输入法

fcitx: 小企鹅输入法,国产

scim: GTK输入法

ibus: Linux下的智能输入法,可与搜狗拼音相媲美

fcitx是我目前使用的输入法框架,在这个输入法框架中我会装上sunpinyin输入法,当然现在我用的是搜狗输入法,感觉搜狗输入法真的非常棒,应该说是最好的中文输入法了。fcitx对五笔的支持也非常好。

chm阅读器

工具

kchmviewer

它是KDE下的chm查看器。对中文支持很好,KDE环境下第一选择。

chmsee

ChmSee是一款非常出色的CHM阅读器,小巧轻便,兼容性也很出色。

Gnochm

Gnochm功能和界面都跟windows下的chm阅读器基本一样,没有乱码。

Xchm

这是由外国程序员开发的一款CHM阅读器,优点是和win下的CHM阅读几乎一模一样,呵呵,这个如果在win看习惯了,比较容易接受,查看英文的chm文件的时候,效果非常漂亮。

选择

这些chm阅读器最大的不同在于对中文的支持,选择一款对中文支持好的就可以了。kchmviewer是我目前正在用的软件对中文有很好的支持。推荐给大家。Gnochm也非常不错。

思维导图软件

FreeMind

FreeMind是一款简单易用的思维导图软件,可以帮助我们快速地绘制出思维导图,帮助我们快速有序地组织思路。

XMind

XMind界面美观,兼容FreeMind和MindManager等流行思维导图软件的数据格式,而且功能丰富,不仅可以绘制思维导图,还能绘制鱼骨图、二维图、树形图、逻辑图、组织结构图,是一款非常出色的的思维导图和头脑风暴软件。

SlideShow

工具

做Slides的方法有很多,每个人的选择会不同,下面是我曾经用来做Slides的工具,仅供参考。

LibreOffice Impress

类似于Windows下的PowerPoint, 是做幻灯片的不错选择,如果不喜欢倒腾的话。

Beamer

Beamer is a LaTeX package for writing presentations.

reveal.js

reveal.js is an Org-mode extension that exports Org documents into Reveal.js presentations. Reveal.js is a web-based presentation framework with 3-D effects, customizable themes and animations, powered by the latest HTML5 technologies.

S5

S5 is a standards-based suite for writing slide-show presentations in html web pages. The browser is used as the presentation engine, and a slightly altered form of Org-mode’s HTML export serves as the base of the presentation.

org-html5presentation

org-html5presentation is an Exporter of Org-mode documents to HTML5 slide show presentations.

tpp

命令行模式下的幻灯片展示工具 tpp - the command line presentation tool

参考

Tools for Creating Screen or Online Presentations

Writing Beamer presentations in org-mode

Writing Non-Beamer presentations in org-mode

选择

我用的是Beamer,效果大家可以下载emacs介绍(PDF幻灯片)查看。

时间管理工具(GTD)

工具

TaskCoach

Task Coach是一款开源的个人事务管理工具,并且主要针对个人的代办事项。这个软件不同于同类型的软件如Outlook或者Lotus Notes等,因为这些软件都不具备合成事务的功能。因为一般来说,一件事务的办理都有几个相关步骤的,而Task Coach正是从这个特性出发而设计的,尤其适合对复杂事件的处理。目前,Task Coach包括创建任务及子任务、设置任务类别、跟踪任务的完成进度、添加任务笔记、打印或输出任务、通知提醒等功能。使用Task Coach这个简单的Todo管理器,相信能让你的工作更加井井有条。

Calcurse

Calcurse是一个基于文本界面的个人日程安排软件,可对事件、委任和每日事务进行跟踪,可配置的提醒系统。

Taskwarrior

Taskwarrior是一个基于命令行的TODO列表管理工具。主要功能包括:标签、彩色表格输出、报表和图形、大量的命令、底层API、多用户文件锁等功能。

emacs

毫无疑问你可以把Emacs配置成一个GTD工具, 只要你愿意。在Emacs下很容易配置的。

Tasque

Tasque是一个Linux下简单的图形化任务管理工具。

Yokadi

命令行任务管理系统。

选择

想用比较专业的图形界面的任务管理器: TaskCoach。我用过一段时间,但老崩溃,不过TaskCoach目前正处于积极的开发阶段,相信它会越来越稳定的。

想用基于ncurses的带界面的任务管理器: Calcurse

想用命令行下的任务管理器: Taskwarrior

Emacs控: 那就用emacs自己配置出一个GTD吧

推荐: TaskCoach

PDF编辑软件

工具

Pdftk

如果PDF是一张电子纸,Pdftk就是一个印戳涂抹器、打孔机、浆糊、显影液、和一个X光玻璃。Pdftk是一个简单的PDF万用工具,使用它,你可以:

合并PDF文档

分割PDF

旋转PDF页面

解密PDF密码

加密PDF

使用FDF Data或者XFDF来填写PDF窗体

添加水印或者标签

显示PDF信息

修改PDF信息

附加文件到PDF页面或者PDF文档

解压PDF附件

分解PDF文档成单页形式

解压和重新压缩PDF流

修复受损的PDF文档

Pdftk让你轻松管理你的PDF文档,并且是免费的,可以在Windows、Linux、Mac OS X、FreeBSD和Solaris。

Pdfchain

Pdftk的GUI工具。

Pdfedit

PDFedit可以让你整个的编辑PDF文档。你可以改变PDF的任意部分。功能可以使用脚本添加。脚本可以使用其它外部编辑器,并且可以定制自己的脚本。

PdfMod

PDF Mod是一个简单的PDF修改工具。你可以调整页的顺序、删除页面、导出文档里面的图像,编辑标题、主题、作者和关键词并且可以通过拖拽来合并文档。

PDF-Shuffler

PDF-Shuffler是一个使用python-gtk写成的小工具,它可以协助使用者合并或分割PDF文档,另外也可以对PDF的每一页做旋转、切割或重新排序。事实上它就是python-pyPdf的一个图形化使用者界面。

Xournal

Xournal是一个用于书写备忘笔记、草图的编辑工具。但它有一个特色功能,就是可以导入及导出PDF文件,所以我们也可以把它当作PDF批注工具,当你拿到一个PDF文件后,你可以用此工具导入PDF文件,并可对局部内容进行高亮、文字批注等操作,导出后再分发给其它人,非常简单易用。

其它

PDFsam

选择

尝试了Linux下的各种PDF编辑工具,若只是做一些简单的PDF页面分割与合并功能,感觉最好用的就是PDF Mod,其界面做的比较棒,但若是要处理比较大量的PDF文档或是更复杂的文字编辑,那就要考虑PDFedit或是其它几个工具了。

性能测试工具

工具

CPU nbench, linpack, SPECjbb2015

内存 LMbench, stream

网络IO netperf (最专业的网络IO benchmark工具,应该是Linux下用的最多的), iperf

磁盘IO dd, iozone, bonnie++, dbench, fio(推荐), smallfile

Mysql sysbench, httperf

HTTP ab, httperf, webbench

Java SPECjvm2008

开源测试套件 ltp

参考

Linux性能测试之基准测试工具

Performance Testing

Linux Benchmark Tools

压力测试工具

CPU stress

内存 stress

磁盘IO iozone, bonnie++

网络IO netperf

Linux终端

工具

Yakuake

KDE下的下拉式终端,也是我最喜欢的。稳定,配置性高,功能全。

Guake

GNOME下的下拉式终端,也是一款非常不错的终端,唯一的缺点是不支持alt+number键切换TAB。不过可以通过修改代码的方式解决。但是,即使支持了alt + number键切换TAB,还有个问题没法解决就是底部的TAB没法隐藏。总的来说很喜欢这款终端。

Tilda

又一款下拉式终端。跟Yakuake一样非常棒。它的快捷键和功能没有Yakuake,但是作为一款终端软件现有的功能已经完全够用了。

Terminator

非下拉式终端中功能最全,最完美的一款终端。

Stjerm

这是一款可以和Guake、Tilda相媲美的终端软件。而且它非常的轻巧,有tab页,可以全屏切换。

选择

我现在基本不用非下拉式终端,在日常的工作学习中我通常会Yakuake,Guake,Tilda一起用。Yakuake用来工作,Tilda用来学习,Guake用来它用。

在非下拉式终端中我会选择: Terminator, Terminator配置性强,自带分屏功能。

参考

12款最佳Linux命令行终端工具

SQL数据库

工具

MySQL

MySQL是开源数据库中的佼佼者,它的用户数是在同类开源数据库中是最多的,它既可以被小的新兴公司所使用,也可以被采用了操作系统集群的大型Web站点所使用。

PostgreSQL

在开源数据库中,PostgreSQL以其丰富的功能而显得格外突出,其中包括存储过程、表分区(partitioning)、多过程语言支持和多种数据类型和索引的支持。

SQLite

SQLite是一个轻量级、跨平台、容错性强、数据便于迁移的关系型数据库。

MariaDB

MariaDB是一个采用Aria存储引擎的MySQL分支版本,是由原来MySQL的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。

Oracle

Oracle是商业数据库的代表,具有非常丰富的功能、广泛的平台支持和大量的附加功能。

其它

DB2

选择

如果想要一个功能强大,稳定的数据库: MariaDB/MySQL

如果想要一个轻量级,性能稳定,便于迁移的数据库:SQLite

PostgreSQL没用过。

NoSQL数据库

工具

MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

CouchDB

Apache CouchDB是一个面向文档的数据库管理系统。它提供以JSON作为数据格式的REST接口来对其进行操作,并可以通过视图来操纵文档的组织和呈现。

Cassandra

Apache Cassandra是一套开源分布式Key-Value存储系统。

Redis

Redis是一个高性能的key-value数据库。 Redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。

选择

这些我都没用过NoSQL数据库我都没用过。

备份软件

工具

rsync

轻量级的备份工具,能应付大部分情况。

tar

Linux tar命令。

Amanda

Amanda是一个备份系统,允许管理员建立一个单一的主备份服务器备份多台主机的网络,磁带机/兑换或磁盘或光学介质。

Bacula

Bacula是一套计算机程序,允许系统管理员来管理备份,恢复和核查在网络上的计算机数据。 它可以备份到不同类型的媒体,包括磁带和磁盘。在技术方面,它是一个网络客户机/服务器的备份程序。相对易于使用和高效,同时提供许多先进的存储管理功 能,可以很容易地找到和恢复丢失或损坏的文件。由于它采用模块化设计,具有很好的伸缩性。

选择

不复杂的备份任务: rsync

复杂的备份任务: Bacula/Amanda

游戏

Linux下的游戏比较多, 这里就推荐一款非常非常经典的游戏。不得不说图形显示是Linux下游戏的硬伤。

NetHack

NetHack(Wiki),20年历史的古老电脑游戏。没有声音,没有漂亮的界面,不过这个游戏真的很有意思。网上有个家伙说:如果你一生只做一件事情,那么玩NetHack。

其它实用工具

远程桌面客户端 rdesktop

屏幕管理器 screen, tmux(与screen类似,可作为screen的替代品)

监控文档 tail, multitail

TTY录制工具 ttyrec && ttyplay (与此类似的还有Shelr和termrec)

截图工具 shuttle, scrot

密码生成器 pwgen, mkpasswd, makepasswd

密码管理工具 keepassX, keepass2 (我用的是keeppassX)

版本管理工具 git, gitg, gitlab(gitg是git的图形界面,gitLab是一个用于仓库管理系统的开源项目,类似于github), svn (Linux下推荐用git)

财务管理 gnucash, homebank, ledger (gnucash更专业些,我用的是这个)

密码破解 John the Ripper, Hydra, Medusa, Ophcrack (ophcrack是图形界面的工具)

入侵检测 PSAD, Snort, Tripwire, chkrootkit和rootkit。

笔记软件 CherryTree, Zim,印象笔记(Web版),为之笔记 (目前我用的是CherryTree)

数据删除 shred(Linux coreutils), wipe, srm, bleachbit(GUI工具)。此外还有一些可以删除内存和swap中内容的工具。参考使用 Linux 安全删除工具

歌词软件 osdlyrics (用了2年了,非常稳定,功能很多)

X窗口交互工具 wmctrl

粘贴板工具 xclip

在线Markdown工具 Cmd Markdown 简明语法手册

省电工具 powertop

硬盘IO监视工具 iotop

管道查看器 pv

语音合成器 espeak

虚拟天文馆 stellarium

家谱程序 gramps

正则表达式的开发和执行工具 redet

文件去重工具 fdupes

彩色man界面 most

监控系统温度、电压等 lm-sensors

家庭影院 xbmc

文件夹比较和同步工具 freefilesync

终端控制数字键盘开启关 numlockx

开启笔记本触摸板 synclient TouchPadOff=0

关闭笔记本触摸板 synclient TouchPadOff=1

代码统计工具 cloc

查看系统性能 dstat (iostat, vmstat, ifstat三合一的工具)

从标准输入读取数据并执行 xargs, parallel

压缩/解压工具 rar, unrar, zip, tar, gzip, bzip2等

Linux下的电驴 amule

系统优化工具 tweak (注意:每个桌面环境都有自己不同的tweak工具)

视频聊天 Skype

终端交互过程录制 ttygif

记录终端会话 script

终端里的记录器 script,记录某人在终端中的所作所为:

` $ vi ~/.profile # run the script command to record everything # use -q for quite and -a option to append the script # /usr/bin/script -qa /usr/local/script/log_record_script` * 1 * 2 * 3 * 4 * 5 * 6
简历模板 moderncv (mcv, moderncv 的笔记)

其它工具(比较有趣)

cowsay Cowsay命令是一个有趣的命令。它会用ASCII字符描绘牛,羊和许多其它动物,并让它们说出你想输出的话。

xcowsay Cowsay的X Window版本,会在屏幕上显示一小奶牛。

cowthink 牛在思考,而不是说话。

aafire 在你的终端放一把火。

asciiquarium 在终端弄一个水族馆。

banner 在终端用很大的字符打印你输入的字符串。

echo “Tecmintcom is a community of Linux Nerds and Geeks”|pv -qL 10 匀速打字。

asciiview 在屏幕上用ASCII码格式显示一张图片。

sl 一辆火车呼啸而过。

yes 重复输出字符串直到被杀死

xeyes 一双萌萌的眼睛一直盯着你。

toilet 将输出的文本添加边框。

rev 它会把传递给它的的每个字符串都反过来

oneko 一只猫在追老鼠(鼠标指示器)。

linuxlogo 查看当前比较流行的Linux发行版的Logo。

fortune 随机输出一条谚语或信息。

figlet 用大写方式把我们输入的字符串显示在终端,显示效果由ASCII字符组成。

cmatrix 这个命令会在终端生成ASCII字符组成的矩阵风格的动画效果。

结语

为了给大家分享这些,我花了很大的功夫来整理Linux下的软件,Linux下好用的软件超多,肯定还有很多优秀的软件这篇文章没有涉及到,如果大家知道其它好用的软件/工具,还希望能够发扬开源精神分享出来,或者以留言的形式,或者直接发email给我,我会更新到这篇文章中。希望这篇文章能够对刚接触Linux的朋友有所帮助。因为这篇文章借鉴了很多网上整理的资料,所以这里要感谢一下整理这些资料的作者。

[ Last edited by zzz19760225 on 2016-2-3 at 20:29 ]
作者: zzz19760225     时间: 2016-2-6 07:25    标题: 13BASIC初学者通用的符号指令代码 14楼

freebasic
编辑词条
该词条缺少摘要、基本信息栏、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>


1属性
2特点
3不足点
1 属性 编辑
【语言】FreeBASIC,BASIC 语言界的黑马

学习过 QuickBASIC 的用户就可以上手的 BASIC 语言,

完全免费开源,能够产生高品质的机器码,跨平台,

FreeBASIC如同他的名字一样,免费而且基于已建立的BASIC语法,

2 特点 编辑
易学易用是他的优点,但是不光是简单而已,功能十分强大。

- 几乎支持所有QB的原指令,且有许多追加功能

- 产生快速高品质的机器码,不依靠VM等虚拟机器

- 完全免费,包含源代码,编译出来的程序无授权问题

- 支持MS-DOS/Win32/Linux多平台,也可以编译GUI程序

- 拥有众多第三方函数库支持(Allegro/SDL..以及DirectX/Win32API)

- 支持Unicode,使用中文十分容易

- 编译EXE/OBJ/LIB/DLL都很容易,以便和其他语言应用

3 不足点 编辑
- 代码最佳化还没有100%完成

官方主页http://www.freebasic.net/

FBEdithttp://fbedit.freebasic.net/

FBIdehttp://fbide.freebasic.net

FreeBASIC是一个免费自由的 32位BASIC编译器.可以运行在Windows(32位),保护模式的 DOS 和linux(x86)系统之上。它最初是作为一个代码兼容,自由免费的 微软QuickBASIC的替代品而开发的,但是现在已迅速成长为一个强大的开发工具。默认安装已经包含以下的函数库:Allegro, SDL, OpenGL, Gtk, Windows API 等等。

除了语法上最大程度上兼容微软QuickBASIC以外,FreeBASIC加入了一些新的特性,比如指针,无符号 数据类型, 内联汇编,预处理器等等。

FreeBASIC 是一个 self-hosting 编译器,(它的编译器是用 FreeBASIC 语言写的),由V1ctor开发。
------------------------------------------------------------------------
BASIC
编辑词条
该词条缺少基本信息栏、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>

BASIC(Beginners' All-purpose Symbolic Instruction Code,又译培基),意思就是“初学者通用符号指令代码”,是一种设计给初学者使用的程序设计语言。在微电脑方面,则因为BASIC语言可配合微电脑操作功能的充分发挥,使得BASIC早已成为微电脑的主要语言之一。


1简介
2历史
初期
微机
结构化
Visual
3名字
4关于
5基本命令
6语言特点
1 简介 编辑
Beginner's All-purpose Symbolic Instruction Code(初学者通用符号指令代码),刚开始被作者写做 BASIC,后来被微软广泛地叫做 Basic 。BASIC语言是由Dartmouth学院JohnG.Kemeny与ThomasE.Kurtz两位教授于1960年代中期所创。由于立意甚佳,BASIC语言简单、易学的基本特性,很快地就普遍流行起来,几乎所有小型、微型以家用电脑,甚至部分大型电脑,都有提供使用者以此种语言撰写程式。在微电脑方面,则因为BASIC语言可配合微电脑操作功能的充分发挥,使得BASIC早已成为微电脑的主要语言之一。

随着计算机科学技术的迅速发展,特别是微型计算机的广泛使用,计算机厂商不断地在原有的BASIC基础上进行功能扩充,出现了多种BASIC版本,例如TRS-80 BASIC、Apple BASIC、GWBASIC、IBM BASIC(即BASICA)、True BASIC。此时BASIC已经由初期小型、简单的学习语言发展成为功能丰富的使用语言。它的许多功能已经能与其他优秀的计算机高级语言相媲美,而且有的功能(如绘图)甚至超过其他语言。

一般人类自然语言有标准语言,也有方言,电脑语言亦是如此。许多种电脑都有BASIC语言,但其语法、规则、功能却不尽然相同,而同一种电脑所使用的BASIC语言也可能有不同版本或由不同的软件开发公司制作的不同品牌BASIC语言,只是大家一致地继承了BASIC创始者所设计的基本形态与精神,而分别赋予独特的设计手法与增添一些功能罢了。

2 历史 编辑
初期
语言功能很弱、语句很少,只有14条语句,后来发展到17条语句,这就是所谓的“基本的BASIC”。这个时期的BASIC语言主要在小型机上使用,以编译方式执行。

微机
20世纪70年代,BASIC发展成为一种广泛使用的通用语言。也正是这个年代,微型计算机诞生了。第一个微型计算机配置BASIC语言的是微软(Microsoft)公司总裁比尔.盖茨,那时他才19岁。在比尔.盖茨的第一个微型计算机BASIC的带动下,各种计算机都相继配备了BASIC语言,由于机型不同,它们对基本BASIC语言的扩展也不相同,导致了同是BASIC语言程序却不能互相兼容的局面。这个时期的BASIC语言开始采用解释执行方式,方便了用户对程序的维护。

结构化
结构化程序设计思想是20世纪70年代开始萌发的,其主要思想是尽量使程序按传统书写顺序执行,减少语句之间的跳转,采用模块化设计,各模块完成一守的相对简单的功能。结构化程序能增加程序的可读性。

20世纪80年代中期,美国国家标准化协会(ANSI)根据结构化程序设计的思想,提出了一个新的BASIC标准草案。在此之后,出现了一此结构化的 BASIC语言,主要有Quick BASIC True BASIC等。它们不仅完全适应结构化、模块化的程序设计的要求,而且保留了BASIC语言易学、易用、易维护等优点,同时提供了解释执行方式和编译执行方式。

Visual
20世纪80年代中期,微软公司推出Windows操作系统,它提供了图形方式的用户界面,通过鼠标、窗口中、菜单等控计算机,使操作变得更直观、更简单,使用计算机更容易,更方便。

基于Windows操作系统的BASIC语言是Visual BASIC(意为“可视的BASIC”),由美国微软公司开发,它是微软公司在1991年推出的,是一种强有力的软件开发工具,应用它可以设计出具有良好用户界面的应用程序。Visual BASIC一出现就受到高度重视,发展潜力具大,比尔.盖茨宣称:“Visual BASIC是迎接计算机程序设计挑战的最好例子。”

1975 年,比尔·盖茨创立的 Microsoft,并成功的把 Basic 语言的编译器移植到使用 Intel处理器的 ALR 计算机中,IBM 在 1982 年选定 Microsoft 创作 PC 的操作系统时,也选定了 Microsoft 的 Basic 作为其计算机的 ROM-Basic。微软还在其发布的 DOS操作系统中免费加入了 GW-Basic、QBasic 等当时最好的 Basic解释程序。  Quick BASIC是微软(Microsoft)公司1987年推出的。

1991年,伴随着MS-DOS5.0的推出,微软(Microsoft)公司同时推出了Quick BASIC的简化版QBASIC,将其作为操作系统的组成部分免费提供给用户。自从Windows操作系统出现以来,图形用户界面(GUI)的BASIC语言(即Visual Basic)已经得到广泛应用。

2001年Visual Basic .NET推出

2003年推出Visual Basic .NET 2003推出

2005年11月7日在Visual Studio 2005内推出Visual Basic 2005。

BASIC语言早期是以直译程式的方式创始,也演化出许多不同名称的版本,如:BASICA,GW-BASIC,MBASIC,TBASIC,...。微软公司也在MS-DOS时代即推出QuickBASIC,并逐渐将之改良为兼具直译与编译双重翻译方式,1988年在Windows开始流行的时候,微软公司推出VisualBasicforWindows成为Windows作业环境一枝独秀的易学易用程式语言,微软公司还特地为MS-DOS的使用者开发了VisualBasicforMSDOS。微软在早期的崛起BASIC语言功不可没。

Visual Basic 6.0编译出的程序可以顺利运行在Windows 7下,也可以顺利运行在微软最新推出的操作系统Windows 8下。

3 名字 编辑
Beginner's All-purpose Symbolic Instruction Code(初学者通用的符号指令代码),刚开始被作者写做BASIC,后来被微软广泛地叫做Basic。

BASIC语言本来是为校园的大学生们创造的高级语言,目的是使大学生容易使用计算机。尽管初期的BASIC仅有16条语句,但由于BASIC在当时比较容易学习,它很快从校园走向社会,成为初学者学习计算机程序设计的首选语言。

1975 年,比尔·盖茨创立的 Microsoft,并成功的把Basic语言的编译器移植到使用 Intel处理器的 ALR 计算机中,IBM 在 1982 年选定 Microsoft 创作 PC 的操作系统时,也选定了 Microsoft 的Basic作为其计算机的 ROM-Basic。微软还在其发布的 DOS 操作系统中免费加入了 GW-Basic、QBasic 等当时最好的Basic解释程序。

2001年Visual Basic .NET推出

2003年推出Visual Basic .NET 2003推出

2005年11月7日在Visual Studio .NET 2005内推出Visual Basic .NET 2005。

还有Visual Studio .NET 2008里有Visual Basic .NET 2008

4 关于 编辑
BASIC是在1965年5月,由美国科学家托马斯·库尔兹研制出来的。10多年后,(前微软公司的总裁)比尔·盖茨把它移植到PC上。三十多年来,BASIC语言一直是初学计算机语言者使用最广泛的一种高级语言。它能进行数值计算、画图、演奏音乐,功能十分强大,而学起来又是非常容易。

5 基本命令 编辑
PRINT:显示内容或结果

INPUT:键入

LET:赋值

GOTO:无条件转移

FOR TO……NEXT:循环

IF THEN ELSE:条件

DO WHILE……LOOP:条件循环

END:结束

RUN:运行

CLS:清屏

6 语言特点 编辑
1.简单易学:BASIC语言所使用的词大多数是英语单词的原意或缩写,运算符号、表达式的书写也与数学中差不多。标准的BASIC语句只有17种。

2.会话式:人们可以通过键盘和显示屏与计算机“对话”,运行程序时,计算机会把程序中语法错误及错误的属性显示出来,让使用者修改。

3.适用面广:既能进行科学计算,又能数据处理等。

4.两种执行方式:解释方式和编译方式。其中解释方式可以边输程序边运行非常适合初学者。

BASIC是Beginner's All-purpose Symbolic Instruction Code的缩写,意为初学者通用符号指令代码语言,它是在1964年由美国的两位教授Thomas和John G.Kemeny在Fortran语言的基础上设计的语言系统,这个简单、易学的程序设计语言当时只有17条语句,12个函数和3个命令,现在一般称其为基本BASIC。
--------------------------------------------------------------------------
quick basic
编辑词条
该词条缺少摘要、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>
中文名        Quick Basic
性 质        BASIC变种       
外文名        Beginner's All-purpose Symbolic Instruction Code
单 位        美国微软公司


1概述
2改进
3常见语法
条件语句
循环结构语句
基本语句
变量
简单的双重循环在冒泡排序程序的运用
几种常见的运算语句及函数
初学者的练习题
4快捷键
5范例
1 概述 编辑
QBASIC是BASIC(Beginner's All-purpose Symbolic Instruction Code,初学者通用指令代码)语言的一个变种,由美国微软公司开发, 1991年随MS-DOS 5.0推出。它不能被编译成独立的 可执行文件, 源代码在 集成开发环境(IDE)中先被编译成 中间代码,然后中间代码在IDE中被 解释执行。它被设计用来代替GW-BASIC,并被集成在MS-DOS 5.0及其更高版本(包括Windows 95)中。QBASIC基于 微软稍早推出的QuickBASIC 4.5,但去掉了后者的编译和连接部分。

微软在较新版本的Windows中不再集成QBASIC。不过 Windows 98的 用户可以在 光盘的\\TOOLS\\OLDMSDOS目录中找到它,在 Windows 95的光盘中,它存放在\\OTHER\\OLDMSDOS目录中。 微软网站对它的技术支持只对MS-DOS的授权用户有效。

QBASIC拥有一个值得称道的 集成开发环境和一个功能强大的集成调试器,这一切在那个时代让人耳目一新。直到今天,QBASIC依然是许多面向初学者的编程书籍的 主题。

2 改进 编辑
和Quick BASIC类似而又不同于 微软其他BASIC的早期实现版本的是,QBASIC是一种结构化的 编程语言。和GW-BASIC相比,QBASIC的主要改进是:

扩充了变量和常量的类型

变量名长度:40个 字符

增加了 长整型、定长字符型 变量

可定义数值常量、 字符串常量

子程序和函数作为单独的模块

不需要行号

注:Quick BASIC简称QB,是一种编译型的语言; qbasic是一种解释型的语言,和Quick BASIC拥有一样的语法。同时,为了省时间,QBASIC中的PRINT 语句可以直接用?来代替。

3 常见语法 编辑
条件语句
行if语句: IF 条件 THEN 语句组 ELSE 语句组2

块if语句

IF 条件 THEN

语句组

ELSE

语句组2

END IF

IF 语句还可如此运用

IF 条件 THEN

语句组

ELSEIF 条件 THEN

语句组2

END IF

多分支语句SELECT用法:

SELECT CASE 变量或字符串

CASE 情况1

语句组

CASE 情况2

语句组2

END SELECT

循环结构语句
1.计数循环

for 控制变量=初值 to 终值 'step语句可有可无,若没有step语句,则步长为+1

语句体

next 控制变量

2.当型循环

其格式有两种:

(1)

WHILE 条件

循环体

WEND

(2)

DO WHILE 条件

循环体

LOOP

3.直到型循环

DO

循环体

LOOP UNTIL 条件

基本语句
CLS:即Clean the screen,清屏幕

输入语句:input“显示的内容”, 变量名表

或者“,”改为“;”,改完之后输入时会多出一个“?”

输出语句:print “显示的内容”, 变量名表1,“显示的内容”,变量名表2……

把,改为;时,两个内容间空1格,否则空14格左右,最后不加分号为换行。

赋值语句: 被赋值变量= 表达式 'let 可有可无

一维 数组的定义:dim 变量名(下标)

二维数组的定义:dim 变量名(下标1,下标2)

代码示例(赋值,求和运算,并显示结果)

A=10

B=20

C=A+B

Print C

END

变量
变量长度小于等于40,不允许出现关键词,如Let

数:如15%、-32768、215654#、2.0158e+15、8.545646d+20、-18.75等, 变量名为例如a的变量名

字符串:如“15%”、“abc”等, 变量名为例如a$的变量名

补充:在QB中还可以几何画图,具体用法如下(详见QB内部帮助)

SCREEN 12'639*479 16色图形模式

CIRCLE(100,150),10,4'在x坐标100与y坐标150处画一个半径为10的颜色为4(红色)的圆。

SYSTEM

简单的双重循环在冒泡排序程序的运用
CLS

DIM n AS INTEGER

INPUT n

DIM a(n)

FOR i = 1 TO n

INPUT a(i)

NEXT i

FOR i = 1 TO n

FOR j=1 TO i-1

IF a(j) > a(j+1) THEN SWAP a(j), a(j+1)

NEXT j

NEXT i

FOR i = 1 TO n

PRINT a(i)

NEXT i

END

几种常见的运算语句及函数
加运算:

AB之和=A+B

差运算:

AB之差=A-B

乘运算:

AB之积=A*B

除运算

AB商=A/B

乘方运算

A的B次方=A^B

开方运算

A开方=SQR(A)

交换变量

SWAP 值A,值B

初学者的练习题
1、输入20个数,求出它们的最大值、最小值和平均值。

2、在1——500中,找出能同时满足用3除余2,用5除余3,用7除余2的所有整数;

3、如果一个数从左边读和右边读都是同一个数,就称为回文数,例如686就是一个回文数?喑糖?000以内所有的回文数。

4、已知数列1、5、12、22、35、...?求出第20个数

5、输入一个大于1的整数,打印出它的素数分解式。如输入75,则打印:"75=3*5*5"。

6、输入10个正整数,计算它们的和,平方和;

7、输入20个整数,统计其中正、负和零的个数;

8、输出1——999中能被3整除,且至少有一位数字是5的数;

9、有一个六位数,其个位数字7,现将个位数字移至首位(十万位),而其余各位数字顺序不变,得到一个新的六位数,假如新数为旧数的4倍,求原来的六位数。

10、有这样的一个六位数字labcde,将其乘以3后变成abcdel,编程求这个数。

11、试找出6个小于160而成等差数列的素数。

1-1/3+1/5-1/7+……直到某一项的绝对值小于10的-6次方

附加:

我们用一个正整数列来表示一段地方的高度,当一段地方的高度为一个逐一上升的序列时,

我们称它为一个阶梯,例如 4、5、6、7、8 是一个长度为 5 的阶梯。现在给定一个正整数列,

请找出它第一个最长的阶梯,并将其输出。如果一个阶梯也没有,输出“No”。

运行结果示例:

请输入数列的长度:8

请输入数列:2 3 2 3 4 4 5 6

结果为 2 3 4

4 快捷键 编辑
Ctrl+C+Break:中断正在运行的程序;

F5:运行程序;

Shift+F5:从第一条语句开始重新运行程序;

F4:当程序中断运行时,查看运行结果屏幕,再按一次F4则切换回代码屏幕;

F1:获得帮助。

F8: 单步运行

F9:断点(同QB stop 语句,按F5继续运行)

5 范例 编辑
【1】菜场上一公斤香菇是7.5元,编一个程序,从键盘上输入重量,计算机自动算出其总价

INPUT X

zj=7.5*X

PRINT zj

END

【2】高精度乘法程序

CLS

INPUT a$

INPUT b$

la = LEN(a$)

lb = LEN(b$)

lc = la + lb

DIM a(la), b(lb), c(lc)

FOR i = 1 TO la

a(i) = VAL(MID$(a$, la + 1 - i, 1))

NEXT i

FOR i = 1 TO lb

b(i) = VAL(MID$(b$, lb + 1 - i, 1))

NEXT i

FOR i = 1 TO la

FOR j = 1 TO lb

x = a(i) * b(j): w = i + j - 1

c(w) = c(w) + x MOD 10

c(w + 1) = c(w + 1) + c(w) \ 10 + x \ 10

c(w) = c(w) MOD 10

NEXT j

NEXT i

DO WHILE c(lc) = 0

lc = lc - 1

LOOP

FOR i = lc TO 1 STEP -1

PRINT USING "#"; c(i);

NEXT i

END
-----------------------------------------------------
gw-basic
编辑词条
该词条缺少摘要图、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>
GW-BASIC是高级程序设计语言BASIC的一个方言版本。关于GW的含义,目前有三种说法,一种认为是以微软早期程序员GregWhitten的名字命名的,一种认为是用微软创始人的名字Gates,William命名的,还有一种说法是开发人员给它取的一个戏称gee-whiz(两个英语的象声词,类似于汉语中吆喝牲口的声音)。有一点是肯定的,这个版本的BASIC最早是微软为康柏开发的,时间应该是在1984年,这一年11月,微软,这一年11月,微软首次为IBM之外的计算机厂商提供OEM版本的DOS,GW-BASIC是作为MS-DOS的一个组成部分问世的。首次为IBM之外的计算机厂商提供OEM版本的DOS,GW-BASIC是作为MS-DOS的一个组成部分问世的。
中文名        gw-basic
时 间        1984年       
性 质        程序设计语言
归 属        微软


1历史地位
2特性
3语法
1 历史地位 编辑
Basic的发展经历了三个阶段 :

非结构化Basic语言,如:gw-Basic、MS Basic

结构化Basic语言,如:True Basic、Turbo Basic、Quick Basic

面向对象的程序设计语言,即Visual Basic

gw-basic属于非结构化basic,也就是最早期的basic语言,没有loop和while 循环语句,局限性很大。

2 特性 编辑
GW-BASIC和 微软提供给IBM PC的 BASICA完全兼容,所不同的是,后者依赖于ROM中的BASIC解释器,而前者并不需要,所以,GW-BASIC能在众多IBM PC 兼容机上运行,这就使它的使用范围随着PC兼容机的推广而扩大。第一个流传范围较广的GW-BASIC版本号为2.0,而最后推出的GW-BASIC版本号为3.23,时间大概是1988年。从那时起,如果没有特殊说明,我们一般所说的GW-BASIC就是指的这个版本。

GW-BASIC运行速度较慢,这在很大程度上是因为它是一种交互式的开发工具——这种开发模式是BASIC的诞生地Dartmouth大学最早提出的。和很多早期的BASIC方言一样,GW-BASIC缺乏很多进行 结构化编程所需的语法成分,但是它足够灵活,此外还拥有很多绘图语句和一些简单的发声语句,这就足以使一个 程序员用它开发一个简单的游戏软件、商用软件或者诸如此类的东西。它能够在绝大多数PC上运行,这就给那些想要成为 程序员的人提供了一个学习如何编程的廉价的途径。

3 语法 编辑
GW-BASIC拥有一个简单的 集成开发环境(IDE),所有的程序行都必须有一个 行号,没有行号的语句被认为是需要立即执行的命令。用户界面中,除 屏幕底部的功能快捷键描述和顶部的版权声明外,其他部分都用来显示和编写语句。源文件标准的保存格式是GW-BASIC特有的二进制压缩格式,不过它也提供了一个选项,使得开发者可以用ASCII 文本文件格式保存源文件。GW-BASIC的IDE提供了如下常用命令:RUN(执行当前 源代码),LOAD(从 磁盘装入源代码),SAVE(把源代码保存到磁盘),LIST(显示已打开的源文件内容),SYSTEM(返回操作系统)。它们都可以出现在 源程序代码行上,不过除SYSTEM外,上述用法还相当少见。

前面提到,GW-BASIC对 结构化程序设计方法的支持非常差,所以对GW-BASIC程序员来讲,能够用它写出具备良好结构的程序是很大的提高。在GW-BASIC里,IF/THEN/ELSE条件语句必须在一行内写完,尽管WHILE/WEND已允许包含多行代码;自定义函数只能用类似于DEF FNf(x) = <关于x的数学函数> 这样形式的一行语句来编写(例如,DEF FNLOG(base,number)=LOG(number)/LOG(base)); 变量通常是通过变量名末端的一个表示类型的符号来确定其类型的:A$表示是一个字符串,A%表示是一个 整型数,等等;通过使用DEFINT,DEFSTR等关键字,可以为一组使用相同首字母的变量定义缺省类型;其他变量其类型默认是单精度浮点数。

很多GW-BASIC程序员都是没有经过训练的,他们往往看不到编写结构简单的程序所能带来的好处,因此就导致滥用GOTO语句的现象,他们往往不愿意使用能完成同样功能的结构化的语句。参见面条式代码。

GW-BASIC支持游戏操纵杆和 光笔输入设备,但不支持鼠标。它能够读写磁盘文件、LPT端口和COM端口,也能处理端口事件陷阱,不过不能处理磁带设备。它还能通过使用PLAY语句或SOUND语句来驱动IBM PC及其 兼容机的标准内置扬声器发出声音。
-------------------------------------------------------------------
作者: zzz19760225     时间: 2016-2-6 21:33
电平触发,就是只有高电平(或者低电平)的时候才做指定的事,
边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。
上升沿,顾名思义,就是低电平向高电平转换的瞬间(过程),比如
_______
____/ ,这个图中,/部分就是上升沿,

______
\_____ ,这个图中,\部分就是下降沿
---------------------------------------------------------------

电平就是逻辑上的0,1触发,

而边沿就是脉冲突变触发,逻辑上就是0-1或是1-0 也就是上楼的那位表示的

通俗点讲吧
电平就是电压,高电平就是高电压,低电平就是低电压高电平触发就是当电压为高是触发边沿触发就是当电压由高变低或由低变高时触发
上升沿触发 就是当电压从低变高时触发
下降沿触发 就是当电压从高变低时触发
luts3702 2006-05-13 08:32
计算机处理的是数字信号,即二进制数0和1.这一般是利用电子器件的接通与断开二种状态实现的,当电子器件截止时,输出电位抬高,用它代表数字1,故又称为高电平.当器件接通时,用它代表数字0,故又称为低电平.
分享本回答由科学教育分类达人 任纪兰认证

您当前的位置:首页 > 基础知识 > 模拟 > 模拟技术常见问题
什么是TTL电平、CMOS电平?区别?
来源:21ic 作者:
关键字:CMOS   TTL   电平      
什么是ttl电平

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑"1",0V等价于逻辑"0",这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。

TTL电平信号对于计算机处理器控制的设备内部的数据传输是很理想的,首先计算机处理器控制的设备内部的数据传输对于电源的要求不高以及热损耗也较低,另外TTL电平信号直接与集成电路连接而不需要价格昂贵的线路驱动器以及接收器电路;再者,计算机处理器控制的设备内部的数据传输是在高速下进行的,而TTL接口的操作恰能满足这个要求。TTL型通信大多数情况下,是采用并行数据传输方式,而并行数据传输对于超过10英尺的距离就不适合了。这是由于可靠性和成本两面的原因。因为在并行接口中存在着偏相和不对称的问题,这些问题对可靠性均有影响;另外对于并行数据传输,电缆以及连接器的费用比起串行通信方式来也要高一些。

TTL电路的电平就叫TTL 电平,CMOS电路的电平就叫CMOS电平

TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic),主要有54/74系列标准TTL、高速型TTL(H-TTL)、低功耗型TTL(L-TTL)、肖特基型TTL(S-TTL)、低功耗肖特基型TTL(LS-TTL)五个系列。标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。S-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.5V。LS-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V,输入低电平最大Ⅰ类0.7V,Ⅱ、Ⅲ类0.8V,输出低电平最大Ⅰ类0.4V,Ⅱ、Ⅲ类0.5V,典型值0.25V。TTL电路的电源VDD供电只允许在+5V±10%范围内,扇出数为10个以下TTL门电路;

COMS集成电路是互补对称金属氧化物半导体(Compiementary symmetry metal oxide semicoductor)集成电路的英文缩写,电路的许多基本逻辑单元都是用增强型PMOS晶体管和增强型NMOS管按照互补对称形式连接的,静态功耗很小。COMS电路的供电电压VDD范围比较广在+5--+15V均能正常工作,电压波动允许±10,当输出电压高于VDD-0.5V时为逻辑1,输出电压低于VSS+0.5V(VSS为数字地)为逻辑0,扇出数为10--20个COMS门电路.

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑"1",0V等价于逻辑"0",这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL电平信号对于计算机处理器控制的设备内部的数据传输是很理想的,首先计算机处理器控制的设备内部的数据传输对于电源的要求不高以及热损耗也较低,另外TTL电平信号直接与集成电路连接而不需要价格昂贵的线路驱动器以及接收器电路;再者,计算机处理器控制的设备内部的数据传输是在高速下进行的,而TTL接口的操作恰能满足这个要求。TTL型通信大多数情况下,是采用并行数据传输方式,而并行数据传输对于超过10英尺的距离就不适合了。这是由于可靠性和成本两面的原因。因为在并行接口中存在着偏相和不对称的问题,这些问题对可靠性均有影响;另外对于并行数据传输,电缆以及连接器的费用比起串行通信方式来也要高一些。CMOS电平和TTL电平: CMOS电平电压范围在3~15V,比如4000系列当5V供电时,输出在4.6以上为高电平,输出在0.05V以下为低电平。输入在3.5V以上为高电平,输入在1.5V以下为低电平。而对于TTL芯片,供电范围在0~5V,常见都是5V,如74系列5V供电,输出在2.7V以上为高电平,输出在0.5V以下为低电平,输入在2V以上为高电平,在0.8V以下为低电平。因此,CMOS电路与TTL电路就有一个电平转换的问题,使两者电平域值能匹配

TTL电平与CMOS电平的区别:

(一)TTL高电平3.6~5V,低电平0V~2.4V

CMOS电平Vcc可达到12V

CMOS电路输出高电平约为0.9Vcc,而输出低电平约为0.1Vcc。

CMOS电路不使用的输入端不能悬空,会造成逻辑混乱。

TTL电路不使用的输入端悬空为高电平

另外,CMOS集成电路电源电压可以在较大范围内变化,因而对电源的要求不像TTL集成电路那样严格。

用TTL电平他们就可以兼容

(二)TTL电平是5V,CMOS电平一般是12V。

因为TTL电路电源电压是5V,CMOS电路电源电压一般是12V。

5V的电平不能触发CMOS电路,12V的电平会损坏TTL电路,因此不能互相兼容匹配。

(三)TTL电平标准

输出 L: <0.8V ; H:>2.4V。

输入 L: <1.2V ; H:>2.0V

TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。

CMOS电平:

输出 L: <0.1*Vcc ; H:>0.9*Vcc。

输入 L: <0.3*Vcc ; H:>0.7*Vcc.

一般单片机、DSP、FPGA他们之间管教能否直接相连. 一般情况下,同电压的是可以的,不过最好是要好好查查技术手册上的VIL,VIH,VOL,VOH的值,看是否能够匹配(VOL要小于VIL,VOH要大于VIH,是指一个连接当中的)。有些在一般应用中没有问题,但是参数上就是有点不够匹配,在某些情况下可能就不够稳定,或者不同批次的器件就不能运行。

例如:74LS的器件的输出,接入74HC的器件。在一般情况下都能好好运行,但是,在参数上却是不匹配的,有些情况下就不能运行。

74LS和54系列是TTL电路,74HC是CMOS电路。如果它们的序号相同,则逻辑功能一样,但电气性能和动态性能略有不同。如,TTL的逻辑高电平为> 2.7V,CMOS为> 3.6V。如果CMOS电路的前一级为TTL则隐藏着不可靠隐患,反之则没问题。

1,TTL电平:

输出高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。

2,CMOS电平:

1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容限。

3,电平转换电路:

因为TTL和COMS的高低电平的值不一样(ttl 5v<==>cmos 3.3v),所以互相连接时需要电平的转换:就是用两个电阻对电平分压,没有什么高深的东西。哈哈

4,OC门,即集电极开路门电路,OD门,即漏极开路门电路,必须外界上拉电阻和电源才能将开关电平作为高低电平用。否则它一般只作为开关大电压和大电流负载,所以又叫做驱动门电路。

5,TTL和COMS电路比较:

1)TTL电路是电流控制器件,而coms电路是电压控制器件。

2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。COMS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。COMS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热,这是正常现象。

3)COMS电路的锁定效应:

COMS电路由于输入太大的电流,内部的电流急剧增大,除非切断电源,电流一直在增大。这种效应就是锁定效应。当产生锁定效应时,COMS的内部电流能达到40mA以上,很容易烧毁芯片。

防御措施:

1)在输入端和输出端加钳位电路,使输入和输出不超过不超过规定电压。

2)芯片的电源输入端加去耦电路,防止VDD端出现瞬间的高压。

3)在VDD和外电源之间加线流电阻,即使有大的电流也不让它进去。

4)当系统由几个电源分别供电时,开关要按下列顺序:开启时,先开启COMS电路得电源,再开启输入信号和负载的电源;关闭时,先关闭输入信号和负载的电源,再关闭COMS电路的电源。

6,COMS电路的使用注意事项

1)COMS电路时电压控制器件,它的输入总抗很大,对干扰信号的捕捉能力很强。所以,不用的管脚不要悬空,要接上拉电阻或者下拉电阻,给它一个恒定的电平。

2)输入端接低内组的信号源时,要在输入端和信号源之间要串联限流电阻,使输入的电流限制在1mA之内。

3)当接长信号传输线时,在COMS电路端接匹配电阻。

4)当输入端接大电容时,应该在输入端和电容间接保护电阻。电阻值为R=V0/1mA.V0是外界电容上的电压。

5)COMS的输入电流超过1mA,就有可能烧坏COMS。

7,TTL门电路中输入端负载特性(输入端带电阻特殊情况的处理):

1)悬空时相当于输入端接高电平。因为这时可以看作是输入端接一个无穷大的电阻。

2)在门电路输入端串联10K电阻后再输入低电平,输入端出呈现的是高电平而不是低电平。因为由TTL门电路的输入端负载特性可知,只有在输入端接的串联电阻小于910欧时,它输入来的低电平信号才能被门电路识别出来,串联电阻再大的话输入端就一直呈现高电平。这个一定要注意。COMS门电路就不用考虑这些了。

8,TTL电路有集电极开路OC门,MOS管也有和集电极对应的漏极开路的OD门,它的输出就叫做开漏输出。OC门在截止时有漏电流输出,那就是漏电流,为什么有漏电流呢?那是因为当三机管截止的时候,它的基极电流约等于0,但是并不是真正的为0,经过三极管的集电极的电流也就不是真正的0,而是约0。而这个就是漏电流。开漏输出:OC门的输出就是开漏输出;OD门的输出也是开漏输出。它可以吸收很大的电流,但是不能向外输出的电流。

所以,为了能输入和输出电流,它使用的时候要跟电源和上拉电阻一齐用。OD门一般作为输出缓冲/驱动器、电平转换器以及满足吸收大负载电流的需要。

9,什么叫做图腾柱,它与开漏电路有什么区别?

TTL集成电路中,输出有接上拉三极管的输出叫做图腾柱输出,没有的叫做OC门。因为TTL就是一个三级关,图腾柱也就是两个三级管推挽相连。所以推挽就是图腾。

扩展阅读:电感和磁珠的区别与联系


TTL电平 编辑
TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。
中文名 TTL电平 外文名 transistor transistor logic 规    定 二进制 又    称 晶体管-晶体管逻辑电平 应    用计算机处理器
目录
1 优点
2 标准
3 涉及学科
▪ 与CMOS管
▪ 附
优点编辑
TTL电平信号对于计算机处理器控制的设备内部的数据传输是很理想的,首先计算机处理器控制的设备内部的数据传输对于电源的要求不高以及热损耗也较低,另外TTL电平信号直接与集成电路连接而不需要价格昂贵的线路驱动器以及接收器电路;再者,计算机处理器控制的设备内部的数据传输是在高速下进行的,而TTL接口的操作恰能满足这个要求。TTL型通信大多数情况下,是采用并行数据传输方式,而并行数据传输对于超过10英尺的距离就不适合了。这是由于可靠性和成本两面的原因。因为在并行接口中存在着偏相和不对称的问题,这些问题对可靠性均有影响。
数字电路中,由TTL电子元器件组成电路使用的电平。电平是个电压范围,规定输出高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。
标准编辑
“TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic),主要有54/74系列标准TTL、高速型TTL(H-TTL)、低功耗型TTL(L-TTL)、肖特基型TTL(S-TTL)、低功耗肖特基型TTL(LS-TTL)五个系列。标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。S-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.5V。LS-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V,输入低电平最大Ⅰ类0.7V,Ⅱ、Ⅲ类0.8V,输出低电平最大Ⅰ类0.4V,Ⅱ、Ⅲ类0.5V,典型值0.25V。”
涉及学科编辑
“TTL电平”最常用于有关电专业,如:电路、数字电路、微机原理与接口技术、单片机等课程中都有所涉及。在数字电路中只有两种电平(高和低)高电平+5V、低电平0V。同样运用比较广泛的还有CMOS电平、232电平、485电平等。
与CMOS管

1.CMOS是场效应管构成,TTL为双极晶体管构成
  2.CMOS的逻辑电平范围比较大(3~15V),TTL只能在5V下工作
  3.CMOS的高低电平之间相差比较大、抗干扰性强,TTL则相差小,抗干扰能力差
  4.CMOS功耗很小,TTL功耗较大(1~5mA/门)
  5.CMOS的工作频率较TTL略低,但是高速CMOS速度与TTL差不多相当
简单理解:
TTL电平,TTL的电源工作电压是5V,所以TTL的电平是根据电源电压5V来定的。CMOS电平,CMOS的电源工作电压是3V - 18V,CMOS的电源工作电压范围宽,如果你的CMOS的电源工作电压是12V,那么这个CMOS的输入输出电平电压要适合12V的输入输出要求。即CMOS的电平,要看你用的电源工作电压是多少,3v - 18V,都在CMOS的电源工作电压范围内,具体数值,看你加在CMOS芯片上的电源工作电压是多少。


详解TTl和cmos差异
TTL——Transistor-Transistor Logic
  HTTL——High-speed TTL
  LTTL——Low-power TTL
  STTL——Schottky TTL
  LSTTL——Low-power Schottky TTL
  ASTTL——Advanced Schottky TTL
  ALSTTL——Advanced Low-power Schottky TTL
  FAST(F)——Fairchild Advanced schottky TTL
  CMOS——Complementary metal-oxide-semiconductor
  HC/HCT——High-speed CMOS Logic(HCT与TTL电平兼容)
  AC/ACT——Advanced CMOS Logic(ACT与TTL电平兼容)(亦称ACL)
  AHC/AHCT——Advanced High-speed CMOS Logic(AHCT与TTL电平兼容)
  FCT——FACT扩展系列,与TTL电平兼容
  FACT——Fairchild Advanced CMOS Technology
  1,TTL电平:
  输出高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平
  是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是
  0.4V。
  2,CMOS电平:
  1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容限。
  3,电平转换电路:
  因为TTL和COMS的高低电平的值不一样(ttl 5v<==>cmos 3.3v),所以互相连接时需
  要电平的转换:就是用两个电阻对电平分压,没有什么高深的东西。
  4,OC门,即集电极开路门电路,OD门,即漏极开路门电路,必须外接上拉电阻和电源才能
  将开关电平作为高低电平用。否则它一般只作为开关大电压和大电流负载,所以又叫做驱
  动门电路。
  5,TTL和CMOS电路比较:
1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。
  2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。
  CMOS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。
  CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热,这是正常
  现象。
  3)CMOS电路的锁定效应:
  CMOS电路由于输入太大的电流,内部的电流急剧增大,除非切断电源,电流一直在增大
  。这种效应就是锁定效应。当产生锁定效应时,CMOS的内部电流能达到40mA以上,很容易
  烧毁芯片。
  防御措施:
  1)在输入端和输出端加钳位电路,使输入和输出不超过规定电压。
  2)芯片的电源输入端加去耦电路,防止VDD端出现瞬间的高压。
  3)在VDD和外电源之间加限流电阻,即使有大的电流也不让它进去。
  4)当系统由几个电源分别供电时,开关要按下列顺序:开启时,先开启CMOS电路的电
源,再开启输入信号和负载的电源;关闭时,先关闭输入信号和负载的电源,再关闭CMOS
电路的电源。
  6,CMOS电路的使用注意事项
  1)CMOS电路时电压控制器件,它的输入总抗很大,对干扰信号的捕捉能力很强。所以
  ,不用的管脚不要悬空,要接上拉电阻或者下拉电阻,给它一个恒定的电平。
  2)输入端接低内阻的信号源时,要在输入端和信号源之间要串联限流电阻,使输入的
  电流限制在1mA之内。
  3)当接长信号传输线时,在CMOS电路端接匹配电阻。
  4)当输入端接大电容时,应该在输入端和电容间接保护电阻。电阻值为R=V0/1mA.V0是
  外界电容上的电压。
  5)CMOS的输入电流超过1mA,就有可能烧坏CMOS。
  7,TTL门电路中输入端负载特性(输入端带电阻特殊情况的处理):
  1)悬空时相当于输入端接高电平。因为这时可以看作是输入端接一个无穷大的电阻。
  2)在门电路输入端串联10K电阻后再输入低电平,输入端出呈现的是高电平而不是低电
  平。因为由TTL门电路的输入端负载特性可知,只有在输入端接的串联电阻小于910欧时,
  它输入来的低电平信号才能被门电路识别出来,串联电阻再大的话输入端就一直呈现高电
  平。这个一定要注意。CMOS门电路就不用考虑这些了。
  8,TTL电路有集电极开路OC门,MOS管也有和集电极对应的漏极开路的OD门,它的输出就叫
  做开漏输出。
  OC门在截止时有漏电流输出,那就是漏电流,为什么有漏电流呢?那是因为当三极管截
  止的时候,它的基极电流约等于0,但是并不是真正的为0,经过三极管的集电极的电流也
  就不是真正的0,而是约0。而这个就是漏电流。开漏输出:OC门的输出就是开漏输出;OD
  门的输出也是开漏输出。它可以吸收很大的电流,但是不能向外输出的电流。所以,为了
  能输入和输出电流,它使用的时候要跟电源和上拉电阻一齐用。OD门一般作为输出缓冲/驱
  动器、电平转换器以及满足吸收大负载电流的需要。
  9,什么叫做图腾柱,它与开漏电路有什么区别?
  TTL集成电路中,输出有接上拉三极管的输出叫做图腾柱输出,没有的叫做OC门。因为
  TTL就是一个三级管,图腾柱也就是两个三级管推挽相连。所以推挽就是图腾。一般图腾式
  输出,高电平400UA,低电平8MA
词条标签: 科技产品 , 科学 , 书籍

[ Last edited by zzz19760225 on 2016-2-6 at 22:05 ]
作者: zzz19760225     时间: 2016-2-6 23:26    标题: ASCII美国信息交换标准代码

ASCII
编辑词条
该词条缺少词条分类,补充相关内容帮助词条更加完善!立刻编辑>>

ASCII(pronunciation: /ˈæski/ ASS-kee,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。由于万维网使得ASCII广为通用,直到2007年12月,逐渐被Unicode取代。
中文名        美国信息交换标准代码
简称        ASCII
类别        编码标准       
外文名        American Standard Code for Information Interchange
别称        ASCII代码
作用        显示现代英语和其他西欧语言


1简要介绍
2历史沿革
3代码产生
4标准码表
5大小规则
6国际问题
7键盘常用
8代码算法
9汉字编码
1 简要介绍 编辑

ASCII
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:

0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。

32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字

65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

2 历史沿革 编辑
  6000年前 象形文字

  3000年前 字母表

  1838年到1854年 Samuel F。 B。 Morse发明了电报,字母表中的每个字符对应于一系列短的和长的脉冲

  1821年到1824年 Louis Braille发明盲文,6位代码,它把字符、常用字母组合、常用单字和标点进行编码。

  一个特殊的escape代码表示后续的字符代码应解释为大写。一个特殊的shift代码允许后续代码被解释为数字。

  1931年 CCITT标准化Telex代码,包括Baudot #2的代码,都是包括字符和数字的5位代码。

  1890年 早期计算机的字符码是从Hollerith卡片,6位字符码系统BCDIC(Binary-Coded Decimal Interchange Code:二进制编码十进制交换编码)

  60年代 扩展为8位EBCDIC,IBM大型主机的标准

  1967年 美国信息交换标准码(ASCII:American Standard Code for Information Interchange)

  在字符长度是6位、7位还是8位的问题上产生了很大的争议。从可靠性的观点来看不应使用替换字符,

  因此ASCII不能是6位编码,但由于费用的原因也排除了8位版本的方案(当时每位的储存空间成本仍很昂贵)。

  这样,最终的字符码就有26个小写字母、26个大写字母、10个数字、32个符号、33个句柄和一个空格,总共128个字符码。

  ASCII现在记录在ANSI X3。4-1986字符集-用于信息交换的7位美国国家标准码(7-Bit ASCII:7-Bit American National

  Standard Code for Information Interchange),由美国国家标准协会(American National Standards Institute)发布。

3 代码产生 编辑
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

美国标准信息交换代码是由美国国家标准学会(American National Standard Institute,ANSI )制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于50年代后期,在1967年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(International Organization for Standardization,ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。

4 标准码表 编辑
Bin

Dec

Hex

缩写/字符

解释

0000,0000        0        00       
NUL(null)[1]

空字符
0000,0001        1        01        SOH(start,of,headline)        标题开始
0000,0010        2        02        STX,(start,of,text)        正文开始
0000,0011        3        03        ETX,(end,of,text)        正文结束
0000,0100        4        04        EOT,(end,of,transmission)        传输结束
0000,0101        5        05        ENQ,(enquiry)        请求
0000,0110        6        06        ACK,(acknowledge)        收到通知
0000,0111        7        07        BEL,(bell)        响铃
0000,1000        8        08        BS,(backspace)        退格
0000,1001        9        09        HT,(horizontal,tab)        水平,制表符
0000,1010        10        0A        LF,(NL,line,feed,new,line)        换行键
0000,1011        11        0B        VT,(vertical,tab)        垂直制表符
0000,1100        12        0C        FF,(NP,form,feed,new,page)        换页键
0000,1101        13        0D        CR,(carriage,return)        回车键
0000,1110        14        0E        SO,(shift,out)        不用切换
0000,1111        15        0F        SI,(shift,in)        启用切换
0001,0000        16        10        DLE,(data,link,escape)        数据,链路,转义
0001,0001        17        11        DC1,(device,control,1)        设备控制1
0001,0010        18        12        DC2,(device,control,2)        设备控制2
0001,0011        19        13        DC3,(device,control,3)        设备控制3
0001,0100        20        14        DC4,(device,control,4)        设备控制4
0001,0101        21        15        NAK,(negative,acknowledge)        拒绝接收
0001,0110        22        16        SYN,(synchronous,idle)        同步空闲
0001,0111        23        17        ETB,(end,of,trans,block)        传输块结束
0001,1000        24        18        CAN,(cancel)        取消
0001,1001        25        19        EM,(end,of,medium)        介质中断
0001,1010        26        1A        SUB,(substitute)        替补
0001,1011        27        1B        ESC,(escape)        换码(溢出)
0001,1100        28        1C        FS,(file,separator)        文件分割符
0001,1101        29        1D        GS,(group,separator)        分组符
0001,1110        30        1E        RS,(record,separator)        记录分离符
0001,1111        31        1F        US,(unit,separator)        单元分隔符
0010,0000        32        20        (space)        空格
0010,0001        33        21        !       
0010,0010        34        22        "       
0010,0011        35        23        #       
0010,0100        36        24        $       
0010,0101        37        25        %       
0010,0110        38        26        &       
0010,0111        39        27        '       
0010,1000        40        28        (       
0010,1001        41        29        )       
0010,1010        42        2A        *       
0010,1011        43        2B        +       
0010,1100        44        2C               
0010,1101        45        2D        -       
0010,1110        46        2E               
00101111        47        2F        /       
00110000        48        30        0       
00110001        49        31        1               
00110010        50        32        2               
00110011        51        33        3               
00110100        52        34        4               
00110101        53        35        5               
00110110        54        36        6               
00110111        55        37        7               
00111000        56        38        8               
00111001        57        39        9               
00111010        58        3A                       
00111011        59        3B                       
00111100        60        3C        <               
00111101        61        3D        =               
00111110        62        3E        >               
00111111        63        3F        ?               
01000000        64        40        @               
01000001        65        41        A               
01000010        66        42        B               
01000011        67        43        C               
01000100        68        44        D               
01000101        69        45        E               
01000110        70        46        F               
01000111        71        47        G               
01001000        72        48        H               
01001001        73        49        I               
01001010        74        4A        J               
01001011        75        4B        K               
01001100        76        4C        L               
01001101        77        4D        M               
01001110        78        4E        N               
01001111        79        4F        O               
01010000        80        50        P               
01010001        81        51        Q               
01010010        82        52        R               
01010011        83        53        S               
01010100        84        54        T               
01010101        85        55        U               
01010110        86        56        V               
01010111        87        57        W               
01011000        88        58        X               
01011001        89        59        Y               
01011010        90        5A        Z               
01011011        91        5B        [               
01011100        92        5C        \               
01011101        93        5D        ]               
01011110        94        5E        ^               
01011111        95        5F        _               
01100000        96        60        `               
01100001        97        61        a               
01100010        98        62        b               
01100011        99        63        c               
01100100        100        64        d               
01100101        101        65        e               
01100110        102        66        f               
01100111        103        67        g               
01101000        104        68        h               
01101001        105        69        i               
01101010        106        6A        j               
01101011        107        6B        k               
01101100        108        6C        l               
01101101        109        6D        m               
01101110        110        6E        n               
01101111        111        6F        o               
01110000        112        70        p               
01110001        113        71        q               
01110010        114        72        r               
01110011        115        73        s               
01110100        116        74        t               
01110101        117        75        u               
01110110        118        76        v               
01110111        119        77        w               
01111000        120        78        x               
01111001        121        79        y               
01111010        122        7A        z               
01111011        123        7B        {               
01111100        124        7C        |               
01111101        125        7D        }               
01111110        126        7E        ~               
01111111        127        7F        DEL,(delete)        删除       
八进制

十六进制

十进制

字符

八进制

十六进制

十进制

字符

0        0        0        nul        100        40        64        @
1        1        1        soh        101        41        65        A
2        2        2        stx        102        42        66        B
3        3        3        etx        103        43        67        C
4        4        4        eot        104        44        68        D
5        5        5        enq        105        45        69        E
6        6        6        ack        106        46        70        F
7        7        7        bel        107        47        71        G
10        8        8        bs        110        48        72        H
11        9        9        ht        111        49        73        I
12        0a        10        nl        112        4a        74        J
13        0b        11        vt        113        4b        75        K
14        0c        12        ff        114        4c        76        L
15        0d        13        er        115        4d        77        M
16        0e        14        so        116        4e        78        N
17        0f        15        si        117        4f        79        O
20        10        16        dle        120        50        80        P
21        11        17        dc1        121        51        81        Q
22        12        18        dc2        122        52        82        R
23        13        19        dc3        123        53        83        S
24        14        20        dc4        124        54        84        T
25        15        21        nak        125        55        85        U
26        16        22        syn        126        56        86        V
27        17        23        etb        127        57        87        W
30        18        24        can        130        58        88        X
31        19        25        em        131        59        89        Y
32        1a        26        sub        132        5a        90        Z
33        1b        27        esc        133        5b        91        [
34        1c        28        fs        134        5c        92        \
35        1d        29        gs        135        5d        93        ]
36        1e        30        re        136        5e        94        ^
37        1f        31        us        137        5f        95        _
40        20        32        sp        140        60        96        '
41        21        33        !        141        61        97        a
42        22        34        "        142        62        98        b
43        23        35        #        143        63        99        c
44        24        36        $        144        64        100        d
45        25        37        %        145        65        101        e
46        26        38        &        146        66        102        f
47        27        39        `        147        67        103        g
50        28        40        (        150        68        104        h
51        29        41        )        151        69        105        i
52        2a        42        *        152        6a        106        j
53        2b        43        +        153        6b        107        k
54        2c        44                154        6c        108        l
55        2d        45        -        155        6d        109        m
56        2e        46                156        6e        110        n
57        2f        47        /        157        6f        111        o
60        30        48        0        160        70        112        p
61        31        49        1        161        71        113        q
62        32        50        2        162        72        114        r
63        33        51        3        163        73        115        s
64        34        52        4        164        74        116        t
65        35        53        5        165        75        117        u
66        36        54        6        166        76        118        v
67        37        55        7        167        77        119        w
70        38        56        8        170        78        120        x
71        39        57        9        171        79        121        y
72        3a        58                172        7a        122        z
73        3b        59                173        7b        123        {
74        3c        60        <        174        7c        124        |
75        3d        61        =        175        7d        125        }
76        3e        62        >        176        7e        126        ~
77        3f        63        ?        177        7f        127        del
5 大小规则 编辑
1)数字0~9比字母要小。如"7"<"F";

2)数字0比数字9要小,并按0到9顺序递增。如"3"<"8"

3)字母A比字母Z要小,并按A到Z顺序递增。如"A"<"Z"

4)同个字母的大写字母比小写字母要小。如"A"<"a"。

记住几个常见字母的ASCII码大小:

“换行LF”为0x0A;“回车CR”为0x0D;空格为0x20;"0"为0x30; "A"为0x41;"a"为0x61。

另外还有128-255的ASCII字符查询ASCII技巧方便查询ASCII码对应的字符:新建一个文本文档,按住ALT+要查询的码值(注意,这里是十进制)

松开即可显示出对应字符。例如:按住ALT+97,则会显示出‘a'。

6 国际问题 编辑
  ASCII是美国标准,所以它不能良好满足其它讲英语国家的需要。例如英国的英镑符号(£)在哪里?

  拉丁语字母表重音符号

  使用斯拉夫字母表的希腊语、希伯来语、阿拉伯语和俄语。

  汉字系统的中国象形汉字,日本和朝鲜。

  1967年,国际标准化组织(ISO:International Standards Organization)推荐一个ASCII的变种,

  代码0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D“为国家使用保留”,而代码0x5E、0x60和0x7E标为

  “当国内要求的特殊字符需要8、9或10个空间位置时,可用于其它图形符号”。这显然不是一个最佳的国际解决方案,

  因为这并不能保证一致性。但这却显示了人们如何想尽办法为不同的语言来编码的。

扩展ASCII[2]

1981年IBM PC ROM256个字符的字符集,即IBM扩展字符集


ASCII1985年11 Windows字符集被称作“ANSI字符集”,遵循了ANSI草案和ISO标准(ANSI/ISO8859-1-1987,简“Latin 1”。

ANSI字符集的最初版本:

1987年4月代码页437,字符的映像代码,出现在MS-DOS3。3

扩展ASCII 字符是从128 到255(0x80-0xff)的字符。

双字节字符集[3]

双字节字符集(DBCS:double-byte character set),解决中国、日本和韩国的象形文字符和ASCII的某种兼容性。

DBCS从256代码开始,就像ASCII一样。与任何行为良好的代码页一样,最初的128个代码是ASCII。

然而,较高的128个代码中的某些总是跟随着第二个字节。

这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。

7 键盘常用 编辑
  ESC键 VK_ESCAPE (27)

  回车键: VK_RETURN (13)

  TAB键: VK_TAB (9)

  Caps Lock键: VK_CAPITAL (20)

  Shift键: VK_SHIFT (16)

  Ctrl键: VK_CONTROL (17)

  Alt键: VK_MENU (18)

  空格键: VK_SPACE (32)

  退格键: VK_BACK (8)

  左徽标键: VK_LWIN (91)

  右徽标键: VK_LWIN (92)

  鼠标右键快捷键:VK_APPS (93)

  Insert键: VK_INSERT (45)

  Home键: VK_HOME (36)

  Page Up: VK_PRIOR (33)

  PageDown: VK_NEXT (34)

  End键: VK_END (35)

  Delete键: VK_DELETE (46)

  方向键(←): VK_LEFT (37)

  方向键(↑): VK_UP (38)

  方向键(→): VK_RIGHT (39)

  方向键(↓): VK_DOWN (40)

  F1键: VK_F1 (112)

  F2键: VK_F2 (113)

  F3键: VK_F3 (114)

  F4键: VK_F4 (115)

  F5键: VK_F5 (116)

  F6键: VK_F6 (117)

  F7键: VK_F7 (118)

  F8键: VK_F8 (119)

  F9键: VK_F9 (120)

  F10键: VK_F10 (121)

  F11键: VK_F11 (122)

  F12键: VK_F12 (123)

  Num Lock键: VK_NUMLOCK (144)

  小键盘0: VK_NUMPAD0 (96)

  小键盘1: VK_NUMPAD0 (97)

  小键盘2: VK_NUMPAD0 (98)

  小键盘3: VK_NUMPAD0 (99)

  小键盘4: VK_NUMPAD0 (100)

  小键盘5: VK_NUMPAD0 (101)

  小键盘6: VK_NUMPAD0 (102)

  小键盘7: VK_NUMPAD0 (103)

  小键盘8: VK_NUMPAD0 (104)

  小键盘9: VK_NUMPAD0 (105)

  小键盘。: VK_DECIMAL (110)

  小键盘*: VK_MULTIPLY (106)

  小键盘+: VK_MULTIPLY (107)

  小键盘-: VK_SUBTRACT (109)

  小键盘/: VK_DIVIDE (111)

  Pause Break键: VK_PAUSE (19)

  Scroll Lock键: VK_SCROLL (145)

8 代码算法 编辑
  在ascii中定义为01000001,也就是十进制65,有了这个标准后,当我们输入A时,计算机就可以通过ascii码知道输入的字符的二进制编码是01000001。而没有这样的标准,我们就必须自己想办法告诉计算机我们输入了一个A;没有这样的标准,我们在别的机器上就需要重新编码以告诉计算机我们要输入A。ascii码指的不是十进制,是二进制。只是用十进制表示习惯一点罢了,比如在ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H。

ASCII非打印控制字符表

  在ascii码表中,只包括了一些字符、数字、标点符号的信息表示,这主要是因为计算机是美国发明的,在英文下面,我们使用ascii表示就足够了!但是在汉字输入下面,用ascii码就不能表示了,而汉字只是中国的通用表示,所以如果我们要在计算机中输入汉字,就必须有一个像ascii码的标准来表示每一个汉字,这就是中国的汉字国标码,它定义了汉字在计算机中的一个表示标准。通过这个标准,但我们输入汉字的时候,我们的输入码就转换为区位码,通过唯一的区位码得到这个汉字的字形码并显示出来。当然汉字的区位码在计算机中也是用二进制表示的!

一、二进制数转换为十进制数

  二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

  所以,设有一个二进制数:0110 0100,转换为10进制为:

  下面是竖式:

  0110 0100 换算成 十进制

  第0位 0 * 20 = 0

  第1位 0 * 21 = 0

  第2位 1 * 22 = 4

  第3位 0 * 23 = 0

  第4位 0 * 24 = 0

  第5位 1 * 25 = 32

  第6位 1 * 26 = 64

  第7位 0 * 27 = 0 +

  ---------------------------

  100

  用横式计算为:

  0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

  0乘以多少都是0,所以我们也可以直接跳过值为0的位:

  1 * 22 + 1 * 23 + 1 * 25 + 1 * 26 = 100

二、八进制数转换为十进制数

  八进制就是逢8进1。

  八进制数采用 0~7这八数来表达一个数。

  八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

  所以,设有一个八进制数:1507,转换为十进制为:

  用竖式表示:

  1507换算成十进制。

  第0位 7 * 80 = 7

  第1位 0 * 81 = 0

  第2位 5 * 82 = 320

  第3位 1 * 83 = 512 +

  --------------------------

  839

  同样,我们也可以用横式直接计算:

  7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839

  结果是,八进制数 1507 转换成十进制数为 839

八进制数的表达方法

  C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。

  所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。

  由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。

  现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:

  int a = 100;

  我们也可以这样写:

  int a = 0144; //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。

  千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。

八进制数在转义符中的使用

  我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。

  比如,查一下第5章中的ASCII码表,我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。

  事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6。2。4小节的内容,大家仅仅了解就行。

十六进制数转换成十进制数

  2进制,用两个阿拉伯数字:0、1;

  8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;

  10进制,用十个阿拉伯数字:0到9;

  16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?

  16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

  十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

  所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

  假设有一个十六进数 2AF5, 那么如何换算成10进制呢?

  用竖式计算:

  2AF5换算成10进制:

  第0位: 5 * 160 = 5

  第1位: F * 161 = 240

  第2位: A * 162 = 2560

  第3位: 2 * 163 = 8192 +


ASCII  -------------------------------------

  10997

  直接计算就是:

  5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997

  (别忘了,在上面的计算中,A表示10,而F表示15)

  现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

  假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:

  1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

十六进制数的表达方法

  如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。

  C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)

  以下是一些用法示例:

  int a = 0x100F;

  int b = 0x70 + a;

  至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。

十六进制数在转义符中的使用

  转义符也可以接一个16进制数来表示一个字符。如在6。2。4小节中说的 '?' 字符,可以有以下表达方式:

  '?' //直接输入字符

  '\77' //用八进制,此时可以省略开头的0

  '\0x3F' //用十六进制

  同样,这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外,我们很少用后两种方法表示一个字符。

三、十进制数转换到二、八、十六进制数

  进制数转换为2进制数

  给你一个十进制,比如:6,如果将它转换成二进制数呢?

  10进制数转换成二进制数,这是一个连续除2的过程:

  把要转换的数,除以2,得到商和余数,

  将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。

  听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。

  “把要转换的数,除以2,得到商和余数”。

  那么:

  要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3!)

  “将商继续除以2,直到商为0……”

  现在商是3,还不是0,所以继续除以2。

  那就: 3 ÷ 2, 得到商是1,余数是1。

  “将商继续除以2,直到商为0……”

  现在商是1,还不是0,所以继续除以2。

  那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!)

  “将商继续除以2,直到商为0……最后将所有余数倒序排列”

  好极!现在商已经是0。

  我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!

  6转换成二进制,结果是110。

  把上面的一段改成用表格来表示,则为:

  被除数 计算过程 商 余数

  6 6/2 3 0

  3 3/2 1 1

  1 1/2 0 1

  (在计算机中,÷用 / 来表示)

  如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除:

  (图:1)

  请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。

  说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。

  6。3。2 10进制数转换为8、16进制数

  非常开心,10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。

  来看一个例子,如何将十进制数120转换成八进制数。

  用表格表示:

  被除数 计算过程 商 余数

  120 120/8 15 0

  15 15/8 1 7

  1 1/8 0 1

  120转换为8进制,结果为:170。

  非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。

  同样是120,转换成16进制则为:

  被除数 计算过程 商 余数

  120 120/16 7 8

  7 7/16 0 7

  120转换为16进制,结果为:78。

  请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。

四、十六进制数互相转换

  二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

  我们也一样,只要学完这一小节,就能做到。

  首先我们来看一个二进制数:1111,它是多少呢?

  你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。

  然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。

  记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

  下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)

  仅4位的2进制数 快速计算方法 十进制值 十六进值

  1111 = 8 + 4 + 2 + 1 = 15 F

  1110 = 8 + 4 + 2 + 0 = 14 E

  1101 = 8 + 4 + 0 + 1 = 13 D

  1100 = 8 + 4 + 0 + 0 = 12 C

  1011 = 8 + 4 + 0 + 1 = 11 B

  1010 = 8 + 0 + 2 + 0 = 10 A

  1001 = 8 + 0 + 0 + 1 = 10 9

  。。。。

  0001 = 0 + 0 + 0 + 1 = 1 1

  0000 = 0 + 0 + 0 + 0 = 0 0

  二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

  如(上行为二制数,下面为对应的十六进制):

  1111 1101 , 1010 0101 , 1001 1011

  F D , A 5 , 9 B

  反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?

  先转换F:

  看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。

  接着转换 D:

  看到D,知道它是13,13如何用8421凑呢?应该是:8 + 4 + 1,即:1101。

  所以,FD转换为二进制数,为: 1111 1101

  由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

  比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:


ASCII
被除数 计算过程 商 余数

  1234 1234/16 77 2

  77 77/16 4 13 (D)

  4 4/16 0 4

  结果16进制为: 0x4D2

  然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010。

  其中对映关系为:

  0100 -- 4

  1011 -- D

  0010 -- 2

  同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

  下面举例一个int类型的二进制数:

  01101101 11100101 10101111 00011011

  我们按四位一组转换为16进制: 6D E5 AF 1B

9 汉字编码 编辑
0-127 是 7位ASCII 码的范围,是国际标准。

至于汉字,不同的字符集用的ascii 码的范围也不一样,常用的汉字字符集有GB2312-80,GBK,

Big5,unicode 等。下面我重点说一说最常用的GB_2312 的字符集。

GB_2312 字符集是目前最常用的汉字编码标准,windows 95/98/2000 中使用的 GBK字符集 就包含了GB2312,或者说和GB2312 兼容,GB_2312 字符集包含了 6763个的 简体汉字,和682 个标准中文符号。在这个标准中,每个汉字用2个字节来表示,每个字节的ascii码为 161-254 (16 进制A1 - FE),第一个字节 对应于 区码的1-94 区,第二个字节 对应于位码的1-94 位。

161-254 其实很好记忆,大家知道英文字符中,可打印的字符范围为33-126。将 这对 数加上

128(或者说最高位置1),就得到汉字使用的字符的范围。

//GB18030的规范是汉字第一个字节在0x81-0xFE之间,第二个字节位于区间0x40-0x7E以及0x80-0xFE。每个字节转化为整数大于128。

if ((char_temp>=0x81)&&(char_temp<=0xFE))

{

if(*len

{

*len+=1;

*p_temp++=char_temp;

_putch(char_temp);

x++;

}

}

参考资料:
1.
ASCII码表 0-127
http://www.asciima.com/
2.
扩展ASCII打印字符
http://www.asciima.com/ascii/4.html
3.
ASCII非打印控制字符表
http://www.asciima.com/ascii/2.html
扩展阅读:
1.
美国标准信息交换码
http://www.360doc.com/content/10/1207/11/3945310_75772859.shtml
2.
ASCII码对照表 ASCII控制字符
http://ascii.911cha.com/
作者: zzz19760225     时间: 2016-2-6 23:53
ASCII值        控制字符        ASCII值        控制字符        ASCII值        控制字符        ASCII值        控制字符
0        NUT        32        (space)        64        @        96        、
1        SOH        33        !        65        A        97        a
2        STX        34        "        66        B        98        b
3        ETX        35        #        67        C        99        c
4        EOT        36        $        68        D        100        d
5        ENQ        37        %        69        E        101        e
6        ACK        38        &        70        F        102        f
7        BEL        39        ,        71        G        103        g
8        BS        40        (        72        H        104        h
9        HT        41        )        73        I        105        i
10        LF        42        *        74        J        106        j
11        VT        43        +        75        K        107        k
12        FF        44        ,        76        L        108        l
13        CR        45        -        77        M        109        m
14        SO        46        .        78        N        110        n
15        SI        47        /        79        O        111        o
16        DLE        48        0        80        P        112        p
17        DCI        49        1        81        Q        113        q
18        DC2        50        2        82        R        114        r
19        DC3        51        3        83        S        115        s
20        DC4        52        4        84        T        116        t
21        NAK        53        5        85        U        117        u
22        SYN        54        6        86        V        118        v
23        TB        55        7        87        W        119        w
24        CAN        56        8        88        X        120        x
25        EM        57        9        89        Y        121        y
26        SUB        58        :        90        Z        122        z
27        ESC        59        ;        91        [        123        {
28        FS        60        <        92        /        124        |
29        GS        61        =        93        ]        125        }
30        RS        62        >        94        ^        126        `
31        US        63        ?        95        _        127        DEL
特殊字符解释
NUL空        VT 垂直制表        SYN 空转同步
STX 正文开始        CR 回车        CAN 作废
ETX 正文结束        SO 移位输出        EM 纸尽
EOY 传输结束        SI 移位输入        SUB 换置
ENQ 询问字符        DLE 空格        ESC 换码
ACK 承认        DC1 设备控制1        FS 文字分隔符
BEL 报警        DC2 设备控制2        GS 组分隔符
BS 退一格        DC3 设备控制3        RS 记录分隔符
HT 横向列表        DC4 设备控制4        US 单元分隔符
LF 换行        NAK 否定        DEL 删除
作者: zzz19760225     时间: 2016-2-6 23:56
英文名称        R.G.B        16色        实色效果        英文名称        R.G.B        16色
Snow        255 250 250        #FFFAFA                PaleTurquoise1        187 255 255        #BBFFFF
GhostWhite        248 248 255        #F8F8FF                PaleTurquoise2        174 238 238        #AEEEEE
WhiteSmoke        245 245 245        #F5F5F5                PaleTurquoise3        150 205 205        #96CDCD
Gainsboro        220 220 220        #DCDCDC                PaleTurquoise4        102 139 139        #668B8B
FloralWhite        255 250 240        #FFFAF0                CadetBlue1        152 245 255        #98F5FF
OldLace        253 245 230        #FDF5E6                CadetBlue2        142 229 238        #8EE5EE
Linen        250 240 230        #FAF0E6                CadetBlue3        122 197 205        #7AC5CD
AntiqueWhite        250 235 215        #FAEBD7                CadetBlue4        83 134 139        #53868B
PapayaWhip        255 239 213        #FFEFD5                Turquoise1        0 245 255        #00F5FF
BlanchedAlmond        255 235 205        #FFEBCD                Turquoise2        0 229 238        #00E5EE
Bisque        255 228 196        #FFE4C4                Turquoise3        0 197 205        #00C5CD
PeachPuff        255 218 185        #FFDAB9                Turquoise4        0 134 139        #00868B
NavajoWhite        255 222 173        #FFDEAD                Cyan1        0 255 255        #00FFFF
Moccasin        255 228 181        #FFE4B5                Cyan2        0 238 238        #00EEEE
Cornsilk        255 248 220        #FFF8DC                Cyan3        0 205 205        #00CDCD
Ivory        255 255 240        #FFFFF0                Cyan4        0 139 139        #008B8B
LemonChiffon        255 250 205        #FFFACD                DarkSlateGray1        151 255 255        #97FFFF
Seashell        255 245 238        #FFF5EE                DarkSlateGray2        141 238 238        #8DEEEE
Honeydew        240 255 240        #F0FFF0                DarkSlateGray3        121 205 205        #79CDCD
MintCream        245 255 250        #F5FFFA                DarkSlateGray4        82 139 139        #528B8B
Azure        240 255 255        #F0FFFF                Aquamarine1        127 255 212        #7FFFD4
AliceBlue        240 248 255        #F0F8FF                Aquamarine2        118 238 198        #76EEC6
lavender        230 230 250        #E6E6FA                Aquamarine3        102 205 170        #66CDAA
LavenderBlush        255 240 245        #FFF0F5                Aquamarine4        69 139 116        #458B74
MistyRose        255 228 225        #FFE4E1                DarkSeaGreen1        193 255 193        #C1FFC1
White        255 255 255        #FFFFFF                DarkSeaGreen2        180 238 180        #B4EEB4
Black        0 0 0        #000000                DarkSeaGreen3        155 205 155        #9BCD9B
DarkSlateGray        47 79 79        #2F4F4F                DarkSeaGreen4        105 139 105        #698B69
DimGrey        105 105 105        #696969                SeaGreen1        84 255 159        #54FF9F
SlateGrey        112 128 144        #708090                SeaGreen2        78 238 148        #4EEE94
LightSlateGray        119 136 153        #778899                SeaGreen3        67 205 128        #43CD80
Grey        190 190 190        #BEBEBE                SeaGreen4        46 139 87        #2E8B57
LightGray        211 211 211        #D3D3D3                PaleGreen1        154 255 154        #9AFF9A
MidnightBlue        25 25 112        #191970                PaleGreen2        144 238 144        #90EE90
NavyBlue        0 0 128        #000080                PaleGreen3        124 205 124        #7CCD7C
CornflowerBlue        100 149 237        #6495ED                PaleGreen4        84 139 84        #548B54
DarkSlateBlue        72 61 139        #483D8B                SpringGreen1        0 255 127        #00FF7F
SlateBlue        106 90 205        #6A5ACD                SpringGreen2        0 238 118        #00EE76
MediumSlateBlue        123 104 238        #7B68EE                SpringGreen3        0 205 102        #00CD66
LightSlateBlue        132 112 255        #8470FF                SpringGreen4        0 139 69        #008B45
MediumBlue        0 0 205        #0000CD                Green1        0 255 0        #00FF00
RoyalBlue        65 105 225        #4169E1                Green2        0 238 0        #00EE00
Blue        0 0 255        #0000FF                Green3        0 205 0        #00CD00
DodgerBlue        30 144 255        #1E90FF                Green4        0 139 0        #008B00
DeepSkyBlue        0 191 255        #00BFFF                Chartreuse1        127 255 0        #7FFF00
SkyBlue        135 206 235        #87CEEB                Chartreuse2        118 238 0        #76EE00
LightSkyBlue        135 206 250        #87CEFA                Chartreuse3        102 205 0        #66CD00
SteelBlue        70 130 180        #4682B4                Chartreuse4        69 139 0        #458B00
LightSteelBlue        176 196 222        #B0C4DE                OliveDrab1        192 255 62        #C0FF3E
LightBlue        173 216 230        #ADD8E6                OliveDrab2        179 238 58        #B3EE3A
PowderBlue        176 224 230        #B0E0E6                OliveDrab3        154 205 50        #9ACD32
PaleTurquoise        175 238 238        #AFEEEE                OliveDrab4        105 139 34        #698B22
DarkTurquoise        0 206 209        #00CED1                DarkOliveGreen1        202 255 112        #CAFF70
MediumTurquoise        72 209 204        #48D1CC                DarkOliveGreen2        188 238 104        #BCEE68
Turquoise        64 224 208        #40E0D0                DarkOliveGreen3        162 205 90        #A2CD5A
Cyan        0 255 255        #00FFFF                DarkOliveGreen4        110 139 61        #6E8B3D
LightCyan        224 255 255        #E0FFFF                Khaki1        255 246 143        #FFF68F
CadetBlue        95 158 160        #5F9EA0                Khaki2        238 230 133        #EEE685
MediumAquamarine        102 205 170        #66CDAA                Khaki3        205 198 115        #CDC673
Aquamarine        127 255 212        #7FFFD4                Khaki4        139 134 78        #8B864E
DarkGreen        0 100 0        #006400                LightGoldenrod1        255 236 139        #FFEC8B
DarkOliveGreen        85 107 47        #556B2F                LightGoldenrod2        238 220 130        #EEDC82
DarkSeaGreen        143 188 143        #8FBC8F                LightGoldenrod3        205 190 112        #CDBE70
SeaGreen        46 139 87        #2E8B57                LightGoldenrod4        139 129 76        #8B814C
MediumSeaGreen        60 179 113        #3CB371                LightYellow1        255 255 224        #FFFFE0
LightSeaGreen        32 178 170        #20B2AA                LightYellow2        238 238 209        #EEEED1
PaleGreen        152 251 152        #98FB98                LightYellow3        205 205 180        #CDCDB4
SpringGreen        0 255 127        #00FF7F                LightYellow4        139 139 122        #8B8B7A
LawnGreen        124 252 0        #7CFC00                Yellow1        255 255 0        #FFFF00
Green        0 255 0        #00FF00                Yellow2        238 238 0        #EEEE00
Chartreuse        127 255 0        #7FFF00                Yellow3        205 205 0        #CDCD00
MedSpringGreen        0 250 154        #00FA9A                Yellow4        139 139 0        #8B8B00
GreenYellow        173 255 47        #ADFF2F                Gold1        255 215 0        #FFD700
LimeGreen        50 205 50        #32CD32                Gold2        238 201 0        #EEC900
YellowGreen        154 205 50        #9ACD32                Gold3        205 173 0        #CDAD00
ForestGreen        34 139 34        #228B22                Gold4        139 117 0        #8B7500
OliveDrab        107 142 35        #6B8E23                Goldenrod1        255 193 37        #FFC125
DarkKhaki        189 183 107        #BDB76B                Goldenrod2        238 180 34        #EEB422
PaleGoldenrod        238 232 170        #EEE8AA                Goldenrod3        205 155 29        #CD9B1D
LtGoldenrodYello        250 250 210        #FAFAD2                Goldenrod4        139 105 20        #8B6914
LightYellow        255 255 224        #FFFFE0                DarkGoldenrod1        255 185 15        #FFB90F
Yellow        255 255 0        #FFFF00                DarkGoldenrod2        238 173 14        #EEAD0E
Gold        255 215 0        #FFD700                DarkGoldenrod3        205 149 12        #CD950C
LightGoldenrod        238 221 130        #EEDD82                DarkGoldenrod4        139 101 8        #8B658B
goldenrod        218 165 32        #DAA520                RosyBrown1        255 193 193        #FFC1C1
DarkGoldenrod        184 134 11        #B8860B                RosyBrown2        238 180 180        #EEB4B4
RosyBrown        188 143 143        #BC8F8F                RosyBrown3        205 155 155        #CD9B9B
IndianRed        205 92 92        #CD5C5C                RosyBrown4        139 105 105        #8B6969
SaddleBrown        139 69 19        #8B4513                IndianRed1        255 106 106        #FF6A6A
Sienna        160 82 45        #A0522D                IndianRed2        238 99 99        #EE6363
Peru        205 133 63        #CD853F                IndianRed3        205 85 85        #CD5555
Burlywood        222 184 135        #DEB887                IndianRed4        139 58 58        #8B3A3A
Beige        245 245 220        #F5F5DC                Sienna1        255 130 71        #FF8247
Wheat        245 222 179        #F5DEB3                Sienna2        238 121 66        #EE7942
SandyBrown        244 164 96        #F4A460                Sienna3        205 104 57        #CD6839
Tan        210 180 140        #D2B48C                Sienna4        139 71 38        #8B4726
Chocolate        210 105 30        #D2691E                Burlywood1        255 211 155        #FFD39B
Firebrick        178 34 34        #B22222                Burlywood2        238 197 145        #EEC591
Brown        165 42 42        #A52A2A                Burlywood3        205 170 125        #CDAA7D
DarkSalmon        233 150 122        #E9967A                Burlywood4        139 115 85        #8B7355
Salmon        250 128 114        #FA8072                Wheat1        255 231 186        #FFE7BA
LightSalmon        255 160 122        #FFA07A                Wheat2        238 216 174        #EED8AE
Orange        255 165 0        #FFA500                Wheat3        205 186 150        #CDBA96
DarkOrange        255 140 0        #FF8C00                Wheat4        139 126 102        #8B7E66
Coral        255 127 80        #FF7F50                Tan1        255 165 79        #FFA54F
LightCoral        240 128 128        #F08080                Tan2        238 154 73        #EE9A49
Tomato        255 99 71        #FF6347                Tan3        205 133 63        #CD853F
OrangeRed        255 69 0        #FF4500                Tan4        139 90 43        #8B5A2B
Red        255 0 0        #FF0000                Chocolate1        255 127 36        #FF7F24
HotPink        255 105 180        #FF69B4                Chocolate2        238 118 33        #EE7621
DeepPink        255 20 147        #FF1493                Chocolate3        205 102 29        #CD661D
Pink        255 192 203        #FFC0CB                Chocolate4        139 69 19        #8B4513
LightPink        255 182 193        #FFB6C1                Firebrick1        255 48 48        #FF3030
PaleVioletRed        219 112 147        #DB7093                Firebrick2        238 44 44        #EE2C2C
Maroon        176 48 96        #B03060                Firebrick3        205 38 38        #CD2626
MediumVioletRed        199 21 133        #C71585                Firebrick4        139 26 26        #8B1A1A
VioletRed        208 32 144        #D02090                Brown1        255 64 64        #FF4040
Magenta        255 0 255        #FF00FF                Brown2        238 59 59        #EE3B3B
Violet        238 130 238        #EE82EE                Brown3        205 51 51        #CD3333
Plum        221 160 221        #DDA0DD                Brown4        139 35 35        #8B2323
Orchid        218 112 214        #DA70D6                Salmon1        255 140 105        #FF8C69
MediumOrchid        186 85 211        #BA55D3                Salmon2        238 130 98        #EE8262
DarkOrchid        153 50 204        #9932CC                Salmon3        205 112 84        #CD7054
DarkViolet        148 0 211        #9400D3                Salmon4        139 76 57        #8B4C39
BlueViolet        138 43 226        #8A2BE2                LightSalmon1        255 160 122        #FFA07A
Purple        160 32 240        #A020F0                LightSalmon2        238 149 114        #EE9572
MediumPurple        147 112 219        #9370DB                LightSalmon3        205 129 98        #CD8162
Thistle        216 191 216        #D8BFD8                LightSalmon4        139 87 66        #8B5742
Snow1        255 250 250        #FFFAFA                Orange1        255 165 0        #FFA500
Snow2        238 233 233        #EEE9E9                Orange2        238 154 0        #EE9A00
Snow3        205 201 201        #CDC9C9                Orange3        205 133 0        #CD8500
Snow4        139 137 137        #8B8989                Orange4        139 90 0        #8B5A00
Seashell1        255 245 238        #FFF5EE                DarkOrange1        255 127 0        #FF7F00
Seashell2        238 229 222        #EEE5DE                DarkOrange2        238 118 0        #EE7600
Seashell3        205 197 191        #CDC5BF                DarkOrange3        205 102 0        #CD6600
Seashell4        139 134 130        #8B8682                DarkOrange4        139 69 0        #8B4500
AntiqueWhite1        255 239 219        #FFEFDB                Coral1        255 114 86        #FF7256
AntiqueWhite2        238 223 204        #EEDFCC                Coral2        238 106 80        #EE6A50
AntiqueWhite3        205 192 176        #CDC0B0                Coral3        205 91 69        #CD5B45
AntiqueWhite4        139 131 120        #8B8378                Coral4        139 62 47        #8B3E2F
Bisque1        255 228 196        #FFE4C4                Tomato1        255 99 71        #FF6347
Bisque2        238 213 183        #EED5B7                Tomato2        238 92 66        #EE5C42
Bisque3        205 183 158        #CDB79E                Tomato3        205 79 57        #CD4F39
Bisque4        139 125 107        #8B7D6B                Tomato4        139 54 38        #8B3626
PeachPuff1        255 218 185        #FFDAB9                OrangeRed1        255 69 0        #FF4500
PeachPuff2        238 203 173        #EECBAD                OrangeRed2        238 64 0        #EE4000
PeachPuff3        205 175 149        #CDAF95                OrangeRed3        205 55 0        #CD3700
PeachPuff4        139 119 101        #8B7765                OrangeRed4        139 37 0        #8B2500
NavajoWhite1        255 222 173        #FFDEAD                Red1        255 0 0        #FF0000
NavajoWhite2        238 207 161        #EECFA1                Red2        238 0 0        #EE0000
NavajoWhite3        205 179 139        #CDB38B                Red3        205 0 0        #CD0000
NavajoWhite4        139 121 94        #8B795E                Red4        139 0 0        #8B0000
LemonChiffon1        255 250 205        #FFFACD                DeepPink1        255 20 147        #FF1493
LemonChiffon2        238 233 191        #EEE9BF                DeepPink2        238 18 137        #EE1289
LemonChiffon3        205 201 165        #CDC9A5                DeepPink3        205 16 118        #CD1076
LemonChiffon4        139 137 112        #8B8970                DeepPink4        139 10 80        #8B0A50
Cornsilk1        255 248 220        #FFF8DC                HotPink1        255 110 180        #FF6EB4
Cornsilk2        238 232 205        #EEE8CD                HotPink2        238 106 167        #EE6AA7
Cornsilk3        205 200 177        #CDC8B1                HotPink3        205 96 144        #CD6090
Cornsilk4        139 136 120        #8B8878                HotPink4        139 58 98        #8B3A62
Ivory1        255 255 240        #FFFFF0                Pink1        255 181 197        #FFB5C5
Ivory2        238 238 224        #EEEEE0                Pink2        238 169 184        #EEA9B8
Ivory3        205 205 193        #CDCDC1                Pink3        205 145 158        #CD919E
Ivory4        139 139 131        #8B8B83                Pink4        139 99 108        #8B636C
Honeydew1        240 255 240        #F0FFF0                LightPink1        255 174 185        #FFAEB9
Honeydew2        224 238 224        #E0EEE0                LightPink2        238 162 173        #EEA2AD
Honeydew3        193 205 193        #C1CDC1                LightPink3        205 140 149        #CD8C95
Honeydew4        131 139 131        #838B83                LightPink4        139 95 101        #8B5F65
LavenderBlush1        255 240 245        #FFF0F5                PaleVioletRed1        255 130 171        #FF82AB
LavenderBlush2        238 224 229        #EEE0E5                PaleVioletRed2        238 121 159        #EE799F
LavenderBlush3        205 193 197        #CDC1C5                PaleVioletRed3        205 104 137        #CD6889
LavenderBlush4        139 131 134        #8B8386                PaleVioletRed4        139 71 93        #8B475D
MistyRose1        255 228 225        #FFE4E1                Maroon1        255 52 179        #FF34B3
MistyRose2        238 213 210        #EED5D2                Maroon2        238 48 167        #EE30A7
MistyRose3        205 183 181        #CDB7B5                Maroon3        205 41 144        #CD2990
MistyRose4        139 125 123        #8B7D7B                Maroon4        139 28 98        #8B1C62
Azure1        240 255 255        #F0FFFF                VioletRed1        255 62 150        #FF3E96
Azure2        224 238 238        #E0EEEE                VioletRed2        238 58 140        #EE3A8C
Azure3        193 205 205        #C1CDCD                VioletRed3        205 50 120        #CD3278
Azure4        131 139 139        #838B8B                VioletRed4        139 34 82        #8B2252
SlateBlue1        131 111 255        #836FFF                Magenta1        255 0 255        #FF00FF
SlateBlue2        122 103 238        #7A67EE                Magenta2        238 0 238        #EE00EE
SlateBlue3        105 89 205        #6959CD                Magenta3        205 0 205        #CD00CD
SlateBlue4        71 60 139        #473C8B                Magenta4        139 0 139        #8B008B
RoyalBlue1        72 118 255        #4876FF                Orchid1        255 131 250        #FF83FA
RoyalBlue2        67 110 238        #436EEE                Orchid2        238 122 233        #EE7AE9
RoyalBlue3        58 95 205        #3A5FCD                Orchid3        205 105 201        #CD69C9
RoyalBlue4        39 64 139        #27408B                Orchid4        139 71 137        #8B4789
Blue1        0 0 255        #0000FF                Plum1        255 187 255        #FFBBFF
Blue2        0 0 238        #0000EE                Plum2        238 174 238        #EEAEEE
Blue3        0 0 205        #0000CD                Plum3        205 150 205        #CD96CD
Blue4        0 0 139        #00008B                Plum4        139 102 139        #8B668B
DodgerBlue1        30 144 255        #1E90FF                MediumOrchid1        224 102 255        #E066FF
DodgerBlue2        28 134 238        #1C86EE                MediumOrchid2        209 95 238        #D15FEE
DodgerBlue3        24 116 205        #1874CD                MediumOrchid3        180 82 205        #B452CD
DodgerBlue4        16 78 139        #104E8B                MediumOrchid4        122 55 139        #7A378B
SteelBlue1        99 184 255        #63B8FF                DarkOrchid1        191 62 255        #BF3EFF
SteelBlue2        92 172 238        #5CACEE                DarkOrchid2        178 58 238        #B23AEE
SteelBlue3        79 148 205        #4F94CD                DarkOrchid3        154 50 205        #9A32CD
SteelBlue4        54 100 139        #36648B                DarkOrchid4        104 34 139        #68228B
DeepSkyBlue1        0 191 255        #00BFFF                Purple1        155 48 255        #9B30FF
DeepSkyBlue2        0 178 238        #00B2EE                Purple2        145 44 238        #912CEE
DeepSkyBlue3        0 154 205        #009ACD                Purple3        125 38 205        #7D26CD
DeepSkyBlue4        0 104 139        #00688B                Purple4        85 26 139        #551A8B
SkyBlue1        135 206 255        #87CEFF                MediumPurple1        171 130 255        #AB82FF
SkyBlue2        126 192 238        #7EC0EE                MediumPurple2        159 121 238        #9F79EE
SkyBlue3        108 166 205        #6CA6CD                MediumPurple3        137 104 205        #8968CD
SkyBlue4        74 112 139        #4A708B                MediumPurple4        93 71 139        #5D478B
LightSkyBlue1        176 226 255        #B0E2FF                Thistle1        255 225 255        #FFE1FF
LightSkyBlue2        164 211 238        #A4D3EE                Thistle2        238 210 238        #EED2EE
LightSkyBlue3        141 182 205        #8DB6CD                Thistle3        205 181 205        #CDB5CD
LightSkyBlue4        96 123 139        #607B8B                Thistle4        139 123 139        #8B7B8B
SlateGray1        198 226 255        #C6E2FF                grey11        28 28 28        #1C1C1C
SlateGray2        185 211 238        #B9D3EE                grey21        54 54 54        #363636
SlateGray3        159 182 205        #9FB6CD                grey31        79 79 79        #4F4F4F
SlateGray4        108 123 139        #6C7B8B                grey41        105 105 105        #696969
LightSteelBlue1        202 225 255        #CAE1FF                grey51        130 130 130        #828282
LightSteelBlue2        188 210 238        #BCD2EE                grey61        156 156 156        #9C9C9C
LightSteelBlue3        162 181 205        #A2B5CD                grey71        181 181 181        #B5B5B5
LightSteelBlue4        110 123 139        #6E7B8B                gray81        207 207 207        #CFCFCF
LightBlue1        191 239 255        #BFEFFF                gray91        232 232 232        #E8E8E8
LightBlue2        178 223 238        #B2DFEE                DarkGrey        169 169 169        #A9A9A9
LightBlue3        154 192 205        #9AC0CD                DarkBlue        0 0 139        #00008B
LightBlue4        104 131 139        #68838B                DarkCyan        0 139 139        #008B8B
LightCyan1        224 255 255        #E0FFFF                DarkMagenta        139 0 139        #8B008B
LightCyan2        209 238 238        #D1EEEE                DarkRed        139 0 0        #8B0000
LightCyan3        180 205 205        #B4CDCD       
LightCyan4        122 139 139        #7A8B8B                LightGreen        144 238 144        #90EE90
作者: zzz19760225     时间: 2016-2-7 00:03    标题: http://tool.oschina.net/commons?type=6#c_

http://tool.oschina.net/commons?type=6#c_
Java 运算符优先级
运算符        优先级
postfix        expr++ expr--
unary        ++expr --expr +expr -expr ~ !
multiplicative        * / %
additive        + -
shift        << >> >>>
relational        < > <= >= instanceof
equality        == !=
bitwise AND        &
bitwise exclusive OR        ^
bitwise inclusive OR        |
logical AND        &&
logical OR        ||
ternary        ? :
assignment        = += -= *= /= %= &= ^= |= <<= >>= >>>=
C++运算符优先级
Precedence        Operator        Description        Associativity
1        ::        Scope resolution        Left-to-right
2        ++   --        Suffix/postfix increment and decrement
()        Function call
[]        Array subscripting
.        Element selection by reference
−>        Element selection through pointer
3        ++   --        Prefix increment and decrement        Right-to-left
+   −        Unary plus and minus
!   ~        Logical NOT and bitwise NOT
(type)        Type cast
*        Indirection (dereference)
&        Address-of
sizeof        Size-of
new, new[]        Dynamic memory allocation
delete, delete[]        Dynamic memory deallocation
4        .*   ->*        Pointer to member        Left-to-right
5        *   /   %        Multiplication, division, and remainder
6        +   −        Addition and subtraction
7        <<   >>        Bitwise left shift and right shift
8        <   <=        For relational operators < and ≤ respectively
>   >=        For relational operators > and ≥ respectively
9        ==   !=        For relational = and ≠ respectively
10        &        Bitwise AND
11        ^        Bitwise XOR (exclusive or)
12        |        Bitwise OR (inclusive or)
13        &&        Logical AND
14        ||        Logical OR
15        ?:        Ternary conditional        Right-to-Left
16        =        Direct assignment (provided by default for C++ classes)
+=   −=        Assignment by sum and difference
*=   /=   %=        Assignment by product, quotient, and remainder
<<=   >>=        Assignment by bitwise left shift and right shift
&=   ^=   |=        Assignment by bitwise AND, XOR, and OR
17        throw        Throw operator (for exceptions)
18        ,        Comma        Left-to-right
C语言运算符优先级
Precedence        Operator        Description        Associativity
1        ++ --        Suffix/postfix increment and decrement        Left-to-right
()        Function call
[]        Array subscripting
.        Structure and union member access
−>        Structure and union member access through pointer
(type){list}        Compound literal(C99)
2        ++ --        Prefix increment and decrement        Right-to-left
+ −        Unary plus and minus
! ~        Logical NOT and bitwise NOT
(type)        Type cast
*        Indirection (dereference)
&        Address-of
sizeof        Size-of
_Alignof        Alignment requirement(C11)
3        * / %        Multiplication, division, and remainder        Left-to-right
4        + −        Addition and subtraction
5        << >>        Bitwise left shift and right shift
6        < <=        For relational operators < and ≤ respectively
> >=        For relational operators > and ≥ respectively
7        == !=        For relational = and ≠ respectively
8        &        Bitwise AND
9        ^        Bitwise XOR (exclusive or)
10        |        Bitwise OR (inclusive or)
11        &&        Logical AND
12        ||        Logical OR
13        ?:        Ternary conditional        Right-to-Left
14        =        Simple assignment
+= −=        Assignment by sum and difference
*= /= %=        Assignment by product, quotient, and remainder
<<= >>=        Assignment by bitwise left shift and right shift
&= ^= |=        Assignment by bitwise AND, XOR, and OR
15        ,        Comma        Left-to-right
PHP运算符优先级
结合方向        运算符        附加信息
非结合        clone new        clone 和 new
左        [        array()
非结合        ++ --        递增/递减运算符
非结合        ~ - (int) (float) (string) (array) (object) (bool) @        类型
非结合        instanceof        类型
右结合        !        逻辑操作符
左        * / %        算术运算符
左        + - .        算术运算符 和 字符串运算符
左        << >>        位运算符
非结合        < <= > >= <>        比较运算符
非结合        == != === !==        比较运算符
左        &        位运算符 和 引用
左        ^        位运算符
左        |        位运算符
左        &&        逻辑运算符
左        ||        逻辑运算符
左        ? :        三元运算符
右        = += -= *= /= .= %= &= |= ^= <<= >>=        赋值运算符
左        and        逻辑运算符
左        xor        逻辑运算符
左        or        逻辑运算符
左        ,        多处用到
这个表给出Python的运算符优先级(从低到高).

从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。

这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。

Python 运算符优先级
运算符        描述
lambda        Lambda表达式
or        布尔“或”
and        布尔“与”
not x        布尔“非”
in,not in        成员测试
is,is not        同一性测试
<,<=,>,>=,!=,==        比较
|        按位或
^        按位异或
&        按位与
<<,>>        移位
+,-        加法与减法
*,/,%        乘法、除法与取余
+x,-x        正负号
~x        按位翻转
**        指数
x.attribute        属性参考
x[index]        下标
x[index:index]        寻址段
f(arguments...)        函数调用
(experession,...)        绑定或元组显示
[expression,...]        列表显示
{key:datum,...}        字典显示
'expression,...'        字符串转换

[ Last edited by zzz19760225 on 2016-2-7 at 00:05 ]
作者: zzz19760225     时间: 2016-2-8 02:58
deepin 编辑
Deepin,原名Linux Deepin,是一个致力于为全球用户提供美观易用,安全可靠的Linux发行版。于2014年4月更名为Deepin,常被称为“深度 Linux”。Deepin不仅仅对最优秀的开源产品进行集成和配置,还开发了基于 HTML5 技术的全新桌面环境、系统设置中心、以及音乐播放器,视频播放器,软件中心等一系列面向日常使用的应用软件。
Linux Deepin的前身是Hiweed Linux项目,Hiweed Linux项目曾经因为一些原因短暂的暂停开发,在重启Hiweed Linux项目的时候深度社区(Deepin.org)管理员与Hiweed Linux项目项目发起人hiweed(冷罡华)宣布合作,同时宣布Hiweed Linux更名为Linux Deepin,并且成为深度社区(Deepin.org)下的一个子模块,后来不断发展而从深度社区独立出来,成为今天的项目。
Linux Deepin 口号是“免除新手痛苦、节约老手时间”,非常注重易用的体验和美观的设计,努力为用户提供稳定、简约、高效的操作系统,以此达到“让 Linux 更易用”的目标。
中文名 深度 Linux(深度系统) 外文名 Deepin 曾用名 Linux Deepin 起    源 Hiweed Linux 项目 类    别 linux 操作系统
目录
1 发展历史
2 发布历史
3 深度桌面
4 最近版本
发展历史编辑
Deepin 2013
Deepin 2013
Deepin 的历史可以追溯到 2004年,其前身 Hiweed Linux 是中国第一个基于 Debian 的本地化版本。在2008年更名为Linux Deepin ,2014年4月又更名为Deepin。Deepin 是当前中国最活跃的 Linux 发行版本。为了支持 Linux Deepin的长期发展,在2011年成立了武汉深之度科技有限公司,并组建了专职研发团队对linux deepin进行支持。2011年获得商业投资,已经建立起国内唯一拥有员工数十人专注于桌面 Linux 发行版的团队。 Deepin 与搜狗,WPS,傲游等合作伙伴进行了多方位合作,共同打造基于 Linux 系统的生态系统。同时,我们还在努力解决迁移Windows平台软件带来的各种兼容性问题,以便用户平滑的过渡到开放安全的 Linux 平台上来。[1]
对个人用户来说,使用 Deepin 不但完全免除了购买费用,而且不会被流行的各种病毒和木马感染。对于政府和企业用户,由于源代码开放可控,绝无后门隐患,安全性也更有保障,大大降低了维护代价和购买防护软件的费用。
Deepin的发展迅速,获得全球四十多个国家用户的支持,累计下载量数千万次,并成为在distrowatch上排名最高的中国Linux操作系统发行版。
Deepin 每 6 个月发布一个新版本,一年发布两次,约在每年的的 6 月份和 12 月份各发布一次。从11.12 开始,Deepin提供了简体中文、繁体中文、英文单独的ISO光盘镜像,桌面环境采用经过团队精心定制的 GNOME Shell,更加适合多数人的操作习惯。Deepin2013版本以后预计发布周期更改为一年一个版本。[2]
发布历史编辑
版 本        发 布 周 期        备 注
Linux Deepin 9.12        2009 年 12 月 30 日        正 式 版
Linux Deepin10.06        2010 年 07 月 23 日        正 式 版
Linux Deepin10.12        2010 年 12 月 31 日        正 式 版
Linux Deepin11.06        2011 年 07 月 04 日        正 式 版
Linux Deepin11.12        2011 年 12 月 31 日        正 式 版
Linux Deepin11.12.1        2012 年 02 月 29 日        修正版
Linux Deepin12.06        2012 年 07 月 17 日        正 式 版
Linux Deepin12.12        2013 年 06 月 19 日        正 式 版
Linux Deepin12.12.1        2013 年 08 月 07 日        修正版
Linux Deepin2013        2013 年 11 月 28 日        正 式 版
Deepin2014Alpha        2014 年 04 月 15 日        体验版
Deepin 2014 Beta
          2014 年 05 月 15 日        体验版
Deepin 2014 RC        2014 年 06 月 14 日        发布候选版
Deepin 2014        2014 年 07 月 06 日       
正式版
Deepin 2014.1        2014 年 08 月 28 日        正式版
Deepin 2014.2 RC        2014 年 12 月 19 日       
发布候选版
Deepin 2014.2        2014 年 12 月 31 日        正式版
Deepin 2014.3        2015 年 04 月 28 日        正式版
目前,Linux Deepin 团队为广大 Linux 桌面用户精心开发了 深度音乐播放器(deepin music player)、深度截图工具(deepin screenshot tool)、深度软件中心(deepin software center)、深度影音播放器(deepin media player)等,均得到国内、国际社区的极大关注和鼓励、支持。
深度桌面编辑
深度桌面环境是一个技术革新的产物,深度桌面环境完全是由 HTML5技术来搭建的,但是和平常我们了解的浏览器里面的 HTML5 不一样。深度桌面环境通过修改 WebKit 核心代码达到 HTML5 和底层 C 库进行互通,这样界面部分的代码完全由 HTML5、JS、CoffeeScript 来构建,而底层的逻辑则由底层的各种 C 语言库来控制。
通过 HTML5结合底层 C 语言库的方式,我们既能用传统构建网站的方式和标准来编写桌面系统,又能通过底层的 C 语言库解决传统 HTML5 不能调用操作系统API的难题。
相对于传统技术构建的 GNOME和 KDE的优势主要有:
开发桌面环境的界面不再需要额外学习,只要会 HTML和 JS就可以快速编写。
JS在界面技术上更加成熟和标准,编写深度桌面环境会比传统的 GTK/QT 的控件方式更加灵活高效。
WebKit对底层代码非常稳定,利用HTML5构建的深度桌面环境非常稳定,很少会发生崩溃的问题。
HTML5/C的方式让界面代码和后端逻辑代码进行完全分离,任何界面上的设计改动都会非常快,而不用像传统的控件库,代码关联非常死,改动起来效率不高。[3]
最近版本编辑
Linux Deepin2014
Deepin 2014 正式版于2014年7月6日携带全新的深度桌面环境2.0发布。
概述
  Linux Deepin项目现已正式更名为Deepin项目。
  Deepin项目是一个致力于为全球用户提供美观易用,安全可靠的Linux发行版,Deepin团队基于HTML5技术开发了的全新深度桌面环境,以及音乐播放器,视频播放器,软件中心等一系列特色软件。
  近年来,Deepin发展迅速,获得全球四十多个国家和地区用户的支持,累计下载量数千万次,并成为在Distrowatch上排名最高的中国Linux操作系统发行版。
  Deepin 2014 正式版与Deepin 2013 正式版版本相比,进行了如下更新和变化:
  多国语言支持

得益于Deepin社区各国翻译者的努力,Deepin 2014正式提供10种语言,并且所有语言都集成在一个ISO镜像中,方便大家安装使用。
  目前Deepin国际化项目正在翻译的语言有67种(包含相同语言不同语系),欢迎各位爱好者们加入该项目,让Deepin系统支持更多语言。
  深度桌面环境2.0

Deepin 2014携带全新的深度桌面环境2.0,搭配特别设计的深度主题,使Deepin 2014整体风格和外观统一、简洁。
  深度桌面环境2.0较前版新增了用户引导、启动器中文拼音搜索、直观的热区设置等便利功能,初次使用Deepin系统的用户也能得心应手。
  同时,我们对深度桌面环境2.0和系统内部进行了全面优化,开机内存占用仅需500M,并且完善了系统内部消息的提示机制,使Deepin 2014更为轻巧灵敏。
  控制中心

深度桌面环境2.0中的系统设置现已全面升级为控制中心,并且外观改为屏幕右侧弹出面板的方式,让控制中心使用更高效、美观。
  控制中心在全面的提升了显示、网络和个性化等重要模块性能的同时,新增了更多可设置功能,例如系统主题管理和程序启动菜单管理。
  软件与管理
  Deepin 2014新增深度影院、深度翻译和深度启动盘制作工具等全新软件,更新了搜狗输入法等和谷歌浏览器的常用软件,方便大家的日常娱乐和工作使用。

我们在Deepin 2013软件仓库的基础上,新增了大量的第三方软件,打开深度软件中心可直接安装使用,同时系统支持启动器中直接右键卸载程序。现在,在Deepin下的无论是安装还是卸载软件,都不需要繁琐的Root认证,并且全程操作都有严格的控制,不会出现安全问题。

此外,Deepin项目在全球拥有近70个以上的 软件源,深度软件中心检测最佳源功能重新回归,该功能新增物理位置判断,该功能够帮助您快速的选择最佳软件源,以便您能够快速的更新系统和安装软件。
安装

  Deepin 2014已经完美支持BIOS和UEFI启动。

为了降低用户安装门槛,我们特地开发了深度启动盘制作工具(系统镜像自带)和深度安装器,大家使用两个软件即可轻松的安装Deepin系统,详细的安装过程可以查看百科获取。
  注意:
  *Deepin 2014 起去除了DeepinWin(Wubi)安装模式。
  *Deepin 2014 Alpha 以上版本可以直接升级至Deepin 2014正式版,Deepin 2014 Aplha之前的版本,建议以重装系统的方式更新至Deepin2014正式版。
  *请使用NVIDIA显卡的朋友不要安装闭源显卡驱动,否则控制中心会无法启动。


Deepin系统首次在龙芯3号电脑上运行成功
2014-11-28 10:13:56 来源: cnbeta网站
16
摘要:笔者曾介绍过Deepin 将对龙芯进行全面支持,打造最优美龙芯电脑桌面。现在Deepin团队移植工作取得了突破性的成果,Deepin桌面已经在龙芯3A和龙芯3B电脑上成功运行起来了。
以下为龙芯3号电脑上运行Deepin系统的照片,由Deepin提供。

Deepin系统首次在龙芯3号电脑上运行成功

图 1  龙芯3A电脑运行Deepin系统桌面

据介绍,“龙芯”3B处理器采用28纳米工艺制造,拥有11亿个晶体管,在设计的复杂度上与国际主流相近,这也是我国第一个超过10亿的晶体管的产品,其运算性能实现了大幅飞跃,国产龙芯处理器与市场主流产品之间的差距正在大幅缩短。

据了解,Deepin (深度)是一个致力于为全球用户提供美观易用,安全可靠的 Linux 发行版。Deepin 非常注重易用的体验和美观的设计,因此对于大多数用户来说,它易用安装和使用,还能够很好的代替Windows系统进行工作与娱乐。对个人用户来说,使用 Deepin 不但完全免除了购买费用,而且不会被流行的各种病毒和木马感染。对于政府和企业用户,由于源代码开放可控,绝无后门隐患,安全性也更有保障,大大降低了维护代价和购买防护软件的费用。

Deepin系统首次在龙芯3号电脑上运行成功

图 2 龙芯3A电脑运行Deepin系统截图

Deepin系统首次在龙芯3号电脑上运行成功

图3  龙芯3B电脑运行Deepin系统截图

从Deepin提供的截图可以看到运行的是一台龙芯3B 6核心CPU

Deepin系统首次在龙芯3号电脑上运行成功

图4 龙芯3B运行Deepin系统内核信息截图

Deepin 的历史可以追溯到 2004年,其前身 Hiweed Linux 是中国第一个基于Debian 的本地化版本。在2008年更名为Linux Deepin ,2014年4月又更名为Deepin。Deepin 是当前中国最活跃的 Linux 发行版本。为了支持 Linux Deepin的长期发展,在2011年成立了武汉深之度科技有限公司,并组建了专职研发团队对linux deepin进行支持。Deepin 与搜狗,WPS,傲游等合作伙伴进行了多方位合作,共同打造基于 Linux 系统的生态系统。同时,还在努力解决迁移Windows平台软件带来的各种兼容性问题,以便用户平滑的过渡到开放安全的 Linux 平台上来。Deepin的发展迅速,获得全球四十多个国家用户的支持,累计下载量数千万次,并成为在distrowatch上排名最高的中国Linux操作系统发行版。

据Deepin 工程师介绍,由于目前的开发还在马不停蹄的进行中,最近又新增了龙芯3B的开发机,争取尽早完成全部移植工作,移植成功后的Deepin 龙芯版和X86版没有什么区别。这次还放出了龙芯3B电脑Deepin系统上用Iceweasel浏览器访问网站的截图,Iceweasel(冰鼬))网络浏览器,是Mozilla Firefox浏览器的Debian再发布版。

Deepin系统首次在龙芯3号电脑上运行成功

图5 龙芯3B电脑运行Deepin系统并浏览Deepin 网站

091035p8kt9n5nn8qtbbl5.jpg

图6 龙芯3B电脑运行Deepin系统并浏览龙芯网站

Deepin系统首次在龙芯3号电脑上运行成功

图7 龙芯3B电脑运行Deepin系统并浏览网站

Deepin系统首次在龙芯3号电脑上运行成功

图8 龙芯3B电脑运行Deepin系统并浏览门户网站

龙芯俱乐部在最近发布的龙芯3B版“龙芯盒子”迷你电脑,届时也将采用Deepin 系统。龙芯俱乐部组织少量的社区龙芯3B 开发机的申购,具体可邮件咨询loongsonclub@126.com

Deepin系统首次在龙芯3号电脑上运行成功

图9 龙芯3B"龙芯盒子"迷你电脑

此外,由于最早的龙芯电脑采用龙芯2F CPU,而随着龙芯产品全面升级,龙芯2H、龙芯3A、龙芯3B,等新型号CPU逐步替代了龙芯2F的产品。新品与龙芯2F相比,性能更好,集成度更高,核心数更多而且软件兼容的支持做的更好。不过由于2F笔记本的有较大的产量和用户,方便学习交流,并且价格也降到了一个非常适合学习研究的价位,所以依然可以发挥余热。

龙芯俱乐部是多年从事龙芯和开源推广的社区,和龙芯产业化基地的中科梦兰合作,借龙芯产品升级换代的机会,面向社区爱好者提供的龙芯2F梦珑迷你笔记本电脑,有极高的性价比,仅仅199元,是目前最便宜的Linux学习电脑,甚至比早期的龙芯2F芯片还便宜,已经有用户陆续收货,团购网址www.loongsonclub.com

Deepin系统首次在龙芯3号电脑上运行成功


图10 龙芯3B电脑运行Deepin 系统并浏览龙芯俱乐部网站

netease 本文来源:cnbeta网站

[ Last edited by zzz19760225 on 2016-2-8 at 03:06 ]
作者: zzz19760225     时间: 2016-2-8 05:20
中国传统历法
收藏
分享
农历
编辑词条
该词条缺少摘要图,补充相关内容帮助词条更加完善!立刻编辑>>
农历是中国长期采用的一种汉族传统历法,又有夏历、汉历等名称。这种历法安排了二十四节气以指导古代劳动人民农业生产活动,故“文革”时改称农历,沿袭至今实际上农历与阴历是不同的。阴历以朔望的周期来定月,用置闰的办法使年平均长度接近太阳回归年。农历是中国目前与公历并行使用的一种历法,虽然人们习称“阴历”,但其实是阴阳历的一种,并非只按月相周期制定历法的阴历。除了清明节是按照农历二十四节气的“清明”制定的以外,中国其他传统节日是以农历日期制定的,至今汉字文化圈的国家和民族多仍庆祝农历的传统节日,如春节、端午节、中秋节、重阳节等。
中文名        农历
别 称        夏历、汉历、旧历
特 点        以朔望月定月,以闰月调年
流行地区        中国、东亚、东南亚汉字文化圈       
外文名        the traditional Chinese calendar
性 质        阴阳合历
发明者        中国汉人


1历法详情
2演变简史
3关于建正问题
4农历规则计算
常用术语
农历规则
干支纪法
年份的计算
朔日的计算
月份的确定
节气的计算
5农历二十四节气
节气起源
七言绝句
口诀
农历二十四节气释义
6阴阳历法
7中国历代历法
8闰月概览
9月份别称
10农历的优缺点
农历的缺点
农历的优点
比较
11公农历名称对比
1 历法详情 编辑
农历,又称 夏历、 汉历,是中国传统历法之一 。主要历法规则由中国汉族经历多个朝代所制定,其形式一直延续至今。农历属于一种 阴阳历:其年份分为 平年和 闰年。 平年为十二个月;闰年为十二个普通月另加一个闰月,总共十三个月。月份分为大月和小月, 大月三十天, 小月二十九天,其平均历月等于一个 朔望月。一年中哪个月大,哪个月小,年年不同,由计算决定。平年全年354~355天,闰年全年383~384天。由于12个朔望月为一年的天数比 太阳年约差十一天,所以设置 闰月以使平均历年为一个 回归年,那么每年的平均日数就接近365.2422日。置闰规则为以不含二十四节气之中气的月份为闰月。由于1回归年为12.368个朔望月,0.368=368/1000=46/125,即125个回归年的话正好余出46个朔望月,所以在一百二十五年中应设置四十六个闰年。但因为这样设闰太过复杂,经推算,7/19最接近0.368。故产生19年7闰的规律。此外,附加 二十四节气以反映 季节的变化特征,指导农业等事。所以,农历既有阴历又有 阳历的成分。

旧历、老历、阴历也是指农历。但旧历、老历只是相对新历(即公历)而言,并非正当称谓。而 阴历事实上是按月亮的 月相变化来安排的历法,与农历含有阳历性质的事实不符,应该弃用。

农历可以追溯到清朝的 时宪历,因为其历法规则大致相同:

辛亥革命后,国民政府沿用清朝的 时宪历,但加进格列历(即公历)内容,每年颁发的历书称为"某某年历书";公元1927年国民政府迁都南京后,改称国民历(国历)。公元1949年中华人民共和国成立后,历法内容不变,但改用公元纪年,即完全采用格列历,同时并用旧历。

《人民日报》的报头日历从1948年6月15日创刊后长期称用“ 夏历”,后来从“文革”时期的1968年元旦开始改用“农历”,从1980年元旦开始去掉“农历”两字,只标示干支纪年及旧历月日。但近几年来,不少报社、出版社、广播电台、电视台等单位仍然将中国传统历法称为“农历”。“农历”之称是“文革”产物,应予纠正。

使用“夏历”称谓的原因:汉武帝元封七年(公元前104年)夏五月改为太初元年,以立春正月即夏正为岁首;除极短时期外,一直到清朝,约二千年间,都用夏正,因而一般叫做夏历。 另有观点认为“夏历”是 夏朝时使用的历法,是古六历之一,历法规则与农历不完全相同,此名字也不合理。

又有观点认为应使用“汉历”称谓:夏历相传创始于 夏代,完善于汉代,加之主要是汉族人使用,以至于 清朝刚建立时都把此历称为 汉历。详见清康熙御制《汉历大全》。

关于农历的纪年方法:

清朝的时宪历采用帝王 年号纪年法,一帝一年号,如: 乾隆二十七年十二月廿二日。

清朝末年, 刘师培(1884-1919)于1903年8月,署名“无畏”,发表《黄帝纪年论》一文,提出废除以帝王纪年的传统方式,采用 黄帝纪年。提出一个民族必须追溯自己的起源,振奋民族精神首先就是要唤起国民对中国历史的重视, 黄帝被称为人文初祖,是公认的中华民族祖先,因此应以 黄帝纪年。 黄帝纪年是唐代学者 张守节推演出来的,他穷其半生精力研究并注释《史记》,在卅卷的《 史记正义》一书中提出了黄帝纪年。

孙中山领导的中国同盟会等革命派团体仍沿用了 黄帝纪元,不过将黄帝纪年元年从黄帝出生改为 黄帝登基的年份。武昌起义后,湖北军政府率先在公文中采用黄帝纪元,以 宣统三年(1911)为 黄帝纪元4609年,随后各省革命军政府的文告、勋章、钱币都使用黄帝纪元。连在扬州举事的“草莽英雄”孙天生,张贴的布告也是大汉黄帝纪年。

辛亥革命成功后,有代表提出黄帝纪年不利于与国际通行的历法相衔接,遂决定改用 西历( 阳历)。1912年1月,中华民国临时大总统孙中山发布《 改历 改元通电》:“中华民国改用阳历,以 黄帝纪元四千六百九年即辛亥十一月十三日,为 中华民国元年元旦”。黄帝纪元的使用至此为止。 1912年起采用 民国纪年,到1949年新中国成立止(上文有说明),而台湾地区依旧使用。

另外, 清朝被推翻后,皇帝年号被废除,国民政府没有保留 黄帝纪年在夏历上,固夏历只剩下 干支纪年这一纪年法,并沿用至今。但干支纪年同时为 黄历中 干支历的部分,并以 立春为岁首。于是,随着时间的推移,产生了夏历和干支历的混淆现象。一直以来,均有不少专家学者提出要求恢复黄帝纪年的建议。毕竟干支纪年只是60年的周期循环式纪年,而 黄帝纪年是连续递进式的纪年,在此点上优越性明显。我国在采用西方 公元纪年的同时有必要采用自己的带有 中华民族特色的传统纪年方法。

2 演变简史 编辑
中国的历法与 纪年采用 阴阳 干支三合历;上古时期,根据不同的 农业牧业生产情况需要,分别产生过 太阳历、 太阴历和 阴阳历。农历作为 中国传统历法,最早源自何时无从考究,据出土的 甲骨文和古代中国典籍多有记载,现时阴阳合一的 历法规则一般认为源自 殷商时期。 从 黄帝 纪年到 清朝 末期启用 西历 ( 格里历 ),中国历史上一共产生超过102部历法,这些历法对 中国文化与文明产生过重大影响,比如 夏历、商历( 殷历)、 周历、西汉 太初历、隋 皇极历、唐 大衍历等,有的 历法虽然没有正式使用过,但对养生、 医学、思想 学术、 天文、 数学等有所作用,如 西汉末期的 三统历和 隋朝的 皇极历等。

汉朝以前的古代中国 历法以366天为一 岁,用“ 闰月”确定 四时和确定 岁的 终始;已经有 日、 月、 旬和 时的 时间单位,具备了 阴阳历的技术;观察到了金木水火土五大行星和日月的运动 规律,用“闰月”“减差法”来调整 时差;历法实施成为重要大事,主要内容之一是“以闰月定四时成岁”和“正闰余”,即确定闰月位置和如何减去多余出来的天数(不是加上缺少的天数),由此来确定年岁的终结和开始。到了 春秋战国时期,由于 周朝王室衰落,诸侯各行其是,因此出现多轨制历法,亦即各诸侯和各地部落还有自己的地方历法; 秦朝为中国历史上最后一个“以闰月定四时成岁”的历法。

汉朝初期开始 中国历法出现了大转折,全国统一历法, 历法也成为了一门较为独立的 科学技术。 汉武帝责成 邓平、 唐都、 落下闳等人议造《 汉历》,汉武帝元封七年历成。是年五月改年号为太初(即为太初元年),并颁布实施这套《汉历》,后人以此称呼此历为《 太初历》,之后 刘歆作《 三统历》,这两历的重要特点是年岁合一,一年的整数天数是365天,不再是之前历法的366天。以“加差法”替代之前的“减差法”以调整时差,年岁周期起始相当固定,用数学计算就能确定闰月,用不着“考定 星历,建立 五行”,至此, 阴阳五行基本上退出了历法。之后中国历朝历代所颁布的历法,均与汉历( 太初历)大同小异。由此知当下使用的这套历法规则基本沿袭汉代的汉历(太初历),而与汉代以前的夏历等是有较大差异的。

中华民国成立后, 纪年采用西历或 民国纪年并用。 中华人民共和国在 1949年成立时,继续使用 西历,以 公元纪年;但中华民 国历仍以1912年为元年,尚在 台湾、 澎湖、 金门、 马祖等地区使用。

3 关于建正问题 编辑
《史记·历书》有“ 夏正”、" 殷正”、" 周正"之分,这就是战国、秦、汉时代盛行的 三正 论。 建正意为阴阳历以哪个月建作为其一年中的第一月份的起始位置。 月建,是指以十二支纪月(到北宋时基本形成完整的 干支历)。 春秋吋期,人们把日南至(即 冬至)的一个月,叫做子月,在子月之后,顺次为丑月、寅月、……,在子月之前,逆次为亥月、戌月、……。 于是,夏代的 岁首是 寅月,商代的岁首是丑月,周代的岁首是 子月。 秦代相信有 三正论,以夏、商、周三代的三正交替是事实,还杷它引伸起来,改以十月为年始。但有人认为三正交替不是历史事实。 到了汉代,武帝 元封七年改用 太初历,以 建寅之月为 岁首。此后两千多年一般都是用 夏正。建正在 阴阳历上的用法是这样的:当把农历的正月置于寅时,往后的月份依次排列,二月便大概和卯对应,三月大概和辰对应,其余类推。

一般所谓 月建是指 十二支而言,如 建子、 建丑、 建寅等等。有人认为月建是指(农历)月的大小而言,所以有 大建和 小建的谬称。 从而又把“正月建寅”等,错误地解读为农历正月等同于“寅”或干支历的寅月。事实上,月建是等分的。按一年365.25日算,共历30.4375日,而1个 朔望月只有29.530589日。这一辰就差了几乎1天。这十二辰合起来差了将近11天。 那相差出来的天数又怎么办?这就是阴阳历需要设置闰月的原因了。

4 农历规则计算 编辑
日月年的定义和 周朝的制度是分不开的,因此夏历受到了当时周朝制度的影响。下面我们进行逐一的介绍(我们这里的时间、 月相计算以东经120度(中国 南京紫金山天文台)为准)。

常用术语
黄经:是在黄道坐标系统中用来确定天体在天球上位置的 坐标值、共分成360度、在这个系统天球被黄道平面分割为南北两个半球,太阳移到黄经0度为春分、移到黄经90度为夏至、移到180度为秋分、移到270度时为冬至。

朔日:月球移到地球和太阳中间时的那一天叫朔日。

平朔:用 朔望月的平均长度计算、没考虑日月运行的不均等性;缺点:“含有真正的“ 朔”的当天有时可能会出现在前一月的最后一日(“ 晦日”、廿九日或卅日),有时会出现在初二”。

定朔:计算考虑了日月运行的不均等性,将含有真正“朔”的当天作为每月的开始。

平气:计算不考虑太阳在 黄道上运动快慢不匀,将一 周年 时间( 回归年)24等分划分出 二十四节气,两个节气之间的平均天数为15.22天。

定气:计算考虑太阳在黄道上运动快慢不匀,将定气两个节气之间的天数不一样、短的只有14天、长的达16天。

冬至日:冬至交接时间所在的那一天就叫冬至日。冬至日必须在子月:冬至日当天或冬至日前的那个朔日定为子月初一“起点”(注意:起点和算命不同)。

建正:年首月份,农历的建正就是“夏正”:夏历正月 建寅[子月为十一月];

殷正:殷历正月建丑[子月为十二月]、 鲁历同殷历;

周正:周历(周朝历)正月建子[子月为正月];

秦正:秦历《颛顼历》正月建亥[亥月为正月]。

置闰:农历1个月就是1个朔望月、月的平均天数≈29.53059天,农历一年12个月≈354.367天;但是1回归年≈365.2422天,这样农历一年比回归年少≈10.866天,农历≈2.71771年就比回归年少1个月,如不调整过不了几十年就会出现冬、夏倒置。为了让农历年平均天数等于回归年农历≈2.71771年必须设一个闰月。置闰规则请看《历代农历编历规则》。

节气:一年分二十四个节气, 清朝《时宪历》(公元1645年)以前用平气计算,清朝《时宪历》(公元1645年)以后用定气计算。

历法:可分为阳历、阴历、 阴阳历三种:

阳历( 太阳历):以太阳周年视运动周期(即 回归年,等于365.2422日)为一年,一年划分成12个月,它与月亮运动毫无关系。根据阳历日期,可知寒来暑往的四季变化、合理指导农业等事。

阴历( 太阴历):以月亮的圆缺周期(即 朔望月,等于29.5306日)为一个月,积12个月为一年。它完全不考虑太阳的周年视运动规律,因而阴历的日期不能显示四季冷暖。这种历法实用价值太小,现除 伊斯兰教外,已弃置不用了。

阴阳历:我国的农历属于此类,它取月相的变化周期即 朔望月为月的长度,参考太阳回归年为年的长度,通过设置闰月以使平均历年与回归年相适应。根据农历日期,既可知道 潮汐涨落,又可大概掌握四季更替。

历书:记载 历法等相关信息的出版物,如 黄历、 万年历书。而电子历书是科技发展的产物,是新的载体。

农历规则
在古代,日的定义:以地球自转一周为一日。 其中以太阳离地平线最远的一个时辰为子时,相当于北京时间23:00~1:00,但是农历中一天始于子正(00:00),而非子初(23:00)。

月策与置末规则: 朔日为每月起点(初一日);朔日(月初一日)到下个朔日(下月初一日)有多少天、这月就有多少天。有30天为大月、有29天为小月;唐朝(公元619年)以前用的是平朔、唐朝(公元619年)以后用的是定朔。

年策与 置闰规则: 以冬至日必须在子月(寅正十一月),上个冬至月(子月农历寅正11月)到下个冬至月(子月\农历寅正11月)有12个月就不置闰,上个冬至月(子月、农历寅正11月)到下个冬至月(子月、农历寅正11月)如有13个月就要置闰,以上个冬至月(子月农历寅正11月)后的第一个没 中气的月份设为 闰月,在几月后面就称闰几月。 例如:2032年农历冬至月到2033年农历冬至月之间有12个月,就不置闰。2033年农历冬至月到2034年农历冬至月有13个月就必须置闰,在2033年冬至月(11月)后的第一个无中气之月就是2033年冬至月后的第1个月,就定为闰月。它正好在冬至月十一月后,所以就叫闰十一月月(闰 冬月)。

干支纪法
1.干支纪年

如甲子为第一年,乙丑为第二年,丙寅为第三年……六十年为一周。一周完了,再由甲子年起,周而始,循环下去。

干支纪年萌芽于汉初,汉章帝元和二年(公元85年),朝廷下令在全国推行干支纪年。从此干支纪年和帝王年号纪年一起使用于中国传统历的纪年。

公历纪元号与干支纪年,例如1929年是己巳年,1930年是庚午年……到1989年又是己巳年。我们在日历上看到的己巳年、庚午年,就是按干支纪年这种方法排列下来的。阳历年份除以60的余数减3便得该年农历干支序号数,再查上面的干支便是干支年纪。如果序号数小于、等于零则于支序号数加60。例如,求1991年干支;1991÷60=33余11,年干支序号数=11-3=8。查干支表知该年为辛未年。又如求1983年干支:1983÷60=33余3,干支序号=3-3=0,加上60,查干支表知该年为癸亥年。

2.干支纪月

起于先秦的十二辰纪月,因此须先确定地支:以冬至所在月份为子月,以此类推。遇到闰月则采用上个月份的地支。确定地支后,下来确定天干:若遇甲或己的年份,正月是丙寅,二月是 丁卯,三月是戊辰,类推;遇上乙或庚之年,正月为戊寅;丙或辛之年正月为庚寅,丁或壬之年正为为壬寅,戊或癸之年正月为甲寅。正月之干支知道了,其余月可按六十甲子的序推知。中国民间对干支纪月起始日的确定存在分歧,共有两种观念。一种是以朔日(即数字纪月每月的初一日)作为起点,遇闰月则与上月用同一干支纪月,历代官方也采用这种纪月法。另一种是以二十四节气中的单数节气(即“非中气”)作为每月的起点,此法多为星相术士采用的。以西元2001年(辛巳年)为例,公历2月4日立春,3月5日惊蛰;1月24日是正月初一,2月23日是二月初一。按第一种观念,则庚寅月从西元2001年1月24日开始,辛卯月从西元2001年2月23日开始。按第二种观念,则庚寅月从西元2001年2月4日开始,辛卯月从西元2001年3月5日开始。干支纪月,在日历中一般较少使用,而以数字和专用字纪月为主。

3.干支纪日

甲子第一日,乙丑为第二日,丙寅为第三日……60日为一周。一周完了再由甲子日起,周而复始,循环下去。例如汉历二二一八[壬辰]年(西历2012年)正月初一是癸未日,初二是甲申日……到三月初一正好是60天,因此三月初二又是癸未日,初三又为甲申日。汉历中,干支纪日一直未中断未乱记,是中国纪日史也是世界纪日史中最长的一种纪日历史。 有明确记载的日期,就可达2700多年。

4.干支纪时

一天中时辰的地支也是确定的,所以二十四小时配十二地支,则为由夜间十一点至一点为子时,一点至三点为丑时,其余照推。时的天由该日所对天干推求,其歌戾如下:

甲己还生甲,乙庚丙作初,

丙辛从戊起,丁壬庚子居,

戊癸何方发,壬子是真途。

即若该日是甲或己的,在子时上配上甲为甲子;日是乙或庚的,在子时上配上丙为丙子;丙辛日子时配上戊为戊子;丁任日为庚子;戊癸日为壬子。知道了子时的干支,便可推知其余。

年份的计算
1 由西元年份推算 天干地支:

公历年份数减3,除以 10 的余数是天干,除以12 的余数是地支。

例如:

(2010 - 3) mod 10 = 7,所以天干是“庚”

(2010 - 3) mod 12 = 3,所以地支是“寅”。

2.积日的计算(用于月份的计算):

把当天和1900年1月0日(星期日)的差称为积日。当年的1月1日换算为积日,可以用年份减去1900得到的年数被4整除,所得商数作为 y(D4),余数作为y(M4),y(M4)为零的年份是公历闰年,积日是

D(1) = 1461 * y(D4)-1

y(M4)不为零的年份是公历平年,积日是

D(1) = 1461 * y(D4) + 365 * y(M4)

朔日的计算
从1900年开始的第m个朔日的公式是

M = 1.6 + 29.5306 * m + 0.4 * sin(1 - 0.45058 * m)

这个公式的误差在0.2天左右。

月份的确定
计算前一年冬至的积日F(0),并用F(0)计算冬至所在的 朔月m及其朔日M(0),就可以推算冬至的农历日期,冬至所在的农历月份总是十一月。计算下一个中气F(1)和下一个朔日M(1),如果F(1)<M(1),那么该月就是上一个月的闰月,并把这个中气作为F(2),以后的中气、朔日和农历月份也这样确定。

节气的计算
先给节气进行编号,从近日点开始的第一个节气编为0,编号如下及其相应的月份如下:

0 小寒腊月 6 清明三月 12 小暑六月 18 寒露九月

1.大寒腊月 7 谷雨三月 13 大暑六月 19 霜降九月

2.立春正月 8 立夏四月 14 立秋七月 20 立冬十月

3.雨水正月 9 小满四月 15 处暑七月 21 小雪十月

4.惊蛰二月 10 芒种五月 16 白露八月 22 大雪冬月

5.春分二月 11 夏至五月 17 秋分八月 23 冬至冬月

把当天和1900年1月0日(星期日)的差称为积日,那么第y年(1900年算第0年)第x 个节气的积日是

F = 365.242 * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x)

这个公式的误差在0.05天左右。

5 农历二十四节气 编辑
节气起源
农历是阴阳合历,自从西汉太初历开始完整写入农历,是农历的太阳历成分,是农历(阴阳合历)标度太阳运动的成分,农历二十四节气是历算家安照农历的规则,通过实际观测用天文算法计算的,和农历的阴历成分无关的,农历的月份和十二中气是基本对应的,而十二节气可出现在农历的上个月后半月和本月的上半月中。

农历二十四节气是在 四时八节基础上发展起来的。 殷、 周之交已分四时,春秋时代已有分至 启闭八节。到 战国晚期就形成了完整的二十四节气体系( 天文位置已确定)。二十四节气是 中历确定月名月序和设置闰月的凭藉,也是农事活动的主要依据。节气由太阳位置决定,反映太阳的视运动。西汉初年制定的《 太初历》,二十四节气起了非常重要的作用,明确以没有 中气的月份为 闰月,调整了太阳周天与 阴历纪月不相合的矛盾。后来,该历法经由西汉末刘歆改造而成《 三统历》 ,又历经多个朝代的改进,基本形式没变。

太阳从黄经零度起,沿黄经每运行15度所经历的时日称为“一个节气”。每年运行360度,共经历24个节气,每月2个。

其中,每月第一个节气为“节气”,即:

0101立春、0201惊蛰、0301 清明、0401 立夏、0501 芒种、0601 小暑、0701 立秋、0801白露、0901 寒露、1001立冬、1101 大雪和1201小寒等12个节气

每月的第二个节气为“ 中气”,即:

0102雨水、0202春分、0302谷雨、0402小满、0502夏至、0602大暑、0702处暑、0802秋分、0902霜降、1002小雪、1102冬至和1202大寒等12个 中气。

“ 节气”和“ 中气”交替出现,各历时15天左右,现代人们已经把“节气”和“中气”统称为“节气”。

农历二十四节气反映了太阳的周年视运动, 所以节气在现行的公历中日期基本固定,上半年在6日、21日,下半年在8日、23日,前后不差1~2天。

七言绝句
春雨惊春清谷天,夏满芒夏暑相连,

秋处露秋寒霜降,冬雪雪冬小大寒。

口诀
地球绕着太阳转,绕完一圈是一年。

一年分成十二月,二十四节紧相连。

按照公历来推算,每月两气不改变。

上半年是六、廿一,下半年逢八、廿三。

这些就是交 节日,有差不过一两天。

二十四节有先后,下列口诀记心间:

一月小寒接大寒,二月立春雨水连

惊蛰春分在三月,清明谷雨四月天;

五月立夏和小满,六月芒种夏至连

七月大暑和小暑,立秋处暑八月间;

九月白露接秋分,寒露霜降十月全

立冬小雪十一月,大雪冬至迎 新年。

抓紧季节忙生产,种收及时保丰年。

农历二十四节气释义
立春:立是开始的意思,立春就是春季的开始。太阳过黄经三百一十五度春季开始,是为立春。立春是一年中的第一个节气。揭开了春天的序幕,草木开始萌芽,农民开始播种。

雨水:降雨开始,雨量渐增。立春过后,太阳黄经三百三十度的位置,是为雨水。雨水本来是指冰雪融化成水。农民历书说:“门指壬为雨水时,东方解冻,冻雪皆散而为水,化而为雨,故名雨水。”雨水时节,正是万物欣欣向荣,草木萌生的时候。

惊蛰:蛰是藏的意思。惊蛰是指春雷乍动,惊醒了蛰伏在土中冬眠的动物。雨水过后,太阳过黄经三百四十五度的位置,是为惊蛰。约在公历每年的三月五日前后。惊蛰伏中的昆虫。这时节已经进入仲春,桃花红、梨花白,共莺鸣叫、鸟儿高飞。春雷是这节常见的自然现象。

春分:分是平分的意思。春分表示昼夜平分。太阳过黄经零度,是为春分。春分是春天的中间。立春、立夏、立秋、立冬表示四季的开始。春分、芒种、小暑、冬至则处于各个季节的中间。春分这天,太阳光直射赤道,地球上的昼夜时间相等,所以古代春分秋分又称为“日夜分”。

清明:天气晴朗,草木繁茂。 清明节4月5号(扫墓)太阳过黄经十五度的位置时即为清明,约为公历每年的四月五日前后。清明含有天气明朗、空清新明洁,逐渐转暖、草木繁茂之意。清明这天,民间有踏青、寒食、扫墓等习俗。常言道“清明断雪,谷雨断霜”。

谷雨:雨生百谷。雨量充足而及时,谷类作物能茁壮成长。太阳过黄经三十度位置,农民布谷后望雨是为谷雨。约为公历上四月二十日前后。是春季的最后一个节气。这时节田中的秧苗初插,作物新种,最需要丰沛的雨水灌溉滋润,俗语说:“雨生百谷”,雨量充足而及时,谷类作物能够茁壮成长。

立夏:夏季的开始。太阳过黄经四十五度位置,夏季开始是为立夏。古谚有云:“立夏小满,雨水相赶”。立夏是多雨的季节。传说古代君王常在这一天到京城外迎接夏天。

小满:麦类等夏熟作物籽粒开始饱满。小满太阳过黄经六十度位置是为小满,约为公历每年五月二十一日前后。“小满”正当是农历四月中下旬,这时候田里的稻谷和麦子等农作物,渐渐结穗,看来丰实饱满的样子,就等待成熟。庄稼人眼见辛勤与努力,即将有了丰收,于是把这个节气形容成小满。

芒种:麦类等有芒作物成熟。太阳经过黄经七十五度位置即为芒种,约为公历每年的六月五日前后。这一节气,已经进入典型的夏季,天气相当炎热,麦类等芒作物成熟,大部分地区中稻进入返青阶段,秧苗嫩绿,一派生机。芒种接近端午节。

夏至:炎热的夏天来临。至有极的意思,这是一年当中北半球白天最长的一天。太阳过黄经九十度位置,是为夏至。夏至是太阳直射北回归线,北半球一年中白昼最长的一天。夏至过后,地面受热强烈,空气对流旺盛,午后至傍晚常易形成雷阵雨。

小暑:暑是炎热的意思。小暑就是气候开始炎热。太阳过黄经一百零五度位置是为小暑。小暑已是盛夏,颇感炎热,但还未到最热的时候。

大暑:一年中最热的时候。太阳过黄经一百二十度的位置是为大暑,大暑是一年最热的节气。

立秋: 秋季的开始。太阳过黄经一百三十五度,秋季开始即为立秋。立秋是节气迈入秋凉的先声,因为大暑过后夏去秋来,时序到了立秋,表示酷热难熬的夏天即将过去,凉爽舒适的秋天就要来临了。

处暑:处是终止、躲藏的意思。处暑是表示炎热的暑天结束。太阳过黄经一百五十度位置暑气渐消是为处暑,秋季已到,夏天的暑气将要慢慢消退了。但有时也会热得如炎夏,即所谓的“秋老虎”,大概是夏季的回光返照,因此炎热程度不亚于盛暑,因此称为处暑。

白露:天气转凉,露凝而白。太阳过黄经一百六十五度的位置是为白露。约为公历的每年九月七日前后。此时气温开始下降,天气转凉,早晨草木上有了露水。

秋分:昼夜平分。太阳过黄经一百八十度,太阳过赤道位置是为秋分。秋分是象征季节变化的节气。秋分这天,太阳位于黄经一百八十度,阳光几乎直射赤道,昼夜几乎等长。这时进入了凉爽的秋季,所谓的“一场秋雨一场寒”。

寒露:露水已寒,将要结冰。太阳过黄经一百九十五度,夜寒水气渐凝结成霜是为寒露。约为公历的每年十月八日前后。民谚常说:“寒露麦,霜降豆”。

霜降:天气渐冷,开始有霜。太阳过黄经二百一十度位置是为霜降。霜降是秋季的最后一个节气。一般在公历每年的十月二十三日前后。

立冬:冬季的开始。太阳过黄经二百二十五度,时序开始进入冬天,所以叫立冬。古谚:“立冬之日,水始冰,地始冻”。

小雪:开始下雪。太阳过黄经二百四十度位置,气候寒冷逐渐降雪为小雪。约为公历每年的十一月二十二日的前后。

大雪:降雪量增多,地面可能积雪。在每年的12月7日或8日,其时视太阳到达黄经255度。《月令七十二候集解》说:“至此而雪盛也。”大雪的意思是天气更冷,降雪的可能性比小雪时更大了,并不指降雪量一定很大。

冬至:寒冷的冬天来临。至有极的意思,这是一年当中北半球白天最短的一天。太阳经黄经二百七十度为冬至。冬至日,刚好是太阳照射在南回归线上,所以北半球的日间最短,夜间最长。冬至过了之后,太阳照射的光线又向北回转,渐渐接近北半球的地面,日间就渐渐加长,相对的夜间渐短。

小寒:气候开始寒冷。太阳过黄经二百八十五度的位置是为小寒。冬至过后,天气日趋寒冷。小寒时节虽冷但还不算是最冷,所以就称为“小寒”。

大寒:一年中最冷的时候。太阳过黄经三百度气候严寒是为大寒。时序已到了隆冬,天气变得非常寒冷,是一年中最冷的时段,所以这个节气为“大寒”。

6 阴阳历法 编辑
农历即 夏历。农业上使用的 历书,有指导农业生产的意义。但事实上农 历月日与季节变化相差明显,指导农时的效果并不好,我国古代真正指导农时的是“ 二十四气”,它实际是一种特殊的“ 阳历”。

农历的历月长度是以 朔望月为准的,大月30天,小月29天,大月和小 月相互弥补,使历月的平均长度接近朔望月。

农历固定地把朔的时刻所在日子作为月的第一天--初一日。所谓“朔”,从 天文学上讲,它有一个确定的时刻,也就是月亮黄经和 太阳黄经相同的那一瞬间。(太阳和 月亮 黄经的计算十分繁琐和复杂,这里就不予介绍了)

至于定农历 日历中月份名称的根据,则是由“ 中气”来决定的。即以含“ 雨水”的月份为一月;以含“ 春分”的月份为二月;以含“ 谷雨”的月份为三月;以含“ 小满”的月份为四月;以含“ 夏至”的月份为五月;以含“ 大暑”的月份为六月;以含“ 处暑”的月份为七月;以含“ 秋分”的月份为八月;以含“ 霜降”的月份为九月;以含“ 小雪”的月份为十月;以含“ 冬至”的月份为十一月;以含“ 大寒”的月份为十二月。(没有包含中气的月份作为上月的闰月)

农历的历年长度是以回归年为准的,但一个回归年比12个朔望月的日数多,而比13个朔望月短,古代天文学家在编制农历时,为使一个月中任何一天都含有月相的意义,即初一是无月的夜晚,十五左右都是圆月,就以朔望月为主,同时兼顾季节时令,采用十九年七闰的方法:在农历十九年中,有十二个平年,每一平年十二个月;有七个 闰年,每一闰年十三个月。

为什么采取“十九年七闰”的方法呢?一个朔望月平均是29.5306日,一个回归年有12.368个朔望月,0.368小数部分的渐进分数是1/2 、1/3 、3/8 、4/11 、7/19 、46/125,即每二年加一个闰月,或每三年加一个闰月,或每八年加三个闰月……经过推算,十九年加七个闰月比较合适。因为十九个回归年=6939.6018日,而十九个农历年(加七个闰月后)共有235个朔望月,等于6939.6910日,这样二者就差不多了。

另外,“十九年七闰”只是一个近似说法。事实上,春秋时代天文学家曾经首创十九年七闰的方法; 祖冲之 大明历采用20组19年7闰插入1组11年4闰,计391年144闰,使农历的平均历年更接近回归年;此外还有334年123闰、1021年376闰的提法,和回归年的差额更小。但自清代以来,我国即完全采用 天象确定历年、历月,从而使农历的平均历年与回归年完全一致。

七个闰月安置到十九年当中,其安置方法是很有讲究的。农历闰月的设置,自古以来完全是人为的规定,历代对闰月的设置也不尽相同。秦代以前,曾把闰月放在一年的末尾,叫做“十三月”。汉初把闰月放在九月之后,叫做“后九月”。到了汉武帝 太初元年,又把闰月分插在一年中的各月。以后又规定“不包含 中气的月份作为前一个月的闰月”,直到现在仍沿用这个规定。

为什么有的月份会没有中气呢?节气与节气或中气与中气相隔时间平均是30.4368日(即一回归年365.2422日平分12等分),而一个 朔望月平均是29.5306日,所以节气或中气在农历的月份中的日期逐月推迟,到一定时候,中气不在月中,而移到月末,下一个中气移到另一个月的月初,这样中间这个月就没有中气,而只剩一个节气了。

上面讲过,古人在编制农历时,以十二个中气作为十二个月的标志,即雨水是正月的标志,春分是二月的标志,谷雨是三月的标志……把没有中气的月份作为闰月就使得历月名称与中气一一对应起来,从而保持了原有中气的标志。

从十九年七闰来说,在十九个回归年中有228个节气和228个中气,而农历十九年有235个朔望月,显然有七个月没有节气和七个月没有中气,这样把没有中气的月份定为闰月,也就很自然了。

农历月的大小很不规则,有时连续两个、三个、四个大月或连续两个三个小月,历年的长短也不一样,而且差距很大。节气和中气,在农历里的分布日期很不稳定,而且日期变动的范围很大。这样看来,农历似乎显得十分复杂。其实。农历还是有一定循环规律的:由于十九个回归年的日数与十九个农历年的日数差不多相等,就使农历每隔十九年差不多是相同的。每隔十九年,农历相同月份的每月初一日的阳历日一般相同或者相差一、二天。每隔十九年,节气和中气日期大体上是重复的,个别的相差一、两天。相隔十九年闰月的月份重复或者相差一个月。

7 中国历代历法 编辑
古六历

颛顼历- 秦朝、西汉(? - 公元前104年)

太初历( 三统历) - 西汉、新朝、 东汉(公元前104年- 84年)

四分历- 东汉(85年- 220年)、曹魏(220年- 236年)、东吴(222年)、蜀汉(221年- 263年)干象历 - 东吴(223年- 280年)

景初历- 曹魏、西晋、东晋、 刘宋(237年- 444年)、北魏(398年- 451年)

元嘉历 - 刘宋、南齐、南梁(445年- 509年)

大明历 - 南梁、南陈(510年- 589年)

三纪历 - 后秦(384年- 517年)

玄始历 - 北梁(412年- 439年)、北魏(452年- 522年)

正光历 - 北魏(523年- 534年)、东魏(535年- 539年)、西魏(535年- 556年)、北周(556年- 565年)

兴和历- 东魏(540年- 550年)

天保历 - 北齐(551年- 577年)

天和历 - 北周(566年- 578年)

大象历 - 北周(579年- 581年)、隋朝(581年- 583年)

开皇历- 隋(584年- 596年)

大业历 - 隋(597年- 618年)

皇极历

戊寅元历- 唐朝(619年- 664年)

麟德历 - 唐(665年- 728年)

大衍历 - 唐(729年- 761年)

五纪历 - 唐(762年- 783年)

正元历 - 唐(784年- 806年)

观象历 - 唐(807年- 821年)

宣明历 - 唐(822年- 892年)

崇玄历 - 唐(893年- 907年)、 后梁、 后唐、 后晋、 后汉、 后周(908年- 955年)

九执历

符天历

调元历- 后晋(939年- 943年?)、 辽朝(961年? - 993年)

大明历 - 辽(994年- 1125年)

钦天历 - 后周(956年- 960年)、北宋(960年- 963年)

应天历- 北宋(963年- 981年)

干元历 - 北宋(981年- 1001年)

仪天历 - 北宋(1001年- 1023年)

崇天历 - 北宋(1024年- 1065年;1068年- 1075年)

明天历- 北宋(1065年- 1068年)

奉元历 - 北宋(1075年- 1093年)

观天历 - 北宋(1094年- 1102年)

占天历 - 北宋(1103年- 1105年)

纪元历 - 北宋、南宋(1106年- 1135年)

统元历 - 南宋(1136年- 1167年)

干道历 - 南宋(1168年- 1176年)

淳熙历 - 南宋(1177年- 1190年)

会元历 - 南宋(1191年- 1198年)

统天历- 南宋(1199年- 1207年)

开禧历 - 南宋(1208年- 1251年)

淳佑历 - 南宋(1252年)

会天历 - 南宋(1253年- 1270年)

成天历 - 南宋(1271年- 1276年)

大明历 - 金朝(1137年- 1181年)

重修大明历 - 金、元朝(1182年- 1280年)

授时历( 大统历)- 元、 明朝(1281年- 1644年)

时宪历- 清朝(1645年- 1911年)

现行 农历( 民国至今)

8 闰月概览 编辑
在1645年以前,农历使用 平太阳,各月之后出现闰月的概率相等。之后使用 真太阳,各月出现闰月的概率变为不相等。以下是1645年至2644年一千年间各 闰月的统计。

公元1645-2644年间各 闰月出现次数统计表:

闰月        出现次数        闰月        出现次数        闰月        出现次数
闰正月        6        闰二月        23        闰三月        47
闰四月        61        闰五月        74        闰六月        59
闰七月        51        闰八月        26        闰九月        8
闰十月        9        闰十一月        5        闰十二月        0
由上可见,夏季( 夏半年)闰月多,冬季( 冬半年)闰月少,原因就是目前地球 远日点出现在7月初( 夏至到 小暑之间), 近日点出现在1月初( 冬至到 小寒之间),所以夏至小暑前后 地球公转速度较快

另有计算表明,2262年将会再次出现 闰正月;3358年将会首次出现闰十二月(闰十二月初一日对应公元3359年1月21日,这个历月只有“立春”节气)。

以下是2000~7999年共六千年间各闰月数量的统计。

闰月 出现次数

正月 32次

2月 41次

3月 101次

4月 196次

5月 289次

6月367次

7月 351次

8月 316次

9月 231次

10月 150次

冬月 97次

腊月 39次

9 月份别称 编辑
农历的第一个月,按照习惯称为 正月。农历的十一月和十二月分 别称为 冬月和 腊月,但冬月已经很少用了。表示气候寒冷的成语“ 十冬腊月”就是从此得来,字面意思即为十月、十一月和十二月为一年中最寒冷的月份。

农历的一个月的前十天按顺序习惯上称为初日,如农历的一月二日称为正月初二;第十一天至第二十天以及第三十天直接用天数记录,如农历的一月十五日( 元宵节)称为正月十五,农历的十二月三十日( 岁除,当天晚上称为 除夕)称为 腊月三十;第二十一天至第二十九天按顺序习惯上称为 廿日,亦有些 通胜将之说成 念日,如农历的一月二十二日称为正月廿二或正月念二。农历的每个月份都有不同的别称。由于它和农业生产紧密的联系,所以从二月到九月差不多都用植物来表示,下面是农历十二个月的别称:

正月: 端月、 元春、隅月、 始春

二月: 杏月、 花月、 如月、 早春

三月: 桃月、桐月、炳月、 三春、 阳 春、 暮春

四月: 阴月、 梅月、 余月、 清和月

五月: 榴月、 毒月、 蒲月

六月: 荷月、荔月、目月、 伏月

七月: 兰月、 巧月、 瓜月、相月、 霜月、桐月

八月: 桂月、 壮月、 中秋月

九月: 菊月、 玄月

十月: 良月、 阳月、 小阳春

十一月: 冬月、 葭月、 辜月

十二月: 腊月、 涂月、 嘉平月

(注意: 寅月、 卯月、 辰月等十二地支纪月,以及 孟月、 孟春、 仲春、季春、 季夏等(孟是第一的意思,仲是第二,季是第三;农历存在闰月,所以不能用此类称谓。)均为 干支历的专用月称。 )

以花命名的农历各月份的诗意别称: 正月--柳月,银柳插瓶头,又称柳月;二月--杏月,杏花闹枝头,又称杏月;三月--桃月,桃花粉面羞,又称桃月;四月--槐月,槐花挂满枝,又称槐月;五月--榴月,石榴红似火,又称榴月;六月--荷月,荷花满池放,又称荷月;七月--巧月,凤仙节节开,又称巧月;八月--桂月,桂花遍地香,又称桂月;九月--菊月,菊花傲霜雪,又称菊月;十月-- 阳月,芙蓉显小阳,又称阳月;十一月-- 葭月,葭草吐绿头,又称葭月;腊月-- 梅月,梅花吐幽香,又称梅月。此外,农历月份还有其它许许多多的别称。

10 农历的优缺点 编辑
农历的缺点
一、由于农历是定历,历月使用 定朔,所以每年的同一 历月的天数并不确定,不方便统计天数;

二、 历年长度,有353日,354日,355日,383日,384日,385日6种,并且不利于统计年长;

三、 干支循环周期60过短,不方便较长时间的区别,也不方便记忆;

四、 置闰不透明, 闰月不确定。

早在 北宋时,科学家 沈括就已经发现 阴阳历“岁年错乱, 四时失位”,并尝试 改历。他见前朝的旧历法是以十二次的月亮圆缺做为 一年的标准,虽经多次小改革但仍显 气朔交争且岁年错乱,四时失位且又算数过程繁琐。故沈括便决心首先废除先圣王所遗留下来以十二 朔望月为一年的阴历年法之历算法。而改以二十四个节气的定年法。但墨守成规的 司天监庸官皆大力反对,因此不但对于沈括之才能十分嫉恨,且纠合起来进行阻挠又多次借故上告 神宗言沈括的不是。后来此新历法虽实行不久便又被修改掉。但此新历法直至七百多年后的1855年被 太平天国所颁布为 天历使用而延用至今,后又传至英国而英国至今仍用此法以统计农业气候和农事生产的依据。 然而事实上, 十二气历和 天历皆起源于 干支历。

农历的优点
一、农历是定历,它具有 天文年历的特性,能很好地和各种 天象对应,如它的 节气严格对应 太阳高度, 历日较严格地对应 月相, 闰月的不发生频率和发生频率对应地球 近日点和 远日点,其它天象如 日出 日没, 晨昏蒙影, 五星方位, 日月食, 潮汐等,就连 历月也大致对应 太阳高度;

二、农历历月的天数只有29日和30日两种,且由 定朔日规定,人为因素最小,不易随意改动;

三、 岁首有较强的天文学意义,具有阴月阳年的天文学意义;

四、阴阳合历,最体现汉民族 天人合一的传统文化;

五、 干支纪年和 十二生肖纪年循环使用;由于它包含节气十分利于 四季划分,由于它包含月相,所以也十分反映潮汐,日月食等天象和月亮对气候的影响。

比较
一、由于单个公历历年(365或366日)比农历历年(平年354或355日,闰年383或384日)更接近于回归(365.2422日),所以从具体日期反映季节的角度看,则公历比农历更加准确。

二、每年公历的日期比农历的日期都要固定。

三、公历比农历要简单得多。但农历的制定包含“阴”与“阳”,符合中国传统的哲学观。

11 公农历名称对比 编辑
公历标准名称为 格里高利历(Gregorian calendar),以改制此历者 格列高里十三世而名。

现因全球通用,公用之历法,故称“公历”。

传入中国后, 民国开始与传统历法 夏历并用,故民间又出现多种别称以区分二者。对比如下:

公历别称及其原因        农历别称及其原因
公历:公用之历(实用性强)        农历:农用之历(狭隘看法,其实农历科学性更强)
西历:源于西方国家        中历:中国固有历法;汉历:汉族历法
阳历:类型属阳历(太阳历),国内现用最主要的一种阳历,故以阳历称之        阴历:民间误称,农历本属阴阳合历,只是农历日期基本对应月圆月缺,阴历性质显而易见,故称
新历:新采用的历法        旧历:原有的旧历法;老历:类似旧历
国历:民国开始采用,现台湾沿用此名        夏历:一说始于夏朝历法,一说同夏正建寅(岁首寅月) &nbsp;
词条标签:
历法
合作编辑者:
破坏者榴弹枪
作者: zzz19760225     时间: 2016-2-9 06:51    标题: WIN7下CMD帮助文件1(1-2)

D:\>help
有关某个命令的详细信息,请键入 HELP 命令名
ASSOC          显示或修改文件扩展名关联。
ATTRIB         显示或更改文件属性。
BREAK          设置或清除扩展式 CTRL+C 检查。
BCDEDIT        设置启动数据库中的属性以控制启动加载。
CACLS          显示或修改文件的访问控制列表(ACL)。
CALL           从另一个批处理程序调用这一个。
CD             显示当前目录的名称或将其更改。
CHCP           显示或设置活动代码页数。
CHDIR          显示当前目录的名称或将其更改。
CHKDSK         检查磁盘并显示状态报告。
CHKNTFS        显示或修改启动时间磁盘检查。
CLS            清除屏幕。
CMD            打开另一个 Windows 命令解释程序窗口。
COLOR          设置默认控制台前景和背景颜色。
COMP           比较两个或两套文件的内容。
COMPACT        显示或更改 NTFS 分区上文件的压缩。
CONVERT        将 FAT 卷转换成 NTFS。您不能转换
               当前驱动器。
COPY           将至少一个文件复制到另一个位置。
DATE           显示或设置日期。
DEL            删除至少一个文件。
DIR            显示一个目录中的文件和子目录。
DISKCOMP       比较两个软盘的内容。
DISKCOPY       将一个软盘的内容复制到另一个软盘。
DISKPART       显示或配置磁盘分区属性。
DOSKEY         编辑命令行、调用 Windows 命令并创建宏。
DRIVERQUERY    显示当前设备驱动程序状态和属性。
ECHO           显示消息,或将命令回显打开或关上。
ENDLOCAL       结束批文件中环境更改的本地化。
ERASE          删除一个或多个文件。
EXIT           退出 CMD.EXE 程序(命令解释程序)。
FC             比较两个文件或两个文件集并显示它们之间的不同。
FIND           在一个或多个文件中搜索一个文本字符串。
FINDSTR        在多个文件中搜索字符串。
FOR            为一套文件中的每个文件运行一个指定的命令。
FORMAT         格式化磁盘,以便跟 Windows 使用。
FSUTIL         显示或配置文件系统的属性。
FTYPE          显示或修改用在文件扩展名关联的文件类型。
GOTO           将 Windows 命令解释程序指向批处理程序
               中某个带标签的行。
GPRESULT       显示机器或用户的组策略信息。
GRAFTABL       启用 Windows 在图形模式显示扩展字符集。
HELP           提供 Windows 命令的帮助信息。
ICACLS         显示、修改、备份或还原文件和
目录的 ACL。
IF             在批处理程序中执行有条件的处理过程。
LABEL          创建、更改或删除磁盘的卷标。
MD             创建一个目录。
MKDIR          创建一个目录。
MKLINK         创建符号链接和硬链接
MODE           配置系统设备。
MORE           逐屏显示输出。
MOVE           将一个或多个文件从一个目录移动到另一个目录。
OPENFILES      显示远程用户为了文件共享而打开的文件。
PATH           为可执行文件显示或设置搜索路径。
PAUSE          停止批处理文件的处理并显示信息。
POPD           还原由 PUSHD 保存的当前目录上一次的值。
PRINT          打印一个文本文件。
PROMPT         改变 Windows 命令提示。
PUSHD          保存当前目录,然后对其进行更改。
RD             删除目录。
RECOVER        从损坏的磁盘中恢复可读取的信息。
REM            记录批处理文件或 CONFIG.SYS 中的注释。
REN            重新命名文件。
RENAME         重新命名文件。
REPLACE        替换文件。
RMDIR          删除目录。
ROBOCOPY       复制文件和目录树的高级实用程序
SET            显示、设置或删除 Windows 环境变量。
SETLOCAL       开始用批文件改变环境的本地化。
SC             显示或配置服务(后台处理)。
SCHTASKS       安排命令和程序在一部计算机上按计划运行。
SHIFT          调整批处理文件中可替换参数的位置。
SHUTDOWN       让机器在本地或远程正确关闭。
SORT           将输入排序。
START          打开单独视窗运行指定程序或命令。
SUBST          将驱动器号与路径关联。
SYSTEMINFO     显示机器的具体的属性和配置。
TASKLIST       显示包括服务的所有当前运行的任务。
TASKKILL       终止正在运行的进程或应用程序。
TIME           显示或设置系统时间。
TITLE          设置 CMD.EXE 会话的窗口标题。
TREE           以图形显示启动器或路径的目录结构。
TYPE           显示文本文件的内容。
VER            显示 Windows 的版本。
VERIFY         告诉 Windows 验证文件是否正确写入磁盘。
VOL            显示磁盘卷标和序列号。
XCOPY          复制文件和目录树。
WMIC           在交互命令外壳里显示 WMI 信息。

有关工具的详细信息,请参阅联机帮助中的命令行参考。
D:\>help assoc
显示或修改文件扩展名关联

ASSOC [.ext[=[fileType]]]

  .ext      指定跟文件类型关联的文件扩展名
  fileType  指定跟文件扩展名关联的文件类型

键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展
名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为
文件类型指定任何参数,命令会删除文件扩展名的关联。

D:\>help attrib
显示或更改文件属性。

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
       [drive:][path][filename] [/S [/D] [/L]]
  + 设置属性。
  - 清除属性。
  R 只读文件属性。
  A 存档文件属性。
  S 系统文件属性。
  H 隐藏文件属性。
  I 无内容索引文件属性。
  [drive:][path][filename]
      指定 attrib 要处理的文件。
  /S 处理当前文件夹及其所有子文件夹中的匹配文件。
  /D 也处理文件夹。
  /L 处理符号链接和符号链接目标的属性。


D:\>help break
设置或清除 DOS 系统的扩展 CTRL+C 检测

这个命令是为了与 DOS 系统的兼容而保留的,在 Windows
里不起作用。

如果命令扩展被启用,并且操作平台是 Windows,
BREAK 命令会在被调试程序调试时输入一个硬代码中断点。

D:\>help bcdedit

BCDEDIT - 启动配置数据存储编辑器

Bcdedit.exe 命令行工具用于修改启动配置数据存储。
启动配置数据存储包含启动配置参数并控制操作系统的启动方式。这些参数以前位于
Boot.ini 文件中(在基于 BIOS 的操作系统中)或位于稳定 RAM 项中(在基于可扩展
固件接口的操作系统中)。可以使用 Bcdedit.exe 在启动配置数据存储中添加、删除、
编辑和附加项。

有关命令和选项的详细信息,请键入 bcdedit.exe /? <command>。
例如,若要显示有关 /createstore 命令的详细信息,请键入:

     bcdedit.exe /? /createstore

有关本帮助文件中按字母顺序排列的主题列表,请运行 "bcdedit /? TOPICS"。

对存储执行的命令
================================
/createstore    新建空的启动配置数据存储。
/export         将系统存储的内容导出到文件。以后可以使用该文件还原系统
                存储的状态。
/import         使用 /export 命令创建的备份文件来还原系统存储的状态。

/sysstore       设置系统存储设备(仅影响 EFI 系统,在重新启动后不再有效,
                且仅用于系统存储设备不确定的情况下)。

对存储中的项执行的命令
===========================================
/copy           复制存储中的项。
/create         在存储中新建项。
/delete         删除存储中的项。
/mirror         创建存储中项的镜像。

运行 bcdedit /? ID 可获得有关这些命令使用的标识符的信息。

对项选项执行的命令
======================================
/deletevalue    删除存储中的项选项。
/set            设置存储中的项选项值。

运行 bcdedit /? TYPES 可获得这些命令使用的数据类型的列表。
运行 bcdedit /? FORMATS 可获得有效数据格式的列表。

控制输出的命令
============================
/enum           列出存储中的项。
/v              命令行选项,完整显示项标识符,而不是使用已知标识符的名称。

                单独使用命令 /v 可完整显示活动类型的项标识符。

单独运行 "bcdedit" 等同于运行 "bcdedit /enum ACTIVE"。

控制启动管理器的命令
======================================
/bootsequence   为启动管理器设置一次性启动序列。
/default        设置启动管理器将使用的默认项。
/displayorder   设置启动管理器显示多重引导菜单的顺序。
/timeout        设置启动管理器的超时值。
/toolsdisplayorder  设置启动管理器显示工具菜单的顺序。

控制启动应用程序紧急管理服务的命令
==========================================================================
/bootems        启用或禁用启动应用程序的紧急管理服务。
/ems            启用或禁用操作系统项的紧急管理服务。
/emssettings    设置全局紧急管理服务参数。

控制调试的命令
==============================
/bootdebug      启用或禁用启动应用程序的启动调试。
/dbgsettings    设置全局调试程序参数。
/debug          启用或禁用操作系统项的内核调试。
/hypervisorsettings  设置虚拟机监控程序的参数。


D:\>help cacls

注意: 不推荐使用 Cacls,请使用 Icacls。

显示或者修改文件的访问控制列表(ACL)

CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
        [/R user [...]] [/P user:perm [...]] [/D user [...]]
    filename      显示 ACL。
    /T            更改当前目录及其所有子目录中
                  指定文件的 ACL。
    /L            对照目标处理符号链接本身
    /M            更改装载到目录的卷的 ACL
    /S            显示 DACL 的 SDDL 字符串。
    /S:SDDL       使用在 SDDL 字符串中指定的 ACL 替换 ACL。
                  (/E、/G、/R、/P 或 /D 无效)。
    /E            编辑 ACL 而不替换。
    /C            在出现拒绝访问错误时继续。
    /G user:perm  赋予指定用户访问权限。
                  Perm 可以是: R  读取
                               W  写入
                               C  更改(写入)
                               F  完全控制
    /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
    /P user:perm  替换指定用户的访问权限。
                  Perm 可以是: N  无
                               R  读取
                               W  写入
                               C  更改(写入)
                               F  完全控制
    /D user       拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。
也可以在命令中指定多个用户。

缩写:
    CI - 容器继承。
         ACE 会由目录继承。
    OI - 对象继承。
         ACE 会由文件继承。
    IO - 只继承。
         ACE 不适用于当前文件/目录。
    ID - 已继承。
         ACE 从父目录的 ACL 继承。

D:\>help call
从批处理程序调用另一个批处理程序。

CALL [drive:][path]filename [batch-parameters]

  batch-parameters   指定批处理程序所需的命令行信息。

如果命令扩展被启用,CALL 会如下改变:

CALL 命令现在将卷标当作 CALL 的目标接受。语法是:

    CALL:label arguments

一个新的批文件上下文由指定的参数所创建,控制在卷标被指定
后传递到语句。您必须通过达到批脚本文件末两次来 "exit" 两次。
第一次读到文件末时,控制会回到 CALL 语句的紧后面。第二次
会退出批脚本。键入 GOTO /?,参看 GOTO :EOF 扩展的描述,
此描述允许您从一个批脚本返回。

另外,批脚本文本参数参照(%0、%1、等等)已如下改变:


     批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)

     批参数(%n)的替代已被增强。您可以使用以下语法:

         %~1         - 删除引号("),扩展 %1
         %~f1        - 将 %1 扩展到一个完全合格的路径名
         %~d1        - 仅将 %1 扩展到一个驱动器号
         %~p1        - 仅将 %1 扩展到一个路径
         %~n1        - 仅将 %1 扩展到一个文件名
         %~x1        - 仅将 %1 扩展到一个文件扩展名
         %~s1        - 扩展的路径只含有短名
         %~a1        - 将 %1 扩展到文件属性
         %~t1        - 将 %1 扩展到文件的日期/时间
         %~z1        - 将 %1 扩展到文件的大小
         %~$PATH:1   - 查找列在 PATH 环境变量的目录,并将 %1
                       扩展到找到的第一个完全合格的名称。如果
                       环境变量名未被定义,或者没有找到文件,
                       此修改符会扩展到空字符串

    可以组合修改符来取得多重结果:

        %~dp1       - 只将 %1 扩展到驱动器号和路径
        %~nx1       - 只将 %1 扩展到文件名和扩展名
        %~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,
                      并扩展到找到的第一个文件的驱动器号和路径。
        %~ftza1     - 将 %1 扩展到类似 DIR 的输出行。

    在上面的例子中,%1 和 PATH 可以被其他有效数值替换。
    %~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*
    使用

D:\> help cd
显示当前目录名或改变当前目录。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]

  ..   指定要改成父目录。

键入 CD drive: 显示指定驱动器中的当前目录。
不带参数只键入 CD,则显示当前驱动器和目录。

使用 /D 开关,除了改变驱动器的当前目录之外,
还可改变当前驱动器。

如果命令扩展被启用,CHDIR 会如下改变:

当前的目录字符串会被转换成使用磁盘名上的大小写。所以,
如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为
C:\Temp。

CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个
带有空格但不带有引号的子目录名。例如:

     cd \winnt\profiles\username\programs\start menu

与下列相同:

     cd "\winnt\profiles\username\programs\start menu"

在扩展停用的情况下,您必须键入以上命令。


D:\>help chcp
显示或设置活动代码页编号。

CHCP [nnn]

  nnn   指定代码页编号。

不带参数键入 CHCP 以显示活动代码页编号。

D:\>help chdir
显示当前目录名或改变当前目录。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]

  ..   指定要改成父目录。

键入 CD drive: 显示指定驱动器中的当前目录。
不带参数只键入 CD,则显示当前驱动器和目录。

使用 /D 开关,除了改变驱动器的当前目录之外,
还可改变当前驱动器。

如果命令扩展被启用,CHDIR 会如下改变:

当前的目录字符串会被转换成使用磁盘名上的大小写。所以,
如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为
C:\Temp。

CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个
带有空格但不带有引号的子目录名。例如:

     cd \winnt\profiles\username\programs\start menu

与下列相同:

     cd "\winnt\profiles\username\programs\start menu"

在扩展停用的情况下,您必须键入以上命令。

D:\>start

D:\>help chkdsk
检查磁盘并显示状态报告。


CHKDSK [volume[[path]filename]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]] [/B]


  volume         指定驱动器号(后面跟一个冒号)、
装入点或卷名。
  filename        仅用于 FAT/FAT32: 指定要检查是否有碎片的文件。
  /F              修复磁盘上的错误。
  /V              在 FAT/FAT32 上: 显示磁盘上每个文件的
完整路径和名称。
                  在 NTFS 上: 如果有清除消息,则显示。
  /R              查找损坏的扇区并恢复可读信息
                  (隐含 /F)。
  /L:size         仅用于 NTFS:  将日志文件大小更改为指定的 KB 数。如果未
                  指定大小,则显示当前
                  大小。
  /X              如果必要,则先强制卸除卷。
                  该卷的所有打开句柄都会无效
                  (隐含 /F)。
  /I              仅用于 NTFS: 对索引项进行强度较小的检查。
  /C              仅用于 NTFS: 跳过文件夹结构的
                  循环检查。
  /B              仅用于 NTFS: 重新评估该卷上的坏簇
                  (隐含 /R)

/I 或 /C 开关通过跳过对该卷的某些检查,
可减少运行 Chkdsk 所需的时间。

D:\>help chkntfs
启动时显示或修改磁盘检查。

CHKNTFS volume [...]
CHKNTFS /D
CHKNTFS /T[:time]
CHKNTFS /X volume [...]
CHKNTFS /C volume [...]

  volume         指定驱动器号(后面跟一个冒号)、装入点或卷名。
  /D             将计算机还原为默认行为;
                 启动时检查所有驱动器,并对有问题的驱动器运行 chkdsk。
  /T:time        将 AUTOCHK 初始递减计数时间
                 更改为指定的时间,单位为秒。
                 如果没有指定时间,则显示当前设置。
  /X             将驱动器排除在启动时检查范围之外。被排除的驱动器在命令调用之间
不会
                 累计。
  /C             安排驱动器在启动时检查;
                 如果驱动器有问题,则运行 chkdsk。

如果未指定开关,CHKNTFS 将显示指定的驱动器是否有问题
或者是否计划在下一次重新启动时执行检查。

D:\>help cls
清除屏幕。

CLS

D:\>help cmd
启动 Windows 命令解释器的一个新实例

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      执行字符串指定的命令然后终止
/K      执行字符串指定的命令但保留
/S      修改 /C 或 /K 之后的字符串处理(见下)
/Q      关闭回显
/D      禁止从注册表执行 AutoRun 命令(见下)
/A      使向管道或文件的内部命令输出成为 ANSI
/U      使向管道或文件的内部命令输出成为
        Unicode
/T:fg   设置前台/背景颜色(详细信息见 COLOR /?)
/E:ON   启用命令扩展(见下)
/E:OFF  禁用命令扩展(见下)
/F:ON   启用文件和目录名完成字符(见下)
/F:OFF  禁用文件和目录名完成字符(见下)
/V:ON   使用 ! 作为分隔符启用延迟的环境变量
        扩展。例如,/V:ON 会允许 !var! 在执行时
        扩展变量 var。var 语法会在输入时
        扩展变量,这与在一个 FOR
        循环内不同。
/V:OFF  禁用延迟的环境扩展。

注意,如果字符串加有引号,可以接受用命令分隔符 "&&"
分隔多个命令。另外,由于兼容性
原因,/X 与 /E:ON 相同,/Y 与 /E:OFF 相同,且 /R 与
/C 相同。任何其他开关都将被忽略。

如果指定了 /C 或 /K,则会将该开关之后的
命令行的剩余部分作为一个命令行处理,其中,会使用下列逻辑
处理引号(")字符:

    1.  如果符合下列所有条件,则会保留
        命令行上的引号字符:

        - 不带 /S 开关
        - 正好两个引号字符
        - 在两个引号字符之间无任何特殊字符,
          特殊字符指下列字符: &<>()@^|
        - 在两个引号字符之间至少有
          一个空格字符
        - 在两个引号字符之间的字符串是某个
          可执行文件的名称。

    2.  否则,老办法是看第一个字符
        是否是引号字符,如果是,则去掉首字符并
        删除命令行上最后一个引号,保留
        最后一个引号之后的所有文本。

如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找
以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或
两个都存在,这两个变量会先被执行。

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

命令扩展是按默认值启用的。您也可以使用 /E:OFF ,为某一
特定调用而停用扩展。您
可以在机器上和/或用户登录会话上
启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用
REGEDIT.EXE 的注册表中的一个或两个 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

到 0x1 或 0x0。用户特定设置
比机器设置有优先权。命令行
开关比注册表设置有优先权。

在批处理文件中,SETLOCAL ENABLEEXTENSIONS 或 DISABLEEXTENSIONS 参数
比 /E:ON 或 /E:OFF 开关有优先权。请参阅 SETLOCAL /? 获取详细信息。

命令扩展包括对下列命令所做的
更改和/或添加:

    DEL or ERASE
    COLOR
    CD or CHDIR
    MD or MKDIR
    PROMPT
    PUSHD
    POPD
    SET
    SETLOCAL
    ENDLOCAL
    IF
    FOR
    CALL
    SHIFT
    GOTO
    START (同时包括对外部命令调用所做的更改)
    ASSOC
    FTYPE

有关特定详细信息,请键入 commandname /? 查看。

延迟环境变量扩展不按默认值启用。您
可以用/V:ON 或 /V:OFF 开关,为 CMD.EXE 的某个调用而
启用或停用延迟环境变量扩展。您
可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有
调用的延迟扩展,这要通过设置使用 REGEDIT.EXE 的注册表中的
一个或两个 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

到 0x1 或 0x0。用户特定设置
比机器设置有优先权。命令行开关
比注册表设置有优先权。

在批处理文件中,SETLOCAL ENABLEDELAYEDEXPANSION 或 DISABLEDELAYEDEXPANSION
参数比 /V:ON 或 /V:OFF 开关有优先权。请参阅 SETLOCAL /?
获取详细信息。

如果延迟环境变量扩展被启用,
惊叹号字符可在执行时间被用来
代替一个环境变量的数值。

您可以用 /F:ON 或 /F:OFF 开关为 CMD.EXE 的某个
调用而启用或禁用文件名完成。您可以在计算上和/或
用户登录会话上启用或禁用 CMD.EXE 所有调用的完成,
这可以通过使用 REGEDIT.EXE 设置注册表中的下列
REG_DWORD 的全部或其中之一:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

由一个控制字符的十六进制值作为一个特定参数(例如,0x4
是Ctrl-D,0x6 是 Ctrl-F)。用户特定设置优先于机器设置。
命令行开关优先于注册表设置。

如果完成是用 /F:ON 开关启用的,两个要使用的控制符是:
目录名完成用 Ctrl-D,文件名完成用 Ctrl-F。要停用
注册表中的某个字符,请用空格(0x20)的数值,因为此字符
不是控制字符。

如果键入两个控制字符中的一个,完成会被调用。完成功能将
路径字符串带到光标的左边,如果没有通配符,将通配符附加
到左边,并建立相符的路径列表。然后,显示第一个相符的路
径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,
重复按同一个控制字符会循环显示相符路径的列表。将 Shift
键跟控制字符同时按下,会倒着显示列表。如果对该行进行了
任何编辑,并再次按下控制字符,保存的相符路径的列表会被
丢弃,新的会被生成。如果在文件和目录名完成之间切换,会
发生同样现象。两个控制字符之间的唯一区别是文件完成字符
符合文件和目录名,而目录完成字符只符合目录名。如果文件
完成被用于内置式目录命令(CD、MD 或 RD),就会使用目录
完成。
用引号将相符路径括起来,完成代码可以正确处理含有空格
或其他特殊字符的文件名。同时,如果备份,然后从行内调用
文件完成,完成被调用时位于光标右方的文字会被调用。

需要引号的特殊字符是:
     <space>
     ()[]{}^=;!'+,`~(&()


D:\>help color
设置默认的控制台前景和背景颜色。

COLOR [attr]

  attr        指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:

    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时
的颜色。这个值来自当前控制台窗口、/T 命令行开关或
DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令
会将 ERRORLEVEL 设置为 1。

例如: "COLOR fc" 在亮白色上产生亮红色

D:\>help comp
比较两个文件或两个文件集的内容。

COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]]

  data1      指定要比较的第一个文件的位置和名称。
  data2      指定要比较的第二个文件的位置和名称。
  /D         以十进制格式显示差异。
  /A         以 ASCII 字符显示差异。
  /L         显示不同的行数。
  /N=number  只比较每个文件中第一个指定的行数。
  /C         比较文件时 ASCII 字母不区分大小写。
  /OFF[LINE] 不要跳过带有脱机属性集的文件。

要比较文件集,请在 data1 和 data2 参数中使用通配符。

D:\>help compact
显示或改变 NTFS 分区上文件的压缩.

COMPACT [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [filename [...]]

  /C        压缩指定的文件。会给目录作标记,这样以后添加的文件
            会得到压缩。
  /U        解压缩指定的文件。会给目录作标记,这样以后添加的文
            件不会得到压缩。
  /S        在指定的目录和所有子目录中的文件上执行指定操作。
            默认 "dir"是当前目录。
  /A        显示具有隐藏或系统属性的文件。在默认
            情况下,这些文件都是被忽略的。
  /I        即使在错误发生后,依然继续执行指定的操作。在默认情况
            下,COMPACT 在遇到错误时会停止。
  /F        在所有指定文件上强制压缩操作,包括已被压缩的文件。
            在默认情况下,已经压缩的文件被忽略。
  /Q        只报告最重要的信息。
  filename  指定类型、文件和目录。

  不跟参数一起使用时,COMPACT 显示当前目录及其所含文件的
  压缩状态。您可以使用多个文件名和通配符。在多个参数之间
  必须加空格。

D:\>help convvert
帮助工具不支持此命令。请尝试“convvert /?”。

D:\>help convert
将 FAT 卷转换为 NTFS。

CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]


  volume      指定驱动器号(后面跟一个冒号)、装入点或卷名。
  /FS:NTFS    指定要将此卷转换为 NTFS。
  /V          指定将在详细模式下运行 Convert。
  /CvtArea:filename
              指定根目录中的一个连续文件,该文件
              将是 NTFS 系统文件的占位符。
  /NoSecurity 指定所有用户均可以访问
              转换文件和目录的安全设置。
  /X          如果必要,请先强制卸除卷。
              该卷的所有打开句柄将会无效。


D:\>help copy
将一份或多份文件复制到另一个位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
     [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

  source       指定要复制的文件。
  /A           表示一个 ASCII 文本文件。
  /B           表示一个二进位文件。
  /D           允许解密要创建的目标文件
  destination  为新文件指定目录和/或文件名。
  /V           验证新文件写入是否正确。
  /N           复制带有非 8dot3 名称的文件时,
               尽可能使用短文件名。
  /Y           不使用确认是否要覆盖现有目标文件
               的提示。
  /-Y          使用确认是否要覆盖现有目标文件
               的提示。
  /Z           用可重新启动模式复制已联网的文件。
/L           如果源是符号链接,请将链接复制
               到目标而不是源链接指向的实际文件。

命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。
这可能会被命令行上的 /-Y 替代。除非 COPY
命令是在一个批处理脚本中执行的,默认值应为
在覆盖时进行提示。

要附加文件,请为目标指定一个文件,为源指定
数个文件(用通配符或 file1+file2+file3 格式)。

D:\>help date
显示或设置日期。

DATE [/T | date]

显示当前日期设置和输入新日期的提示,请键入
不带参数的 DATE。要保留现有日期,请按 Enter。

如果命令扩展被启用,DATE 命令会支持 /T 开关;
该开关指示命令只输出当前日期,但不提示输入新日期。

D:\>help del
删除一个或数个文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一个或多个文件或者目录列表。
                通配符可用来删除多个文件。
                如果指定了一个目录,该目录中的所
                有文件都会被删除。

  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件
  属性          R  只读文件                     S  系统文件
                H  隐藏文件                     A  存档文件
                I  无内容索引文件               L  重分析点
                -  表示“否”的前缀

如果命令扩展被启用,DEL 和 ERASE 更改如下:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

D:\>help dir
显示目录中的文件和子目录列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]
              指定要列出的驱动器、目录和/或文件。

  /A          显示具有指定属性的文件。
  属性         D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            I  无内容索引文件
               L  解析点             -  表示“否”的前缀
  /B          使用空格式(没有标题信息或摘要)。
  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
              禁用分隔符显示。
  /D          跟宽式相同,但文件是按栏分类列出的。
  /L          用小写。
  /N          新的长列表格式,其中文件名在最右边。
  /O          用分类顺序列出文件。
  排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  反转顺序的前缀
  /P          在每个信息屏幕后暂停。
  /Q          显示文件所有者。
  /R          显示文件的备用数据流。
  /S          显示指定目录和所有子目录中的文件。
  /T          控制显示或用来分类的时间字符域。
  时间段      C  创建时间
              A  上次访问时间
              W  上次写入的时间
  /W          用宽列表格式。
  /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,
              短名称插在长名称前面。如果没有短名称,在其位置则
              显示空白。
  /4          用四位数字显示年

可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)
来替代预先设定的开关。例如,/-W。

D:\>help diskcomp
比较两张软盘的内容。

DISKCOMP [drive1: [drive2:]]


D:\>help diskcopy
把一张软盘的内容复制到另一张。

DISKCOPY [drive1: [drive2:]] [/V]

  /V   验证信息是否已正确复制。

两张软盘的类型必须相同。
您可以为 drive1 和 drive2 指定同样的驱动器。

D:\>help diskpart

Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: 2012-20150127UX

Microsoft DiskPart 语法:
        diskpart [/s <script>] [/?]

        /s <script> - 使用一个 DiskPart 脚本。
        /?          - 显示这个帮助屏幕。

D:\>help doskey
编辑命令行,重新调用 Windows 命令,并创建宏。

DOSKEY [/REINSTALL] [/LISTSIZE=size] [/MACROS[:ALL | :exename]]
  [/HISTORY] [/INSERT | /OVERSTRIKE] [/EXENAME=exename] [/MACROFILE=filename]
  [macroname=[text]]

  /REINSTALL          安装新的 Doskey 副本。
  /LISTSIZE=size      设置命令历史记录的缓冲区大小。
  /MACROS             显示所有 Doskey 宏。
  /MACROS:ALL         为具有 Doskey 宏的所有可执行文件显示
所有 Doskey 宏。
  /MACROS:exename     显示指定可执行文件的所有 Doskey 宏。
  /HISTORY            显示存储在内存中的所有命令。
  /INSERT             指定您键入的新文本插入到旧文本中。
  /OVERSTRIKE         指定新文本覆盖旧文本。
  /EXENAME=exename    指定可执行文件。
  /MACROFILE=filename 指定要安装的宏文件。
  macroname           指定您创建的宏的名称。
  text                指定要录制的命令。

上下箭头 重新调用命令;Esc 清除命令行;F7
显示命令历史记录;Alt+F7 清除
命令历史记录;F8 搜索命令历史记录;F9 按编号选择命令;Alt+F10 清除宏定义。

以下是 Doskey 宏定义的一些特殊代码:
$T     命令分隔符。允许一个宏中存在多个命令。
$1-$9  批处理参数。与批处理程序中的 %1-%9 等同。
$*     以命令行中命令名称后面的任何内容替换的符号。

D:\>help driverquery

DRIVERQUERY [/S system [/U username [/P [password]]]]
              [/FO format] [/NH] [/SI] [/V]
描述:
    允许管理员显示已安装设备驱动程序
    的列表。

参数列表:
      /S     system           指定要连接到的远程系统。

      /U     [domain\]user    执行命令执行的用户上下文。

      /P     [password]       指定所给用户上下文的密码。

      /FO    format           指定要显示的结果类型。与命令行开关一起传递
                              的有效值是 "TABLE"、"LIST"、" CSV"。

      /NH                     指定“列标题”不应该在屏幕输出中
                              出现。只对 "TABLE" 和 "CSV" 格式有效。

      /SI                     提供有关已签名驱动程序的信息。

      /V                      显示详细任务输出。对签名的驱动程序无效。

      /?                      显示该帮助消息。

示例:
    DRIVERQUERY
    DRIVERQUERY /FO CSV /SI
    DRIVERQUERY /NH
    DRIVERQUERY /S ipaddress /U user /V
    DRIVERQUERY /S system /U domain\user /P password /FO LIST

D:\>help echo
显示信息,或将命令回显打开或关上。

  ECHO [ON | OFF]
  ECHO [message]

要显示当前回显设置,键入不带参数的 ECHO。

D:\>help endlocal
结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后
所做的环境改动不再仅限于批处理文件。批处理文件结束后,
原先的设置无法还原。

ENDLOCAL

如果命令扩展被启用,ENDLOCAL 会如下改变:

如果相应的 SETLOCAL 用新的 ENABLEEXTENSIONS 或
DISABLEEXTENSIONS 选项启用或停用了命令扩展,那么,在
ENDLOCAL 之后,命令扩展的启用/停用状态会还原到执行
相应的 SETLOCAL 命令前的状态。

D:\>help erase
删除一个或数个文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一个或多个文件或者目录列表。
                通配符可用来删除多个文件。
                如果指定了一个目录,该目录中的所
                有文件都会被删除。

  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件
  属性          R  只读文件                     S  系统文件
                H  隐藏文件                     A  存档文件
                I  无内容索引文件               L  重分析点
                -  表示“否”的前缀

如果命令扩展被启用,DEL 和 ERASE 更改如下:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

D:\>help exit
退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。

EXIT [/B] [exitCode]

  /B          指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个
              批处理脚本外执行,则会退出 CMD.EXE

  exitCode    指定一个数字号码。如果指定了 /B,将 ERRORLEVEL
              设成那个数字。如果退出 CMD.EXE,则用那个数字设置
              过程退出代码。


D:\>help fc
比较两个文件或两个文件集并显示它们之间
的不同


FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
   [drive1:][path1]filename1 [drive2:][path2]filename2
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

  /A         只显示每个不同处的第一行和最后一行。
  /B         执行二进制比较。
  /C         不分大小写。
  /L         将文件作为 ASCII 文字比较。
  /LBn       将连续不匹配的最大值设置为指定
             的行数。
  /N         在 ASCII 比较上显示行数。
  /OFF[LINE] 不要跳过带有脱机属性集的文件。
  /T         不要将制表符扩充到空格。
  /U         将文件作为 UNICODE 文本文件比较。
  /W         为了比较而压缩空白(制表符和空格)。
  /nnnn      指定不匹配处后必须连续
             匹配的行数。
  [drive1:][path1]filename1
             指定要比较的第一个文件或第一个文件集。
  [drive2:][path2]filename2
             指定要比较的第二个文件或第二个文件集。


D:\>help find
在文件中搜索字符串。

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         显示所有未包含指定字符串的行。
  /C         仅显示包含字符串的行数。
  /N         显示行号。
  /I         搜索字符串时忽略大小写。
  /OFF[LINE] 不要跳过具有脱机属性集的文件。
  "string" 指定要搜索的文本字符串。
  [drive:][path]filename
             指定要搜索的文件。

如果没有指定路径,FIND 将搜索在提示符处键入
的文本或者由另一命令产生的文本。

D:\>help findstr
在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         在一行的开始配对模式。
  /E         在一行的结尾配对模式。
  /L         按字使用搜索字符串。
  /R         将搜索字符串作为一般表达式使用。
  /S         在当前目录和所有子目录中搜索匹配文件。
  /I         指定搜索不分大小写。
  /X         打印完全匹配的行。
  /V         只打印不包含匹配的行。
  /N         在匹配的每行前打印行数。
  /M         如果文件含有匹配项,只打印其文件名。
  /O         在每个匹配行前打印字符偏移量。
  /P         忽略有不可打印字符的文件。
  /OFF[LINE] 不跳过带有脱机属性集的文件。
  /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
  /F:file    从指定文件读文件列表 (/ 代表控制台)。
  /C:string  使用指定字符串作为文字搜索字符串。
  /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
  /D:dir     查找以分号为分隔符的目录列表
  strings    要查找的文字。
  [drive:][path]filename
             指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
"hello there"。

一般表达式的快速参考:
  .        通配符: 任何字符
  *        重复: 以前字符或类出现零或零以上次数
  ^        行位置: 行的开始
  $        行位置: 行的终点
  [class]  字符类: 任何在字符集中的字符
  [^class] 补字符类: 任何不在字符集中的字符
  [x-y]    范围: 在指定范围内的任何字符
  \x       Escape: 元字符 x 的文字用法
  \<xyz    字位置: 字的开始
  xyz\>    字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。

D:\>help for
对一组文件中的每一个文件执行某个特定命令。

FOR %variable IN (set) DO command [command-parameters]

  %variable  指定一个单一字母可替换的参数。
  (set)      指定一个或一组文件。可以使用通配符。
  command    指定对每个文件执行的命令。
  command-parameters
             为特定命令指定参数或命令行开关。

在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

如果启用命令扩展,则会支持下列 FOR 命令的其他格式:

FOR /D %variable IN (set) DO command [command-parameters]

    如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
    如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
    则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

    该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
    1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    或者,如果有 usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
    每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
    然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环

    以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
    或多个指定不同解析选项的关键字。这些关键字为:

        eol=c           - 指一个行注释字符的结尾(就一个)
        skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                          默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                          的 for 本身。这会导致额外变量名称的分配。m-n
                          格式为一个范围。通过 nth 符号指定 mth。如果
                          符号字符串中的最后一个字符星号,
                          那么额外的变量将在最后一个符号解析之后
                          分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 file-set
                          中使用双引号扩起文件名称。

    某些范例可能有助:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
    每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或
    空格分隔符号。请注意,此 for 函数体的语句引用 %i 来
    获得第二个符号,引用 %j 来获得第三个符号,引用 %k
    来获得第三个符号后的所有剩余符号。对于带有空格的文件
    名,您需要用双引号将文件名括起来。为了用这种方式来使
    用双引号,还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。

    %i 在 for 语句中显式声明,%j 和 %k 是通过
    tokens= 选项隐式声明的。可以通过 tokens= 一行
    指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或
    "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;
    而且,不能同时使用超过 52 个。

    还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,
    用单引号将括号之间的 file-set 括起来。这样,该字符
    串会被当作一个文件中的一个单一输入行进行解析。

    最后,可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 file-set 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到
    内存中,并被当作文件分析。如以下例子所示:

      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

    会枚举当前环境中的环境变量名称。

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     %~I          - 删除任何引号("),扩展 %I
     %~fI        - 将 %I 扩展到一个完全合格的路径名
     %~dI        - 仅将 %I 扩展到一个驱动器号
     %~pI        - 仅将 %I 扩展到一个路径
     %~nI        - 仅将 %I 扩展到一个文件名
     %~xI        - 仅将 %I 扩展到一个文件扩展名
     %~sI        - 扩展的路径只含有短名
     %~aI        - 将 %I 扩展到文件的文件属性
     %~tI        - 将 %I 扩展到文件的日期/时间
     %~zI        - 将 %I 扩展到文件的大小
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩展到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩展到一个驱动器号和路径
     %~nxI       - 仅将 %I 扩展到一个文件名和扩展名
     %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
     %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个驱动器号和路径。
     %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。

D:\>help foemat
帮助工具不支持此命令。请尝试“foemat /?”。

D:\>help format
格式化磁盘以供 Windows 使用。

FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X] [/P:passes]
[/S:state]
FORMAT volume [/V:label] [/Q] [/F:size] [/P:passes]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] [/P:passes]
FORMAT volume [/V:label] [/Q] [/P:passes]
FORMAT volume [/Q]

  volume          指定驱动器号(后面跟一个冒号)、装入点或卷名。
  /FS:filesystem 指定文件系统的类型(FAT、FAT32、exFAT、NTFS、或 UDF)。
  /V:label        指定卷标。
  /Q              执行快速格式化。请注意,此开关可替代 /P。
  /C              仅适于 NTFS: 默认情况下,将压缩在该新建卷上创建的
                  文件。
  /X              如果必要,请先强制卸除卷。该卷的所有打开句柄
                  不再有效。
  /R:revision     仅 UDF: 强制格式化为特定的 UDF 版本
                  (1.02、1.50、2.00、2.01、2.50)。
                  默认 修订版为 2.01。
  /D              仅适用于 UDF 2.50: 将复制元数据。
  /A:size         替代默认分配单元大小。强烈建议您在通常情况下使用默认 设置。
                  NTFS 支持 512、1024、2048、4096、8192、16K、32K、64K。
                  FAT 支持 512、1024、2048、4096、8192、16K、32K、64k,
                  (128k、256k 用于大于 512 个字节的扇区)。 FAT32 支持 512、
                  1024、2048、4096、8192、16k、32k、64k, (128k 、256k 用于
                  大于 512 个字节的扇区)。EXFAT 支持 512、1024、2048、4096、
                  8192、16K、32K、64K、 128K、256K、512k、1M、2M、4M、8M、16M、
                  32M。

                  请注意,FAT 及 FAT32 文件系统对卷上的群集数量施加以下限制:

                  FAT: 群集数量 <= 65526 FAT32: 65526 < 群集数量 < 4177918

                  如果判定使用指定的群集大小无法满足以上需求,将立即停止格式化。


                  大于 4096 的分配单元大小不支持 NTFS 压缩。

  /F:size 指定要格式化的软盘大小(1.44)
  /T:tracks       为磁盘指定每面磁道数。
  /N:sectors      指定每条磁道的扇区数。
  /P:passes       将卷上每个扇区的操作次数清零。
                  此开关对 /Q 无效
  /S:state        其中 "state" 为 "enable" 或 "disable"
                  默认情况下启用了短名称


D:\>help fsutil
/? 是无效参数。
---- 支持的命令 ----

8dot3name       8dot3name 管理
behavior        控制文件系统行为
dirty           管理卷的已损坏位数
file            文件特定命令
fsinfo          文件系统信息
hardlink        硬链接管理
objectid        对象 ID 管理
quota           配额管理
repair          自疗管理
reparsepoint    重分析点管理
resource        事务资源管理器管理
sparse          稀疏文件控制
transaction     事务管理
usn             USN 管理
volume          卷管理

D:\>help ftype
显示或修改用在文件扩展名关联中的文件类型

FTYPE [fileType[=[openCommandString]]]

  fileType  指定要检查或改变的文件类型
  openCommandString 指定调用这类文件时要使用的开放式命令。

键入 FTYPE 而不带参数来显示当前有定义的开放式命令字符串的
文件类型。FTYPE 仅用一个文件类型启用时,它显示那个文件类
型目前的开放式命令字符串。如果不为开放式命令字符串指定,
FTYPE 命令将删除那个文件类型的开放式命令字符串。在一个
开放式命令字符串之内,命令字符串 %0 或 %1 被通过关联调用
的文件名所代替。%* 得到所有的参数,%2 得到第一个参数,
%3 得到第二个,等等。%~n 得到其余所有以 nth 参数打头的
参数;n 可以是从 2 到 9 的数字。例如:

    ASSOC .pl=PerlScript
    FTYPE PerlScript=perl.exe %1 %*

允许您启用以下 Perl 脚本:

    script.pl 1 2 3

如果不想键入扩展名,则键入以下字符串:

    set PATHEXT=.pl;%PATHEXT%

被启动的脚本如下:

    script 1 2 3

D:\>help goto
将 cmd.exe 定向到批处理程序中带标签的行。

GOTO label

  label   指定批处理程序中用作标签的文字字符串。

标签必须单独一行,并且以冒号打头。

如果命令扩展被启用,GOTO 会如下改变:

GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前
批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的
办法。有关能使该功能有用的 CALL 命令的扩展描述,请键入
CALL /?。

D:\>help gpresult

GPRESULT [/S system [/U username [/P [password]]]] [/SCOPE scope]
           [/USER targetusername] [/R | /V | /Z] [(/X | /H) <filename> [/F]]

描述:
    此命令行工具显示目标用户和计算机的策略结果集 (RSoP) 的信息。

参数列表:
    /S        system           指定要连接到的远程系统。

    /U        [domain\]user    指定命令应在其下执行的
                               用户上下文。
                               无法与 /X、/H 一起使用。

    /P        [password]       为给定的用户上下文指定密码。如果省
                               略则提示输入。
                               无法与 /X、/H 一起使用。

    /SCOPE    scope            指定是显示用户还是计算机设置。
                               有效值: "USER","COMPUTER"。

    /USER     [domain\]user    指定要显示 RSOP 的用户名称。



    /X        <filename>       以 XML 格式将报告保存该位置,
                               并使用由
                               <filename> 参数指定的文件名。(在 Windows
                               Vista SP1 和更高版本以及 Windows Server 2008 和更
高版本中有效)

    /H        <filename>       以 HTML 格式将报告保存该位置,
                               并使用由
                               <filename> 参数指定的文件名。(在 Windows
                               Vista SP1 和更高版本以及 Windows Server 2008 和更
高版本中有效)

    /F                         强制 gpresult 覆盖在
                               /X 或 /H 命令中指定的文件名。

    /R                         显示 RSoP 摘要数据。

    /V                         指定要显示详细信息。详细信息提供
                               已经应用的、优先权是 1 的详细设置。



    /Z                         指定显示超详细信息。超详细信息提供其他
                               详细设置,用 1 或更高的优先权应用于此
                               设置。这允许您查看是否在多处设置了某一
                               设置。请参阅组策略联机帮助主题获得更多
                               信息。




    /?                         显示该帮助消息。


示例:
    GPRESULT /R
    GPRESULT /H GPReport.html
    GPRESULT /USER targetusername /V
    GPRESULT /S system /USER targetusername /SCOPE COMPUTER /Z
    GPRESULT /S system /U username /P password /SCOPE USER /V

D:\>help graftabl
Enable Windows to display an extended character set in graphics mode.

GRAFTABL [xxx]
GRAFTABL /STATUS

   xxx      Specifies a code page number.
   /STATUS  Displays the current code page selected for use with GRAFTABL.


D:\>help help
提供 Windows 命令的帮助信息。

HELP [command]

    command - 显示该命令的帮助信息。

D:\>help icacls

ICACLS name /save aclfile [/T] [/C] [/L] [/Q]
    将匹配名称的文件和文件夹的 DACL 存储到 aclfile 中以便将来与
    /restore 一起使用。请注意,未保存 SACL、所有者或完整性标签。

ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile
                 [/C] [/L] [/Q]
    将存储的 DACL 应用于目录中的文件。

ICACLS name /setowner user [/T] [/C] [/L] [/Q]
    更改所有匹配名称的所有者。该选项不会强制更改所有身份;
    使用 takeown.exe 实用程序可实现该目的。

ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
    查找包含显式提及 SID 的 ACL 的所有匹配名称。

ICACLS name /verify [/T] [/C] [/L] [/Q]
    查找其 ACL 不规范或长度与 ACE 计数不一致的所有文件。

ICACLS name /reset [/T] [/C] [/L] [/Q]
    为所有匹配文件使用默认继承的 ACL 替换 ACL。

ICACLS name [/grant[:r] Sid:perm[...]]
       [/deny Sid:perm [...]]
       [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L]
       [/setintegritylevel Level:policy[...]]

    /grant[:r] Sid:perm 授予指定的用户访问权限。如果使用 :r,
        这些权限将替换以前授予的所有显式权限。
        如果不使用 :r,这些权限将添加到以前授予的所有显式权限。

    /deny Sid:perm 显式拒绝指定的用户访问权限。
        将为列出的权限添加显式拒绝 ACE,
        并删除所有显式授予的权限中的相同权限。

    /remove[:[g|d]] Sid 删除 ACL 中所有出现的 SID。使用
        :g,将删除授予该 SID 的所有权限。使用
        :d,将删除拒绝该 SID 的所有权限。

    /setintegritylevel [(CI)(OI)] 级别将完整性 ACE 显式添加到所有
        匹配文件。要指定的级别为以下级别之一:
            L[ow]
            M[edium]
            H[igh]
        完整性 ACE 的继承选项可以优先于级别,但只应用于
        目录。

    /inheritance:e|d|r
        e - 启用继承
        d - 禁用继承并复制 ACE
        r - 删除所有继承的 ACE


注意:
    Sid 可以采用数字格式或友好的名称格式。如果给定数字格式,
    那么请在 SID 的开头添加一个 *。

    /T 指示在以该名称指定的目录下的所有匹配文件/目录上
        执行此操作。

    /C 指示此操作将在所有文件错误上继续进行。仍将显示错误消息。

    /L 指示此操作在符号链接本身而不是其目标上执行。

    /Q 指示 icacls 应该禁止显示成功消息。

    ICACLS 保留 ACE 项的规范顺序:
            显式拒绝
            显式授予
            继承的拒绝
            继承的授予

    perm 是权限掩码,可以两种格式之一指定:
        简单权限序列:
                N - 无访问权限
                F - 完全访问权限
                M - 修改权限
                RX - 读取和执行权限
                R - 只读权限
                W - 只写权限
                D - 删除权限
        在括号中以逗号分隔的特定权限列表:
                DE - 删除
                RC - 读取控制
                WDAC - 写入 DAC
                WO - 写入所有者
                S - 同步
                AS - 访问系统安全性
                MA - 允许的最大值
                GR - 一般性读取
                GW - 一般性写入
                GE - 一般性执行
                GA - 全为一般性
                RD - 读取数据/列出目录
                WD - 写入数据/添加文件
                AD - 附加数据/添加子目录
                REA - 读取扩展属性
                WEA - 写入扩展属性
                X - 执行/遍历
                DC - 删除子项
                RA - 读取属性
                WA - 写入属性
        继承权限可以优先于每种格式,但只应用于
        目录:
                (OI) - 对象继承
                (CI) - 容器继承
                (IO) - 仅继承
                (NP) - 不传播继承
                (I) - 从父容器继承的权限

示例:

        icacls c:\windows\* /save AclFile /T
        - 将 c:\windows 及其子目录下所有文件的
           ACL 保存到 AclFile。

        icacls c:\windows\ /restore AclFile
        - 将还原 c:\windows 及其子目录下存在的 AclFile 内
          所有文件的 ACL。

        icacls file /grant Administrator:(D,WDAC)
        - 将授予用户对文件删除和写入 DAC 的管理员权限。

        icacls file /grant *S-1-1-0:(D,WDAC)
        - 将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限。


D:\>help if
执行批处理程序中的条件处理。

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               指定只有条件为 false 的情况下,Windows 才
                    应该执行该命令。

  ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                    指定数字的退出代码,指定条件为 true。

  string1==string2  如果指定的文字字符串匹配,指定条件为 true。

  EXIST filename    如果指定的文件名存在,指定条件为 true。

  command           如果符合条件,指定要执行的命令。如果指定的
                    条件为 FALSE,命令后可跟 ELSE 命令,该命令将
                    在 ELSE 关键字之后执行该命令。

ELSE 子句必须出现在同一行上的 IF 之后。例如:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

由于 del 命令需要用新的一行终止,因此以下子句不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:

    IF EXIST filename. del filename.
    ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

    IF EXIST filename. (del filename.) ELSE echo filename. missing

如果命令扩展被启用,IF 会如下改变:

    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command

其中, compare-op 可以是:

    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于

而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
/I 开关可以用于 IF 的 string1==string2 的形式上。这些
比较都是通用的;原因是,如果 string1 和 string2 都是
由数字组成的,字符串会被转换成数字,进行数字比较。

CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
是在跟与命令扩展有关联的内部版本号比较。第一个版本
是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
命令扩展被停用时,CMDEXTVERSION 条件不是真的。

如果已定义环境变量,DEFINED 条件的作用跟 EXIST 的一样,
除了它取得一个环境变量,返回的结果是 true。

如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到
其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:

    goto answer%ERRORLEVEL%
    :answer0
    echo Program had return code 0
    :answer1
    echo Program had return code 1

您也可以使用以上的数字比较:

    IF %ERRORLEVEL% LEQ 1 goto okay

如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
命令行;否则,您会得到其数值。

如果没有名为 CMDEXTVERSION 的环境变量,
%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
字串符表达式;否则,您会得到其数值。

D:\>help label
创建、更改或删除磁盘的卷标。

LABEL [drive:][label]
LABEL [/MP] [volume] [label]

  drive:          指定驱动器号。
  label           指定卷标。
  /MP             指定卷应被视为装入点或卷名。
  volume          指定驱动器号(后面跟一个冒号)、装入点或卷名。
                  如果指定了卷名,/MP 标志则不必要。

D:\>help md
创建目录。

MKDIR [drive:]path
MD [drive:]path

如果命令扩展被启用,MKDIR 会如下改变:

如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 \a 不
存在,那么:

    mkdir \a\b\c\d

与:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

相同。如果扩展被停用,则需要键入 mkdir \a\b\c\d。

D:\>help mkdir
创建目录。

MKDIR [drive:]path
MD [drive:]path

如果命令扩展被启用,MKDIR 会如下改变:

如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 \a 不
存在,那么:

    mkdir \a\b\c\d

与:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

相同。如果扩展被停用,则需要键入 mkdir \a\b\c\d。

D:\>help mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      创建目录符号链接。默认为文件
                符号链接。
        /H      创建硬链接,而不是符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径
                (相对或绝对)。

D:\>help mode
配置系统设备。

串行端口:          MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                [to=on|off] [xon=on|off] [odsr=on|off]
                                [octs=on|off] [dtr=on|off|hs]
                                [rts=on|off|hs|tg] [idsr=on|off]

设备状态:          MODE [device] [/STATUS]

打印重定向:        MODE LPTn[:]=COMm[:]

选择代码页:        MODE CON[:] CP SELECT=yyy

代码页状态:        MODE CON[:] CP [/STATUS]

显示模式:          MODE CON[:] [COLS=c] [LINES=n]

击键率:            MODE CON[:] [RATE=r DELAY=d]

D:\>help more
逐屏显示输出。

MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]
MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

    [drive:][path]filename  指定要逐屏显示的文件。

    command-name            指定要显示其输出的命令。

    /E      启用扩展功能
    /C      显示页面前先清除屏幕
    /P      扩展 FormFeed 字符
    /S      将多个空白行缩成一行
    /Tn     将制表符扩展为 n 个空格(默认值为 8)

            开关可以出现在 MORE 环境变量中。
    +n      从第 n 行开始显示第一个文件

    files   要显示的文件列表。使用空格分隔列表中的文件。
            如果已启用扩展功能,则在 -- More -- 提示处 接受下列命令:
    P n 显示下 n 行
    S n 跳过下 n 行
    F 显示下个文件
    Q 退出
    = 显示行号
    ? 显示帮助行
    <space> 显示下一页
    <ret> 显示下一行

D:\>help move
移动文件并重命名文件和目录。

要移动至少一个文件:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

要重命名一个目录:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

  [drive:][path]filename1 指定您想移动的文件位置和名称。
  destination             指定文件的新位置。目标可包含一个驱动器号
                          和冒号、一个目录名或组合。如果只移动一个文件
                          并在移动时将其重命名,您还可以包括文件名。
  [drive:][path]dirname1  指定要重命名的目录。
  dirname2                指定目录的新名称。

  /Y                      取消确认覆盖一个现有目标文件的提示。
  /-Y                     对确认覆盖一个现有目标文件发出提示。

命令行开关 /Y 可以出现在 COPYCMD 环境变量中。这可以用命令行上
的 /-Y 替代。默认值是,除非 MOVE 命令是从一个批脚本内
执行的,覆盖时都发出提示。

D:\>help openfiles

OPENFILES /parameter [arguments]

描述:
    允许管理员列出或中断系统上已打开的文件和文件夹。

参数列表:
    /Disconnect      中断至少一个打开的文件的连接。

    /Query           显示所有从本地或从共享文件夹打开的文件。

    /Local           启用 / 禁用本地打开文件的显示。

    /?               显示此帮助消息。

示例:
    OPENFILES /Disconnect /?
    OPENFILES /Query /?
    OPENFILES /Local /?



D:\>help path
为可执行文件显示或设置一个搜索路径。

PATH [[drive:]path[;...][;%PATH%]
PATH ;

键入 PATH ; 清除所有搜索路径设置并指示 cmd.exe 只在当前
目录中搜索。
键入 PATH 但不加参数,显示当前路径。
将 %PATH% 包括在新的路径设置中会将旧路径附加到新设置。

D:\>help pause
暂停批处理程序,并显示以下消息:
    请按任意键继续. . .
D:\>help popd
更改到 PUSHD 命令存储的目录。

POPD


如果命令扩展被启用,从推目录堆栈 POPD 驱动器时,POPD
命令会删除 PUSHD 创建的临时驱动器号。

D:\>help print
打印文本文件。

PRINT [/D:device] [[drive:][path]filename[...]]

   /D:device   指定打印设备。


D:\>help prompt
更改 cmd.exe 命令提示符。

PROMPT [text]

  text    指定新的命令提示符。

提示符可以由普通字符及下列特定代码组成:

  $A   & (短 and 符号)
  $B   | (管道)
  $C   ( (左括弧)
  $D   当前日期
  $E   Escape 码(ASCII 码 27)
  $F   ) (右括弧)
  $G   > (大于符号)
  $H   Backspace (擦除前一个字符)
  $L   < (小于符号)
  $N   当前驱动器
  $P   当前驱动器及路径
  $Q   = (等号)
  $S     (空格)
  $T   当前时间
  $V   Windows 版本号
  $_   换行
  $$   $ (货币符号)

如果命令扩展被启用,PROMPT 命令会支持下列格式化字符:

  $+   根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符,
       一个推的层一个字符。

  $M   如果当前驱动器不是网络驱动器,显示跟当前驱动器号或
       空字符串有关联的远程名。

D:\>help pushd
保存当前目录以供 POPD 命令使用,然后改到指定的目录。

PUSHD [path | ..]

  path        指定要成为当前目录的目录。

如果命令扩展被启用,除了一般驱动器号和路径,PUSHD
命令还接受网络路径。如果指定了网络路径,PUSHD 将创建一个
指向指定网络资源的临时驱动器号,然后再用刚定义的驱动器
号更改当前的驱动器和目录。可以从 Z: 往下分配临时驱动器
号,使用找到的第一个没有用过的驱动器号。

D:\>help rd
删除一个目录。

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

    /S      除目录本身外,还将删除指定目录下的所有子目录和
            文件。用于删除目录树。

    /Q      安静模式,带 /S 删除目录树时不要求确认

D:\>help recover
从损坏的磁盘中恢复可读取的信息。

RECOVER [drive:][path]filename
在使用 RECOVER 命令之前,
请先参阅 Windows 帮助中的联机命令参考。

D:\>help rem
在批处理文件或 CONFIG.SYS 里加上注解或说明。

REM [comment]

D:\>help ren
重命名文件。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

请注意,您不能为目标文件指定新的驱动器或路径。

D:\>help rename
重命名文件。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

请注意,您不能为目标文件指定新的驱动器或路径。

D:\>help replace
替换文件。

REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/U]

  [drive1:][path1]filename 指定源文件。
  [drive2:][path2]         指定要替换文件的目录。
  /A                       把新文件加入目标目录。不能和/S 或 /U 命令行开关搭配使
用。
  /P                       替换文件或加入源文件之前会先提示您进行确认。
  /R                       替换只读文件以及未受保护的文件。
  /S                       替换目标目录中所有子目录的文件。不能与 /A 命令开关搭
配使用。
  /W                       等您插入磁盘以后再运行。
  /U                       只会替换或更新比源文件日期早的文件。不能与 /A 命令行
开关搭配使用。


D:\>help rmdir
删除一个目录。

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

    /S      除目录本身外,还将删除指定目录下的所有子目录和
            文件。用于删除目录树。

    /Q      安静模式,带 /S 删除目录树时不要求确认

[ Last edited by zzz19760225 on 2016-2-9 at 06:54 ]
作者: zzz19760225     时间: 2016-2-9 06:53    标题: WIN7下CMD帮助文件2(2-2)

D:\>help robocopy

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows 的可靠文件复制
-------------------------------------------------------------------------------

  开始时间: Mon Feb 08 22:49:40 2016

               用法 :: ROBOCOPY source destination [file [file]...] [options]

                 源 :: 源目录(驱动器:\路径或\\服务器\共享\路径)。
               目标 :: 目标目录(驱动器:\路径或\\服务器\共享\路径)。
               文件 :: 要复制的文件(名称/通配符: 默认为 "*.*")。

::
:: 复制选项:
::
                 /S :: 复制子目录,但不复制空的子目录。
                 /E :: 复制子目录,包括空的子目录。
             /LEV:n :: 仅复制源目录树的前 n 层。

                 /Z :: 在可重新启动模式下复制文件。
                 /B :: 在备份模式下复制文件。
                /ZB :: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
            /EFSRAW :: 在 EFS RAW 模式下复制所有加密的文件。

      /COPY:复制标记:: 要复制的文件内容(默认为 /COPY:DAT)。
                       (复制标记: D=数据,A=属性,T=时间戳)。
                       (S=安全=NTFS ACL,O=所有者信息,U=审核信息)。

           /DCOPY:T :: 复制目录时间戳。

               /SEC :: 复制具有安全性的文件(等同于 /COPY:DATS)。
           /COPYALL :: 复制所有文件信息(等同于 /COPY:DATSOU)。
            /NOCOPY :: 不复制任何文件信息(与 /PURGE 一起使用生效)。

            /SECFIX :: 修复所有文件的文件安全性,即使是跳过的文件。
            /TIMFIX :: 修复所有文件的文件时间,即使是跳过的文件。

             /PURGE :: 删除源中不再存在的目标文件/目录。
               /MIR :: 镜像目录树(等同于 /E 和 /PURGE)。

               /MOV :: 移动文件(复制后从源中删除)。
              /MOVE :: 移动文件和目录(复制后从源中删除)。

     /A+:[RASHCNET] :: 将给定的属性添加到复制文件。
     /A-:[RASHCNET] :: 从复制文件中删除给定的属性。

            /CREATE :: 仅创建目录树和长度为零的文件。
               /FAT :: 仅使用 8.3 FAT 文件名创建目标文件。
               /256 :: 关闭超长路径(> 256 字符)支持。

             /MON:n :: 监视源;发现多于 n 个更改时再次运行。
             /MOT:m :: 监视源;如果更改,在 m 分钟时间内再次运行。

      /RH:hhmm-hhmm :: 运行小时数 - 可以启动新副本的时间。
                /PF :: 以每个文件(而不是每个步骤)为基础检查运行小时数。

             /IPG:n :: 程序包间的间距(ms),以释放低速线路上的带宽。

                /SL :: 对照目标复制符号链接。

            /MT[:n] :: 使用 n 个线程进行多线程复制(默认值为 8)。
                       n 必须至少为 1,但不得大于 128。
                       该选项与 /IPG 和 /EFSRAW 选项不兼容。
                       使用 /LOG 选项重定向输出以便获得最佳性能。

::
:: 文件选择选项:
::
                 /A :: 仅复制具有存档属性集的文件。
                 /M :: 仅复制具有存档属性的文件并重置存档属性。
    /IA:[RASHCNETO] :: 仅包含具有任意给定属性集的文件。
    /XA:[RASHCNETO] :: 排除具有任意给定属性集的文件。

  /XF 文件[文件]... :: 排除与给定名称/路径/通配符匹配的文件。
  /XD 目录[目录]... :: 排除与给定名称/路径匹配的目录。

                /XC :: 排除已更改的文件。
                /XN :: 排除较新的文件。
                /XO :: 排除较旧的文件。
                /XX :: 排除多余的文件和目录。
                /XL :: 排除孤立的文件和目录。
                /IS :: 包含相同文件。
                /IT :: 包含已调整的文件。

             /MAX:n :: 最大的文件大小 - 排除大于 n 字节的文件。
             /MIN:n :: 最小的文件大小 - 排除小于 n 字节的文件。

          /MAXAGE:n :: 最长的文件存在时间 - 排除早于 n 天/日期的文件。
          /MINAGE:n :: 最短的文件存在时间 - 排除晚于 n 天/日期的文件。
          /MAXLAD:n :: 最大的最后访问日期 - 排除自 n 以来未使用的文件。
          /MINLAD:n :: 最小的最后访问日期 - 排除自 n 以来使用的文件。
                       (If n < 1900 then n = n days, else n = YYYYMMDD date)。

                /XJ :: 排除接合点。(默认情况下通常包括)。

               /FFT :: 假设 FAT 文件时间(2 秒粒度)。
               /DST :: 弥补 1 小时的 DST 时间差。

               /XJD :: 排除目录的接合点。
               /XJF :: 排除文件的接合点。

::
:: 重试选项:
::
               /R:n :: 失败副本的重试次数: 默认为 1 百万。
               /W:n :: 两次重试间的等待时间: 默认为 30 秒。

               /REG :: 将注册表中的 /R:n 和 /W:n 保存为默认设置。

               /TBD :: 等待定义共享名称(重试错误 67)。

::
:: 日志记录选项:
::
                 /L :: 仅列出 - 不复制、添加时间戳或删除任何文件。
                 /X :: 报告所有多余的文件,而不只是选中的文件。
                 /V :: 生成详细输出,同时显示跳过的文件。
                /TS :: 在输出中包含源文件的时间戳。
                /FP :: 在输出中包含文件的完整路径名称。
             /BYTES :: 以字节打印大小。

                /NS :: 无大小 - 不记录文件大小。
                /NC :: 无类别 - 不记录文件类别。
               /NFL :: 无文件列表 - 不记录文件名。
               /NDL :: 无目录列表 - 不记录目录名称。

                /NP :: 无进度 - 不显示已复制的百分比。
               /ETA :: 显示复制文件的预期到达时间。

          /LOG:文件 :: 将状态输出到日志文件(覆盖现有日志)。
         /LOG+:文件 :: 将状态输出到日志文件(附加到现有日志中)。

       /UNILOG:文件 :: 以 UNICODE 方式将状态输出到日志文件(覆盖现有日志)。
      /UNILOG+:文件 :: 以 UNICODE 方式将状态输出到日志文件(附加到现有日志中)。

               /TEE :: 输出到控制台窗口和日志文件。

               /NJH :: 没有作业标头。
               /NJS :: 没有作业摘要。

           /UNICODE :: 以 UNICODE 方式输出状态。

::
:: 作业选项 :
::
      /JOB:作业名称 :: 从命名的作业文件中提取参数。
     /SAVE:作业名称 :: 将参数保存到命名的作业文件
              /QUIT :: 处理命令行后退出(以查看参数)。
              /NOSD :: 未指定源目录。
              /NODD :: 未指定目标目录。
                /IF :: 包含以下文件。


D:\>help set
显示、设置或删除 cmd.exe 环境变量。

SET [variable=[string]]

  variable  指定环境变量名。
  string    指定要指派给变量的一系列字符串。

要显示当前环境变量,键入不带参数的 SET。

如果命令扩展被启用,SET 会如下改变:

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配
SET 命令已使用的名称的所有变量的值。例如:

    SET P

会显示所有以字母 P 打头的变量

如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL
设置成 1。

SET 命令不允许变量名含有等号。

在 SET 命令中添加了两个新命令行开关:

    SET /A expression
    SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

    ()                  - 分组
    ! ~ -               - 一元运算符
    * / %               - 算数运算符
    + -                 - 算数运算符
    << >>               - 逻辑移位
                       - 按位“与”
    ^                   - 按位“异”
    |                   - 按位“或”
    = *= /= %= += -=    - 赋值
      &= ^= |= <<= >>=
    ,                   - 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用
引号扩起来。在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,
那么它显示该表达式的最后值。该分配的操作符在分配的操作符
左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制
有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022
相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,
因为 8 和 9 不是有效的八进制位数。(& )

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入
行之前,显示指定的 promptString。promptString 可以是空的。

环境变量替换已如下增强:

    %PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。

    %PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,
使用的数字则是环境变量数值长度加上指定的偏移量或长度。

    %PATH:~-10%

会提取 PATH 变量的最后十个字符。

    %PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

终于添加了延迟环境变量扩充的支持。该支持总是按默认值被
停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。
请参阅 CMD /?

考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境
变量扩充是很有用的,而不是执行的时候。以下例子说明直接
变量扩充的问题:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "%VAR%" == "after" @echo If you see this, it worked
    )

不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中
的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个
复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和
"after",这两者永远不会相等。同样,以下这个例子也不会达到
预期效果:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

原因是,它不会在目前的目录中建立一个文件列表,而只是将
LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在
FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量
是空的。因此,我们真正执行的 FOR 循环是:

    for %i in (*) do set LIST= %i

这个循环继续将 LIST 设成找到的最后一个文件。

延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行
时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面
例子写成以下所示,以达到预期效果:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo If you see this, it worked
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

如果命令扩展被启用,有几个动态环境变量可以被扩展,但不会出现在 SET 显示的变
量列表中。每次变量数值被扩展时,这些变量数值都会被动态计算。如果用户用这些
名称中任何一个明确定义变量,那个定义会替代下面描述的动态定义:

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

%HIGHESTNUMANODENUMBER% - 扩展到此计算机上的最高 NUMA 节点号。

D:\>help setlocal
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

SETLOCAL

如果命令扩展被启用,SETLOCAL 会如下改变:

SETLOCAL 批命令现在可以接受可选参数:
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            启用或禁用命令处理器扩展。这些
            参数比 CMD /E:ON 或 /E:OFF
            开关有优先权。请参阅 CMD /? 获取详细信息。
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
            启用或禁用延缓环境变量
            扩展。这些参数比 CMD
            /V:ON 或 /V:OFF 开关有优先权。请参阅 CMD /? 获取详细信息。
无论在 SETLOCAL 命令之前它们的设置是什么,这些修改会一直
保留到匹配的 ENDLOCAL 命令。

如果有一个参数,
SETLOCAL 命令将设置 ERRORLEVEL 的值。如果有两个有效参数中的一个,
该值则为零。
用下列技巧,您可以在批脚本中
使用这个来决定扩展是否可用:

    VERIFY OTHER 2>nul
    SETLOCAL ENABLEEXTENSIONS
    IF ERRORLEVEL 1 echo Unable to enable extensions

这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL
未设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将
ERRORLEVEL 值初始化成非零值。


D:\>help sc

错误:  未知命令

描述:
        SC 是用于与服务控制管理器和服务进行通信的命令行程序。
用法:
        sc <server> [command] [service name] <option1> <option2>...


        选项 <server> 的格式为 "\\ServerName"
        键入 "sc [command]" 可以获得有关命令的进一步帮助
        命令:
          query-----------查询服务的状态,
                          或枚举服务类型的状态。
          queryex---------查询服务的扩展状态,
                          或枚举服务类型的状态。
          start-----------启动服务。
          pause-----------向服务发送 PAUSE 控制请求。
          interrogate-----向服务发送 INTERROGATE 控制请求。
          continue--------向服务发送 CONTINUE 控制请求。
          stop------------向服务发送 STOP 请求。
          config----------更改服务的配置(永久)。
          description-----更改服务的描述。
          failure---------更改服务失败时执行的操作。
          failureflag-----更改服务的失败操作标志。
          sidtype---------更改服务的服务 SID 类型。
          privs-----------更改服务的所需权限。
          qc--------------查询服务的配置信息。
          qdescription----查询服务的描述。
          qfailure--------查询失败时服务执行的操作。
          qfailureflag----查询服务的失败操作标志。
          qsidtype--------查询服务的服务 SID 类型。
          qprivs----------查询服务的所需权限。
          qtriggerinfo----查询服务的触发器参数。
          qpreferrednode--查询首选的服务 NUMA 节点。
          delete----------(从注册表)删除服务。
          create----------创建服务(将其添加到注册表)。
          control---------向服务发送控制。
          sdshow----------显示服务的安全描述符。
          sdset-----------设置服务的安全描述符。
          showsid---------显示相应于假定名称的 SID 字符串。
          triggerinfo-----配置服务的触发器参数。
          preferrednode---设置首选的服务 NUMA 节点。
          GetDisplayName--获取服务的 DisplayName
          GetKeyName------获取服务的 ServiceKeyName。
          EnumDepend------枚举服务的依存关系。

        下列命令不要求服务名称:
        sc <server> <command> <option>
          boot------------(ok | bad) 指示是否将上一次启动保存为
                          最近一次已知的正确启动配置
          Lock------------锁定服务数据库
          QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
        sc start MyService

是否想参阅 QUERY 和 QUERYEX 命令的帮助? [ y | n ]:
y

QUERY 和 QUERYEX 选项:
        如果查询命令带服务名称,将返回
        该服务的状态。其他选项不适合这种
        情况。如果查询命令不带参数或
        带下列选项之一,将枚举此服务。
    type=    要枚举的服务的类型(driver, service, all)
             默认 = service)
    state=   要枚举的服务的状态 (inactive, all)
             (默认 = active)
    bufsize= 枚举缓冲区的大小(以字节计)
             (默认 = 4096)
    ri=      开始枚举的恢复索引号
             (默认 = 0)
    group=   要枚举的服务组
             (默认 = all groups)

语法示例
sc query                - 枚举活动服务和驱动程序的状态
sc query eventlog       - 显示 eventlog 服务的状态
sc queryex eventlog     - 显示 eventlog 服务的扩展状态
sc query type= driver   - 仅枚举活动驱动程序
sc query type= service  - 仅枚举 Win32 服务
sc query state= all     - 枚举所有服务和驱动程序
sc query bufsize= 50    - 枚举缓冲区为 50 字节
sc query ri= 14         - 枚举时恢复索引 = 14
sc queryex group= ""    - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS     - 枚举所有 NDIS 驱动程序


D:\>help schtasks

SCHTASKS /parameter [arguments]

描述:
    允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任
    务。

参数列表:
    /Create         创建新计划任务。

    /Delete         删除计划任务。

    /Query          显示所有计划任务。

    /Change         更改计划任务属性。

    /Run            按需运行计划任务。

    /End            中止当前正在运行的计划任务。

    /ShowSid        显示与计划的任务名称相应的安全标识符。

    /?              显示此帮助消息。

Examples:
    SCHTASKS
    SCHTASKS /?
    SCHTASKS /Run /?
    SCHTASKS /End /?
    SCHTASKS /Create /?
    SCHTASKS /Delete /?
    SCHTASKS /Query  /?
    SCHTASKS /Change /?
    SCHTASKS /ShowSid /?


D:\>help shift
更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉
命令从第 n 个参数开始移位;n 介于零和八之间。例如:

    SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

D:\>help shutdown
用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]
    [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

    没有参数   显示帮助。这与键入 /? 是一样的。
    /?         显示帮助。这与不键入任何选项是一样的。
    /i         显示图形用户界面(GUI)。
               这必须是第一个选项。
    /l         注销。这不能与 /m 或 /d 选项一起使用。
    /s         关闭计算机。
    /r         关闭并重新启动计算机。
    /g         关闭并重新启动计算机。系统重新启动后,
               重新启动所有注册的应用程序。
    /a         中止系统关闭。
               这只能在超时期间使用。
    /p         关闭本地计算机,没有超时或警告。
               可以与 /d 和 /f 选项一起使用。
    /h         休眠本地计算机。
               可以与 /f 选项一起使用。
    /e         记录计算机意外关闭的原因。
    /m \\computer 指定目标计算机。
    /t xxx     设置关闭前的超时为 xxx 秒。
               有效范围是 0-315360000 (10 年),默认值为 30。
               如果超时时间大于 0,则默示 /f
               参数。
    /c "comment" 重启动或关闭的原因的注释。
               最多允许 512 个字符。
    /f         强制正在运行的应用程序关闭,不前台警告用户。
               当为 /t 参数指定大于 0 的值时,
               则默示 /f 参数。
    /d [p|u:]xx:yy  提供重新启动或关机的原因。
               p 表明重新启动或关闭是计划内的。
               u 表示原因由用户定义。
               如果 p 和 u 均未指定,则是计划外重新启动
               或关闭。
               xx 是主要原因号(小于 256 的正整数)。
               yy 是次要原因号(小于 65536 的正整数)。

此计算机上的原因:
(E = 预期 U = 意外 P = 计划内,C = 自定义)
类别    主要    次要    标题

U      0       0       其他(计划外)
E       0       0       其他(计划外)
E P     0       0       其他(计划内)
U      0       5       其他故障: 系统没有反应
E       1       1       硬件: 维护(计划外)
E P     1       1       硬件: 维护(计划内)
E       1       2       硬件: 安装(计划外)
E P     1       2       硬件: 安装(计划内)
E       2       2       操作系统: 恢复(计划内)
E P     2       2       操作系统: 恢复(计划内)
  P     2       3       操作系统: 升级(计划内)
E       2       4       操作系统: 重新配置(计划外)
E P     2       4       操作系统: 重新配置(计划内)
  P     2       16      操作系统: Service Pack (计划内)
        2       17      操作系统: 热修补(计划外)
  P     2       17      操作系统: 热修补(计划内)
        2       18      操作系统: 安全修补(计划外)
  P     2       18      操作系统: 安全修补(计划内)
E       4       1       应用程序: 维护(计划外)
E P     4       1       应用程序: 维护(计划内)
E P     4       2       应用程序: 安装(计划内)
E       4       5       应用程序: 没有反应
E       4       6       应用程序: 不稳定
U      5       15      系统故障: 停止错误
U      5       19      安全问题
E       5       19      安全问题
E P     5       19      安全问题
E       5       20      网络连接丢失(计划外)
U      6       11      电源故障: 电线被拔掉
U      6       12      电源故障: 环境
  P     7       0       旧版 API 关机

D:\>help sort
SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
  [[drive1:][path1]filename1] [/T [drive2:][path2]]
  [/O [drive3:][path3]filename3]
  /+n                         指定开始每个比较的字符号码 n。/+3 说明每个
                              比较应从每行的第三个字符开始。少于 n 个字符
                              的行排在其他行之前。按默认值,从每行的第一
                              个字符开始比较。
  /L[OCALE] locale            用指定的区域设置替代系统默认区域设置。
                              ""C"" 区域设置产生最快的排序顺序并且是当前
                              的唯一其他选择。排序总是不分大小写的。
  /M[EMORY] kilobytes         指定用于排序的主内存量,单位为 KB。
                              最小内存量总是 160 KB。如果指定内存大小,
                              无论主内存的可用量是多少,指定的内存量会
                              全部用于排序。

                              要取得最佳性能,通常不指定内存大小。按默认
                              值,如果达到默认最大内存值,排序会一次完成
                              (非临时文件);否则,排序会分两次完成(没有
                              完全排序的数据存储在临时文件中);用于排序
                              和合并的内存量相等。如果输入和输出都是文
                              件,默认最大内存量为可用主内存的 90%;
                              否则,为主内存的 45%。
  /REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量
                              (默认值为 4096,最大值为 65535)。
  /R[EVERSE]                  颠倒排序顺序,即,从 Z 到 A,再从 9 到 0。
  [drive1:][path1]filename1   指定要排序的文件。如果没有指定,则排序标准
                              输入。指定输入文件比将同一个文件重定向为标
                              准输入快。
  /T[EMPORARY]
    [drive2:][path2]          指定保留排序工作存储的目录路径,以防主内
                              存无法容纳数据。默认值是使用系统临时目录。
  /O[UTPUT]
    [drive3:][path3]filename3 指定在哪个文件中储存经过排序的输入。
                              如果没有指定,数据会被写入标准输出。指定
                              输出文件比将标准输出重定向到同一个文件快。


D:\>help start
启动一个单独的窗口运行指定的程序或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     在窗口标题栏中显示的标题。
    path        启动目录。
    B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。
                除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断
                该应用程序的方式。
    I           新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。

    MIN         以最小化方式启动窗口。
    MAX         以最大化方式启动窗口。
    SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。
    SHARED      在共享内存空间中启动 16 位 Windows 程序。
    LOW         在 IDLE 优先级类中启动应用程序。
    NORMAL      在 NORMAL 优先级类中启动应用程序。
    HIGH        在 HIGH 优先级类中启动应用程序。
    REALTIME    在 REALTIME 优先级类中启动应用程序。
    ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。
    BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。
    NODE        将首选非一致性内存结构 (NUMA) 节点指定为十进制整数。
    AFFINITY    将处理器关联掩码指定为十六进制数字。进程被限制在这些
                处理器上运行。

                当 /AFFINITY 和 /NODE 结合时,会对关联掩码进行不同的解释。
                指定关联掩码,正如 NUMA 节点的处理器掩码正确移动到零位
                起始位置一样。进程被限制在指定关联掩码和 NUMA 节点之间的
                那些通用处理器上运行。如果没有通用处理器,则进程被限制在
                指定的 NUMA 节点上运行。
    WAIT        启动应用程序并等待它终止。
    command/program
                如果它是内部 cmd 命令或批文件,则该命令处理器是使用
                cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口
                将仍然存在。

                如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将
                作为一个窗口化应用程序或控制台应用程序运行。

    parameters  这些是传递给 command/program 的参数。

注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式创建进程。例如,
可以创建两个完全通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,
从而最大限度地减少内存延迟。如有可能,它们即会分配来自相同 NUMA 节点的
内存,并且会在指定节点之外的处理器上自由运行。

    启动 /NODE 1 application1.exe
    启动 /NODE 1 application2.exe

这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器上运行。在以下
示例中, application1 在节点的两个低顺序处理器上运行,而 application2
在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑
处理器。请注意,节点号可更改为该计算机的任何有效节点号,而无需更改关联
掩码。

    启动 /NODE 1 /AFFINITY 0x3 application1.exe
    启动 /NODE 1 /AFFINITY 0xc application2.exe

如果命令扩展被启用,通过命令行或 START 命令的外部命令
调用会如下改变:

将文件名作为命令键入,非可执行文件可以通过文件关联调用。
    (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
    关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和
     FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用
    程序终止就返回命令提示符。如果在命令脚本内执行,该新行为
    则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的
    字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这
    防止从当前目录提取 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用
    PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展
    名。PATHEXT 变量的默认值是:

        .COM;.EXE;.BAT;.CMD

    请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否
与目录名相配。如果确实如此,START 会在那个路径上调用
Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。


D:\>help subst
将路径与驱动器号关联。

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        指定要分配路径的虚拟驱动器。
  [drive2:]path  指定物理驱动器和要分配给虚拟驱动器的路径。
  /D             删除被替换的
(虚拟)驱动器。

不带参数键入 SUBST,以显示当前虚拟驱动器的列表。

D:\>help systeminfo

SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO format] [/NH]

描述:
    该工具显示本地或远程机器(包括服务包级别)的操作系统配置的信息。

参数列表:
    /S      system           指定要连接的远程系统。

    /U      [domain\]user    指定应该在哪个用户上下文执行命令。


    /P      [password]       指定给定用户上下文的密码。如果省略则
                             提示输入。

    /FO     format           指定显示结果的格式。
                             有效值: "TABLE"、"LIST"、"CSV"。

    /NH                      指定“列标题”不应该在输出中显示。
                             只对 "TABLE" 和 "CSV" 格式有效。

    /?                       显示帮助消息。


例如:
    SYSTEMINFO
    SYSTEMINFO /?
    SYSTEMINFO /S system
    SYSTEMINFO /S system /U user
    SYSTEMINFO /S system /U domain\user /P password /FO TABLE
    SYSTEMINFO /S system /FO LIST
    SYSTEMINFO /S system /FO CSV /NH

D:\>help tasklist

TASKLIST [/S system [/U username [/P [password]]]]
         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
    该工具显示在本地或远程机器上当前运行的进程列表。

参数列表:
   /S     system           指定连接到的远程系统。

   /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。

   /P     [password]       为提供的用户上下文指定密码。如果省略,则
                           提示输入。

   /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。
                           如果没有指定模块名称,显示所有加载的模块。

   /SVC                    显示每个进程中主持的服务。

   /V                      显示详述任务信息。

   /FI    filter           显示一系列符合筛选器指定的标准的任务。

   /FO    format           指定输出格式。
                           有效值: "TABLE"、"LIST"、"CSV"。

   /NH                     指定列标题不应该在输出中显示。
                           只对 "TABLE" 和 "CSV" 格式有效。

   /?                      显示帮助消息。


筛选器:
    筛选器名        有效操作符                有效值
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING |
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    映像名称
    PID             eq, ne, gt, lt, ge, le    PID 值
    SESSION         eq, ne, gt, lt, ge, le    会话编号
    SESSIONNAME     eq, ne                    会话名
    CPUTIME         eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                              hh:mm:ss。
                                              hh - 时,
                                              mm - 分,ss - 秒
    MEMUSAGE        eq, ne, gt, lt, ge, le    内存使用量,单位为 KB
    USERNAME        eq, ne                    用户名,格式为 [domain\]user
    SERVICES        eq, ne                    服务名称
    WINDOWTITLE     eq, ne                    窗口标题
    MODULES         eq, ne                    DLL 名称

说明: 当查询远程机器时,不支持 "WINDOWTITLE" 和 "STATUS"
      筛选器。

示例:
    TASKLIST
    TASKLIST /M
    TASKLIST /V /FO CSV
    TASKLIST /SVC /FO LIST
    TASKLIST /M wbem*
    TASKLIST /S system /FO LIST
    TASKLIST /S system /U domain\username /FO CSV /NH
    TASKLIST /S system /U username /P password /FO TABLE /NH
    TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

D:\>help taskkill

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

描述:
    使用该工具按照进程 ID (PID) 或映像名称终止任务。

参数列表:
    /S    system           指定要连接的远程系统。

    /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。

    /P    [password]       为提供的用户上下文指定密码。如果忽略,提示
                           输入。

    /FI   filter           应用筛选器以选择一组任务。
                           允许使用 "*"。例如,映像名称 eq acme*

    /PID  processid        指定要终止的进程的 PID。
                           使用 TaskList 取得 PID。

    /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来
                           指定所有任务或映像名称。

    /T                     终止指定的进程和由它启用的子进程。

    /F                     指定强制终止进程。

    /?                     显示帮助消息。

筛选器:
    筛选器名      有效运算符                有效值
    -----------   ---------------           -------------------------
    STATUS        eq, ne                    RUNNING |
                                            NOT RESPONDING | UNKNOWN
    IMAGENAME     eq, ne                    映像名称
    PID           eq, ne, gt, lt, ge, le    PID 值
    SESSION       eq, ne, gt, lt, ge, le    会话编号。
    CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                            hh:mm:ss。
                                            hh - 时,
                                            mm - 分,ss - 秒
    MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用量,单位为 KB
    USERNAME      eq, ne                    用户名,格式为 [domain\]user
    MODULES       eq, ne                    DLL 名称
    SERVICES      eq, ne                    服务名称
    WINDOWTITLE   eq, ne                    窗口标题

    说明
    ----
    1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
    2) 远程进程总是要强行 (/F) 终止。
    3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。

例如:
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"


D:\>help time
显示或设置系统时间。

TIME [/T | time]

显示当前时间设置和输入新时间的提示,请键入
不带参数的 TIME。要保留现有时间,请按 Enter。

如果命令扩展被启用,TIME 命令会支持 /T 命令行开关;该命令行开关告诉
命令只输出当前时间,但不提示输入新时间。

D:\>help title
设置命令提示窗口的窗口标题。

TITLE [string]

  string       指定命令提示窗口的标题。

D:\>help tree
以图形显示驱动器或路径的文件夹结构。

TREE [drive:][path] [/F] [/A]

   /F   显示每个文件夹中文件的名称。
   /A   使用 ASCII 字符,而不使用扩展字符。


D:\>help type
显示文本文件的内容。

TYPE [drive:][path]filename

D:\>help ver
显示 Windows 版本。

VER

D:\>help verify
指示 cmd.exe 是否要验证文件是否已正确地写入磁盘。

VERIFY [ON | OFF]

要显示当前 VERIFY 设置,键入不带参数的 VERIFY。

D:\>help vol
显示磁盘卷标和序列号(如果存在)。

VOL [drive:]

D:\>help xcopy
复制文件和目录树。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                           [/EXCLUDE:file1[+file2][+file3]...]

  source       指定要复制的文件。
  destination  指定新文件的位置和/或名称。
  /A           仅复制有存档属性集的文件,但不更改属性。
  /M           仅复制有存档属性集的文件,并关闭存档属性。
  /D:m-d-y     复制在指定日期或指定日期以后更改的文件。
               如果没有提供日期,只复制那些源时间比目标时间新的文件。
  /EXCLUDE:file1[+file2][+file3]...
               指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。
               如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制
               该文件。例如,指定如 \obj\ 或 .obj 的字符串会分别排除目录
               obj 下面的所有文件或带有 .obj 扩展名的所有文件。
  /P           创建每个目标文件之前提示您。
  /S           复制目录和子目录,不包括空目录。
  /E           复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。
  /V           验证每个新文件的大小。
  /W           提示您在复制前按键。
  /C           即使有错误,也继续复制。
  /I           如果目标不存在,且要复制多个文件,则假定目标必须是目录。
  /Q           复制时不显示文件名。
  /F           复制时显示完整的源文件名和目标文件名。
  /L           显示要复制的文件。
  /G           允许将加密文件复制到不支持加密的目标。
  /H           也复制隐藏文件和系统文件。
  /R           覆盖只读文件。
  /T           创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括
               空目录和子目录。
  /U           只复制已经存在于目标中的文件。
  /K           复制属性。一般的 Xcopy 会重设只读属性。
  /N           用生成的短名称复制。
  /O           复制文件所有权和 ACL 信息。
  /X           复制文件审核设置(隐含 /O)。
  /Y           取消提示以确认要覆盖现有目标文件。
  /-Y          要提示以确认要覆盖现有目标文件。
  /Z           在可重新启动模式下复制网络文件。
  /B           复制符号链接本身与链接目标相对。
  /J           复制时不使用缓冲的 I/O。推荐复制大文件时使用。

开关 /Y 可以预先在 COPYCMD 环境变量中设置。
这可能被命令行上的 /-Y 覆盖。


D:\>help wmic

[global switches] <command>

The following global switches are available:
/NAMESPACE           Path for the namespace the alias operate against.
/ROLE                Path for the role containing the alias definitions.
/NODE                Servers the alias will operate against.
/IMPLEVEL            Client impersonation level.
/AUTHLEVEL           Client authentication level.
/LOCALE              Language id the client should use.
/PRIVILEGES          Enable or disable all privileges.
/TRACE               Outputs debugging information to stderr.
/RECORD              Logs all input commands and output.
/INTERACTIVE         Sets or resets the interactive mode.
/FAILFAST            Sets or resets the FailFast mode.
/USER                User to be used during the session.
/PASSWORD            Password to be used for session login.
/OUTPUT              Specifies the mode for output redirection.
/APPEND              Specifies the mode for output redirection.
/AGGREGATE           Sets or resets aggregate mode.
/AUTHORITY           Specifies the <authority type> for the connection.
/?[:<BRIEF|FULL>]    Usage information.

For more information on a specific global switch, type: switch-name /?


The following alias/es are available in the current role:
ALIAS                    - Access to the aliases available on the local system
BASEBOARD                - Base board (also known as a motherboard or system boa
rd) management.
BIOS                     - Basic input/output services (BIOS) management.
BOOTCONFIG               - Boot configuration management.
CDROM                    - CD-ROM management.
COMPUTERSYSTEM           - Computer system management.
CPU                      - CPU management.
CSPRODUCT                - Computer system product information from SMBIOS.
DATAFILE                 - DataFile Management.
DCOMAPP                  - DCOM Application management.
DESKTOP                  - User's Desktop management.
DESKTOPMONITOR           - Desktop Monitor management.
DEVICEMEMORYADDRESS      - Device memory addresses management.
DISKDRIVE                - Physical disk drive management.
DISKQUOTA                - Disk space usage for NTFS volumes.
DMACHANNEL               - Direct memory access (DMA) channel management.
ENVIRONMENT              - System environment settings management.
FSDIR                    - Filesystem directory entry management.
GROUP                    - Group account management.
IDECONTROLLER            - IDE Controller management.
IRQ                      - Interrupt request line (IRQ) management.
JOB                      - Provides  access to the jobs scheduled using the sche
dule service.
LOADORDER                - Management of system services that define execution d
ependencies.
LOGICALDISK              - Local storage device management.
LOGON                    - LOGON Sessions.
MEMCACHE                 - Cache memory management.
MEMORYCHIP               - Memory chip information.
MEMPHYSICAL              - Computer system's physical memory management.
NETCLIENT                - Network Client management.
NETLOGIN                 - Network login information (of a particular user) mana
gement.
NETPROTOCOL              - Protocols (and their network characteristics) managem
ent.
NETUSE                   - Active network connection management.
NIC                      - Network Interface Controller (NIC) management.
NICCONFIG                - Network adapter management.
NTDOMAIN                 - NT Domain management.
NTEVENT                  - Entries in the NT Event Log.
NTEVENTLOG               - NT eventlog file management.
ONBOARDDEVICE            - Management of common adapter devices built into the m
otherboard (system board).
OS                       - Installed Operating System/s management.
PAGEFILE                 - Virtual memory file swapping management.
PAGEFILESET              - Page file settings management.
PARTITION                - Management of partitioned areas of a physical disk.
PORT                     - I/O port management.
PORTCONNECTOR            - Physical connection ports management.
PRINTER                  - Printer device management.
PRINTERCONFIG            - Printer device configuration management.
PRINTJOB                 - Print job management.
PROCESS                  - Process management.
作者: zzz19760225     时间: 2016-2-9 07:10    标题: 深度2015系统下深度终端的命令帮助

zzz19760225@zzz19760225-pc:~$ help
GNU bash,版本 4.3.42(1)-release (x86_64-pc-linux-gnu)
这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表。
输入 `help 名称' 以得到有关函数`名称'的更多信息。
使用 `info bash' 来获得关于 shell 的更多一般性信息。
使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息。

名称旁边的星号(*)表示该命令被禁用。

job_spec [&]                                history [-c] [-d 偏移量] [n] 或 history -anr>
(( 表达式 ))                                   if 命令; then 命令; [ elif 命令; then 命令; ]...>
. 文件名 [参数]                                  jobs [-lnprs] [任务声明 ...] 或 jobs -x 命令 [参>
:                                           kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任>
[ 参数... ]                                   let 参数 [参数 ...]
[[ 表达式 ]]                                   local [option] 名称[=值] ...
alias [-p] [名称[=值] ... ]                    logout [n]
bg [任务声明 ...]                               mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [>
bind [-lpsvPSVX] [-m keymap] [-f filename>  popd [-n] [+N | -N]
break [n]                                   printf [-v var] 格式 [参数]
builtin [shell 内建 [参数 ...]]                 pushd [-n] [+N | -N | 目录]
caller [表达式]                                pwd [-LP]
case 词 in [模式 [| 模式]...) 命令 ;;]... esac         read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] >
cd [-L|[-P [-e]] [-@]] [dir]                readarray [-n 计数] [-O 起始序号] [-s 计数] [-t]>
command [-pVv] 命令 [参数 ...]                  readonly [-aAf] [名称[=值] ...] 或 readonly >
compgen [-abcdefgjksuv] [-o 选项]  [-A 动作] >      return [n]
complete [-abcdefgjksuv] [-pr] [-DE] [-o >   select NAME [in 词语 ... ;] do 命令; done
compopt [-o|+o 选项] [-DE] [名称 ...]           set [--abefhkmnptuvxBCHP] [-o 选项名] [--] >
continue [n]                                shift [n]
coproc [名称] 命令 [重定向]                        shopt [-pqsu] [-o] [选项名 ...]
declare [-aAfFgilnrtux] [-p] [name[=value>  source 文件名 [参数]
dirs [-clpv] [+N] [-N]                      suspend [-f]
disown [-h] [-ar] [任务声明 ...]                test [表达式]
echo [-neE] [参数 ...]                        time [-p] 管道
enable [-a] [-dnps] [-f 文件名] [名称 ...]       times
eval [参数 ...]                               trap [-lp] [[参数] 信号声明 ...]
exec [-cl] [-a 名称] [命令 [参数 ...]] [重定向 ...>         true
exit [n]                                    type [-afptP] 名称 [名称 ...]
export [-fn] [名称[=值] ...] 或 export -p       typeset [-aAfFgilrtux] [-p] 名称[=值] ...
false                                       ulimit [-SHabcdefilmnpqrstuvxT] [limit]
fc [-e 编辑器名] [-lnr] [起始] [终结] 或 fc -s [模式>           umask [-p] [-S] [模式]
fg [任务声明]                                   unalias [-a] 名称 [名称 ...]
for 名称 [in 词语 ... ] ; do 命令; done           unset [-f] [-v] [-n] [name ...]
for (( 表达式1; 表达式2; 表达式3 )); do 命令; done            until 命令; do 命令; done
function 名称 { 命令 ; } 或 name () { 命令 ; }         variables - 一些 shell 变量的名称和含义
getopts 选项字符串 名称 [参数]                       wait [-n] [id ...]
hash [-lr] [-p 路径名] [-dt] [名称 ...]          while 命令; do 命令; done
help [-dms] [模式 ...]                        { 命令 ; }
作者: zzz19760225     时间: 2016-2-9 07:20    标题: 编码的奥秘 作者英文字母若干

第1章 电 筒 密 谈
假若你才 1 0岁,你的好朋友与你临街而住,而且你们卧室的窗户面对着面 。每天晚上,
当父母像平常一样很早催你上床睡觉时,你可能还想与好朋友交流思想、发现、小秘密、传
闻、笑话和梦想,没有人可以责备你,毕竟 ,渴望交流是大多数人的天性。
当你们卧室还亮着灯时,你和你的好朋友可以临窗舞动手臂、打手势或以身体语言来交
流思想,但复杂一些的交流就有些困难了。而且一旦父母宣布“熄灯”,交流也就无法继续进
行了。
如何联系呢?用电话吗? 1 0岁的小孩子屋里有电话吗?即使有,你们的谈话可能被偷听。
如果家里的电脑通过电话线联了网,它可能会提供无声的帮助,不过很不幸,它也不会在你
的房间里。
你和朋友采用的方法是用手电筒。所有的人都知道手电筒是为孩子们藏在被窝里看书而
发明的,它也适合在黑暗中用来交流。它无声无息,且光的方向性很好,不会从卧室的门缝
中泄露而使家人起疑。
用手电筒的光可以交谈吗?这值得一试。一年级你就学过在纸上写字母和单词,把这种
方法运用到手电筒上看起来也合情合理。你所需做的就是临窗而站,用光画出字母。画字母
‘O’,就打开电筒,在空中画个圈,然后关上开关;字母‘ I’则是画竖直的一笔。但是你很
快发现这种方法行不通,当你注视来去飞舞的光柱时,会发现在脑海中将它们组合起来不是
件容易的事,这些光划成的圈圈杠杠太不准确了。
也许你曾经看过一部电影,影片中两个水手隔海用闪烁的光传递消息。在另一部电影中,
一个间谍用镜子反射阳光向一间屋子中被俘获的同伙发送讯息。这就给了你启发,你起先设
计一种简单的交流方法,使字母表中的每个字母与一定数目的闪烁相对应。 A闪一下, B闪两
下,C闪三下,如此递推, Z就闪烁2 6下。B A D这个词由字母间有间隔的两闪、一闪、四闪组
成,这样你不会误以为它是闪七下的字母 G了。词间的停顿则比字母间的停顿时间稍长一些。
这看起来很有希望,采用这种方法的优点是你不需要在空中挥舞手电简,只需对准方向
按开关就行了;缺点是你试图发送的第一个消息(“How are you?” )就需要 1 3 1次闪烁,更
糟的是,你忘了定义标点符号,所以无法表示句尾的问号了。
这离问题的解决已经很近了,你想别人以前肯定也遇到过类似的问题,你解决它的思想
一定是正确的。为了解决问题,白天的图书馆之行使你发现了神奇的摩尔斯电码(morse code),
这正是你想要的,即使你不得不重新学习如何“写”字母表中的字母。
以下就是区别:在你发明的体系中,每个字母是一定数目的闪烁,从闪烁一下的 A到闪烁
2 6的Z;而在摩尔斯电码中,有长短两种闪烁,当然,这会使摩尔斯电码更为复杂,但它在实
际应用中却被证实是更有效的。那句“ How are you?”现在仅需 3 2次而不是 1 3 1次闪烁,而
且这还包含了问号。
在讨论摩尔斯电码的工作原理时,人们并不说“长闪烁”、“短闪烁”,他们使用“点
(d o t)”和“划( d a s h)”,因为这样易于在印刷品上表示。在摩尔斯电码中,字母表中的每一2
编码的奥秘
下载
个字母与一个点划序列相对应,正如在下表中你所看到的:
尽管摩尔斯电码与计算机毫不相关,但熟悉它的本质却对深入了解计算机内部语言和软
硬件的内部结构有很大的帮助。
在本书中,编码或代码( c o d e)通常指一种在人和机器之间进行信息转换的系统(体系)。
换句话说,编码便是交流。有时我们将编码看成是密码 (机密),其实大多数编码并不是的。大
多数的编码都需要被很好地理解,因为它们是人类交流的基础。
在《百年孤独》的一书的开篇,马尔克斯回忆了一个时代,那时“世界一片混沌,许多
事物没有名字。为了加以区别才给事物各个命名。”这些名字都是随意的,没有什么原因说明
为什么不把猫称为狗或不把狗称为猫。可以说英语词汇就是一种编码。
我们用嘴发出声音组成单词,这些词可以为那些听得到我们声音,理解我们所用语言的
人所听懂,我们称这种编码为“口头语言”或“语音”。对写在纸上(或凿在石头上、刻在木
头上或通过比划写在空气中)的词,还有一种编码方式,那就是我们在印刷的报刊,杂志和
书籍上看到的字符,称之为“书面语言”或“文本”。在许多语言中,语音和文本间有很强的
联系。例如在英语中,字母或一组字母与一定的读音相对应。
手势语言的发明帮助了聋哑人进行面对面的交流。这是一种用手和胳膊的动作组合来表
达词语中的单个字母、整个词及其基本概念的语言。对盲人来说,他们可以使用布莱叶盲文
(B r a i l l e)。这种文字使用凸起的点代表字母,字母串和单词。当谈话内容要被迅速地记录下
来时,缩写和速记是很有用的。
人们在相互沟通时使用了各种不同的编码,因为在不同的应用场合,其中的一些较其他
的更为简便。例如,语言不能在纸上存储,所以使用了文字;语言、文字不适合用来在黑夜
中安静地传递消息,故摩尔斯电码是一个方便的替代品。只要一种编码可以适用于其他编码
所不能适用的场合,它就是一种有用的编码。
以后将看到,计算机中使用了不同的编码来传递和存储数字、声音、音乐、图像和视频
(电影)。计算机不能直接处理人类世界的编码,因为它不能模拟人类的眼睛、鼻子、嘴和手
指来接收信息。尽管这些年来计算机的发展趋势使我们的桌上电脑具有捕获、存储、处理和
提供人类交流中所使用的各种信息的能,而且不论这些信息是视觉的(文字和图片)、听觉的
(语言、声音及音乐)还是两者的混合(动画和电影)。所有这些信息都要求使用它们自己的
编码方式,正如交谈需要使用人的某些器官(嘴和耳朵),而书写和阅读则需要使用另外一些下载
第1章 电 筒 密 谈
3
器官(手和眼睛)一样。
用手电筒发送摩尔斯电码时,电筒的开关快速地合开代表一个点,让电筒照亮稍长的时
间则代表一个划。举例来说,发送字母 A,要先快速地合开开关,然后再稍慢些合开。在发送
下一个字母前要有短暂的停顿。约定划的时间大约是点的 3倍。例如,如果点的照亮时间为 1
秒,那么划就是 3秒。(实际上,摩尔斯电码的传递速度要快得多。)接收者看到了短闪和长闪
就知道是A。
摩尔斯电码中点划之间的间隔是极为关键的。例如,发送字母 A时,点划之间的间隔应与
一个点的时间大致相同(如果点的时间是 1秒,那么间隔的时间也是 1秒)。同一个词中字母间
间隔稍长,约为划的持续时间(或者 3秒,如果那是划的持续时间的话)。下面是单词“ h e l l o”
对应的摩尔斯电码,图中示意了字母间的间隔(隙):
单词之间相隔大约 2倍于划的时间(如果划是 3秒,那么间隔即为6秒)。下面是“ hi there”
对应的编码(码字):
手电筒开和关的时间长度并没有限定,这取决于点的时间长度,点长又由手电筒开关触
发的速度和摩尔斯电码发送者记忆电码的熟练程度来决定,熟练发送者的划也许与生手的点
等长。这个小问题会使接收电码有些困难,但在一两个字母之后,接收者通常就可以辨认出
哪个是点,哪个是划了。
粗看起来,摩尔斯电码的定义 — 这里所谓的定义是指与字母表中的字母相对应的各种
点划序列 — 与打字机字母的排列一样是随意的。但仔细观察后你会发现不完全如此,简短
的码字分配给了使用频率较高的字母,例如 E和T,爱赌博的人和“财富之轮”爱好者可能一
下就注意到了这个问题;不常用的字母如 Q和Z(它们在赌局中是 1 0点)则分配以较长的码
字。
几乎所有人都知道一点儿摩尔斯电码,国际遇险信号 S O S的摩尔斯电码为“三点三划三
点”。S O S并非缩写,选择它仅仅因为它有一个易记的摩尔斯电码序列。第二次世界大战中,
英国广播公司选用贝多芬第五交响曲中的片段作为节目前奏 — B A H 、 B A H 、 B A H 、
B A H M M M M M,听起来颇像摩尔斯电码中 V(代表Vi c t o r y)的码字。
摩尔斯电码的一个缺点是它没有对大小写字母进行区分。除表示字母外,摩尔斯电码还
用5位长的码字来表示数字:
这些数字的码字看起来还有些规律 (相对于字母对应的码字而言 )。大多数标点符号的码字
采用5位、6位或7位的码长:4
编码的奥秘
下载
对欧洲一些语言中的重音字母以及一些有特殊用途的缩写定义了特别的码字, S O S就是
这样一个缩写:发送时每个字母的码字之间仅有一点的时间间隔。
如果有特制的用于发送摩尔斯电码的手电筒,你和朋友之间的交流就方便多了。这种手
电筒除了常有的开关,还有一个按钮,按压按钮就可以控制电筒的亮灭。经过练习后,你们
每分钟可以发送和接收 5~1 0个单词。虽然仍比交谈慢(大概每分钟 1 0 0个词左右)但已足够
用了。
当你和朋友最终熟记了摩尔斯电码时(这是唯一精通发送接收的方法),你也可以用它代
替日常用的语言。为了达到最高的速度,可以发“滴( d i h)”音代表点、“嗒( d a h )”音代表划。
摩尔斯电码同样也可将文字简化为用点和划两个符号表示。
以上的关键在于“两”这个词 — “滴、嗒”两个声音,“点、划”两种方式。实际上任
何两种不同的东西经过一定的组合都可以代表任何种类的信息。下载
第2章 编码与组合
摩尔斯电码由萨缪尔・摩尔斯( 1 7 9 1—1 8 7 2)发明,本书后面会在多处提到他。摩尔斯
电码是随着电报机的发明而产生的,电报机我们以后也还要做详尽的说明。正如摩尔斯电码
很好地说明了编码的本质一样,电报机也提供了理解计算机硬件的良好途径。
大多数人认为摩尔斯电码的发送易于接收,即使你没有记住摩尔斯电码,也可以方便地
借助下面这张按字母顺序排列的表发送:
接收摩尔斯电码并将其翻译回单词比发送费时费力多了,因为译码者必须反向地将已编
码的“滴-嗒”序列与字母对应。例如,在确定接收到的字母是“ Y”之前,必须按字母逐个
地对照编码表。
问题是我们仅有一张提供“字母→摩尔斯电码”的编码表,而没有一张可供逆向查找的
“摩尔斯电码→字母”译码表。在学习摩尔斯电码的初级阶段,这张译码表肯定会提供很大的
便利。然而,如何构造译码表却毫无头绪,因为我们似乎无法找出这些按字母顺序排列的
“滴-嗒”序列的规律。
那么忘记那些字母序列吧,也许按照码字中“滴”
“嗒”的个数来排列会是个更好的尝试。
例如,仅含一个“滴”或“嗒”的摩尔斯电码序列只可能代表 E或T这两个字母之一:
两个“滴”或“嗒”的组合则代表了 4个字母I、A、N、M:
三个“滴”或“嗒”的序列代表了 8个字母:6
编码的奥秘
下载
最后(如果不考虑数字和标点符号的摩尔斯电码),四个“滴”或“嗒”的序列则共代表
了1 6个字母:
四张表共包括2 + 4 + 8 + 16 = 3 0个编码,可与3 0个字母相对应,比拉丁字母所需的2 6个字
母还多了4个。出于这个原因,在最后一张表中,你可能注意到有 4个编码与重音字母相对应。
在翻译别人发送的摩尔斯电码时,上面 4张表提供了极大的便利。当你接收到一个代表特
定字母的码字时,按其中含有的“滴”“嗒”个数,至少可以跳到其对应的那张表中去查找。
每张表中,全“滴”的字母排在左上角,全“嗒”的字母排在右下角。
你注意到 4张表大小的规律了吗?每张表都恰好是其前一张表的两倍大小。这其中包含的
意义是:前一张表的码字后加一个“滴”或加一个“嗒“,即构成了后一张表。
可以按下面的方式总结这个有趣的规律:
点划数
1
2
3 .
4
码字数
2
4
8
1 6
四张表中每张码字数都是前一张的两倍,那么如果第一张表含2个码字,第二张表则含2×2
个码字,第三张表 2×2×2个码字。以下是另一种表达方式:
点划数
1
2
3
4
码字数
2
2×2
2×2×2
2×2×2×2
当然,如果遇到数的自乘,可以用幂表示,例如 2×2×2×2可以写成 2 4 。数字 2、4、8、
1 6分别是 2的1、2、3、4次幂,因为可以用依次乘 2的方法将它们计算出来。由此我们的总结
还可以写成下面的方式:
点划数 码字数
1
2
3
4 2 1
2 2
2 3
2 4第 2章 编码与组合
下载
7
这张表简单明了,码字数是 2的次方,次方数目与码字中含有的“滴”“嗒”数目相同。
我们可以把表总结为一个简单的公式:
码字数 = 2 “滴”与“嗒”的数目
很多编码中都用到 2的幂,在下一章中我们会看到另一个例子。
为了使译码的过程更为简便,可以画出如下一张树形图:
这张表表示出了由“滴”与“嗒”的连续序列得出的字母。译码时,按箭头所指从左到
右进行。例如,你想知道电码“滴-嗒-滴”代表的字母,那么从最左边开始选择点,沿箭头
向右选择划,接着又是点,得出对应的字母是 R,它写在最后一个点的旁边。
如果认真考虑,会发现事先建立这样一张表是定义摩尔斯电码所必需的。首先,它保证
了你不会犯给不同的字母相同码字的错误!其次,它保证你使用了全部的可用码字,而没有
使“滴”与“嗒”的序列毫无必要的冗长。
我们可以加长码字至 5位或更长, 5位长的码字又提供了额外的 3 2(2×2×2×2×2或2 5 )
个码字。一般而言,这就足够 1 0个数字和 1 6个标点符号使用。实际上,摩尔斯电码中的数字
确实是5位的,但在许多其他编码方式中, 5位码字常用于重音字母而不是标点符号。
为了包含所有的标点符号,系统必须扩充至 6位表示,提供 6 4个附加编码,此时系统可表
示2 + 4 + 8 + 1 6 + 3 2 + 6 4共1 2 6个字符。这对摩尔斯电码而言太多了,以至于留下许多“未定义”
的码字。此处“未定义”指不代表任何意义的码字,如果在你接收的摩尔斯电码中有未定义
的码字,就可以肯定发送方出了差错。
由于推出了下面这条公式:
码字数 = 2 “滴”与“嗒”的数目
我们就可以继续导出更长的码字位数所代表的码字数目。很幸运,我们不必为确定码字数目
而写出所有可能的码字,我们所要做的不过是不断地乘 2而已:8
编码的奥秘
下载
点划数 码字数
1
2
3
4
5
6
7
8
9
1 0 2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 10 = 1024
摩尔斯电码被称为二元码 (binary code),因为编码中仅含“滴”和“嗒”。这与一个硬
币很相似,硬币着地时只可能是正面或反面。二元事物(例如硬币)、二元编码(例如摩尔斯
电码)常常用2的乘方来描述。
上面所做的对二元编码的分析在数学上的一个分支 — 组合学或组合分析里只能算是一个
简单的练习。传统上,由于组合分析能够用来确定事件出现的几率,例如硬币或骰子组合的
数目,所以它常用于概率统计,但它也同样有助于我们理解编码的合成与分解。下载
第3章 布莱叶盲文与二元编码
摩尔斯不是第一个成功地将书写语言中的字母翻译成可解释代码的人,他也不是第一个
因为其编码而受到人们纪念的人,享有这个荣誉的是一个晚摩尔斯 1 8年出生的早慧的法国失
明少年。虽然人们对他的生平所知甚少,但就是所知的这一些却足以给后人留下深刻印象。
路易斯・布莱叶 1 8 0 9年出生于法国的 C o u p v r a y,他的家
乡在巴黎以东 2 5英里,父亲以打造马具为生。 3岁时,在这
个本不该在父亲作坊里玩耍的年龄,小布莱叶意外地被尖头
的工具戳中了眼睛。由于伤口发炎,感染了另一只眼,他从
此双目失明。布莱叶原本注定在贫困潦倒中度过一生(正如
那时大多数盲人一样),但他的聪明才智和求知欲不久即显
露了出来。在本地牧师和一位学校老师的帮助下,布莱叶和
其他孩子一道上了学, 1 0岁那年又前往巴黎的皇家盲人青年
学院学习。
盲人教育的一大障碍就是他们无法阅读印刷书籍。
Valentin Haüy(1745—1 8 2 2 ),巴黎学校的创始人,发明了一
种将字母凸印以供触摸阅读的方法。但这种方法使用起来较为困难,并且只有很少的书籍用
这种方法“制造”。
视力正常的 H a ü y陷入了一种误区。对他而言,字母 A就是A,它看起来(或感觉起来)也
必须像是个 A。(如果给他手电筒作为交流工具,他也会试图在空气中画出字母的形状,而我
们已经知道这种方法并不有效。)H a ü y也许没有意识到一种与印刷字母完全不同的编码会更适
于盲人使用。
另一种可选的编码有一个出人意料的起源。法国陆军上尉 Charles Barbier在1 8 1 9年发明了
一种他自称为 écriture nocturne的书写体系,这种体系也被称为“夜间文字。他使用厚纸板上
有规律凸起的点划来供士兵们在夜间无声地传递口信(便条),士兵们使用尖锥状的铁笔在纸
的背面刺点和划,凸起的点可以用手指感觉阅读。
B a r b i e r体系的问题是其过于复杂。 B a r b i e r没有用凸起的点来代表字母表中的字母,而是
用其代表声音。这样的系统中一个单词通常需要许多码字表达。这种方法在野外传递短小消
息还算有效,但对长一些的文章而言则有明显不足,更不要说是整本的书籍了。
布莱叶在 1 2岁时就熟悉 B a r b i e r方法了,他喜欢使用这些凸点,不仅因为它们易于用手指
阅读,更因为它们易于书写。教室里拿着铁笔和纸板的学生可以记笔记供课后阅读。布莱叶
勤奋地工作试图改进这种编码系统。不出 3年(在他 1 5岁时),他创建了自己的系统,其原理
直到今天还在使用。布莱叶系统有很长时间仅局限在他所在的学校使用,后来它逐渐扩散到
世界各地。 1 8 3 5年,布莱叶染上了结核病。 1 8 5 2年,在他4 3岁生日过后不久,他便去世了。
时至今日,布莱叶系统的改进版本甚至可以与有声录音带竞争,它为盲人提供了与书写
世界联系的途径。布莱叶方法仍是适于既聋又盲的人阅读的唯一方法。近来年,随着电梯和10
编码的奥秘
下载
自动语言机的普及,布莱叶系统更加广为人知。
本章将剖析布莱叶编码的编码方法及其工作原理,不过不必真正学习布莱叶编码或记住
任何东西,我们只要大概了解一下编码的本质就行了。
布莱叶编码中,普通书写语言的每个字符 — 具体而言如数字、字母和标点符号 — 都被
编码成局限在2×3小格中一个或多个凸起的点。这些小格一般被标记为 1~6:
在当今实际使用中,特殊的打字机或刻印机可以在纸上打出布莱叶编码中的小点。
由于在书中夹印几页布莱叶编码极其昂贵,我们使用了在通常印刷品中常用的布莱叶码
的表示方法。在这种表示方法中,小格中的 6个点全部印刷出来,大点代表小格中的凸起点,
小点则代表平滑的点。例如下图中的布莱叶字母中,点 1、3、5是凸起的,点2、4、6则没有:
在这里吸引我们的问题是:点是二元的。一个特定的点不是凸起的就是平滑的,那么 6个
点的组合数目就是 2×2×2×2×2×2,或6 4 ( 2 6 )。
因此,布莱叶编码系统可以代表 6 4个不同的码字。以下就是所有的 6 4个码字:
如果我们发现布莱叶编码只用了 6 4个码字中的一部分,我们会疑问为什么 6 4个码字中有
一些不被使用;如果发现布莱叶编码使用了多于 6 4个的码字,则又会让人怀疑我们是否神志
清醒或数字计算的真实性, 2乘2是等于4吗?
分析布莱叶编码,还是从基本的小写字母开始:下载
第3章 布莱叶盲文与二元编码
11
举例来说,短语“ you and me”在布莱叶编码中看起来是这样的:
注意,代表同一个单词中的字母的小格用一个小距离分隔,大一些的距离(一般是没有
凸点的小格)用来分隔不同的单词。
这就是布莱叶发明的布莱叶编码的基础,布莱叶还为法文中出现的重音字母设计了码字。
注意, W没有对应的码字,这时由于在古法语中没有 W(不必担心,这个字母最终还是会露
面的)。这样算来,我们仅使用了 6 4个码字中的 2 5个。
通过仔细的检查,会发现上面的布莱叶编码存在特定的规律。第 1行(从字母 a~j)只用
了小格的上面 4个点 — 点1、2、4、5;第2行除了点 3凸起外其余都与第 1行相同,第3行则除
了点3、6凸起外其余都与第 1行相同。
在布莱叶之后,布莱叶编码在许多方面有了扩展,现在大多数英语出版物所使用的系统
是二级布莱叶码。二级布莱叶码采用了许多缩写来简化编码树以提高阅读速度。以下的三行
(包括“完整的”第 3行)显示了下面这些词的码字:
因此,在二级布莱叶码中,短语“ you and me”被写成如下形式:
到现在为止,已描述了 3 1个码字 — 词间没有凸起点的空格和三行每行 1 0个用于字母和
单词的码字。这离理论上可用的 6 4个码字还相距甚远。不过我们将要看到,在二级布莱叶码
中,没有任何浪费的码字。
首先,我们使用 a~j的编码加上凸起的 6号点。它们代表词中的缩写,这其中包括 W和另
一个词的缩写:
举例来说,“a b o u t”可以用二级布莱叶码写成如下形式 :
其次,可以把代表字母 a~j的码字中的点下移一行,即仅使用点 2、3、5和6。这些码字根12
编码的奥秘
下载
据上下文代表标点符号或缩写:
头4个码字代表逗号、分号、冒号和句号。注意左括号和右括号用同一个码字代表,但左
引号和右引号则使用了不同的码字。
已经有5 1个码字了。接下来的 6个码字使用点 3、4、5、6尚未使用的组合来表示缩写和几
个额外的标点符号:
“b l e”的码字非常重要,因为当它不是单词的一部分时,它表明其后跟随的码字要被翻译
成数字,这些数字的编码与 a~j的编码相同:
由此,如下码字的序列代表数字 2 5 6:
如果你一直在计数的话,我们还需要 7个码字才能达到总计的 6 4个码字。下面就是剩余的
7个码字:
第一个(点 4凸起)是重音字母标识符,其余的作为一些缩写的前缀,也用于其他用途:
点4、6凸起时(本行的第 5个码字),该码字代表数字中的小数点或强调标识符,这由上下文
决定。点5、6凸起时,码字则是与数字标识对应的字母标识。
最后(也许你正在疑惑布莱叶编码如何表示大写字母),我们用 6号点来作为大写标识,
它表明其后跟随的字母是大写的。例如,可用如下的码字写出该编码创始人的名字:
这包含大写字母标识、字母 l、缩写o u、字母i和s,空格,另一个大写字母标识,字母 b、r、a、
i、l、l和e(在实际应用中,该名字还可以再删掉最后两个不发音的字母)。
总结一下,我们已经看到了 6个元素(凸点)如何恰好形成 6 4个码字。这 6 4个码字根据上
下文大多有双重含义,其中有数字标识以及取消数字标识作用的字母标识。这些标识改变了
跟随其后的码字的含义 — 从字母变数字或从数字变字母。起这种作用的码字常被称为“先
行码/前置码”或“转义码”,它们更改其后字符的含义直至更改作用被取消。
大写标识表示其后的字母(也仅有字母)应写成大写,这种码字被称为“换码代码”
。“换码
代码”使你“避免”那种单调的、常规的码字解释,而转入一种新的解释方法。在以后几章中可
以看到,当把书面语言转换为二元码字时,
“换码代码”和“转义码”的使用是很普遍的。下载下载
第4章 手电筒剖析
手电筒的用途极为广泛,用于在黑暗的遮盖物里阅读和用于发送编码消息只是两个用途
最明显的方面。最普通的家用手电筒也能在教学演示中说明神秘物质电( e l e c t r i c i t y)时扮演
中心角色。
电是一种令人称奇的现象,尽管它已得到普遍应用,但依然还保持着很大的神秘性,即
使对那些自称已经弄清楚它的工作原理的人而言也是这样。但恐怕不管怎么样,我们都必须
好好努力钻研一下电学。幸运的是,我们只需要明白一小部分基本概念就可以理解它在计算
机中是怎样应用的。
手电筒当然是一种大多数家庭都拥有的较简单的电器。拆开一支有代表性的手电筒,你
会发现它包括一对电池,一个灯泡,一个开关,一些金属片和一个把所有零件装在一起的塑
料筒。
只用电池和灯泡,就可以自己做一个简单的手电筒。当然,还需要一些短的绝缘线(末
端的绝缘皮除掉)和足够多的连接物:
注意上图右边两个松开的线端(头),那就是开关。如果电池有电并且灯泡也没有烧坏的
话,接触两个线端,灯就亮了。
这是我们要分析的头一个简单电路,首先要注意的是电路是一个回路。只有从电池到电
线、到灯泡、到开关、再回到电池的路径是连续畅通的,灯泡才会亮。电路中任何一点断开
都会引起灯泡的熄灭。开关的目的就是控制电路开闭这个过程。
电路环接的特性提示我们有某种物质在电路中循环移动,可能与水在水管里流动有某些
相似。“水与水管”的类比常用来解释电的工作机理,但最终它也像其他类比一样不可避免地
解释不下去了。电在宇宙中是独一无二的,必须用它的术语来解释它。
在对电的工作的理解中,最流行的科学理论是电子理论(electron theory),该理论认为电
起源于电子的运动。
众所周知,一切物质 — 我们能看到、感觉到的东西 — (通常)是由极其微小的被称为14
编码的奥秘
下载
原子的东西构成。每一个原子是由三种微粒构成的,即中子、质子和电子。你可以把原子画
成一个小的太阳系,中子和质子固定在原子核内而电子像行星环绕太阳一样围绕原子核运动:
需要解释一下的是该模型与你在一个放大倍数足够大的显微镜下看到的真正原子不是一模一
样的,它只是一个示例模型。
图中原子包含 3个电子、 3个质子和 4个中子,说明这是一个锂原子。锂是已知的 11 2种元
素之一,它们的原子序数由 1~11 2。一种元素的原子序数是指元素的原子核中质子的个数,
通常也是其电子数。锂的原子序数为 3。
原子能够通过化学合成形成分子,分子与组成它的原子的性质通常是不同的。比如水分
子包含两个氢原子和一个氧原子(即 H 2 O)。显然水既不同于氢气,也不同于氧气。同样,食
盐分子由一个钠原子和一个氯原子构成,而钠和氯都不可能成为法国馅饼的调味品。
氢、氧、钠、氯都属于元素,水和食盐都属于化合物。但是盐水是一种混合物,而不是
化合物,因为其中水和食盐都保持它们各自的性质不变。
一个原子的电子数通常等于其质子数。但在某种特定环境下,电子能从原子中电离出来,
这样电就产生了。
单词e l e c t r o n和e l e c t r i c i t y都源于古希腊词 η λ ε κ τ ρ ο ν( e l e k t r o n ) ,你可能猜它的意思就是“极
其微小而不可见的东西”。但事实并非如此 — η λ ε κ τ ρ ο ν的真正意思是“琥珀”,一种玻璃状
的硬质树液。这个看似不相关的词源来自于古希腊人所做的实验,他们用琥珀与木头相摩擦
而产生我们今天所说的静电。在琥珀上摩擦木头使木头从琥珀获得电子,结果木头所含的电
子数多于质子数而琥珀所含的电子数小于质子数。在更多的现代实验中,地毯能从鞋底获得
电子。
质子和电子具有带电荷的特性,质子带正电荷( +)、电子带负电荷(-)。中子是中性的,
不带电。即便我们用加减号来标明质子和电子,但符号并不表示算术运算中的加号和减号的
意思,也不表示质子拥有某些电子所不具备的东西。使用这些符号仅仅表示质子和电子在某
个方面性质相反。这个相反的特性也正表明了质子和电子是如何相互关联的。
当质子数与电子数相等时,它们是最适合和最稳定的。质子数与电子数的不平衡会导致
它们趋于平衡。静电火花就是电子运动的结果,是电子从地毯通过你的身体再流回到鞋子的
过程引起的。
描述质子和电子关系的另一条途径是注意观察异电性相吸同电性相斥的现象,但光凭看
原子结构图我们是不能猜想到的。表面上看原子核中挤在一起的质子是互相吸引的。质子是
通过比同性斥力大的某种力聚合在一起的,这种力叫强内力。释放核能的原子核裂变就是由
于强内力导致的。本章只讨论通过得失电子获得电(电能)的问题。
静电不只存在于手指触摸门把手时闪出的火花之中。暴风雨时,云层的下层积累电子而下载
第 4章 手电筒剖析
15
云层的顶层失去电子,闪电的瞬间,电子的不平衡马上消失。闪电正是大量的电子迅速从一
端转移到另一端的结果。
手电筒电路中的电能显然比电火花或闪电之中的电能要好利用得多。灯泡能稳定持续地
亮是因为电子并不是从一点跳到另一点。当电路中的一个原子把一个电子传给邻接的另一个
原子时,它又从另一个邻接的原子获得电子,而这个原子又从它的一个邻接原子获得电子,
如此依次循环。可见电路中的电就是从原子到原子的电子通路。
这不可能自发形成。仅仅只把一些破旧的电路材料连接在一起是不可能有电能产生的,
需要某种可以激发电子环绕电路移动的物质。再分析一下前面所画的简单手电筒电路图,可
以肯定激发电子运动的既不是电线,也不是灯泡,那么最有可能的就是电池了。
几乎每一个人都多少了解手电筒里所用电池的类型方面的一些知识:
• 它们都呈管状,且大小不同。比如有 D、C、A、A A和A A A等型号。
• 无论电池大小怎样,它们都被标有“ 1 . 5伏”。
• 电池的一端是平的,标有一个负号(-);另一端中间有一个小突起,标有一个正号
(+)。
• 要想设备正常工作,就要正确安装电池(注意电池极性)。
• 电池的电能最终将用尽。有的电池可以充电,有的不行。
• 由此可以猜测,电池是用某种奇特的方式产生电能。
所有的电池中都发生着化学反应,一些分子裂变成其他分子或者结合形成新的分子。电
池中有化学物质,这些化学物质就是用来起反应,从而在标有(-)的电池的一端(称为负
极或阴极)产生多余的电子而在电池的另一端(称为正极或阳极)需要得到电子。这样,化
学能转化为电能。
只有当某种特别的电子通过某条途径从电池负极出发,然后再传送到正极时,化学反应
才能发生。因此假如一节空电池放在那里,那么什么事也不会发生(事实上,化学反应还是
在进行的,只是速度极慢)。只有一条电路能将电子运离负极又为正极提供电子时,反应才会
发生。电子在下图电路中是沿逆时针方向运动的:
如果不是基于这个简单的事实:所有的电子,不管来自什么地方,都是一模一样的,否
则,来自电池的化学物质里的电子就不可能如此随意地与铜导线的电子混合在一起的。铜导16
编码的奥秘
下载
线的电子与任何其他电子是没有区别的。
注意,两个电池都是向着同一个方向。放在下面的电池的正极从上面电池的负极获得电
子,这样两个电池就好像结合形成了一个更大的电池,这个大电池一端为正极,另一端为负
极,其电压是3伏而不是1 . 5伏了。
如果把电池中的一个倒置,电路就会连不通,如下图所示:
在化学反应中,两个电池的正极都需要获得电子,但由于它们相互接触,电子无法通过某种
途径到达它们。如果两个电池的正极连上了 ,那么它们的负极也应该连上,如下图所示:
这样的电路还是能连通。电池的这种连接方法称为并联,前一种连接方法称为串联。并
联后的电压与单个电池电压同样都是 1 . 5伏。并联后的灯仍然可能亮,但不如串联时亮度大,
不过电池的寿命将会是串联时的两倍。
通常认为电池为电路提供电能,但同样也可以认为电路为电池化学反应的发生创造了条
件。电路将电子从负极传送到正极。电路中的化学反应将一直进行到所有的化学物质耗尽,
这时你就需要换电池或是给电池充电了。
电子从电池的负极到正极流经了导线和灯泡。为什么需要导线?电不能通过空气传导
吗?噢,可以说能,也可以说不能。电能够通过空气导通(尤其是潮湿的空气),否则也观察
不到闪电。但电不能很轻易地流经空气。
一些物质的导电能力比其他物质的导电能力明显要好。元素的导电能力取决于它内部的
原子结构。电子绕核旋转是在不同的轨道上的,这些轨道称为层。最外层只有一个电子的原
子最容易失去那个电子,这正是导电需要具备的性质。这些物质易导电因而被称为导体。铜、第 4章 手电筒剖析
下载
17
银和金都是良好导体,这三种元素位于元素周期表的同一列不是巧合。铜是最常用的导线材
料。
导电物质的对立物质称为绝缘物质。一些物质阻碍电的能力比其他物质阻碍电的能力强,
这种阻碍电的能力称为电阻。如果一个物质有很大的电阻 — 说明它根本不能导电 — 它就被
称为绝缘体。橡胶和塑料都是很好的绝缘体,因而它们常用来做电线的绝缘皮。在干燥空气
的情况下,布料和木材也是很好的绝缘体。其实只要电压足够高,任何物质都能导电。
铜的电阻很小,但它仍有电阻。导线越长,电阻越大。如果你用数里长的导线连接手电
筒,导线的电阻将会大得令手电筒不亮。导线越粗,电阻越小,这可能有点违反直觉。你也
许认为粗的导线需要更多的电来“充满它”。而事实上,导线越粗,电子越容易通过它。我已
经提到过电压,只是还没有给出它的定义。一节电池为 1 . 5伏特意味着什么呢?实际上,电压
— 得名于Count Alessandro Vo l t o ( 1 7 4 5—1 8 2 7 ),他于1 8 0 0年发明了第一节电池 — 是初等电
学中较难理解的概念之一。电压表征电势能的大小,无论一节电池是否被连通,电压总是存
在的。
假设有一块砖头。如果把它放在地上,它的势能很小。当你把它举起至离地面 4英尺高时,
它的势能就增加了。你只要把砖块扔下,就能感觉到势能的存在。当你在一座高楼的顶层举
着砖块时,它的势能更大。上面三个例子里,你只是拿着砖块而什么也没做,但砖块的势能
却不同。
电学里更早的一个概念是电流。电流取决于电路中飞速流动的电子的数量。电流用安培
来度量,它得名于 André Marie Ampére(1775—1 8 3 6 ),一般简称安,比如“ 1 0安的保险丝”。
当6 240 000 000 000 000 000个电子在1秒内流过一个特定的点时,就是 1安培电流。
用水和水管作个类比。电流与流经水管的水量很相似,而电压类似于水压,电阻类似于
水管的粗细程度 — 水管越小、阻力越大。因此水压越高,流过水管的水量越大;水管越小,
流过它的水量就越少。流过水管的水量(电流)与水压(电压)成正比而与水管的阻力(电
阻)成反比。
在电学中,如果知道电压和电阻的大小,就可计算出电流的大小。电阻 — 物质阻碍电流
通过的能力 — 用欧姆度量,得名于 G e o rg Simon Ohm (1789—1 8 5 4 ),他提出了著名的欧姆定
律,定律中表述
I = E / R
这里I表示电流, E表示电压, R表示电阻。
举个例子,让我们看一节空置的电池:
它的电压 E为1 . 5伏,这是电势能。因为电的正负两极只被空气导接,因而电阻(用 R表示)非
常、非常大,这就意味着电流 I等于1 . 5除以一个巨大的数,电流几乎为 0。
现在用一根短铜导线连接电池的正负两极(从现在开始,本书中导线外的绝缘皮不再表
示出来):18
编码的奥秘
下载
我们已经知道这是短路。电压仍是 1 . 5伏,但电阻很小,这时电流等于 1 . 5除以一个很小的数,
也即意味着电流很大。很多很多的电子将流过导线。实际上,电流将受到电池物理大小的限制。
电池不可能导通如此大的电流,且实际电压也将低于 1 . 5伏。如果电池足够大,导线将会发热,
因为电能转化为了热能。如果导线变得很热,它将会发光(辉光放电)甚至可能熔化。
绝大部分电路都介于这两个极端之间。可以把它们统一表述为如下图:
电气(子)工程师用折线来表征电阻。这里它表示电阻不是特别大,也不是特别小。
如果导线的电阻很小,导线将发热发光,这就是白炽灯的工作原理。白炽灯泡是由美国
最著名的发明家托马斯・爱迪生( 1 8 4 7—1 9 3 1)发明的。在他致力于发明灯泡的时候( 1 8 7 9
年),这个思想已被普遍接受并且同时还有不少其他发明家在研究这个问题。
灯泡里的细线叫灯丝,通常用金属钨做成。灯丝的一端连在基座底部的尖端,另一端连
在金属基底的一个侧面,用一个绝缘体将它与尖端分开。细线的电阻使它发热。如果暴露在
空气中,钨就会由于达到燃烧温度而烧起来。但在灯泡的真空里,钨丝就发亮了。
大多数普通手电筒用两节电池组成一组,总电压是3 . 0伏。且选用电阻大约为 4欧姆的灯泡。
这样,电流等于 3除以4即0 . 7 5安培,也就是 7 5 0毫安。这就意味着每秒钟有 4 680 000 000 000
000 000 个电子通过灯泡。(注意,如果你用欧姆表直接测量手电筒灯泡的电阻,你只会得到
一个比4欧姆小得多的结果。这是因为钨的电阻还与它的温度有关系,温度越高,电阻越大。)
你可能已经发现,你买回家的灯泡上标记了特定的瓦特数。瓦特这个名词取自于著名的
蒸气机发明家詹姆斯・瓦特( 1 7 3 6—1 8 1 9)。瓦特是功率P的单位,它用下式计算
P = E×I
手电筒是3伏,0 . 7 5安培,那么灯泡的功率就要求 2 . 2 5瓦特。
家用照明灯大约为 1 0 0瓦特,这是为家用电压 1 2 0伏设计的。在这种情况下,电流为 1 0 0瓦
除以1 2 0伏即大约0 . 8 3安培。因此,1 0 0瓦特灯泡的电阻为 1 2 0伏除以0 . 8 3安培即1 4 4欧姆。
到此,我们大致分析了手电筒的每一个组成部分 — 电池、导线和灯泡。但是我们遗漏了
一个最重要的部分、对,是它的开关。开关控制电路的开闭。当开关允许电流动时,我们说
它是开的或合上的,而关的或断开的开关是不允许电流动的。(这里所表示的开、关的状态正
好与门相反,合上的门不允许事物通过的,而合上的开关允许电通过。)开关或开或关,电流
或有或无,灯泡或亮或不亮,就像摩尔斯和布莱叶发明的二元码一样,简单的手电筒或亮或
不亮,它没有中间状态。二元码与电气电路之间的相似性将在后面的章节中起很大作用。下载
第5章 绕过拐弯的通信
你1 2岁了。一天,你最要好的朋友一家要搬到另一个镇上去了。此后,你经常和他在电
话里聊天,但电话交谈与那些后半夜的手电筒摩尔斯电码会话完全不一回事。住在你隔壁的
另一个好朋友最终成为你新的最要好的朋友。现在到了该教你的新朋友一些摩尔斯电码,让
后半夜的手电筒重新亮起来的时候了。
问题是你的新朋友的卧室窗户与你的不是面对面的。房子是挨着的,卧室的窗户都朝着
同一个方向。除非你想办法在室外支起一些镜子,否则手电筒现在是不能适用来在黑夜中通
信的。
怎么办呢?
现在,你可能已经知道有关电的一些知识了,因此你决定用电池、灯泡、开关和导线来
做自己的手电筒。最初的实验中,你在你的卧室里接好电池和开关。两条导线接出你的窗子,
跨过篱笆,再接进你朋友的卧室,并在那里再连好灯泡 :
你的房子
你朋友的房子
尽管图中只示意了一节电池,但实际上你可能得用两个。在下面和以后的图中,用下图
表示断开的开关 :
用下图表示闭合的开关:
本章的手电筒与上一章中手电筒的工作原理是相同的,尽管本章的手电筒中连接组件的
导线要长得多。当你闭合开关时,你朋友那边的灯泡就亮了 :
你的房子
你朋友的房子20
编码的奥秘
下载
现在你可以用摩尔斯电码来发送消息了。
一旦有一个手电筒起作用,你可以做另一个远距离手电筒,好让你的朋友可以发送消息
给你:
你的房子
你朋友的房子
祝贺你! 你已经装上了一个双向电报系统。你可能注意到这两个相似的电路彼此完全独立
而没有联系。理论上,你可以给你的朋友发送消息而同时你的朋友也可以给你发送消息(尽
管对于你的大脑而言,同时阅读和发送消息可能比较困难)。
聪明的你发现如下改装电路能让你节省 2 5 %的导线:
你的房子
你朋友的房子
注意,现在两个电池的负极接在一起了。两个回路(电池到开关到灯泡再到电池)仍是
独立工作,尽管它们连在一起像连体双胞胎。
这种连接叫公用连接。在这个电路中,公用部分从左端灯泡和电池的接合点直到右端灯
泡和电池的接合点。图中接合点用黑点标记出来了。
进一步分析一下。首先当你按下开关,你朋友那边的灯就亮了。图中浅色回路中有电流
流过:
你的房子
你朋友的房子
在电路的其余部分里没有电流流过,因为没有了可让电子通过的回路。
当你不发消息而你的朋友发消息时,你朋友房间里的开关控制你房间里灯泡的亮灭。在第5章 绕过拐弯的通信
下载
21
下图浅色回路中有电流流过:
你的房子
你朋友的房子
当你和你的朋友想要同时发消息时,有时两个开关同时断开,有时一个断开一个闭合,
有时两个同时闭合。在最后一种情况下,电路中电的流动如下图所示:
你的房子
你朋友的房子
公用部分(两个接合点之间 )没有电流流过。
通过公用部分把两个独立电路连接成一个电路,已经把两栋房子之间的四条导线减少到
了三条,也即减少了 2 5 %的导线开支。
如果不得不接很长距离的线路,我们可能会想到再减少一根导线。但不幸的是对于 1 . 5伏
的D号电池和小灯泡,这是不合适的。如果用的是 1 0 0伏的电池和大得多的灯泡时,那就有办
法了。
这是个窍门:如果你要搭建电路的公用部分,你不需要任何导线。你可以用另外某种东
西取代它。你所用的取代物是一个直径大约为 7 9 0 0英里,由金属、岩石、有机物等多为无生
命的物质组成的巨大球体。它就是地球。
上一章描述的良导体中有银、铜和金。事实上,地球不是一个很好的导体,尽管某些部
分(如沼泽)的导电性能比其他部分(如干沙漠)要好得多。但我们知道导体越大越好,一
根很粗的导线比一根很细的导线要强得多。这是地球的优势,它的确非常非常大。
要用地球做导体,并不是把一根小细线插到马铃薯旁边的地里就可以了。你还必须使用
某种东西以维持和地球的真正接触,这也就是需要一个大面积的导体。一个很好的解决办法
是用一根至少 8英尺长, 1 / 2英寸粗的粗铜柱,它能提供与地面 1 5 0平方英寸的接触。你可以用
一个大锤子把它砸进地下,然后再接一根导线。如果你家的水管是铜质的,且从房子外的地
下接进来的话,那么你只要把一根导线与水管相连就可以了。
与地球的电性连接(也就是我们常说的接地)在英国叫 e a r t h ,在美国叫 g r o u n d。用g r o u n d
可能会引起一点点儿误会,因为它也经常用来指电路的公用部分。本章除非特别声明,否则
g r o u n d都指与地球的物理连接。
画电路图时常用下面这个符号表示接地:22
编码的奥秘
下载
电气工程师们使用这个符号是由于他们不喜欢费时间画一个埋在地下的 8英尺长的铜柱。
让我们来看看它是怎么工作的。从分析单回路开始:
你的房子
你朋友的房子
如果你使用的是高压电池和大灯泡,你只需要在你和你朋友的房子之间接一根导线,因
为你可以用大地来做导体:
你的房子
你朋友的房子
当你断开开关,电子的流动如下图所示:
你的房子
你朋友的房子
电子从你朋友房子的地下出发,通过灯泡、导线和你房间里的开关,然后进入电池的正
极。电子由电池的负极进入地下的。
也许你还真的很想看到电子从埋在你家后院的 8英尺长的铜柱进入地下,飞速地通过大地
到达埋在你朋友家后院的铜柱。
但是当你考虑到地球在为世界上数以千计的电路完成此功能时,你也许会问:这些电子
怎么知道该到哪儿去呢?显然它们不知道。这里要用地球的一个特殊性质来解释。
是的,地球是一个巨大的导体,但它同时也是电子的来源和仓库。地球对于电子而言就
好像大海对于水滴而言。地球的确是电子无尽的源头,也是电子巨大的存储池。
但是地球也有电阻,这就是为什么如果用 1 . 5伏的D号电池和手电筒灯泡就不能用接地来
减少电路开支的原因。地球对于低电压电池而言电阻实在太大了。第5章 绕过拐弯的通信
下载
23
你可能注意到上面两张画了电池的图中,电池的负极接地了:
以后将不再画接地的电池,而用代表电压的字母 V来代替它。单回路灯泡电报机现在如下
图所示:
你的房子
你朋友的房子
V代表电压,但它也可以表示吸取器。把V看成电子吸取器,把大地看成电子的海洋,电
子吸取器从地下吸取电子,放入回路,使之工作(比如点亮灯泡)。接地有时也被看成零电势,
意味着没有电压存在。电压 — 像早先解释的 — 是一种电势能,就像悬浮的砖块具有势能一
样。零电势就好像摆在地上的砖块 — 它不能再往什么地方掉下去了。
在第4章中,我们注意到的一件首要的事情是电路是一个回路。新电路看起来一点儿都不
像回路,但它仍然是回路。你可以用负极接地的电池代替 V,然后用一根线把所有有接地符号
的地方连起来,你将得到与本章开始时一样的电路图。
因此,通过一对铜柱(或是自来水管)的帮助,可以只用两根跨越你和你朋友房子之间
篱笆的导线就建立起了双向摩尔斯电码系统:
你的房子
你朋友的房子
这个电路与先前的三线配置电路功能相同。
本章已经迈出了通信改革中的关键性一步。最初,我们只能通过直线视觉和在手电筒的
可见范围内进行摩尔斯电码通信。
使用电线,不仅突破了直线视觉的限制,而且通过建立系统来绕过拐弯进行通信,我们还
摆脱了距离的限制。只要搭造更长更长的线路,就可以越过成百上千英里进行通信。
对了,这还不太准确。尽管铜是电学上很好的导体,但它不是最完美的。导线越长,电24
编码的奥秘
下载
阻越大;电阻越大,电流越小;电流越小,灯泡越暗。
那么导线可以造多长呢?因情况而定。假设你正在使用原来四根线的双向电路,无接地
和公用,并且还用手电筒和灯泡。为了节省开支,你先从电器行买了一些 2 0号规格的电话线,
每1 0 0英尺$ 9.99。电话线是用来连接你的扩音器和立体声系统的。它有两根导线,因此它是
电报系统的上佳选择。如果你的卧室与你朋友的卧室不到 5 0英尺远,只用一捆电话线就够了。
美国的导线粗细规格为 AW G。AW G数越小,导线越粗,电阻越小。你所买的 2 0号规格电
话线直径大约 0 . 0 3 2英寸,每 1 0 0 0英尺大约 1 0欧姆电阻,这样对于卧室之间 1 0 0英尺长的回路
电阻为1欧姆。
这并不坏,但如果要连上英里的线呢?线的总电阻将达到 1 0 0欧姆以上。回想一下上一章
中,灯泡电阻仅为 4欧姆。利用欧姆定律,可以很容易地计算出电路中的电流不再是以前的
0 . 7 5安(3伏除以4欧),而是比0 . 0 3安还小( 3伏除以1 0 0欧以上)。几乎可以肯定,电流的大小
不够点亮灯泡。
使用粗线是一个很好的解决方法,但价格太昂贵。 1 0号规格线(电器行的汽车电路耦合
线价格为每3 5英尺$ 11 . 9 9,而且你需要双倍长度因为它只有单线)大约 0 . 1英寸粗, 1 0 0 0英尺
为1欧姆,即1英里5欧姆。
另一个解决办法是增加电压,使用大电阻灯泡。比如使用 1 2 0伏电压的 1 0 0瓦家用照明灯
泡的电阻为 1 4 4欧姆。电线的电阻对于整个电路电流的影响将大大减小。
接下来的是1 5 0年前,人们在美洲和欧洲之间搭建第一个电报系统时所面临的问题。不管
电线多粗,电压多高,电报线还是不能无限延长。根据计划,工作系统的极限为 2 0 0英里。这
与纽约和加利福尼亚间的上千英里距离相差太多。
这个问题的答案 — 不是为手电筒,而是为过去的嘀嗒电报 — 虽说是一个简单易行的设
备,但是通过它,整个计算机得以构造。
作者: zzz19760225     时间: 2016-2-9 07:39
第6章 发报机与断电器
1 7 9 1年,萨缪尔・摩尔斯生于马萨诸塞州的查尔斯顿镇,该镇是邦克山之战的地点,也
是波士顿东北重镇。摩尔斯出生那年,美国宪法刚实施两年,乔治・华盛顿出任美国第一个
任期的总统职务。 C a t h e r i n e大帝统治俄国。路易十六世和 Marie Antoinette在两年后的法国大
革命中被送上断头台。 1 7 9 1年,莫扎特完成了《魔笛》,他的最后一部作曲,次年于 3 5岁时去
世。
摩尔斯在耶鲁受过教育,又在伦敦学过艺术,他是位著名
的肖像画家。他的作品《 General Lafayette》( 1 8 2 5 )珍藏于纽约
市政大厅。 1 8 3 6年,他曾参与过竞选纽约市市长且获得了 5 . 7 %
的选票。他也是早先的摄影术狂热爱好者。他从 Louis Daguerre
本人那儿学习了银版相片的制作,制造出了美国第一批用银版
照相术制成的相片, 1 8 4 0年,他把这个手艺传授给了 1 7岁的
Mathew Brady 。此人以及他的同事后来为美国内战、亚伯拉
罕・林肯和摩尔斯本人留下了一些很有纪念价值的照片。
这些只是一个多职业生涯者的足迹。摩尔斯最著名的贡献
在于他发明了电报和以他名字命名的编码。
世界范围内的即时通信我们已经很熟悉,但它是当今新技
术发展的结果。 1 9世纪早期,你可以即时通信和远距离通信,但不能同时达到两个要求。即
时通信只能限制在你的声音能达到(没有扩音器可用)或是你的眼睛能看到(也许得用望远
镜)的范围;远距离通信则要花时间用信件通过马车、火车或者轮船的方式来实现。
在早于摩尔斯发明的年代里,人们曾做过许多加速远距离通信的尝试。一种技术上简单
的方法是雇佣一批人接力,站在山顶上用旗语信号通信。技术上稍微复杂一点儿的方法是使
用巨大的带有可动手臂的装备,原理与旗语相同。
电报思想的正式成形是在 1 9世纪早期。 1 8 3 2年在摩尔斯开始试验之前,已经有其他科学
家在做一些试探。原理上讲,电报思想很简单:你在线的一端做某些事引起线的另一端发生
了某些事。这正是上一章用远距离手电筒所做的事情。但摩尔斯不可能使用灯泡作为他的信
号设备,因为实用性灯泡直到 1 8 7 9年才发明出来。摩尔斯使用的是电磁现象。
如果你取一只铁棒,用细导线将它绕几百圈,然后让电流通过导线,铁棒变成了磁铁,
这时它就能吸引其他的铁和钢。(电磁铁上细线的电阻足够大以防止电磁铁形成短路。)移开
电流,铁棒的磁性消失:26
编码的奥秘
下载
电磁铁是电报的基础。一端上开关的闭合引起另一端上的电磁铁产生一些动作。
摩尔斯最早的电报机比后来改进的要复杂得多。摩尔斯认为电报系统应该在纸上实际写
点儿什么 (这就像后来的电脑使用者描述的“生成一个硬拷贝” )。这当然不必是文字,因为文
字太复杂,但某些字符应该记录下来,或曲线或点或划。注意,摩尔斯坚持要用纸记录下发
报内容的这种想法,与 Valentin Haüy要求盲人书籍应该使用突起的字母文字一样。
尽管摩尔斯早在 1 8 3 6年就告知专利局他已经成功地发明了电报,但直到 1 8 4 3年,他才说
服议会为此设备的示范表演出资赞助。 1 8 4 4年5月2 4日是有历史意义的一天, Wa s h i n g t o n和
马里兰州巴尔的摩之间的电报线成功地传送了圣经上的一句话“ What hath God wrought!”。
传统电报机发送消息的核心部分如下图所示:
尽管外观比较怪,但它只是一个为高速开合(闭)设计的开关,称为“按键 /按钮”。长时
间按键最舒适的方式是在手掌的拇指、食指和中指之间握住把手,然后敲击。短时间敲击形
成摩尔斯电码的点,长时间敲击形成摩尔斯电码的划。
线的另一端是一个接收机,其基本结构是一个电磁铁吸拉一根金属拉杆。起初电磁铁控
制的是一支笔,当由小装置控制的机械通过弯曲的弹簧缓慢地拖拉一卷纸时,相连的笔上下
蹦弹将点划记录在纸上,懂得摩尔斯电码的人再将点划翻译成字母和文字。
当然,人是会偷懒的。电报机使用者很快发现只要简单地利用笔跳上跳下的声音他们就
能翻译编码。笔的装置最终被撤消,代替的是传统电报机的发声装置,称为“发声器 /音响器”,
结构如下:
当电报机的键按下时,发生器的电磁铁将可动棒拖下发出“滴”的声音;当键放开时,
棒弹回初始位置,发出“嗒”的声音。快速的“嘀嗒”为点,慢速的则为划。
按键、发声装置,电池和一些导线可像上一章所述手电筒电报一样连接起来:
你的电报站
你朋友的电报站第 6章 发报机与继电器
下载
27
我们已经知道,两个电报站之间不需要两根线。如果大地作为另一半回路的话,一根线
就足够了。
如上一章所做,我们用字母 V代替接地的电池,因此最终的单向设置如下图所示:
你的电报站
你朋友的电报站
双向通信只不过再需要一个按键和发生器。与上章所做相似。
电报的发明真正标志着现代通信的开始。人类首次能够在眼、耳的范围之外以快于马奔
跑的速度通信。发明中使用的二元码是其精华所在,但在后来的电子和无线电通信中,包括
电话、收音机和电视,二元码都没有用到,只到最近二元码才出现在计算机、 C D盘、D V D盘、
数字卫星电视广播和高清晰电视中。
摩尔斯的电报机战胜了其他设计 ,部分原因是它对不好的电线状态的容忍度比较大。假如
你在按键和发声装置之间接一根线,该电报机通常可以工作,但其他电报系统却不具备这样
的容忍性。但正如上章所谈及的,最大的问题在于长距离导线的电阻。尽管一些电报线使用
高达3 0 0伏的电压能在3 0 0英里的范围内工作,导线还是不能无限延伸。
一个明显的解决办法是使用转发(中继)系统,也称继电器系统。大约每 2 0 0英里就让某
位发报者通过发声装置接收消息再用按键发送出去。
现在想像一下你已被某电报公司雇佣为转发系统的工作人员。他们把你放在纽约和加利
福尼亚之间某个地方的一间简陋得只有一张桌子和一把椅子的小屋里。一根导线从东边的窗
户进来连到发声装置上。你的按键连在电池和从西边窗子出去的导线上。你的工作是接收来
自于纽约的消息然后把它们发送到加利福尼亚。
起初,你是接收了整条消息后再转发它。你记录下发声器的嘀嗒,到消息接收结束,你
再用你的按键将它们发送出去。最终你掌握了边听边发的技巧而不用把整条信息记录下来,
这节约了转发时间。
某天你在转发消息时,你注意到铁棒上下跳动又注意到了手指按动键的上下跳动。你看
了看发声器又看了看键,然后你意识到棒的上下跳动与按键的上下跳动是一致的,于是你出
去取回一根小木条,用这根木条和一些线把发声器和按键连接了起来:
输入
现在它可以自动工作了,你可以去喝下午茶也可以去钓鱼了。
输出28
编码的奥秘
下载
这只是一个趣味情景的想像。但实际上,摩尔斯很早就理解这个装置的思想。我们已经
发明的这个装置叫重发器或继电器。一个继电器就像一个发声装置,输入的电流形成电磁用
以拖动金属杆,金属杆作为开关的一个部分连接到外接的导线上。这样,微弱的输入电流被
扩大形成比较强的输出电流。
继电器的概要描述如下图所示:
输出
输入
输入电流激发电磁铁,电磁铁吸引一根有弹性的金属条作为开关从而输出电流:
输出
输入
因此电报按键、继电器和发声器大致连接如下:
你的电报站
继电站
你朋友的电报站下载
第 6章 发报机与继电器
29
继电器是一种卓越的设备。它是一个开关,但并不是由人工而是借助于电流进行开关操
作的。利用这种设备可以做出令人惊奇的事情。事实上,你可以用继电器装配出一台计算机
中的大部分部件。
是的,继电器这种设备是一种很好的发明,足以与电报相提并论。后面还将会用到,且
它会变得非常小巧、方便。但是,在能够使用它之前,得先学会数数。下载
第7章 十进制记数法
语言仅仅是一种编码的想法似乎很容易被人们接受,很多人在学生时代至少学过一种外语,
因此,我们知道在英语中“ c a t”(猫)也可以被叫作 g a t o、c h a t、K a t z e、K O I I I K或κ α π α。
然而,数字不那么容易随文化的不同而改变。不论那种语言,也不管怎样读那些数字,
地球上我们能够遇到的几乎所有的人都用同样的方式来写数字:
数学,从某种意义上来说是不是可以称得上是一种世界语言呢?
毫无疑问,数字是我们平时能够接触到的最抽象的代码。当你看到数字“ 3”时并不需要
立即将它和任何事情相联系。你可能将它设想为 3个苹果或者 3个其他什么东西,但是当你从
上下文中得知这个数字是指某个小孩的生日、电视频道、曲棍球比赛的得分或者是制作蛋糕
的食谱中提供的需要面粉的杯数时,也能够像认为它代表 3个苹果时一样自然。因为数字一开
始产生时就很抽象,所以让我们理解这些苹果:
并不一定要用符号“3”来表示就更困难了。本章的很大一部分以及下一章将来讲解这些苹果:
也可以用“ 11”的形式来表示。
先不讨论数字1 0与生俱来的特殊性。大多数人使用的数字系统是基于 1 0(有时候是 5)的,
这种情况并不奇怪。最初人们是用手指来数数的。要是人类进化成有 8个或1 2个手指,人类计
数的方式就会有所不同。英语 D i g i t(数字)这个单词也可以指手指或脚趾,单词 f i v e(五)和
单词f i s t(拳头)有相同的词根,这种情况并不是巧合。
这样看来,人类选择使用以 1 0为基础的记数方法(或称为十进制记数法)完全是任意的,
但我们赋予 1 0的整数次幂重大的意义,并给它们命名:十个一年是一个十年;十个十年是一
个世纪;十个世纪是一个千年;千个一千是百万;千个百万是十亿。下面是 1 0的各次幂:
1 0 1 = 10
1 0 2 = 100
1 0 3 = 1000(千)
1 0 4 = 10 000
1 0 5 = 100 000
1 0 6 = 1 000 000(百万)
1 0 7 = 10 000 000
1 0 8 = 100 000 000
1 0 9 = 1 000 000 000(十亿)下载
第 7章 十进制记数法
31
多数历史学家认为数字最初创造出来是用来数东西的,比如:人数、财产数、商品交易
量等。举个例子来说,假定某个人有 4只鸭子,他可能画 4只鸭子作为记录:
后来,专门负责画鸭子这项工作的人想:“我为什么一定要画 4只鸭子呢?为什么不能只
画1只鸭子,然后用其他方法(管它用什么方法,哪怕用一条竖线来代表一只鸭子)来表示有
4只呢?”
但若某人有 2 7只鸭子,用画竖线来表示鸭子只数的方法就显得很荒谬了:
于是,有人想到得有一种好的办法才行,数字系统就这样诞生了。
在早期的数字系统中,只有罗马数字系统沿用至今。钟表的表盘上常常使用罗马数字,
此外它还用来在纪念碑或雕像上标注日期、标注书的页码,或作为提纲条目的标记。最令人
惊奇的是罗马数字常用在电影中做版本说明。(只要你有足够快的速度将字幕结尾处出现的
M C M L I I I译码,通常情况下就可以回答“这部影片是什么时候拍的”这个问题。)
2 7只鸭子可以用罗马数字这样表示:
这里用到的概念非常简单: X代表1 0条竖线,V代表5条竖线。
现在仍在使用的罗马数字有:
字母I代表一个一,这可能来自于一条竖线或者伸出的一个手指。字母 V很可能是一只手
的符号,代表五;两个字母 V组成字母X,代表十;字母 L代表五十;字母 C来自于拉丁文中表
示一百的单词 — c e n t u m;字母D代表五百;最后,字母 M来自拉丁文中的单词 — m i l l e,代
表一千。
也许你不一定同意,很长一段时间以来,罗马数字被认为用来做加减运算非常容易,这
也是罗马数字能够在欧洲被长期用于记帐的原因。事实上,当对两个罗马数字进行相加运算
时,只需将这两个罗马数字的所有符号合并然后用下面的方法将其简化:五个 I是一个 V,两
个V是一个X,五个X是一个L,等等。
但使用罗马数字做乘除法是很难的。很多其他早期的数字系统(比如古希腊数字系统)
和罗马数字系统相似,它们在做复杂运算时存在一定的不足。尽管如此,古希腊人所发明的32
编码的奥秘
下载
非凡的几何学至今仍是中学的一门课程,古希腊人不是以代数享誉世界的。
我们现在使用的数字系统通常称为阿拉伯数字系统,或称为印度—阿拉伯数字系统。它
起源于印度,但由阿拉伯数学家传入欧洲。一位著名的波斯数学家 — Muhammed ibn-Musa
a l - K h w a r i z m i(由它的名字得到单词 a l g o r i t h m(算法))在大约公元 8 2 5年写了一本代数书,
书中用的就是印度的数字系统(阿拉伯数字)来计数。产生于公元 11 2 0年的拉丁文译本对整
个欧洲用现在的阿拉伯数字代替当时使用的罗马数字的过渡过程产生了很大的影响。
印度—阿拉伯数字系统与先前的数字系统相比在以下三个方面不同:
• 印度-阿拉伯数字系统是和位置相关的,也就是说,一个数字依据位置的不同代表不同
的数量。数字的位置和数字的大小一样,都是很重要的。(但实际上,数字的位置更重
要。)1 0 0和1 000 000中都只有一个1,但我们知道一百万比一百要大得多。
• 几乎所有早期的数字系统都有一个阿拉伯数字所没有的东西,那就是用来表示数字 1 0的
一个专门的符号。现在使用的数字系统中是没有代表 1 0的专门符号的。
• 另一方面,几乎所有早期的数字系统都缺少一个阿拉伯数字中有的,而且事实证明是比
代表数字1 0的符号重要得多的符号,那就是零。
是的,就是零。这个小小的零毫无疑问是数字和数学历史上最重要的发明之一。它支持
位置表示法,因为它可以将 2 0 5与2 5 0区别开来。数字零也使得与位置无关的数字系统中非常
复杂的运算变得简单,尤其是乘除法。
印度—阿拉伯数字的整体结构是以读它们的方式展现的。拿 4 8 2 5作为例子,我们把它读
作“四千八百二拾五”,意思是:
四个一千
八个一百
两个十
一个五
或者,可以将它的组成写成这样:
4 8 2 5 = 4 0 0 0 + 8 0 0 + 2 0 + 5
或者,可以将它进一步分解,写成这样:
4 8 2 5 = 4×1 0 0 0 +
8×1 0 0 +
2×1 0 +
5×1
另外,也可以使用 1 0的整数次幂的形式,重新写成:
4 8 2 5 = 4×1 0 3 +
8×1 0 2 +
2×1 0 1 +
5×1 0 0
记住,任何数的 0次幂都等于 1。
多位数中的每位都有特定的意义,如下图所示。这 7个方格可以表示从 0~9 999 9999的任
何一个数字:第 7章 十进制记数法
下载
33
1的个数
10的个数
100的个数
1000的个数
10 000的个数
100 000的个数
1 000 000的个数
每一个位置(位)与 1 0的一个整数次幂相对应。不需要一个专门的符号来表示数字 1 0,
因为可以将 1放在不同的位置,用 0作为占位符。
分(小)数可以同样的形式作为数字放在十进制数的小数点的右边,这一点非常好。数字 4 2
7 0 5 . 6 8 4是:
4×10 000+
2×1 0 0 0 +
7×1 0 0 +
0×1 0 +
5×1 +
6÷1 0 +
8÷1 0 0 +
4÷1 0 0 0
该数也可以写成不带除法的形式,如下:
4×10 000+
2×1 0 0 0 +
7×1 0 0 +
0×1 0 +
5×1 +
6×0 . 1 +
8×0 . 0 1 +
4× 0 . 0 0 1
或写成1 0的整数次幂的形式:
4×1 0 4 +
2×1 0 3 +
7×1 0 2 +
0×1 0 1 +
5×1 0 0 +
6×1 0 -1 +
8×1 0 -2 +
4×1 0 -334
编码的奥秘
下载
注意1 0的指数是怎样变到零再变成负数的。
我们知道, 3加上4等于7。同样, 3 0加上4 0等于7 0,3 0 0加上4 0 0等于7 0 0,3 0 0 0加上4 0 0 0
等于7 0 0 0。这正是阿拉伯数字系统的“魅力”所在,无论你进行多长的十进制的加法,只要
根据一种方法将问题分成几步即可。每一步最多只是将两个一位数字相加,这也是很久以前
有人强迫你记加法表的原因:
从最上边的一行和最左边的一列找到要相加的两个数字,在行与列的交叉点上找到它们
相加的结果。例如, 4加上6等于1 0。
同样,做两个十进制数相乘的运算时,方法可能稍稍复杂一点儿,但仍然只需将问题分
成几步,这样就不会比做加法和一位数的乘法更复杂了。你在小学时可能也必须记住下面的
乘法表:下载
第 7章 十进制记数法
35
与位置相关的记数系统的优点不在于它多么好用,而在于当它用在不是十进制的系统中
时,也一样的好用。我们现在用的数字系统不一定适合所有的人。十进制数字系统的一个很
大问题就在于它和卡通人物没有任何关系。大多数的卡通人物每只手上只有 4个手指,因此它
们喜欢基于 8的数字系统(八进制)。有趣的是,我们所知的大部分关于十进制数的知识同样
可以用于卡通朋友所喜爱的八进制数字系统中。下载
第8章 其他进位制记数法
1 0对我们来说是一个非常重要的数字。 1 0是我们大多数人拥有的手指或脚趾的数目,我
们当然希望所有人的手指脚趾都是 1 0个。因为我们的手非常适合数数,因而我们人类已经适
应了以1 0为基础的数字系统:
前面数章已经提到过,通常使用的数字系统称为以 1 0为基础的数字系统或十进制。这个
数字系统对我们来说非常自然,因而我们很难想像出还有其他的数字系统。事实上,当我们
看到数字1 0的时候,不由自主地就会认为这个数是指下面这么多只鸭子:
但是,数字1 0是指这么多只鸭子的唯一理由是因为这么多只鸭子与我们的手指数目相同。
如果人类不是有那么多只手指,我们数数的方式就会有所不同,数字 1 0就可能代表别的东西
了。同样是数字 1 0,可以指这么多只鸭子:
或这么多只鸭子:
甚至可以是这么多只鸭子:
当我们明白了 1 0可以指只有两只鸭子的时候,也就可以解释开关、电线、灯泡、继电器
(或干脆就叫计算机)是怎样表示数字的了。下载
第8章 其他进位制记数法
37
如果人类像卡通人物那样,每只手上只有 4个手指会怎样呢?我们可能永远都不会想到要
发明一种以 1 0为基础的数字系统的问题,取而代之的是我们可能会认为数字系统基于 8是正常、
自然、合理、必然的,是毫无疑问的,是非常合适的。这时,就不能称之为十进制了,得将
它称作为以 8为基础的数字系统或八进制。
如果数字系统是以 8为基础组织起来的,就不需要这样的一个符号:
把这个符号拿给任何一个卡通人物看,都会有同样的反应:“那是什么?它是干什么用
的?”如果再仔细想一会儿的话,你会发现连这样的一个字符也不需要:
在十进制数字系统中,没有专门用来表示 1 0的符号,所在在八进制数字系统中,也没有
专门用来表示1 0的符号。
在十进制数字系统中数数的方式是 0、1、2、3、4、5、6、7、8、9,然后是 1 0。在八进
制数字系统中数数的方式是 0、1、2、3、4、5、6、7,然后是什么呢?我们已经没有符号可
用了,唯一的一个有意义的可用符号是 1 0,的确是那样。在八进制数中, 7之后紧接着的数字
是1 0,但是 1 0并不是指人类的手指那么多的数目。在八进制数中, 1 0指的是卡通人物手指的
数目:
继续数脚趾头:
使用非十进制的数字系统时,将数字“ 1 0”读作“么零”可以避免一些混淆。同样,
“1 3”
可以读作“么三”,“2 0”可以读作“二零”。要想真正避免混淆,可以将“ 2 0”读作“八进制
二零”或“基于 8的数二零”。
即使没有手指和脚趾帮忙,我们仍能够将八进制数继续数下去。除了要跳过那些含有 8或
9的数字以外,它基本上和数十进制的数是一样的。当然,相同的数字代表的数量是不同的:38
编码的奥秘
下载
0、1、2、3、4、5、6、7、1 0、11、1 2、1 3、1 4、1 5、1 6、1 7、
2 0、2 1、2 2、2 3、2 4、2 5、2 6、2 7、3 0、3 1、3 2、3 3、3 4、3 5、3 6、3 7、4 0、
4 1、4 2、4 3、4 4、4 5、4 6、4 7、5 0、5 1、5 2、5 3、5 4、5 5、5 6、5 7、6 0、6 1、6 2、
6 3、6 4、6 5、6 6、6 7、7 0、7 1、7 2、7 3、7 4、7 5、7 6、7 7、1 0 0 . . .
最后一个数字读作“么零零”,是卡通人物拥有的手指数自乘的结果(即平方)。
在写十进制或八进制数时,为避免混淆,可以借助使用特定的标记以区别表示数字系统。
下面用标记“T E N”表示十进制数,标记“ E I G H T”表示八进制数。
这样,白雪公主遇到的小矮人的数目是 7 T E N 或7 E I G H T
卡通人手的手指数是 8 T E N 或1 0 E I G H T
贝多芬写的交响乐的首数是 9 T E N 或11 E I G H T
人的手指的数目是 1 0 T E N 或1 2 E I G H T
一年中的月份数是 1 2 T E N 或1 4 E I G H T
两个星期所包含的天数是 1 4 T E N 或1 6 E I G H T
“情人”的生日庆祝会是 1 6 T E N 或2 0 E I G H T
一天中所包含的小时数是 2 4 T E N 或3 0 E I G H T
拉丁字母表中的字符数是 2 6 T E H 或3 2 E I G H T
与一夸脱液体相当的盎司数为 3 2 T E N 或4 0 E I G H T
一副牌中含有的牌数是 5 2 T E N 或6 4 E I G H T
国际象棋棋盘的方格数是 6 4 T E N 或1 0 0 E I G H T
Sunset Strip 最著名的1 7牌号是7 7 T E N or 11 5 E I G H T
美式足球场的面积是 1 0 0 T E N 或1 4 4 E I G H T
参加温布尔登网球公开赛女单初赛的人数是 1 2 8 T E N 或2 0 0 E I G H T
古埃及孟斐斯城市面积的平方英里数是 2 5 6 T E N or 400 E I G H T
注意,在上面一系列的八进制数中,有一些好整数,像 1 0 0 E I G H T 、2 0 0 E I G H T 、 4 0 0 E I G H T 。好整
数通常是指结尾有一些零的数。在结尾处有两个零的十进制数意味着它是 1 0 0 T E N 即1 0 T E N 乘以
1 0 T E N ;在八进制数中,结尾处有两个零表示它是 1 0 0 E I G H T 即1 0 E I G H T 乘以1 0 E I G H T (或8 T E N 乘以8 T E N ,
等于6 4 T E N )。
你可能已经注意到了,好的八进制整数 1 0 0 E I G H T 、2 0 0 E I G H T 和4 0 0 E I G H T 与十进制数6 4 T E N 、128
T E N

2 5 6 T E N 相等,它们都是 2的整数次幂。例如, 4 0 0 E I G H T 等于4 E I G H T 乘以1 0 E I G H T 乘以1 0 E I G H T ,所有这些
数都是 2的整数次幂。任何时候,将 2的整数次幂和另一个 2的整数次幂相乘,得到的仍是 2的
整数次幂。
下表给出了一些 2的整数次幂的十进制及其对应的八进制的表示形式:
2的整数次幂
2 0
2 1
2 2
2 3
2 4
2 5
2 6
十进制数
1
2
4
8
1 6
3 2
6 4
八进制数
1
2
4
1 0
2 0
4 0
1 0 0第8章 其他进位制记数法
下载
39
(续)
2
2 8
2 9
2 1 0
2 11
2 1 2
7
1 2 8
2 5 6
5 1 2
1 0 2 4
2 0 4 8
4 0 9 6
2 0 0
4 0 0
1 0 0 0
2 0 0 0
4 0 0 0
1 0 0 0 0
最右边一列的好整数给我们一个暗示:十进制以外的数字系统可能对使用二元码有所帮
助。
八进制数字系统和十进制数字系统在结构上没有什么差别,只是在细节上有一些差异。
例如,八进制数的每一个位置代表的值是该位数字乘以 8的整数次幂的结果:
1的个数
8的个数
64的个数
512的个数
4096的个数
32768的个数
这样,八进制数 3 7 2 5 E I G H T 可以拆分成这样:
3 7 2 5 E I G H T = 3000 E I G H T + 700 E I G H T + 20 E I G H T + 5 E I G H T
还可以写成另外几种不同的形式。下面就是其中的一种,采用十进制形式的 8的整数次幂:
3 7 2 5 E I G H T = 3×5 1 2 T E N +
7×6 4 T E N +
2×8 T E N +
5×1
采用八进制形式的 8的整数次幂的情况:
3 7 2 5 E I G H T = 3×1 0 0 0 E I G H T +
7×1 0 0 E I G H T +
2×1 0 E I G H T +
5×1
还有另外的一种拆分形式:
3 7 2 5 E I G H T = 3×8 3 +
7×8 2 +
2×8 1 +
5×8 0
如果算出其十进制的结果,会得到 2 0 0 5 T E N 。这就是将八进制数转换成十进制数的方法。
可以采用与做十进制加法和乘法相同的办法来做八进制数的加法和乘法。唯一真正的区别
在于要采用不同的表格来对各个数字进行乘法或加法运算。下面是八进制数的加法表:40
编码的奥秘
下载
例如,5 E I G H T + 7 E I G H T = 14 E I G H T 。可以采用与做十进制加法相同的方法将两个稍长一点儿的
八进制数相加:
1 3 5
+ 643
1 0 0 0
先从最右边的一列做起, 5加上3等于1 0,该位写下 0,向前进 1;1加3加4等于1 0 ,该位写
下0,向前进1;1加1加6等于1 0。
同样,在八进制中, 2乘以2仍然等于 4。但是 3乘以3却不等于 9,那是多少呢? 3乘以3等
于11 E I G H T ,此数与9 T E N 所代表的数量相等。下图是完整的八进制数的乘法表:
这里,4×6等于3 0 E I G H T ,也即表明 3 0 E I G H T 和4×6的十进制结果2 4 T E N 是等值的。
八进制数字系统与十进制数字系统一样,都是有效的,但八进制数字系统在理解上更深
了一层。既然我们已为卡通人物开发出了一套数字系统,就再给龙虾开发一套适合它们用的
数字系统吧。龙虾根本没有手指,但它两只前爪的末端都有螯。适合于龙虾的数字系统是四第8章 其他进位制记数法
下载
41
进制数字系统或称为基于 4的数字系统:
四进制数可以这样来数:
0、1、2、3、1 0、11、1 2、1 3、2 0、2 1、2 2、2 3、3 0、3 1、3 2、3 3、1 0 0、1 0 1、1 0 2、
1 0 3、11 0,等等。
这里不打算在四进制数上花太多的时间,因为还有更重要的事情要做。但我们还是要看
一下四进制中的每一位是怎样和 4的某个整数次幂相对应的:
1的个数
4的个数
16的个数
64的个数
256的个数
1024的个数
四进制数3 1 2 3 2可以写成:
3 1 2 3 2 F O U R = 3×2 5 6 T E N +
1×6 4 T E N +
2×1 6 T E N +
3×4 T E N +
2×1 T E N
也可以写成:
3 1 2 3 2 F O U R = 3×1 0 0 0 0 F O U R +
1×1 0 0 0 F O U R +
2×1 0 0 F O U R +
3×1 0 F O U R +
2×1 F O U R
还可以写成:
3 1 2 3 2 F O U R = 3×4 4 +
1×4 3 +
2×4 2 +
3×4 1 +
2×4 042
编码的奥秘
下载
如果以十进制数的形式计算其结果,就会发现 3 1 2 3 2 F O U R 等于8 7 8 T E N 。
现在,我们要做一个跳跃并且是最远的一跳。假定我们是海豚,并且必须用两鳍来数数。
则这个数字系统就是基于 2的数字系统或二进制的。这样似乎只需要两个数字,即 0和1。
现在, 0和1已是你要处理的全部问题,需要练习一下才能习惯使用二进制数。二进制数
最大的问题是数字用完得很快。例如,下图是海豚怎样用它的鳍数数的例子:
是的,在二进制中,1后面的数字是1 0。这是令人惊讶的,但也并不奇怪。无论使用哪种数
字系统,当单个位的数字用完时,第一个两位数字都是1 0。在二进制系统中,可以这样来数数:
0、1、1 0、11、1 0 0、1 0 1、11 0、111、1 0 0 0、1 0 0 1、1 0 1 0、
1 0 11、11 0 0、11 0 1、111 0、1111、1 0 0 0 0、1 0 0 0 1、......
这些数看起来好像很大,实际上并不是这样。更准确地说二进制数长度增长的速度要快
过二进制数增大的速度:
每个人的头的个数为 1 T E N 或1 T W O
海豚身上的鳍的个数为 2 T E N 或1 0 T W O
一个大汤匙中包括的小茶匙的数目为 3 T E N 或11 T W O
正方形的边数为 4 T E N 或1 0 0 T W O
每个人一只手的手指数为 5 T E N 或1 0 1 T W O
一种昆虫的腿数为 6 T E N 或11 0 T W O
一星期的天数为 7 T E N 或111 T W O
八重奏中音乐家的个数为 8 T E N 或 1 0 0 0 T W O
太阳系中的行星(包括冥王星在内)总数为 9 T E N 或1 0 0 1 T W O
牛仔帽重量以加仑计算为 1 0 T E N 或1 0 1 0 T W O
等等。
在多位二进制数中,数字的位置和 2的整数次幂的对应关系为:
1的个数
2的个数
4的个数
8的个数
16的个数
32的个数
因此,任何时候由一个 1后跟几个零构成的二进制数一定是 2的整数次幂。 2的幂与二进制43
第8章 其他进位制记数法
下载
数中零的个数相等。下面是扩充的 2的各次幂的表,可用来说明这条规则:
2的幂
十进制数
八进制数
四进制数
二进制数
0 1 1 1 1
2 1 2 2 2 1 0
2 2 4 4 1 0 1 0 0
2 3 8 1 0 2 0 1 0 0 0
2 4 1 6 2 0 1 0 0 1 0 0 0 0
2
5 3 2 4 0 2 0 0 1 0 0 0 0 0
2 6 6 4 1 0 0 1 0 0 0 1 0 0 0 0 0 0
2 7 1 2 8 2 0 0 2 0 0 0 1 0 0 0 0 0 0 0
2 8 2 5 6 4 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0
2 9 5 1 2 1 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0
2 1 0 1 0 2 4 2 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
2
2 11 2 0 4 8 4 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
2 1 2 4 0 9 6 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
假定有一个二进制数 1 0 11 0 1 0 11 0 1 0,它可以写成:
1 0 11 0 1 0 11 0 1 0 T W O = 1×2 0 4 8 T E N +
0×1 0 2 4 T E N +
1×5 1 2 T E N +
1×2 5 6 T E N +
0×1 2 8 T E N +
1×6 4 T E N +
0×3 2 T E N +
1×1 6 T E N +
1×8 T E N +
0×4 T E N +
1×2 T E N +
0×1 T E N
也可以这样写:
1 0 11 0 1 0 11 0 1 0 TWO = 1×2 11 +
0×2 1 0 +
1×2 9 +
1×2 8 +
0×2 7 +
1×2 6 +
0×2 5 +
1×2 4 +
1×2 3 +
0×2 2 +
1×2 1 +
0×2 044
编码的奥秘
下载
如果将各个部分以十进制数的形式相加,得到 2 0 4 8 + 5 1 2 + 2 5 6 + 6 4 + 1 6 + 8 + 2=2 9 0 6 T E N 。
将二进制数转换成十进制数非常简单,你可能更喜欢借助已准备好的模板进行转换:
×128
×64
×32
×16
×8
×4
×2
×1
这个模板允许你转换最大长度为 8的二进制数,但它扩充起来非常容易。使用时,将 8个
二进制数字放到上部的 8个小盒子中,一个盒子放一个数字。做 8个乘法运算,将结果分别放
到底部的 8个小盒子中。将 8个盒子中的数字相加就得到最终结果。下面是将 1 0 0 1 0 11 0转化成
十进制数的例子:
×128
×64
×32
×16
×8
×4
×2
×1
将十进制数转换成二进制数就没那么直接了。但这里也有一个帮助你将 0~2 2 5范围内的
十进制数转换成二进制数的模板:
实际转化过程要表面上看的麻烦得多,所以一定要仔细按照下面的指导来做。将整个十
进制数(应小于等于 2 2 5)放在左上角的方格中。用除数( 1 2 8)去除那个数(被除数),如下
图所示。将商写在正下方的盒子中(即左下角的盒子中),余数写在右边的盒子中(即上面一
行左数第二个盒子中)。用第一个余数再除以下一个算子 6 4。依照模板的顺序用同样的方法继
续做下去。
记住,每次求得的商只能是 0或者1。如果被除数小于除数,商为 0,余数和被除数相等;
如果被除数大于除数,商为 1,余数为被除数与除数之差。下面是将 1 5 0转换成二进制数的过
程:
如果要做两个二进制数的加法或乘法,也许直接采用二进制来做比转化成十进制再做还
要简单。这将是你真正喜欢二进制数的地方。如果只需记住下面的二进制加法表就可以做加
法运算,也就不难想象掌握加法运算该有多快:
+ 0 1
0
1 0
1 1
1 0
用二进制加法表将两个二进制数相加:第8章 其他进位制记数法
下载
45
1 1 0 0 1 0 1
+ 0 1 1 0 1 1 0
1 0 0 1 1 0 1 1
从最右边的一列开始做起:1加上0等于1;右数第 2列:0加上1等于1;第3列:1加上1
等于0,进位为1;第4列:1(进位值)加上 0再加上0等于1;第5列:0加上1等于1;第6列:1
加1等于0,进位为1;第7列:1(进位值)加上 1再加上0等于1 0。
乘法表比加法表更简单,因为该表可以由两个基本的乘法规则推导出来:零乘以任何数
都等于0,1与任何数相乘仍是那个数本身:
× 0 1
0 0 0
1 0 1
下面是1 3 T E N 与11 T E N 以二进制数的形式做乘法的过程:
1 1 0 1
× 1 0 1 1
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
1 0 0 0 1 1 1 1
最后结果是 1 4 3 T E N 。
人们在使用二进制数的时候通常将它们写成带有前导零的形式(即第一个 1的左边有零)。
例如, 0 0 11而不写成 11。这些零不会改变数字的值,只是起到一些装饰作用。例如,下面是
二进制的前 1 6个数以及和它们等值的十进制数:
二进制数 十进制数
0 0 0 0
0 0 0 1
0 0 1 0
0 0 11
0 1 0 0
0 1 0 1
0 11 0
0 111
1 0 0 0
1 0 0 1
1 0 1 0
1 0 11
11 0 0
11 0 1
111 0
1111 0
1
2
3
4
5
6
7
8
9
1 0
11
1 2
1 3
1 4
1 5
让我们再仔细看看这些二进制数字。考虑一下这 4个垂直列中每一列的 0和1,注意它们在
一列中自上而下是以怎样的规律变化的:46
编码的奥秘
下载
• 最右边一列一直在 0和1之间相互替换。
• 右数第2列在两个0和两个1之间相互替换。
• 右数第3列在四个0和四个1之间相互替换。
• 右数第4列在八个0和八个1之间相互替换。
这是很有规律的,难道不是吗?事实上,只要再重复这 1 6个数字并且在每个数字的前面
放一个1就可以很容易地写出后面的 1 6个数字:
二进制数 十进制数
1 0 0 0 0
1 0 0 0 1
1 0 0 1 0
1 0 0 11
1 0 1 0 0
1 0 1 0 1
1 0 11 0
1 0 111
11 0 0 0
11 0 0 1
11 0 1 0
11 0 11
111 0 0
111 0 1
1111 0
11111 1 6
1 7
1 8
1 9
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 0
3 1
下面是看待这些数字的另一种方式:在数二进制数的时候,最右边的数字(也称最低位
数字)是在 0和1之间变化的。当它每次从 1变到0时,右数第二位数字(也称次低位数字)也
要发生变化,或者从 0变到1,或者从 1变到0。每次只要有一个二进制数位的值由 1变到0,紧
挨着的高位数字也会发生变化,要么从 0变到1,要么从1变到0。
我们在写十进制中比较大的数字时,通常每三个数字之间留一点儿空隙,这样,我们一
看就知道这个数的大概数值。例如,当你看到数字 1 2 0 0 0 0 0 0时,你可能不得不去数其中 0的个
数,但如果看到的是 12 000 000,则马上就能知道是一亿两千万。
二进制数的位长度增加得特别快。例如,一亿两千万的二进制表示为:
1 0 11 0 111 0 0 0 11 0 11 0 0 0 0 0 0 0 0。为了让它更易读,通常是每四个数字之间用连字符或空格来分
开。例如; 1 0 11 - 0 111 - 0 0 0 1 - 1 0 11 - 0 0 0 0 - 0 0 0 0或1 0 11 0 111 0 0 0 11 0 11 0 0 0 0 0 0 0 0。本书的后面会讲
到更简单的二进制数的表示方法。
通过将数字系统减少至只有 0和1两个数字的二进制数字系统,我们已经在能够接受的范
围内做了深入的讨论。不可能找到比二进制数字系统更简单的数字系统了。二进制数字系统
架起了算术与电之间的桥梁。前面各章中,我们所看到的开关、电线、灯泡、继电器等物体
都可以表示二进制数 0和1:
电线可以表示二进制数字。有电流流过电线代表二进制数字 1;如果没有,则代表二进制
数字0。
开关可以表示二进制数字。如果开关闭合,代表二进制数字 1;如果开关断开,代表二进
制数字0。
灯泡可以表示二进制数字。如果灯泡亮着,代表二进制数字 1;如果没亮,代表二进制数下载
第8章 其他进位制记数法
47
字0。
电报继电器可以表示二进制数字。继电器闭合,代表二进制数字 1;继电器断开,代表二
进制数字0。
二进制数与计算机密切相关!
大约在1 9 4 8年,美国数学家 John Wilder Tukey (生于1 9 1 5年)提前认识到二进制数将在
未来几年中随着计算机的流行而发挥更大的作用。他决定创造一个新的、更短的词来代替使
用起来很不灵活的五音节词 — binary digit。他曾经考虑用 b i g i t或b i n i t,但最后还是选用了短
小、简单、精巧且非常可爱的单词 b i t (比特)来代替binary digit这个词。下载
第9章 二 进 制 数
1 9 7 3年,当安东尼・奥兰多在他写的一首歌中要求他挚爱的人“系一条黄色的绸带在橡
树上”时,他并没有要求他的爱人进行繁琐的解释或冗长的讨论,只要求她给他一个简单的
结果。他不去关心其中的因果,即使歌中复杂的感情和动情的历史在现实生活中重演,所有
的人真正想知道的仅仅是一个简单的是或不是。他希望在树上系一条黄色的绸带来表示:“是
的,即使你犯了很大的错,并且被判了入狱三年,我仍希望你回来和我一起共渡时光。”他希
望用树上没有黄色的绸带来表示:“你连停在这里都别想。”
这是两个界线分明、相互排斥的答案。奥兰多没有这样唱:“如果你想再考虑一下的话,
就系半条黄色的绸带”或者“如果你不爱我但仍希望我们是朋友,就系一条蓝色的绸带吧”。
相反,他让答案非常的简单。
和黄色绸带的有无具有同样效果的另外几个例子(但可能无法用在诗里)是可以选择一
种交通标记放在院外,可能是“请进”或 “此路不通”。
或者在门上挂一个牌子,上写“关”或“开”。
或者用从窗口能够看到的一盏灯的亮灭来表示。
如果你只需说“是”或“不是”的话,可以有很多种方式来表达。你不必用一个句子来
表达是或不是,也不需要一个单词,甚至连一个字母都不要。你只要用一个比特,即只要一
个0或1即可。
正如我们在前面的章节中所了解到的,通常用来计数的十进制数事实上并没有什么与众
不同的地方。非常清楚,我们的数字系统之所以是基于 1 0的(十进制数)是因为我们有 1 0个
手指头。我们同样有理由使用八进制数字系统(如果我们是卡通人物)或四进制数字系统
(如果我们是龙虾),甚至是二进制数字系统(如果我们是海豚)。
但是,二进制数字系统有一点儿特别:它可能是最简单的数字系统。二进制数字系统中
只有两种二进制数字 — 0和1。要是我们想寻求更简单的数字系统,只好把数字 1去掉,这样,
就只剩下0一个数字了。只有一个数字 0的数字系统是什么都做不成的。
“b i t (比特)”这个词被创造出来代表“ binary digit”,它的确是新造的和计算机相关的最可
爱的词之一。当然,“b i t”有其通常的意义:“一小部分,程度很低或数量很少”。这个意义用
来表示比特是非常精确的,因为 1比特 — 一个二进制数字位 — 确实是一个非常小的量。
有时候当一个新词诞生时,它还包含了一种新的意思。 b i t这个词也是这样。 1比特的意思
超过了被海豚用来数数的二进制数字位所包含的意义。在计算机时代,比特已经被看作是组
成信息块的基本单位。
当然,上述说法不一定完全正确,比特并不是传送信息的唯一的方式。字母、单词、摩
尔斯码、布莱叶盲文,十进制数字都可以用来传递信息。比特传递的信息量很小。 1比特只具
备最少的信息量,更复杂的信息需要多位比特来传递。(我们说比特传递的信息量小,并不是
说它传送的信息不重要。事实上黄绸带对于与它相关的两个人来说是一个非常重要的信息。)
“听,孩子们,你们很快就能听到 Paul Revere 午夜的马蹄声。”享利・朗费罗写道。尽管第9章 二 进 制 数
下载
49
他在描述 Paul Revere是怎样通知美国人英国殖民者入侵的消息时不一定与史实完全一致,但
他的确提供了一个利用比特传递信息的令人茅塞顿开的例子:
(他告诉他的朋友:“如果英军今晚入侵,
你就在北教堂的钟楼拱门上悬挂点亮的提灯
作为信号。一盏提灯代表英军由陆路入侵,
两盏提灯代表英军由海路入侵。...... )
也就是说,Paul Revere 的朋友有两盏灯。如果英军由陆路入侵,他就挂一盏灯在教堂的
钟楼上;如果英军由海路入侵,他就挂两盏灯在教堂的钟楼上。
然而,朗费罗并没有将所有的可能都涉及到。他留下第三种情况没有说,那就是英军根
本就没有入侵的情况。朗费罗已经暗示第三种可能的信息可以由不挂提灯的方式来传递。
让我们假设那两盏灯是永久固定在教堂钟楼上的。在正常情况下,它们都不亮:
这就是指英军还没有入侵。如果一盏提灯亮:

表示英军正由陆路入侵。如果两盏提灯都亮:50
编码的奥秘
下载
表示英军正由海路入侵。
每一盏提灯都代表一个比特。亮着的灯表示比持值为 1,未亮的灯表示比特值为 0。前面
奥兰多已经说明了传送只有两种可能性的信息只需要一个比特。如果 Paul Revere只需被告知
英军正在入侵(不管是从何处入侵)的消息,一盏提灯就足够了。点亮提灯代表英军入侵,
未点亮提灯代表又是一个和平之夜。
传递三种可能性的消息还需要再有一盏提灯。一旦再有一盏提灯,两个比特就可以通知
有四种可能的信息:
0 0 =英军今晚不会入侵
0 1 =英军正由陆路入侵
1 0 =英军正由陆路入侵
11 =英军正由海路入侵
Paul Revere将三种可能性用两盏提灯来传送的做法事实上是相当富有经验的。用通信理
论的术语说,他采用了冗余的办法来降低噪声的影响。通信理论中的噪声是指影响通信效果
的任何事物。电话线路中的静电流显然是影响电话通信的一种噪声。然而,即使是在有噪声
的情况下,电话通信仍能够成功,因为口语中存在大量的冗余。你同样可以听懂对方的话而
无需将每个音节、每个字都听得很清楚。
在上述例子中,噪声是指晚上光线黯淡以及 Paul Revere 距钟楼有一定的距离,它们都阻
碍了Paul Revere声将钟楼上的两盏灯区分清楚。下面是朗费罗的诗中很重要的一段:
(哦!他站在与钟楼等高的位置观察,
一丝微光,然后,有一盏灯亮了!
他跳上马鞍,调转马头,
徘徊,凝视,直到看清所有的灯
另一盏灯也亮了!)
那当然不是说Paul Revere正在辨清到底是哪盏灯先亮的问题。
这里最本质的概念是信息可能代表两种或多种可能性的一种。例如,当你和别人谈话时,
说的每个字都是字典中所有字中的一个。如果给字典中所有的字从 1开始编号,我们就可能精
确地使用数字进行交谈,而不使用单词。(当然,对话的两个人都需要一本已经给每个字编过
号的字典以及足够的耐心。)
换句话说,任何可以转换成两种或多种可能的信息都可以用比特来表示。不用说,人类
使用的很多信息都无法用离散的可能性来表示,但这些信息对我们人类的生存又是至关重要
的。这就是人类无法和计算机建立起浪漫关系的原因所在(无论怎样,都希望这种情况不会
发生)。如果无法将某些信息以语言、图片或声音的形式表达,那也不可能将这些信息以比特
的形式编码。当然,你也不会想将它们编码。
举手或不举手是一个比特的信息。两个人是否举手 —就像电影评论家 Roger Ebert和刚去第9章 二 进 制 数
下载
51
世不久的 Gene Siskel对新影片提供他们最终的评价结果那样 — 传递两个比特的信息。(我们
将忽略掉他们实际上对影片做的评语,而只关心他们有没有举手的问题。)这样,我们用两个
比特代表四种可能:
00 = 他们都不喜欢这部影片
01 = Siskel 讨厌它,E b e r t喜欢它
10 = Siskel 喜欢它,E b e r t讨厌它
11 = Siskel和E b e r t都喜欢它
第一个比特值代表 S i s k e l的意见, 0表示S i s k e l讨厌这部影片, 1表示S i s k e l喜欢这部影片。
同样,第二个比特值代表 E b e r t的意见。
因此,如果你的朋友问你 S i s k e l和E b e r t是怎么评价《Impolite Encounter》这部电影的,你
不用回答“S i s k e l举手了,E b e r t没有举手”或者“S i s k e l喜欢这部电影,E b e r t不喜欢这部电影”,
你可以简单地回答“么零”。你的朋友只要知道哪一位代表的是 S i s k e l的意见,哪一位代表的
是E b e r t的意见,并且知道值为 1代表举手,值为 0代表没有举手,你的回答就是可以被人理解
的。当然,你和你的朋友都要知道这种代码的含义。
我们也可以一开始就声明值为 1的比特位表示没有举手,值为 0的比特位表示举手了,这
可能有点违反常规。通常我们会认为值为 1的比特位代表正面的事情,而值为 0的比特位代表
相反的一方面,这的确只是一种很随意的指派。无论怎样,用此种代码的人只要明白 0、1分
别代表什么就可以了。
某一位或几位比特位的集合所代表的意义通常是和上下文相关的。橡树上的黄绸带可能
只有系绸带的人和期望看到绸带的人知道其中的意思,改变绸带的颜色、系绸带的树或系绸
带的日期,绸带可能会被认为只是一块毫无意义的破布。同样,要从 S i s k e l和E b e r t的手势中
得到有用的信息,我们至少要知道正在讨论的是哪部影片。
如果你保存了 S i s k e l和E b e r t对一系列影片的评价和投票结果,你就有可能在表示 S i s k e l和
E b e r t意见的比特信息中再增加一位代表你自己的观点的比特位。增加的第三位使得其代表的
信息可能性增加到 8种:
000 = Siskel讨厌它,E b e r t讨厌它,我讨厌它
001 = Siskel讨厌它,E b e r t讨厌它,我喜欢它
010 = Siskel讨厌它,E b e r t喜欢它,我讨厌它
0 11 = Siskel讨厌它,E b e r t喜欢它,我喜欢它
100 = Siskel喜欢它,E b e r t讨厌它,我讨厌它
101 = Siskel喜欢它,E b e r t讨厌它,我喜欢它
110 = Siskel喜欢它,E b e r t喜欢它,我讨厌它
111 = Siskel喜欢它,E b e r t喜欢它,我喜欢它
使用比特来表示信息的一个额外好处是我们清楚地知道我们解释了所有的可能性。 我们
知道有且仅有 8种可能性,不多也不少。用 3个比特,我们只能从 0数到7,后面再没有 3位二进
制数了。
在描述 S i s k e l和E b e r t的比特时,你可能一直在考虑一个严重的,并且是令人烦恼的问题
— 对于Leonard Maltin的Movie &Video Guide怎么办呢?别忘了, Leonard Maltin是不采用举52
编码的奥秘
下载
手表决这种形式的,他对电影的评价用的是更传统的星级系统。
要想知道需多少个 M a l t i n比特,首先要了解一些关于 M a l t i n评分系统的知识。 M a l t i n给电
影的评价是1~4颗星,并且中间可以有半颗星。(仅仅是为了好玩,他实际上不会给电影只评
一颗星,取而代之的是给一个 B O M B[炸弹]。)这里总共有七种可能性,也就是说只需要 3
个比特位就可以表示一个特定的评价等级了:
000 = BOMB
001 = ★1 / 2
010 = ★★
0 11 = ★★1 / 2
100 = ★★★
101 = ★★★1 / 2
110 = ★★★★
你可能会问 111怎么办呢, 111这个代码什么意义都没有,它没有定义。如果二进制代码
111被用来表示 M a l t i n等级,那一定是出现错误了。(这可能是计算机出的错误,因为人不会给
出这样的评分。)
前面我们曾用两个比特来代表 S i s k e l和E b e r t的评价结果,左边的一位代表 S i s k e l的评价意
见,右边的一位代表 E b e r t的评价意见。在上述 M a l t i n评分系统中,各个比特位都有确定的意
义吗?是的,当然有。将比特编码的数值加 2再除以 2,就得到了 M a l t i n评分中对应的星的颗
数。这样编码是由于我们在定义代码时遵循了合理性和连贯性,我们也可以下面的这种方式
编码:
0 0 0 =★★★
0 0 1 =★1 / 2
0 1 0 =★★1 / 2
0 11 =★★★★
1 0 1 =★★★1 / 2
11 0 =★★
111 = B O M B
只要大家都了解代码的含义,这种表示就和前述代码一样,都是合理的。
如果M a l t i n遇到了一部连一颗星都不值得给的电影,他就会给它半颗星。他当然有足够的
代码来表示半颗星的情况,代码会像下面这样定义:
000=MAJOR BOMB
0 0 1 = B O M B
0 1 0 =★1 / 2
0 11 =★★
1 0 0 =★★1 / 2
1 0 1 =★★★
11 0 =★★★1 / 2
111 =★★★★第9章 二 进 制 数
下载
53
但是,如果他再遇到连半颗星的级别都不够的影片并且决定给它没有星的级别( ATO M I C
B O M B?)
,他就得再需要一个比特位了,已经没有 3个比特的代码空闲了。
《Entertainment We e k l y》杂志常常给事物定级,除了电影之外还有电视节目、 C D、书籍、
C D - R O M、网络站点等等。等级的范围从 A +~F,如果你数一下的话,发现共有 1 3个等级。
这样,需要四个比特来代表这些等级:
0000 = F
0001 = D-
0010 = D
0 0 11 = D+
0100 = C-
0101 = C
0 110 = C+
0 111 = B-
1000 = B
1001 = B+
1010 = A-
1 0 11 = A
1100 = A+
有3个代码没有用到,它们是: 11 0 1、111 0和1111,加上后总共是 1 6个代码。
只要谈到比特,通常是指特定数目的比特位。拥有的比特位数越多,可以传递的不同可
能性就越多。
对十进制数当然也是同样的道理。例如,电话号码的区号有几位呢?区号共有 3位数字。
如果所有的区号都使用的话(实际上有一部分区号并没有使用,将它们忽略),一共有 1 0 3 或
1 0 0 0个代码,从0 0 0~9 9 9。区号为 2 1 2的7位数的电话号码有多少种可能呢? 1 0 7 或10 000 000
个;区号为 2 1 2并且以2 6 0开头的电话号码有多少个呢? 1 0 4或10 000个。
同样,在二进制数中,可能的代码数等于 2的比特位数次幂:
比特位数
1
2
3
4
5
6
7
8
9
1 0
代码数
2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 1 0 = 1024
每增加一个比特位,二进制代码数翻一番。
如果知道需要多少个代码,那么怎样才能知道需要多少个比特位呢?换句话说,在上述
表中,如何才能由代码数反推出比特位数呢?
用到的方法叫作取以 2为底的对数,对数运算是幂运算的逆运算。我们知道 2的7次幂等于54
编码的奥秘
下载
1 2 8,以2为底的1 2 8的对数就等于7。用数学记号来表示第一个句子为:
2 7 = 128
它与下述句子等价:
l o g 2 128 = 7
因此,如果以 2为底的 1 2 8的对数等于 7,以2为底的 2 5 6的对数等于 8,那么,以 2为底的
2 0 0的对数等于多少呢?大约是 7 . 6 4,但实际上并不需要知道它。如果要表示 2 0 0种不同的事
物,我们共需要 8个比特。
比特通常无法从日常观察中找到,它深藏于电子设备中。我们看不到压缩磁盘 ( C D )、数
字手表或计算机中编过码的比特,但有时候比特也可以清晰地看到。
下面就是一个例子。如果你手头有一个使用 3 5毫米胶片的相机,观察一下它的卷轴。这
样拿住胶卷:
胶卷上有像国际跳棋棋盘一样的银色和黑色方格,方格已用数字 1~1 2标识。这叫作 D X
编码,这 1 2个方格实际上是 1 2个比特。一个银色的方格代表值为 1的比特,一个黑色的方格代
表值为0的比特。方格1和7通常是银色的(代表 1)。
这些比特是什么意思呢?你可能知道有些胶片对光的敏感程度要比其他胶片强,这种对
光的敏感程度称作胶片速度。说对光非常敏感的胶片很快是因为这种胶片的曝光速度快。曝
光速度是由 A S A(American standards association,美国标准协会)来制定等级的,最常用的
等级有1 0 0、2 0 0和4 0 0。A S A等级不只是以十进制数字的形式印在胶卷的外包装和暗盒上,而
且还以比特的形式进行了编码。
胶卷总共有 2 4个A S A等级,它们是:
2 5 3 2 40
5 0 6 4 8 0
1 0 0 1 2 5 1 6 0
2 0 0 2 5 0 3 2 0
4 0 0 5 0 0 6 4 0
8 0 0 1 0 0 0 1 2 5 0
1 6 0 0 2 0 0 0 2500
3 2 0 0 4 0 0 0 5 0 0 0
为A S A等级编码需要多少个比特呢?答案是 5个比特。我们知道, 2 4 = 1 6,与2 4比太小了;
2 5 = 32,又超过了所需的编码数。第9章 二 进 制 数
下载
55
比特值与胶片速度的对应关系如下所示:
方格2 方格3 方格4 方格5 方格6
0
0
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1 0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
1
1
1
1
1
1 0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1 1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1 0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
胶片速度
2 5
3 2
4 0
5 0
6 4
8 0
1 0 0
1 2 5
1 6 0
2 0 0
2 5 0
3 2 0
4 0 0
5 0 0
6 4 0
8 0 0
1 0 0 0
1 2 5 0
1 6 0 0
2 0 0 0
2 5 0 0
3 2 0 0
4 0 0 0
5 0 0 0
多数现代的 3 5毫米照相机胶片用的都是这些代码(除了那些要手工进行曝光的相机和具
有内置式测光表但需要手工设置曝光速度的相机以外)。如果你看过照相机的内部放置胶卷的
地方,你应该能够看到和胶片的金属方格( 1~6号)相对应的 6个金属可接触点。银色方格实
际上是胶卷暗盒中的金属,是导体;油漆了的黑色方格,是绝缘体。
照相机的电子线路中有一支流向方格 1的电流,方格 1通常是银色的。这支电流有可能流
到方格 2~6,这要依方格中是纯银还是涂了油漆而定。这样,如果照相机在接触点 4和5检测
到了电流而在接触点 2、3和6没有检测到,胶片的速度就是 4 0 0 A S A。照相机可以据此调节曝
光时间。
廉价的照相机只要读方格 2和方格3,并且假定胶片速度是 5 0、1 0 0、2 0 0或4 0 0 A S A四种可
能速度之一。
多数相机不读方格 8~1 2。方格8、9、1 0用来对这卷胶卷进行编码;方格 11和1 2指出曝光
范围,依胶片用于黑白照片、彩色照片还是幻灯片而定。
也许最常见的二进制数的表现形式是无处不在的 U P C(universal product code,通用产品
代码),即日常所购买的几乎所有商品包装上的条形码。条形码已经成为计算机在日常生活中
应用的一种标志。
尽管U P C常常使人多疑,但它确实是一个无辜的小东西,发明出来仅仅是为了实现零售
业的结算和存货管理的自动化,且其应用是相当成功的。当它和一个设计精良的结算系统共
同使用时,顾客可以拿到列出细目的售货凭条,这一点是传统现金出纳员所无法做到的。
有趣的是, U P C也是二进制代码,尽管它初看起来并不像。将 U P C解码并看看 U P C码具56
编码的奥秘
下载
体是怎样工作的是很有益的。
通常情况下, U P C是3 0条不同宽度的垂直黑色条纹的集合,由不同宽度的间隙分割开,
其下标有一些数字。例如,以下是 C a m p b e l l公司1 0
3
4
盎司的罐装鸡汁面包装上的 U P C:
可将条形码形象地看成是细条和黑条,窄间隙和宽间隙的排列形式,事实上,这是观察条
形码的一种方式。黑色条有四种不同的宽度,较宽的条的宽度是最细条的宽度的两倍、三倍
或者四倍。同样,各条之间的间隙中较宽的间隙是最窄间隙的两倍、三倍或者四倍。
但是,看待 U P C的另一种方式是将它看作是一系列的比特。记住,整个条形码与条形码
扫描仪在结算台“看”到的并不完全一样。扫描仪不会识别条形码底部的数字,因为识别数
字需要一种更复杂的技术 — 光学字符识别技术,又称作O C R(optical character recognition )。
实际上,扫描仪只识别整个条形码的一条窄带,条形码做得很大是为了便于结算台的操作人
员用扫描仪对准顾客选购的物品。扫描仪所看到的那一条窄带可以这样表示:
它看上去是不是很像摩尔斯编码 ?
当计算机自左向右进行扫描时,它给自己遇到的第一个条分配一个值为 1的比特值,给与
条相邻的间隙分配一个值为 0的比特值。后续的间隙和条被当作一行中一系列比特中的 1个、2
个、3个还是 4个比特读进计算机要依据条或间隙的宽度而定。扫描进来的条形码的比特形式
很简单:
因此,整个U P C只是简单的由9 5个比特构成的一串。本例中,这些比特可以像下面这样分组:
比特
意义
最左边的护线
左边的数字
中间的护线
右边的数字
最右边的护线第9章 二 进 制 数
下载
57
起初的3个比特通常是 1 0 1,这就是最左边的护线,它帮助计算机扫描仪定位。从护线中,
扫描仪可以知道代表单个比特的条或间隙的宽度,否则,所有包装上的 U P C印刷大小都是一
样的。
紧挨着最左边的护线是每组有 7个比特位的六组比特串,每一组是数字 0~9的编码之一,
我们在后面将证明这一点。接着的是 5个比特的中间护线,此固定模式(总是 0 1 0 1 0)是一种
内置式的检错码。如果扫描仪在应当找到中间护线的地方没有找到它,扫描仪就认为那不是
U P C。中间护线是防止条形码被窜改或错印的方法之一。
中间护线的后面仍是每组 7个比特的 6组比特串。最后是最右边的护线,也总是 1 0 1。最后
的最右护线使得 U P C反向扫描(也就是自右向左扫描)同正向扫描一样成为可能,这一点我
们将在后面解释。
因而整个 U P C对1 2个数字进行了编码。左边的 U P C包含了6个数字的编码,每个数字占有
7个比特位。你可以用下表进行解码:
左边的编码
0 0 0 1101=0 011 0 0 0 1 = 5
0 0 11001=1 0101111 = 6
0 0 1 0 0 11=2 0111 0 11 = 7
0 111101=3 011 0 111 = 8
0 1 0 0 0 11=4 0001011 = 9
注意,每个 7位代码都是以 0开头,以 1结尾的。如果扫描仪遇到了第一个比特位值为 1或
最后一个比特位值为 0的情况,它就知道自己没有将 U P C正确地读入或者是条形码被窜改了。
另外我们还注意到每个代码都仅有两组连续的值为 1的比特位,这就意味着每个数字对应着条
形码中的两个竖条。
上表中的每个代码中都包含有奇数个值为 1的比特位,这也是用于检测差错和数据一致性
的一种机制,称为奇偶校验。如果一组比特位中含有奇数个 1,就称之为奇校验;如果含有偶
数个1,就称之为偶校验。这样看来,所有这些代码都拥有奇校验。
为了给U P S右边的7位一组的数字解码,可以采用下面的表格:
右边的编码
1110010=0 100111 0 = 5
11 0 0 110=1 1010000=6
11 0 1100=2 1000100=7
1000010=3 1001000=8
1 0 11100=4 111 0 1 0 0 = 9
这些代码都是前述代码的补码或补数:凡是 1的地方都换成 0,凡是 0的地方都换成 1。这
些代码都是以1开始,以零结束,并且每组都有偶数个 1,称之为偶校验。
现在,可以对 U C P进行解码了。借助前两个表格, C a m p b e l l公司1 0
的包装上用 U P C编码的1 2个数字是:
3
4
盎司的罐装鸡汁面
0 51000 01251 7
这个结果是令人失望的,正如你所看到的那样,它们和印在 U P C底部的数字完全相同。58
编码的奥秘
下载
(这样做是有意义的,因为由于某种原因,扫描仪可能无法识别条形码,收银员就可以手工将
这些数字输进去。)我们还没有完成解码的全部任务,而且,我们也无法从中解码任何秘密信
息。然而,关于 U P C的解码工作已经没有了,那 3 0个竖条已经变成了 1 2个数字。
第一个数字(在这里是 0)被称为数字系统字符, 0的意思是说这是一个规范的 U P C编码。
如果是具有不同重量的货物的 U P C(像肉类或其他商品),这个数字是 2;订单、票券的 U P C
编码的第一个数字通常是 5。
紧接着的 5个数字是制造商代码。在上例中, 5 1 0 0 0是 Campbell 鸡汁面公司的代码。
C a m p b e l l公司生产的所有产品都使用这个代码。再后面的 5个数字( 0 1 2 5 1)是该公司的某种
3
产品的编号,上例中是指 1 0 盎司的罐装鸡汁面。别的公司的鸡汁面可能有不同的编号,且
4
0 1 2 5 1在另外一个公司可能是指一种完全不同的产品。
和通常的想法相反, U P C中没有包含该种产品的价格。产品的价格信息可以从商店中使
用的与该扫描仪相联的计算机中检索互到。
最后的数字(这里是 7)称作模校验字符,这个字符可用来进行另外一种错误检验。为了
解释校验字符是怎样工作的,将前 11个数字(是 0 51000 01251)各用一个字母来代替:
A BCDEF GHIJK
然后,计算下式的值:
3×(A + C + E + G + I + K)+(B + D + F + H + J)
从紧挨它并大于等于它的一个1 0的整倍数中减去它,其结果称为模校验字符。在上例中,有:
3×(0 + 1 + 0 + 0 + 2 + 1)+(5 + 0 + 0 + 1 + 5)= 3×4 + 11 = 2 3
紧挨2 3并大于等于 2 3的一个1 0的整倍数是 3 0 ,故:
3 0-2 3 = 7
这就是印在外包装上并以 U P C形式编码的模校验字符,这是一种冗余措施。如果扫描仪
计算出来的模校验结果和 U P C中编码中的校验字不一致,计算机就不能将这个 U P C作为一个
有效值接收。
正常情况下,表示从 0~9的十进制数字只需 4个比特就足够了。在 U P C中,每个数字用了
7个比特,这样总共有 9 5个比特来表示 11个有用的十进制数字。事实上, U P C中还包括空白位
置(相当于 9个0比特),位于左、右护线的两侧。因而,总共有 11 3个比特用来编码 11个十进
制数,平均每个十进制数所用超过了 1 0个比特位!
正像我们所知道的那样,有部分冗余对于检错来讲是必要的。这种商品编码如果能够很
容易地被顾客用粗头笔修改的话,这种代码措施也就难以发挥其作用了。
U P C编码可以从两个方向读,这一点是非常有益的。如果扫描仪解码的第一个数字是偶
校验(即:每 7位编码中共有偶数个 1),扫描仪就知道它正在从右向左进行解码。计算机系统
用下表对右边的数字解码:
逆向时右边数字的代码
0 1 0 0 111 = 0 0111001 = 5
0 11 0 0 11 = 1 0000101 = 6
0 0 11 0 11 = 2 0010001 = 7
0100001 = 3 0001001 = 8
0 0 11101 = 4 0010111 = 9第9章 二 进 制 数
下载
59
下面是对左边数字的解码表:
逆向时左边数字的代码
1 0 11000 = 0 1000110 = 5
1 0 0 1100 = 1 1111010 = 6
1100100 = 2 11 0 1110 = 7
1 0 11110 = 3 111 0 110 = 8
1100010 = 4 1101000 = 9
这些 7位编码与扫描仪由左向右扫描时所读到的编码完全不同,但不会有模棱两可的现
象。
让我们再看看本书中提到的由点、划组成其间用空格分开的摩尔斯电码。摩尔斯电码看
上去不像是由0和1组成的,但它确实是。
下面回忆一下摩尔斯电码的编码规则:划的长度等于点长度的三倍;单个的点或划之间
用长度与点的长度相等的空格分开;单词内的各个字母之间用长度等于划的长度的空格分
隔;各单词之间由长度等于两倍的划长度的空格分开。
为使分析更加简单,我们假设划的长度是点长度的两倍而不是 3倍。也就是说,一个点是
一个值为1的比特位,一个划是两个值为 1的比特位,空格是值为 0的比特位。
下面是第2章的摩尔斯电码的基本表:
下面是将它转化为比特形式的结果:60
编码的奥秘
下载
注意,所有的编码都以 1开头,以两个 0结束。结尾处的两个零代表单词中各个字母之间
的空格,单词之间的空格用另外的一对 0来表示。因而,“H i , t h e r e”的摩尔斯电码通常是这样
的:
但是,采用比特形式的摩尔斯电码看起来像 U P C编码的横切面:
用比特的形式表示布莱叶盲文比表示摩尔斯电码容易得多。布莱叶编码是 6比特代码。布
莱叶盲文中的每一个字母都是由 6个点组成的,点可能是凸起的,或没有凸起 (平滑)的。如在
第3章中讲的那样,这些点通常用数字 1~6编号:
例如,单词“c o d e”可以用布莱叶盲文这样表示:
如果突起的点是 1,平坦的点是 0,则布莱叶盲文中的每一个符号都可以用 6个比特的二进
制代码表示。单词“ c o d e”中的四个布莱叶字母符号就可以简单地写成:
100100 101010 100110 100010
最左边的一位对应编号为 1的位置,最右边的一位对应编码为 6的位置。
正如前面所讲到的,比特可以代表单词、图片、声音、音乐、电影,也可以代表产品编
码、胶片速度、电影的受欢迎程度、英军的入侵以及某人所挚爱的人的意愿。但是,最基本
的一点是:比特是数字。当用比特表示信息时只要将可能情况的数目数清楚就可以了,这样
就决定了需要多少个比特位,从而使得各种可能的情况都能分配到一个编号。
比特在哲学和数学的奇怪混合物 — 逻辑 — 中发挥作用。逻辑最基本的目标是证明某个
语句是否正确,正确与否也可以用 1和0来表示。下载
第10章 逻辑与开关
真理是什么呢?亚里士多德认为逻辑与它有关。他的讲义合集《工具论》(O rg a n o n,可
追溯到公元前 4世纪)是最早的关于逻辑的详细著作。对于古希腊人而言,逻辑是追寻真理的
过程中用于分析语言的一种手段,因此它被认为是一种哲学。亚里士多德的逻辑学的基础是
三段论。最有名的三段论(它并非是在亚里士多德的著作中发现的)是:
(所有的人都是要死的 ;
苏格拉底是人;
所以,苏格拉底是要死的。 )
在三段论中,两个前提被假设是正确的,并由此推出结论。
苏格拉底之死这个例子看上去似乎太直白了,但还有许多其他不同的三段论。例如,考
虑下面两个由1 9世纪数学家 Charles Dodgson(也就是Lewis Carroll)提出的前提:
(所有的哲学家都是有逻辑头脑的 ;
一个没有逻辑头脑的人总是顽固的。 )
它所能推出的结论一点儿也不明显。(事实上,结论是“一些顽固的人不是哲学家 ( S o m e
dostinate persons are not philosophers)”)请注意结论中一个出乎意料且令人迷惑的词 “一些
( s o m e )”。
两千多年来,数学家们对亚里士多德的逻辑理论苦苦思索,试图用数学符号和操作符来
表现它。 1 9世纪以前,唯一能接近这个目标的人是莱布尼兹( 1 6 4 8—1 7 1 6),他早年涉足逻辑
学领域,后来转向其他学科(比如说,他几乎和牛顿同时独立地发明了微积分 )。
接下来有所突破的是乔治・布尔。
乔治・布尔 1 8 1 5年生于英格兰,他周围的环境对他的
成长很不利。他父亲是鞋匠,而母亲曾是女仆,英国森严
的等级制度使布尔学不到什么有别于父辈的东西。但是,
靠着他自身强烈的好奇心及父亲的帮助(其父对科学研究、
数学和文学有浓厚的兴趣),年轻的乔治自学了上层阶级
男孩才能学到的课程,包括拉丁文、希腊语及数学。由于
他早年在数学方面发表的论文, 1 8 4 9年,布尔被任命为爱
尔兰C o r k市的皇后大学数学系的首席教授。
1 9世纪中期的几位数学家在逻辑理论的数学定义上做
了一些工作(最著名的是迪摩根),但只有布尔有真正概62
编码的奥秘
下载
念上的突破。他最早的贡献是发表的一本很简短的书《 The Mathematical Analysis of Logic,
Being an Essay Towards a Calculus of Deductive Reasoning》( 1 8 4 7 ),接着又发表了一篇很长且
充满抱负的文章:《An Investigation of the Laws of Thought on Which Are Founded the
Mathematical Theories of Logic and Probabilities》( 1 8 5 4 ),简称为《 The Laws of Thought》。
1 8 6 4年的一天,布尔在雨中赶去上课时不幸感染上了肺炎,不治身亡,享年 4 9岁。
我们可以从布尔在 1 8 5 4年所著书的题目中看出他富于野心的想法:由于充满理性的人脑
用逻辑去思考,那么,如果能用数学来表征逻辑,我们也就可以用数学来描述大脑是如何工
作的。当然,现在看来这种想法似乎十分幼稚。(但却超越了他所在的年代。)
布尔发明了一种和传统代数看起来、用起来都十分相似的代数。在传统代数中,操作数
(通常是字母)代表数字,而操作符(多是“ +”或“×”)指明这些操作数如何结合到一起。
一般我们可用传统代数解决类似下面的问题:如果安娜有 3磅豆腐,贝蒂的豆腐是安娜的 2
倍,卡门的豆腐比贝蒂多 5磅,迪尔德丽的豆腐是卡门的 3倍。那么,迪尔德丽有多少豆腐
呢?
为了计算这个问题,我们首先把语句转化为算术式子,用四个字母代表每个人拥有豆腐
的数量,即:
A = 3
B = 2 ×A
C = B+5
D = 3×C
可以通过代入把上述四个表达式合为一个式子,最后执行加法和乘法,即:
D = 3 ×C
D = 3 ×(B + 5)
D = 3 ×((2×A)+ 5)
D = 3 ×((2×3)+ 5)
D = 33
当做传统代数题时,要遵循一定的规则。这些规则可能已经和实践融为一体,以至于我
们不再认为它们是规则,甚至忘记了它们的名字。但规则确实是任何形式的数学的基础。
第一个规则是加法与乘法的交换律,即我们可以在操作符两边交换操作数的位置:
A+B = B+A
A×B = B ×A
相反,减法和除法是不满足交换律的。
加法和乘法也满足结合律,即:
A +(B + C)=(A + B)+ C
A×(B×C)=(A×B)×C
最后,乘法对加法可以进行分配:
A×(B + C)=(A×B)+(A×C)第10章 逻辑与开关
下载
63
传统代数的另外一个特点是它总是处理数字,如豆腐的重量或鸭子的数量,火车行驶的
距离或家庭成员的年龄。是布尔超凡的智慧使代数脱离了数字的概念而变得更加抽象。在布
尔代数中(布尔的代数最终被这样命名)操作数不是指数字,而是指集(类)。一个类仅仅表
示一组事物,也就是后来熟知的集合。
让我们来讨论一下猫。猫或公或母,为方便起见,我们用字母 M指代公猫的集合,用 F指
代母猫的集合。记住,这两个符号并不代表猫的数量,公猫或母猫的数量随着小猫仔的出生
和老猫的不幸离去而变化,这两个字母代表的是猫的种类 — 具有某种特点的猫。因而我们
不说公猫,而是用 M来代表它们。
我们也可以用其他字母代表猫的颜色。例如,用 T代表黄褐色的猫,用 B代表黑猫,用 W
代表白猫,而用 O代表所有其他颜色的猫。
最后(至少就这个例子而言),猫要么是阉过的要么是有生育能力的。我们用字母 N代表
阉过的猫,而用 U代表有生育能力的猫。
在传统代数中,操作符 +和×被用于表示加法和乘法。在布尔代数中,同样用到了 +和×。
这似乎会引起混淆。人人都知道在传统代数中如何对数字进行加和乘,但是我们如何对“类”
进行加和乘呢?
事实上,在布尔代数中我们并不真正地做加或乘,相反,这两个符号有着完全不同的意
思。
在布尔代数中,符号 +意味着两个集合合并,两个集合的合并就是包含第一个集合的所有
成员及第二个集合的所有成员。例如, B + W表示黑猫和白猫的集合。
布尔代数中的符号×意味着取两个集合的交集,两个集合的交集包含的元素既在第一个
集合中,也在第二个集合中。例如, F×T代表了一种猫的集合,这个集合中的猫既是母猫又
是黄褐色的。与传统代数一样,我们可以把 F×T写成F・T或简写为 F T(这正是布尔代数所期
望的)。你可以把这两个字母看成是连在一起的两个形容词:黄褐色的母猫。
为避免传统代数和布尔代数之间的混淆,有时候用符号∪和∩而不用 +和×来表示并运算
和交运算。但布尔对数学的解放性的部分影响是使熟悉的操作符更加抽象,所以,我们决定
坚持他的决定,而不为他的代数引入新的符号。
交换律、结合律和分配律在布尔代数中均适用。而且,在布尔代数中,操作符 +可以对×
进行分配,这在传统代数中是不成立的,即:
W +(B×F)=(W + B)×(W + F)
这个式子表示白猫( W)和黑色母猫( B×F)的并集和等式右边两个集合的交集是一样
的,这两个集合是白猫和黑猫的并集( W + B)及白猫和母猫的并集( W + F)。要掌握这个规
则有些困难,但它的确有用。
为了使布尔代数更加完整,我们还需要两个符号。这两个符号看上去像数字,但它们并
不真的是数字,因为有时候它们和数字有些不同。符号“ 1”在布尔代数中表示“整个宇宙
(全集)”,也就是我们所谈论的每件事物。本例中,符号“ 1”表示“所有的猫”。这样:
M + F = 1
即母猫和公猫的并集是所有的猫。同样,黄褐色猫、黑猫、白猫及其他颜色的猫的并集
也是所有的猫,即:64
编码的奥秘
下载
T + B + W + O = 1
你也可以这样表示所有的猫:
N + U = 1
符号1可以用一个减号-来排除一些事物。例如:
1-M
表示除了公猫以外的所有猫。排除公猫以后的全集就是母猫的集合:
1-M = F
我们所需要的另外一个符号是“ 0”。在布尔代数中,“0”表示空集,即不含任何事物的
集合。当求取两个完全相互排斥的集合的交集时,空集就产生了。例如,既是母的又是公的
猫的集合可以表示为:
F×M = 0
注意,符号 1和0有时的用法与传统代数相同。例如,所有的猫和母猫求交集即是母猫这
个集合:
1×F = F
空集和母猫求交集还是空集:
0×F = 0
空集和母猫的并是母猫这个集合:
0+F = F
但有时与传统代数中得到的结果就不太一样了。例如,所有的猫和母猫的并集是所有的
猫:
1+F = 1
这个表达式在传统代数中是没有意义的。
由于F代表母猫的集合, 1-F代表所有其他猫的集合,则这两个集合的并集是 1:
F +(1-F)= 1
并且它们的交集是 0:
F×(1-F)= 0
历史上,这个公式代表了逻辑中一个十分重要的概念,即矛盾律。它表明一个事物不能
同时是它自己和它自己的反面。
使布尔代数和传统代数看起来完全不同的是下面这个表达式:
F×F = F
这个式子在布尔代数中有着完美的意义:母猫的集合和母猫的集合的交集仍旧是母猫的
集合。但若 F代表一个数字的话,这个公式显然就不对了。布尔认为:
X 2 = X
是使他的代数与传统代数区分开来的唯一表达式。另一个按照传统代数看起来很有趣的
布尔表达式是:第10章 逻辑与开关
下载
65
F + F = F
母猫和母猫的并集仍是母猫这个集合。
作者: zzz19760225     时间: 2016-2-9 07:43
布尔代数为解决亚里士多德的三段论提供了一个数学方法。再看看这个著名三段论的两
个前提:
所有的人都是要死的;
苏格拉底是人。
我们用字母 P代表所有人的集合, M代表要死的东西的集合, S代表苏格拉底。那么,所
谓“所有的人都是要死的”意味着什么呢?它其实表示了所有人的集合和所有要死的东西的
集合的交集是所有的人这个集合,即:
P×M = P
而 P×M = M 这个式子是错误的,因为要死的东西还包括猫、狗、榆树等等。
而“苏格拉底是人”意味着苏格拉底这个集合(非常小)和所有人的集合(很大)的交
集是苏格拉底这个集合:
S×P = S
由于从第一个式子中知道 P = P×M,所以可以把它代入第二个式子,即:
S×(P×M) = S
根据结合律,上式等同于:
(S×P)×M = S
但我们已经知道 S×P等于S,所以上式可简化为:
S×M = S
现在计算完毕。这个表达式告诉我们,苏格拉底和所有要死东西的集合的交集是苏格拉
底,也就是说苏格拉底是要死的。相反,如果认为 S×M等于0,那么结论就是苏格拉底不会
死。再如果,若 S×M等于M,则能推出的结论就是苏格拉底是唯一会死去的东西,而其他任
何东西都是不朽的!
用布尔代数来证明显而易见的事实似乎有些小题大做(尤其当考虑到苏格拉底早已在
2 4 0 0年以前就去世了时),不过,布尔代数还可以用来判断一些事物是否满足一定的标准。也
许有一天,你走进宠物店对店员说:“我想要一只阄过的公猫,白的或黄褐色的均可;或者要
一只没有生殖能力的母猫,除了白色,其他任何颜色均可;或者只要是只黑猫,我也要。”店
员对你说:“看来您想要的猫是下面的式子表示的集合中的一只:
(M×N×(W + T))+(F×N×(1 - W))+ B
对吗?”你回答道:“是的,完全正确!”
为了证明店员是正确的,你可能想放弃并和交的概念而转向“ O R(或者/或)”和“A N D
(并且 /与)”。大写这两个词是因为虽然在通常情况下它们代表语言中的概念,但它们也代表
了布尔代数中的操作。当求两个集合的并集时,你实际上是从第一个集合“或”从第二个集
合中取得事物放入结果集合里。当求两个集合的交集时,满足条件的事物必定在第一个集合
中“并且”也在第二个集合中。此外,每当你看见后跟减号的 1,你可以使用单词“N O T(非)”66
编码的奥秘
下载
来表示。小结如下:
• +(以前表示求并集)现在表示 O R。
• ×(以前表示求交集)现在表示 A N D。
• 1 -(以前表示从全集中排除一些事物)现在表示 N O T。
这样,刚才的表达式可以写成下面的形式:
(M AND N AND (W OR T))O R(F AND N AND (NOT W ))OR B
这与你的口头描述已经十分接近了。注意圆括号是如何清楚地表达出你的意图的。你想
要的猫来自下面三个集合之一:
(M AND N AND(W OR T ))

(F AND N AND (NOT W ))

B
写下这个公式后,店员就可以进行布尔测试的工作了。别这么大惊小怪的,这里已经悄
悄转移到另一种不同形式的布尔代数中去了。在这种形式的布尔代数中,字母不再只表示集
合,字母还可以被赋予数字,但需要注意的是它们只能被赋予 0或者1。数字 1表示“是的”、
“正确”,本例中的意思是“这只猫符合我的要求”;数字 0表示“否定”、“错误”、本例中即
“这只猫不符合我的要求”。
首先,店员拿出一只未阄过的黄褐色的公猫。下面是满足条件的猫的集合:
(M×N×(W + T))+(F×N×(1-W))+ B
当用0和1代替字母后就变成了下面的样子:
(1×0×(0 + 1))+(0×0×(1 - 0))+ 0
注意被赋予了1的字母只有 M和T,因为拿来的这只猫是公的,黄褐色的。
现在必须要做的是简化这个表达式。如果简化后表达式的结果是 1,这只猫就满足了你的
要求,否则就不是你想要的猫。当简化表达式时,千万记住我们并不是在真正地做加法和乘
法。当+表示O R,×表示A N D时,大部分规则是相同的。(现代课本中有时用∧和∨分别表示
A N D和O R,而不用×和+;但这里用 +和×这两个符号却是恰到好处的。)
当用×表示 A N D时,可能的结果是:
0×0 = 0
0×1 = 0
1×0 = 0
1×1 = 1
换句话说,只有当×的左、右两个操作数均为 1时,结果才为 1。这个过程和普通乘法一
模一样。若用一张小表总结一下,你会发现它们和第 8章的加法表和乘法表的形式相似:
A N D 0 1
0 0 0
1 0 1
当用+表示O R时,可能的结果是:第10章 逻辑与开关
下载
67
0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 1
当+的左、右操作数中有一个为 1时,结果就是 1。除了 1 + 1 = 1这种情况,这种计算和普通
加法产生的结果是一致的。可用另一张小表来总结:
O R 0 1
0
1 0
1 1
1
现在可以用这些表来计算前面那个表达式的结果了:
(1×0×1)+(0×0×1)+0 = 0 + 0 + 0 = 0
结果是0,表示“否定”、“错误”,即这只小猫不满足客户需求。
接下来,店员拿来一只无生育能力的白色的小母猫。原始表达式是:
(M×N×(W + T))+(F×N×(1-W))+ B
把0和1代入上式:
(0×1×(1 + 0))+(1×1×(1 - 1))+ 0
并且把它简化一下:
(0×1×1)+(1×1×0)+ 0 = 0 + 0 + 0 = 0
看来,这只可怜的小猫还是不符合要求。
然后,店员又拿来一只无生育能力的灰色的小母猫。(灰色是非白色、黑色或黄褐色的一
种其他颜色。)下面是表达式:
(0×1×(0 + 0))+(1×1×(1 - 0))+ 0
现在把它简化为:
(0×1×0)+(1×1×1)+ 0 = 0 + 1 + 0 = 1
最后的结果 1表示“是的”、“正确”, 这只小猫总算找到新家了!
在你买到小猫的那天晚上,当小猫蜷身睡在你的腿上时,你开始考虑是否能够通过电线
连接一些开关和灯泡来决定哪些小猫满足你的要求。(你真是一个奇怪的家伙。)你丝毫没有
意识到你将要实现一个关键概念上的突破。你要做的是一些试验,这些试验把布尔代数和电
路结合在一起,从而使使用二进制数字工作的计算机的设计和制造成为可能。 (可别让这些话
吓着你。)
下面就开始了。你像往常一样把灯泡和电池连接在一起,这一回你用了两个开关:68
编码的奥秘
下载
开关这种方式的连接 — 一个在另一个的右边 — 称为串联的。如果你闭合了左边的开关,
什么也不会发生:
同样,如果你让左边的开关断开而闭合右边的开关,结果还是一样。只有当左右两个开
关都闭合时,灯泡才会发光,如下所示:
这里的关键是“都”。只有左边和右边的开关都闭合时,电流才能流过回路。
这个电路执行了一个逻辑运算。事实上,灯泡回答了这个问题:“两个开关都处于闭合状
态吗?”可以把电路的工作总结为下面这张表:
左开关状态
断开
断开
闭合
闭合
右开关状态
灯泡状态
断开
闭合
断开
闭合
不亮
不亮
不亮

在前一章中,我们已知道二进制数字(或“位”)是如何表示信息的:它可以表示从最普通
的数字到Roger Ebert的拇指方向等的一切事情。可以说“ 0”代表“E b e r t拇指向下的方向”,而
“1”表示“E b e r t拇指向上的方向”。一个开关有两个位置,所以它可以代表一个位。“0”表示
“开关是断开的”,而“1”表示“开关是闭合的”。一个灯泡有两种状态,所以它也可以表示一
个二进制位。“0”表示“灯泡不亮”而“1”表示“灯泡亮”。现在可以把上面的表简化一下:
左开关状态 右开关状态 灯泡状态
0
0
1 0
1
0 0
0
0
1 1 1
注意,如果交换左、右开关,结果是一样的,所以没必要指明哪个开关是左开关或右开
关。因此这张表可以重画成类似于前面“ A N D”表和“O R”表的样子:第10章 逻辑与开关
下载
开关串联 0 1
0
1 0
0 0
1
69
事实上,这和“ A N D”表是一样的。让我们检查一下:
A N D 0 1
0
1 0
0 0
1
这个简单的电路实际上执行了布尔代数的“ A N D”操作。
现在试着用另一种方式连接电路:
这些开关称为并行连接。它和前一种连接方式的区别是,如果闭合了上面的开关,灯泡
会亮:
如果闭合了下面的开关,灯泡会亮:70
编码的奥秘
下载
如果同时闭合上、下两个开关,灯泡还是会亮:
可见,当上面或下面的开关有一个闭合时,灯泡就会亮。这里的关键字是“或”。
这个电路也执行了一个逻辑运算,灯泡回答了这样一个问题:“是否有开关闭合?”下面
的表总结了这个电路是如何工作的:
上开关状态
下开关状态
灯泡状态
打开 打开 不亮
打开 闭合 亮
闭合 打开 亮
闭合 闭合 亮
仍然用“ 0”表示开关断开或灯泡不亮,用“ 1”表示开关闭合或灯泡亮。这张表可以这
样:
上开关状态 下开关状态 灯泡状态
0 0 0
0
1 1
0 1
1
1 1 1
同样,这两个开关交换位置也没关系,所以这张表可以重写成如下的样子:
开关并联 0 1
0 0 1
1 1 1
你可能已经猜到了这和布尔代数中的“ O R”表是一样的:
O R 0 1
0
1 0
1 1
1
这意味着两个并联的开关执行的是和布尔一样的操作。
当你再进入宠物店时,你告诉店员:“我想要一只阄过的公猫,白的或黄褐色的均可;或
者要一只没生育能力的母猫,除了白色,其他任何颜色均可;或者只要是只黑猫,我也要。”
店员便得到了如下的表达式:第10章 逻辑与开关
下载
71
(M×N×(W + T))+(F×N×(1-W))+ B
现在你知道两个串联开关执行的是逻辑与( A N D,由符号×来表示),两个并联开关执行
的是逻辑或(O R,由符号+来表示),你可以按如下方法连接 8个开关:
这个电路中的每一个开关都被标上了一个字母 (与布尔表达式中所用字母相同 )。 W 表示
非W,是1-W的另一种写法。事实上,如果按从左至右,从上至下的顺序来阅读这个电路图,
你遇到的字母的顺序和它们在布尔表达式中出现的次序是一样的。表达式中的乘号(×)都对应
角是电路图中串联的两个或两组开关的位置;表达式中的加号 (+)号对应的是电路图中并联的
两个或两组开关的位置。
你应该记得,店员最先挑出的是只未阄过的褐色的公猫。闭合相应的开关:
尽管M、T和非W这三个开关都闭合了,但没有构造出一个完整的电路来点亮灯泡。接着,
店员拿出一只无生育能力的白色的母猫:
这次,由于右边开关未闭合也无法构成一个完整的电路。但最后,店员拿出一只无生育72
编码的奥秘
下载
能力的灰色的母猫:
这样就可以构出一个完整的电路,灯泡被点亮并表示小猫符合你的要求。
乔治・布尔从来没有连接过这样一个电路,他也没能看到用开关、电线和灯泡来实现一
个布尔表达式。当然,其中的一个原因是直到布尔死后 1 5年,白炽灯泡才被发明。但摩尔斯
在1 8 4 4年展示了他的电报机,比布尔的《 The Laws of Thought》的发表早 1 0年,而用一个电
报发声器来代替所示电路中的灯泡是十分简单的。
可惜1 9世纪没有人把布尔代数中的与、或和串联、并联一些简单的开关联系起来。数学
家没有、电工没有、电报操作员也没有,没有人想到过这种联系,甚至连计算机革命的创始
人查尔斯・巴贝芝( 1 7 9 2—1 8 7 1)也没有。他曾和布尔联系过,并了解过他的工作,他一生
中大部分时间致力于设计第一台差分机及接下来的解析机。一个世纪之后,这些机器被认为
是现代计算机的雏型。我们现在知道,帮助巴贝芝的是他认识到计算机应产生于电报继电器
中,而非那些齿轮和控制杆。
是的,问题的答案正是电报继电器。下载
第11章 逻辑门电路
在遥远的将来,当人们回顾2 0世纪的计算机发展史时,有人可能会以为一种称为“logic gates
(逻辑门)”的设备是以著名的微软公司创始人的名字命名的( Bill Gates中的G a t e s在英语中有
“门”的意思),其实并非如此。我们很快就会明白,逻辑门和通常让水和人通过的门十分相
似。逻辑门通过阻挡或允许电流通过在逻辑中执行简单的任务。
回忆一下在上一章中你走进一个宠物店所要的那只猫,这可以由下面的布尔表达式说明:
(M×N×(W + T))+(F×N×(1-W))+ B
同时,也可以用下面的电路来选择符合条件的小猫:
这样一个电路有时被称为网络。但在今天,网络这个词更多地被用来指连接起来的计算
机,而不仅仅只是开关的集合。
尽管这个电路包含的全是 1 9世纪发明的东西,但那时却没有人意识到布尔代数可以直接
由电路实现。这种等同性直到 2 0世纪3 0年代才被发现,主要贡献人是克劳德・香农 (生于1 9 1 6
年)。香农在他著名的、于 1 9 3 8年在麻省理工学院所写的硕士论文《 A Symbolic Analysis of
Relay and Switching Circuits》中阐述了这个问题。(1 0年之后,香农的文章 The Mathematical
Theory of Communication》是使用“位( b i t )”这个字来表示二进制数字的第 1篇出版物。)
1 9 3 8年以前,人们已经知道当把两个开关串联起来时,只有两个开关都闭合电流才能流
通;而当把两个开关并联起来时,只需闭合其中的一个即可构成回路。但没有人能像香农那
样清晰地阐述电子工程师可以使用布尔代数的所有工具来设计带开关的电路。此外,如果你
简化了描述网络的布尔表达式,你也可以相应地简化网络。
例如,描述你想要的小猫的表达式是:
(M×N×(W + T))+(F×N×(1-W))+ B
用结合律把用×结合的变量重新排序并按下面的方式重写表达式:
(N×M×(W + T))+(N×F×(1-W))+ B
为更清楚地表达意图,可以定义名为 X和Y的两个新变量:
X = M ×(W + T)74
编码的奥秘
下载
Y = F ×(1-W)
现在,描述你想要的小猫的表达式可以写成下面的样子:
(N×X)+(N×Y)+ B
完成简化后,我们再把 X、Y代回原来的式子。
注意,变量 N在表达式中出现了两次。使用分配律,表达式可以按如下方式重写,并只使
用一个N:
(N×(X + Y))+ B
现在把X、Y表达式代入:
(N×((M×(W + T))+(F×(1 - W))))+ B
由于有很多圆括号,该表达式看上去似乎仍很复杂。但表达式中少了一个变量项(减少
了一次×运算),也就意味着网络中少了一个开关。这是修改后的电路图:
确实,证明修改前后的两个电路图功能是一样的比去证明两个表达式功能是相同的要简
单。
可是,网络中仍然多余了三个开关。理论上讲,你只需要四个开关来定义你心目中的猫
咪。为什么是四个呢?因为每个开关都是一个“位”。你需要一个开关来定义性别(断开表示
公的,而闭合表示母的);一个开关来定义是否有生育能力 (闭合表示阄过的,断开表示未阄
过的 )还需要两个开关表示颜色。因为只有四种可能的颜色(白、黑、褐和其他所有颜色),
而我们知道四种选择可以用两个二进制位来定义,所以只需要两个开关来表示颜色。例如,
两个开关都断开表示白色,一个闭合表示黑色,另一个闭合表示褐色,两个开关都闭合就表
示其他所有颜色。
现在,让我们做一个控制面板来选择一只猫。控制面板上有四个开关(正如你家里的电
灯开关)和一个灯泡:
控制面板下载
第11章 逻辑门电路
75
开关打到上面是指开关闭合,反之是指开关断开。也许表示猫的颜色的两个开关标识得不是
很清楚,这是为了把控制面板做得更简练不得已而造成的。在表示颜色的一对开关中,左边的开
关标着B,如果只有它往上就表示黑色;右边的开关标着T,如果只有它往上就表示黄褐色;B、
T两个开关均往上则表示其他颜色,由O标识;B、T两个开关均往下则表示白色,由W标识。
在计算机专业术语中,开关是一种输入设备,输入是控制电路如何工作的信息。本例中
输入开关对应于描述一只猫咪的 4位信息,输出设备是灯泡。如果开关描述了一只符合条件的
猫,灯泡就会亮。上面介绍的控制面板上的开关被设置成表示一只无生育能力的黑母猫,这
是符合你的要求的,所以灯泡亮了。
现在所要做的是设计一个使控制面板工作的电路。
前面提到过香农的论文题目是《 A Symbolic Analysis of Relay and Switching Circuits》,
他所指的 r e l a y和第6章中所讲的电报系统的继电器很类似。在香农的论文发表时,继电器已被
用作其他目的,尤其是用于电话系统的大型网络。
像开关一样,继电器也可以串联或并联以执行逻辑中的简单任务。继电器的组合称为逻
辑门。这里所说的“逻辑门执行简单逻辑任务”是指逻辑门只完成最基本的功能。继电器比
开关好是因为继电器可以被其他继电器控制而不必用手指控制,这意味着逻辑门可以被组合
起来以执行更复杂的任务,比如一些简单的算术操作。事实上,下一章就要展示如何用电线
连接开关、灯泡、电池和继电器来构造一个加法机(尽管它只能工作于二进制数字状态)。
继电器对电报系统的工作十分重要。连接电报站的电线长距离时电阻很大,需要一种方
法来接收微弱的信号并把它增强后发送出去。继电器通过使用电磁铁控制开关可做到这一点。
事实上,继电器放大了一个很弱的信号使其成为一个强信号。
就我们的目的而言,我们并不对它的信号放大能力感兴趣,真正使我们着迷的是继电器作
为开关可用电来控制而不用手指。可以用电线把继电器、开关、灯泡和一对电池做如下连接:
注意左边的开关是断开的,灯泡不亮。当闭合开关时,电流流过围绕在铁棒上的线圈,
于是铁棒具有了磁性,并把上面有弹性的金属簧片拉下来,从而连通了电路,使灯泡发光:76
编码的奥秘
下载
当电磁铁把上面的金属簧片拉下来时,这个继电器被称为“触发了”。当左边的开关断开
时,铁棒不再有磁性,继电器中的金属簧片则弹回到原来的位置。
这看上去似乎是用一种很不直接的方式点亮灯泡的,但实际上这种方式是很直接的。如
果我们只对点亮灯泡感兴趣,我们完全可以舍弃继电器。但我们的兴趣并非只是点亮灯泡这
么简单,我们有更宏伟的目标。
本章要多次用到继电器(当逻辑门建好之后就会很少再用了),所以要把上面那幅图简化
一下。可以通过大地省去一些导线。在这种情况下,大地仅代表了一个公共端,并不是指真
正的物理接地:
这看上去仍然不够简化,但还不至于那样做。注意两个电池的负极均接地,所以当看到
的电池是这样的时:
可用大写字母“ V(它代表电压)”代替上图中的电池 (如在第 5和第6章中所做的 )。现在
继电器看上去如下图所示:
当右边开关闭合时,电流从 V端流出,经过电磁铁芯流到地上。这使得电磁铁把上面有弹
性的金属簧片拉下来,从而连通了接有灯泡的电路,灯泡点亮:第11章 逻辑门电路
下载
77
上面图显示了两个电源和两个接地,但本章的所有图中,电源,即“ V”,可以互连,接
地端也可以互连。本章及下一章的所有继电器和逻辑门的网络只要求有一个电池,但可能是
一个大容量的电池。例如,上一幅图可只用一个电池,如下所示:
但这幅图并不能清楚地表明要用继电器做什么。先不考虑电路而把注意力放到输入和输
出上,就像前面的控制面板一样:
输出
输入
如果电流流经输入(例如,用一个开关把输入连到“ V”端),电磁铁就会被触发,输出
就有了一个电压。
继电器的输入不一定只能是开关,其输出也未必只限于灯泡。一个继电器的输出可以连78
编码的奥秘
下载
到另一个继电器的输入,如下所示:
当闭合开关时,第一个继电器被触发,它为第二个继电器提供了输入电压,于是第二个
继电器也被触发,灯泡被点亮了:
把继电器连接起来是构造逻辑门的关键。
事实上,灯泡可以两种方式连到继电器上。注意,具有弹性的金属簧片是被电磁铁拉下
来的。平时,金属簧片与上端接触,当电磁铁吸引它的时候,它便和下端接触。我们一直把
金属簧片与下端的接触作为继电器的输出,但我们也可以把它与上端的接触作为输出。当使
用这种输出时,结果正好相反,输入开关断开时灯泡是亮的:下载
第11章 逻辑门电路
79
而当输入开关闭合时,灯泡便灭了:
使用这种开关的继电器称为双掷继电器 ,它的两个输出在电性上是相反的 — 当一个有电
压时,另一个则没有。
顺便说一下,如果你不知道现在的继电器是什么样子,你可以很方便地从当地的电器行
的透明小包里看到一些。有些继电器就像 (加入饮料的 ) 方形小冰块一样大小,如元件号为
2 7 5 - 2 0 6和2 7 5 - 2 1 4的继电器就是这种大小的且经久耐用的继电器。它们被封在一个干净的塑
料外壳里,所以你可以看到电磁铁和弹性金属簧片。本章和下一章所描述的电路都使用的是
元件号为2 7 5 - 2 4 0的继电器,它体积小且价格便宜(每个 $ 2.99)。
正如两个开关可被串联一样,两个继电器也可以串联:
上面继电器的输出为下面的继电器提供了输入电压。如上所示,当两个开关均断开时,
灯泡不会发光。试着闭合上面的开关:80
编码的奥秘
下载
由于下面的开关仍旧断开,下面的继电器没有触发,所以灯泡仍然不亮。若断开上面的
开关而闭合下面的开关:
灯泡仍旧不亮。因为上面的继电器未被触发,电流无法流经灯泡。点亮灯泡的唯一方法
是闭合两个开关:第11章 逻辑门电路
下载
81
现在,两个继电器都被触发了,电流可以在电源、灯泡和接地点之间流通。
同串联开关一样,这两个继电器也执行了逻辑操作。只有当两个继电器都被触发时,灯
泡才会点亮。串联的两个继电器就是一个“ AND gate(与门)”。为避免复杂的图示,电气工
程师使用一个特殊的符号表示“与门”,如下图示:
输入
输出
这是四个基本逻辑门中的第一个。与门有两个输入端(在图的左部),一个输出端(在图
的右部)。这样表示的与门通常输入在左部,输出在右部。这是因为人们习惯于从左到右读图。
但是与门同样可以画成输入在上部、右部或底下。
有两个继电器、两个开关和一个灯泡的原始电路图如下所示:
使用“与门”符号,上图可同样表示成:
注意与门不仅代替了串联的两个继电器,同时也隐含了上面的继电器连着电源,且两个
继电器都是接地的。只有当上下两个开关都闭合时,灯泡才会发光,这就是它之所以叫与门
的原因。
与门的输入未必一定要和开关连接,且输出也不一定只能是灯泡。我们真正要处理的是
输入端的电压和输出端的电压。例如,一个与门的输出可以是另一个与门的输入:82
编码的奥秘
下载
只有当三个开关都闭合时,灯泡才会发光。当上面的两个开关闭合时,第一个与门的输
出会触发第二个与门的第一个继电器,而最下面的开关会触发第二个与门的第二个继电器。
如果把不加电压视为 0,加上电压视为 1,则与门的输出按如下方式由输入来决定:
正如两个串联的开关一样,与门的输入输出关系可作如下描述:
A N D 0 1
0
1 0
0 0
1
与门也可以有多于两个的输入端。例如,假设串联了三个继电器:
只有当三个开关同时闭合时,灯泡才会发光。这种配置可用如下符号表示:下载
第11章 逻辑门电路
83
它被称为三输入端与门。
以下逻辑门可用并联的继电器解释:
注意两个继电器的输出是连接在一起的,这个连接在一起的输出为灯泡提供了电源。任
何一个继电器都可以点亮灯泡,例如,如果闭合上面的开关,灯泡会亮。这时,灯泡从左上
角的继电器得到了电力供应。
如果让上面的开关断开而闭合下面的开关,灯泡也会亮:84
编码的奥秘
下载
当两个开关都闭合时,灯泡同样会亮:
可见,当上开关或下开关中的任何一个闭合时,灯泡都会亮。这里的关键是“或”,所以
这样的门叫“OR gate(或门)”。电气工程师使用如下符号表示或门:
输入
输出
它看上去和与门很相似,只是接输入端的一边是弧形的,很像英语“ O R”中的字母“O”。
或门的两个输入中,只要有一个加上电压,输出就是高电位。同样,如果约定不加电压第11章 逻辑门电路
下载
85
是0,而加电压是1,则或门也有四种可能的组合状态:
可以把或门的输入输出关系小结成如下表格:
O R 0 1
0
1 0
1 1
1
或门也可以有两个以上的输入端(当任一输入端为 1时,输出端就为 1;只有所有输入端
均为0时,输出端才为 0)。
前面解释过继电器可称为双掷继电器,因为其输出可以两种不同的方式连接。通常情况
下,当开关断开时,灯泡不亮:
当开关闭合时,灯泡点亮。
也可以用另外一种连接方式,使开关断开时灯泡点亮:86
编码的奥秘
下载
在这种情况下,只有闭合开关时灯泡才熄灭。以这种方式连接的继电器叫作反向器 。反
向器不是逻辑门(逻辑门通常有两个以上的输入),但它十分有用。反向器可以用下面的符号
表示:
输入
输出
它被称为反向器的原因是当输入为 0时输出却为 1,反之亦然:
有了反向器、与门和或门,我们就可以制作控制板来自动选择理想的小猫了。让我们从
开关开始。第一个开关的闭合表示母猫,断开表示公猫。这样,可以产生称为 F和M的两个信
号,如下图所示:
当F是1,M就是0,反之亦然。同样,第二个开关的闭合表示阄过的猫,而断开表示有生
育能力的猫:
接下来的两个开关更复杂一些,不同的组合要代表四种不同的颜色。这里有两个开关,
都与电源相连:
当两个开关都断开时,它们表示白色。我们用两个反向器和一个与门来产生信号 W。如
果选择了一只白猫, W就为1,否则为0:
当开关断开时,两个反向器的输入是 0,这样反向器的输出(也就是与门的输入)为 1,
这也就意味着与门的输出为 1。一旦一个开关闭合,与门输出即为 0。
为表示一只黑猫,闭合第一个开关,这可以用一个反向器和一个与门实现:第11章 逻辑门电路
下载
87
只有当第一个开关闭合而第二个开关断开时,与门的输出才是 1。同样,当第二个开关闭
合而第一个开关断开时,与门的输出也为 1。我们用来表示褐色:
而如果两个开关都闭合时,用如下图示表示其他颜色:
现在把四个小电路集成为一个大电路(通常,黑点表示电线的连接点,没有黑点的交叉
线是不连接的):
这个连接图看起来十分复杂。但如果仔细地沿着线路走,看清楚每个与门的输入而不要
关心这些输入又连到了别的什么地方,你就会明白电路是如何工作的。如果两个开关都断开,
信号W会是1,其余信号都是 0。如果第一个开关闭合,则信号 B会是1,其余信号都是 0。
连接门和反向器时可以遵循一些简单的规则:一个门(或反向器)的输出可以作为其他
门(或反向器)的输入,但是两个以上的门(或反向器)的输出永远不能互连在一起。
由4个与门和 2个反向器组成的电路叫作“ 2 - 4译码器”。输入是两个二进制位的不同组合,
共代表了 4个不同的值。输出是 4个信号,任何时刻只能有一个是 1,至于哪一个是 1取决于两
个输入位。用同样的原理还可以构造“ 3 - 8译码器”或“4 - 1 6译码器”等等。
选择小猫的表达式的简化表示是:
(N×((M×(W + T))+(F×(1 - W))))+ B
对于表达式中的每一个加号 ( + ),必定对应电路中的一个或门。对于每一个乘号 (×),则
对应一个与门:88
编码的奥秘
下载
电路图左边的符号和它们在表达式中出现的顺序是一样的。这些信号来自于和反向器连
接的开关及 2 - 4译码器的输出。注意,图中用了反向器来表示表达式中的( 1-W)。
你可能会说:“这不过是一堆继电器而已。”不错,这正是一堆继电器,每个与门和或门
中都有两个继电器,一个反向器中有一个继电器,因而只能说你必须习惯它。以后的各章会
用更多的继电器。不过,所幸的是你不用真正地去买一堆回家连起来。
本章再看两个逻辑门。这两个门都会用到这样一个继电器,该继电器在不被触发时,其
输出为高电位(这是用在反向器中的输出)。例如,下面配置中,一个继电器的输出为第二个
继电器提供了电源。当两个输入都断开时,灯泡是点亮的:
如果上面的开关闭合了,灯泡就会熄灭:
灯泡的熄灭是因为第二个继电器没有电源供应。同样,若下面的开关闭合灯泡也会熄灭:下载
第11章 逻辑门电路
89
若两个开关都闭合,灯泡还是不亮:
这种行为和或门的行为正好相反,被称为“ NOR gate (或非门)”。下面是或非门的符
号:
它和或门的符号很相像,只是在输出端有一个空心的小圆圈,这个小圆圈表示反向,故90
编码的奥秘
下载
而或非门也可用下面的表示:
或非门的输出如下表所示:
N O R 0 1
0
1 1
0 0
0
这张表显示的结果和或门相反。在或门中,输入端中只要有一个是 1,输出就是 1;只有
输入端均为 0时,输出才为0。
连接两个继电器的另一种方式如下图所示:
在这种情况下,两个输出连在一起。除了连在继电器的另一个触点上之外,这种连接形
式与或门类似。当两个开关都断开时灯泡是亮的。
当只有上面的开关闭合时,灯泡也是亮的:下载
第11章 逻辑门电路
91
当只有下面的开关闭合时,灯泡也是亮的:
只有当两个开关都闭合时,灯泡才会熄灭:
这种行为和与门的行为正好相反,被称为“ NAND gate (与非门)”。与非门的画法和与
门的画法很相像,只是在输出端加了一个小圆圈,表示其最后的输出和与门的输出是相反的:92
编码的奥秘
下载
输出
输入
与非门的输出如下表所示:
N A N D 0 1
0
1 1
1 1
0
注意,与非门的输出与与门恰恰相反。对与门而言,当两个输入都为 1时,输出才为 1;
否则输出就是0。
到此为止,我们已经看到可用四种不同的方式来连接有两个输入、一个输出的继电器,
每一种方式的行为功能都不一样。为避免画继电器,我们把这些连接称为逻辑门并使用电气
工程师们使用的符号来表示它们。特定的逻辑门的输出取决于其输入,总结如下:
A N D 0 1 O R 0 1
0
1 0
0 0
1 0
1 0
1 1
1
N A N D 0 1 N O R 0 1
0
1 1
1 1
0 0
1 1
0 0
0
现在已有了四个逻辑门和一个反向器,完成这些工具的其实就是原始的继电器:
上图称为缓冲器,用符号表示如下:
它和反向器的符号类似,只是没有小圆圈。缓冲器的特点是“什么都不做”,其输出和输
入是相同的:
当输入信号很弱时,可以使用缓冲器,这是因为这也正是多年前继电器被用于电报当中下载
第11章 逻辑门电路
93
的原因。此外,缓冲器也可用于延迟一个信号,这是因为继电器可能要求多一点儿动作时间,
如1秒的几分之一才被触发。
本书从现在开始不再画继电器,取而代之的是电路将由缓冲器、反向器、
4个基本逻辑门及更复
杂的电路(如 2- 4译码器)组成。当然,所有这些部件也是由继电器构成的,但我们用不着看到它了。
前面讲过,可用下面的小电路构造一个 2- 4译码器:
两个输入被反向后成为与门的输入。有时,像这样的配置可以去掉反向器而画成如下的样子:
注意与门输入端的小圆圈,这些小圆圈表示信号在这些点上被反向了, 0会变成1,而1变为0。
具有反向输入端的与门和或非门的行为是一样的:
只有两个输入端都为 0时输出才为 1。
同样,具有反向输入端的或门和与非门的行为是一样的:
只有输入端均为 1时输出才为 0。
这两对等同的电路实际上就是迪摩根定律的内容。迪摩根是维多利亚时代的另一位数学
家,他比布尔年长 9岁。据说,他的书《 Formal logic 》发表于 1 8 4 7年,和布尔的《 T h e
Mathematical Analysis of logic》恰好是同一天。事实上,布尔正是由于受到发生在迪摩根和
另一个英国数学家之间的剽窃事件的触动而研究逻辑的。(迪摩根最后证明是清白的。)很早
以前,迪摩根就意识到了布尔思想的重要性。他无私地鼓励和帮助布尔进行研究,但最终除
了他的这个著名的定律外,他几乎被人们遗忘了。
迪摩根定律可以简单地表示成:
A和B是两个布尔操作数。在第一个表达式中,它们被取反(即反向)后再相与。这和先
把它们相或后再取反(或非门的功能)的结果是一致的。第二个表达式中,两个操作数被取
反后再相或,这和先把它们相与后再取反(与非门的功能)的结果是一样的。
迪摩根定律对于简化布尔表达式,进而简化电路是一个很重要的工具。从历史上讲,这
正是香农的论文对电气工程师的真正含义。但是,专门简化电路并非本书的焦点,更重要的
是让事物工作、起作用。下面我们要运行起来的就是一台简单的加法机。下载
第12章 二进制加法机
加法是最基本的算术运算。所以,如果想要建造一台计算机(这是本书隐含讨论的问题),
必须首先知道如何构造一种机器,它可以把两个数加起来。当你解决了这个问题,你会发现
加法正是计算机唯一所做的事情,因为通过使用用于加法的机器,我们还可以构造用加法来
实现减法、乘法、除法以及计算房产抵押款、引导向火星发射卫星、下棋和电话计费等等功
能的机器。
同现代的计算器和计算机比起来,本章构造的加法机庞大、笨重、速度慢且噪声大。但
有意思的是构成它的部件完全是前几章学过的电子设备,如开关、灯泡、电线、电池以及可
构成几种逻辑门的继电器。这个加法机包含的所有部件都于 1 2 0年以前就已发明,而且,我们
并不用真正地在屋子里建造它,只需在纸上和脑子里构造这台机器就行了。
这个加法机只能工作于二进制数,而且它缺少很多现代计算机(器)的辅助设备。它不
能用键盘来敲入你想加的数,代之的你只能用一系列开关表示待加的数。它也不能用显示器
显示结果,你所看到的只是一排灯泡。
但这台加法机确实实现了两数相加的功能,而且其工作方式和计算机做加法十分相似。
二进制加法与十进制加法很像。当你相加十进制数如 2 4 5和6 7 3时,你把问题分解成简单
的步骤,每一步只对一对十进制数字相加。本例中,第 1步是把5和3加起来。生活中,你若能
记住加法表,问题的解决就快多了。
十进制加法和二进制加法的一大区别是二进制数字的加法表要比十进制数字的加法表简
单得多:
+ 0 1
0 0 1
1 1 1 0
你可能在学校里记过上面这张表,并背诵过如下口诀:
0加0等于0,
0加1等于1,
1加0等于1,
1加1等于0,进1。
把相加结果的数前加上零,可以把加法表改写成如下形式:
+ 0 1
0 0 0 0 1
1 0 1 1 0
这样一来,二进制数字相加的结果是两位数,分别称为“和”和“进位”(比如“ 1加1等
于0,进位是1”)。现在,可以把这张二进制加法表分成两张表,第 1张是表示“和”的表:第12章 二进制加法机
下载
+和 0 1
0
1 0
1 1
0
+进位 0 1
0
1 0
0 0
1
95
第2张是表示“进位”的表:
以这种方式来看待二进制加法就很方便了,因为加法机会分开求和与进位。构造二进制
加法机需要设计一个能执行表中所描述操作的电路。因为电路的所有部件,如开关、灯泡、
电线都是可以表示成二进制数的,因而该电路由于仅工作于二进制数从而大大降低了电路的
复杂性。
与十进制加法一样,二进制加法也从最右边的一列开始,逐列相加两个数:
0 1 1 0 0 1 0 1
+ 1 0 1 1 0 1 1 0
1 0 0 0 1 1 0 1 1
注意,当从右边加到第 3列的时候,产生了一个进位。同样的情况也发生在第 6、7、8列。
我们要加多大的数呢?由于这个加法机只是在脑子里构造,因而可以加很长的数字。为
更合理一些,选择不超过 8位的二进制数。也就是说,操作数的范围是从 0 0 0 0 - 0 0 0 0~1111 -
1111,即十进制的0~2 5 5。两个8位二进制数的和最大可以是 1 - 1111 - 111 0,即5 1 0。
此二进制加法机的控制面板如下图所示:
板上有两行开关,每行 8个。这些开关集是输入设备,我们将用它输入两个 8位数。开关
往下表示 0,往上表示 1,正如家里墙上的开关。输出设备在板的底部,是一行灯泡,共 9个。
这些灯泡用来表示加法的结果,不亮的灯泡表示 0,亮的表示1。我们用了 9个灯泡是因为两个
8位数相加的结果可能是 9位数。
加法机的余下部分包含了以不同方式连接而成的逻辑门。开关触发逻辑门中的继电器,
继电器接着点亮相应的灯泡。例如,如果我们想把 0 11 0 - 0 1 0 1和1 0 11 - 0 11 0加起来(即前例中
显示的两个数字),需把相应的开关设置成下面的样子:96
编码的奥秘
下载
灯泡的亮暗表明答案是 1 - 0 0 0 1 - 1 0 11。(当然,这只是希望的情况。毕竟,我们还没有把这
个加法机构造出来!)
上一章提到过本书将会用到很多继电器,本章中的 8位加法机就至少需要 1 4 4个继电器,
其中每一对数进行加法操作需要 1 8个继电器( 8 × 1 8 = 1 4 4)。如果画出完整的电路图,你一定
会大惊失色,任何人都无法将连成一堆的 1 4 4个继电器看得明明白白,所以我们将用逻辑门分
步解决这个问题。
当你看到下面两个 1位二进制数相加的进位表时,你可能立刻会想到逻辑门和二进制加法
之间有某种联系:
+进位
0
1
0 1
0
0 0
1
你也许已意识到这和上章所述的与门的输出是一样的:
A N D 0 1
0
1 0
0 0
1
所以,与门可以用来计算两个 1位进制数位相加得到的进位。
看来我们已取得一点儿进展了,下一步就要看看有没有继电器能完成下面的工作:
+和 0 1
0
1 0
1 1
0
这是二进制加法运算中的另一半问题,虽说表示和的这一位不如进位那么容易实现,但
我们会有办法。
首先应意识到或门的输出和我们所期望的很近似,只是右下角的结果不同:
O R 0 1
0
1 0
1 1
1
而对于与非门而言,除了左上角的输出不同以外,其他结果也与期望的一样:
N A N D 0 1
0
1 1
1 1
0
所以,使用相同的输入,让我们把与非门和或门连接起来:
A输入
或门输出
B输入
与非门输出
下表总结了或门和与非门的输出,并将其结果和加法机所要求的结果进行比较:第12章 二进制加法机
下载
A \输入
或门输出 与非门输出
B输入
0
0
1
1
0
1
0
1
0
1
1
1
97
需要的结果
1
1
1
0
0
1
1
0
注意,当或门和与非门的输出都为 1时,就可以得到期望的结果 1,这暗示着把两个输出
作为与门的输入:
A输入
B输入
输出
好,这样就能满足要求了。
整个电路仍然只有两个输入,一个输出。两个输入既连到了或门,也连到了与非门。或
门和与非门的输出作为与门的输入,从而得到预期的结果:
A输入
0
0
1
1
B输入 或门输出 与非门输出 与输出
0
1
0
1 0
1
1
1 1
1
1
0 0
1
1
0
这个电路有它自己的名字,称为“异或门( Exclusive OR gate 或 X O R)”。异或门输出为
1时,A输入为1或B输入为1,但不能同时为 1。不用再去画一个或门、一个与非门和一个与门,
可以用电气工程师规定的符号来表示它:
输入
输出
它看上去和或门很像,只是在输入端还有一条曲线。异或门的行为表示如下:
X O R 0 1
0
1 0
1 1
0
异或门是本书需要详细描述的最后一个逻辑门(在电气工程中有时还会遇到第六个门,
称为“同或门”,同或门只有两个输入相等时输出才为 1。同或门描述的输出情况正好和异或
门相反,所以这个门的符号和异或门相同,同时在输出端有一个小圆圈)。
让我们来总结一下。两个二进制数相加产生两个表,一个是表示“和”的表,另一个是
表示“进位”的表:
+和 0 1 +进位 0 1
0
1 0
1 1
0 0
1 0
0 0
198
编码的奥秘
下载
用下面两个逻辑门可以得到同样的结果:
X O R 0 1 A N D 0 1
0
1 0
1 1
0 0
1 0
0 0
1
二进制数的“和”可以由异或门得到,而“进位”可以由与门得到,所以可以把异或门
和与门结合起来来完成两个二进制数 A和B的加法:
A输入
和输出
B输入
进位输出
不用画与门和异或门,可以把上图简单地表示成如下的样子:
A输入
半加器
和输出
进位输出
B输入
其中的方块称为“半加器(Half Adder)”,它可以把两个二进制位 A 和 B相加,从而得到
一个和输出 (简称S) 和一个进位输出 (简称C O )。但大部分二进制数是多于 1位的,半加器不能
够把前一步的进位加到本次运算中。例如做如下加法:
1 1 1 1
+ 1 1 1 1
1 1 1 1 0
只能用半加器来计算最右边一列数:即 1加1等于0,进位为 1。对于右边第 2列数,由于进
位的存在,需要加 3个数。接下来的几列都有这个问题,每一列二进制位的加法都包括了来自
前一列的进位。
要把3个二进制数相加,需要按如下方式把两个半加器和一个或门连接起来:
进位输入
半加器
和输出
A输入
半加器
进位输出
B输入
要理解它的工作原理,先从最左边第一个半加器的 A 输入和 B 输入开始,其输出是一个
和及相应的进位。这个和必须和前一列的进位输入 (简称CI) 加起来,然后把它们输入到第二
个半加器。第二个半加器的和输出是最后的和。两个半加器的进位输出又输入到一个或门,
或门产生了本次加法的进位输出。你可能会想这里还需要一个半加器,这当然是可行的。但第12章 二进制加法机
下载
99
当你把所有的可能情况考虑完,你会发现两个进位不可能同时为 1。当两个输入不能同时为 1
时,或门已足够用于表示两个进位的加法,此时或门和异或门的功能是相同的。
上图可简化表示为下面的方块图,称其为“全加器(Full Adder)”:
进位输入
和输出
全加器
A输入
进位输出
B输入
下面的表是对全加器所有可能的输入及其相应输出的小结:
A输入
0
0
1
1
0
0
1
1
B输入
0
1
0
1
0
1
0
1
进位输入 和输出 进位输出
0
0
0
0
1
1
1
1 0
1
1
0
1
0
0
1 0
0
0
1
0
1
1
1
前面说过加法机需要 1 4 4个继电器,这个数目是如何得到的呢?每个与门、或门、与非门
都需要 2个继电器,所以,一个异或门需 6个继电器。一个半加器由一个异或门和一个与门构
成,所以它要 8个继电器。 1个全加器需要两个半加器和一个或门,所以它要 1 8个继电器。对
于8位二进制加法机而言,共需 8个全加器,因而总共是 1 4 4个继电器。
回想一下本章最开始那个带开关和灯泡的控制面板:
现在可以把这些开关和灯泡连接成全加器了。
首先把最右边的两个开关和一个灯泡连到一个全加器上,如下图所示:
全加器
进位输出100
编码的奥秘
下载
当把两个二进制数相加时,第 1列的处理有所不同。因为接下去的几列可能包括来自前面
加法的进位,而第 1列不会有进位,所以全加器的进位输入端是接地的,这表示输入为“ 0”。
第1列相加后很可能会产生一个进位输出,这个进位输出是下一列加法的输入。
对于接下去的两个二进制位和灯泡,可以按如下办法连接全加器:
进位输入
全加器
进位输出
第一个全加器的进位输出是第二个全加器的进位输入。接下去的每一列数都以这种方式
连接,每一列的进位输出都是下一列的进位输入。
第八个灯泡和最后一对开关连到最后一个全加器上,连接方式如下图所示:
进位输入
全加器
这里最后的进位输出连到第九个灯泡上。
这样,8个全加器就构造成功了。
还可以用另一种方式来看 8个全加器的集成,每个全加器的进位输出都是下一个全加器的
进位输入:
进位输入
进位输出
8位和
下面是一个完整的屏蔽在一个盒子里的 8位加法器。输入是A和B标识为从A 0 ~A 7 及B 0 ~B 7 。第12章 二进制加法机
下载
101
输出为和输出,标识为从 S 0 ~S 7 :
A输入
B输入
进位输入
8位加法器
进位输出
和输出
这是标识多位数字的常用方法。下标为 0的位 A 0 、B 0 和S 0 表示最右边的、最不起眼的位。
而位A 7 、B 7 和S 7 是最左边的、最引人注目的位。例如,下面展示的是这些字母是如何用来表示
二进制数0 11 0 - 1 0 0 1的:
A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0
0
1
1
0
1
0
0
1
下标始于0,且向高位递增的原因是它们和 2的乘方数(幂)是对应的:
2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0
0 1
1
0 1
0
0 1
如果把每个二进制位和对应的 2的幂次方相乘再依次相加,你就会得到 0 11 0 - 1 0 0 1的十进
制数表示,即6 4 + 3 2 + 8 + 1=1 0 5。
8位加法器的另一种画法是:
A输入
B输入
进位输入
8位加法器
进位输出
双线箭头包含了8个输入端,代表一组8个分开的信号。它们标识为A 7 ...A 0 、B 7 ...B 0 、S 7 ...S 0
也用来表示一个 8位二进制数。
一旦构造了一个 8位加法器,就可以构造另一个加法器。把它们级联起来可以很容易地构
成1 6位加法器:
A输入 B输入
(高8位) (高8位)
8位加法器
A输入
(低8位)
进位输出
进位输入
进位输出
16位和
B输入
(低8位)
进位输入
8位加法器102
编码的奥秘
下载
右边加法器的进位输出连到左边加法器的进位输入端。左边加法器的输入包含了两个加
数的高8位,同时产生了结果的高 8位。
现在,你可能会问:“计算机真的是以这种方式把数字加起来的吗?”
基本上是这样的,但不完全是。
首先,加法器应该做得更快。如果你明白这个电路是如何工作的,你会看到最低位相加
产生的进位作为下一列数相加的一个输入,而第 3列的加法又等着第 2列加法的进位,依此类
推。加法器总体的速度等于加数的位数乘以单个全加器的速度。这种进位方式称为行波进位。
更快的加法器使用称为先行进位的加法电路,从而加快了加法进程。
第二(但是十分重要),计算机再也不用继电器了!尽管它们曾经用过。建于 2 0世纪3 0年
代初的第一批数字计算机使用继电器,后来又用了真空管。现代计算机用晶体管。当用在计
算机中时,晶体管和继电器的功能差不多,但是晶体管速度更快,体积更小,更安静,更省
电,而且还便宜不少。构造一个 8位加法器仍然需要 1 4 4个晶体管(如果采用先行进位,则需
要更多),但整体电路的体积却小多了。
作者: zzz19760225     时间: 2016-2-9 09:36
第13章 如何实现减法
在你确信继电器可以连接起来以构成二进制加法器后,你可能会问:“减法器如何实现
呢?”本章将会为你解答这个问题,且提出这个问题也表明你有了一定的理解力。减法和加
法在某些方面是互为补充的,但两种计算的机制不同。加法从最右边一列向最左边一列计算,
每一列的进位都加到下一列中去。减法不用进位,相反,要用到借位 — 一种本质上与加法
不同的机制。
例如,让我们看一道典型的不断借位的减法题目:
2 5 3
- 1 7 6
? ? ?
要做这道题,从最右边一列开始。首先, 6比3大,所以需要从 5借1,这样就变成了1 3减6,
结果是7。由于从5借了1,5就变成了4,4比7小,所以继续从 2借1,1 4减7等于7。2被借1后成
为1,1减1为0,所以最后结果是 7 7:
2 5 3
-1 7 6
7 7
如何用逻辑门来实现这看似不合常理的逻辑呢?
我们不会直接用这种方法,代替的是用一个小技巧,使不通过借位来实现减法。这会是
一个使大家都满意的好办法。详细地了解减法的完成是很有用的,因为它和用二进制编码在
计算机中存储负数的机制有很大联系。
为解释这样的工作,需要清楚地指明两个操作数,即减数和被减数。减数从被减数中去
掉后,结果是二者之差:
被减数
-
减数

要想不借位,首先将减数从 9 9 9中减去:
9 9 9
-1 7 6
8 2 3
这里用 9 9 9是因为操作数是 3位,如果是 4位数,就用 9 9 9 9。把一个数从一串 9中减去得到
的结果称为9的补数或补码。1 7 6的9的补数是 8 2 3,反之,8 2 3的9的补数是 1 7 6。这样做的好处
在于,无论减数是什么,计算 9的补数永远不需要借位。
在计算出减数的 9的补数之后,把它加到原来的被减数上:104
编码的奥秘
下载
2 5 3
+ 8 2 3
1 0 7 6
最后,你再加1并且减去 1 0 0 0:
1 0 7 6
+
1
- 1 0 0 0
7 7
这样就得到结果了。答案和以前一样,且你根本不用借位。
这是什么原理呢?原来的减法题目是:
2 5 3-1 7 6
表达式加一个数再减同一个数得到的结果是一样的。所以先加上 1 0 0 0,再减去1 0 0 0:
2 5 3-176 + 1000-1 0 0 0
这个式子等同于下面的式子:
2 5 3-176 + 999 + 1-1 0 0 0
再按如下方式重新组合:
2 5 3 +(9 9 9 - 1 7 6)+ 1-1 0 0 0
这与前面描述过的用 9的补数进行的计算是一致的。虽然用了两个减法和两个加法来代替
一个减法,但是也因此省去了讨厌的借位。
但是,如果减数比被减数大怎么办呢?例如如下计算:
1 7 6
- 2 5 3
? ? ?
通常情况下,你看到这个式子后可能会说:“减数比被减数大只需交换两数位置,再做减
法,然后给结果取个相反数。”于是你在脑子里交换了它们的位置,并求出了答案:
1 7 6
-2 5 3
-7 7
要省去借位来做这道题和前面的例子有所不同。首先你要求出 2 5 3的9的补数,即
9 9 9
-2 5 3
7 4 6
再把该补数和原来的被减数相加:
1 7 6
+ 7 4 6
9 2 2第13章 如何实现减法
下载
105
这时候,按照上一道题的步骤,你应该对其加 1再减去1 0 0 0,但在本题中,这种方法不会
生效。如果你还按这种步骤做,就需要从 9 2 3中减去1 0 0 0,这又导致了借位。
既然实际上前面已经加了 9 9 9,这里再减去9 9 9:
9 2 2
-9 9 9
? ? ?
当做到这一步时,可看出结果是个负数,故需要交换两数位置,不过这样再做减法时已
不需要借位,答案如预期所料:
9 2 2
-9 9 9
- 7 7
同样的方法可用于二进制数减法,而且会比十进制数减法来得简单。让我们看看该如何做。
原来的减法题目是:
2 5 3
-1 7 6
? ? ?
当把这些数转化为二进制数时,问题变成:
11111101
-10110000
????????
步骤1 用11111111减去减数:
1 1 1 1 1 1 0 1
- 1 0 1 1 0 0 0 0
01 0 0 1 1 1 1
当计算十进制数减法时,减数是从一串 9中减去,得到称为 9的补数的结果。对于二进制
数减法,减数从一串1中减去,差称为1的补数。但请注意,求1的补数实际上并不需要做减法,
因为 1的补数中,原来的 0变成1,原来的 1变成 0,所以, 1的补数有时也称为相反数 或反码。
(你是否还记得第 11章中反向器的作用是把 0变成1,把1变成0。)
步骤2 把步骤1中求得的补数和被减数相加:
1 1 1 1 1 1 0 1
+ 0 1 0 0 1 1 1 1
1 0 1 0 0 1 1 0 0
步骤3 对结果加1:
1 0 1 0 0 1 1 0 0
+
1
1 0 1 0 0 1 1 0 1
步骤4 减去1 0 0 0 0 0 0 0 0(2 5 6):106
编码的奥秘
下载
1 0 1 0 0 1 1 0 1
- 1 0 0 0 0 0 0 0 0
1 0 0 1 1 0 1
该结果就是十进制数 7 7。
现在把两数颠倒位置后再做一遍。在十进制中,减法题目对应于:
1 7 6
-2 5 3
? ? ?
而在二进制中,即是:
1 0 1 1 0 0 0 0
- 1 1 1 1 1 1 0 1
? ? ? ? ? ? ? ?
步骤1 从11111111中减去减数。得到补数:
1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 0 1
0 0 0 0 0 0 1 0
步骤2 把步骤1中的补数和被减数相加:
1 0 1 1 0 0 0 0
+ 0 0 0 0 0 0 1 0
1 0 1 1 0 0 1 0
现在, 11111111 必须再从结果中减掉。当减数比被减数小时,可以通过先加
1再减去
1 0 0 0 0 0 0 0 0来达到此目的。但现在这样做却会用到借位。所以,我们先用 11111111减去步骤 2
中的结果:
1 1 1 1 1 1 1 1
-1 0 1 1 0 0 1 0
0 1 0 0 1 1 0 1
这实际上是对步骤 2中得到的结果取反。最后的结果是 7 7,而真正的答案应该是- 7 7。
现在,已经可以改进加法机使它既能执行加法操作亦能执行减法操作。为使简便起见,
这个加/减法机只执行被减数大于减数的减法操作,即差为正数的操作。
该加法机的核心部件是由逻辑门集成的 8位全加器:
B输入
A输入
8位加法器
进位输出
和输出
进位输入第13章 如何实现减法
下载
107
前面讲过输入 A 0 ~A 7 及B 0 ~B 7 连接到开关上,用于表示 8位操作数。进位输入端接地。
S 0 ~S 7 连接 8个灯泡,用于表示加法的和。由于和可能会是 9位数,进位输出端也连了一个
灯泡。
控制面板如下图所示:
上图中,开关被设为 1 8 3 (或 1 0 11 0 111 )和 2 2 (或 0 0 0 1 0 11 0),产生的结果是 2 0 5或
11 0 0 11 0 1 )。用于加 /减法的新的控制面板有一点儿修改,它包含了一个用于选择做加法还是做
减法的额外开关。
减法
加法
上溢
下溢
如图所示,当这个开关向下时表示选择加法运算,反之是选择减法运算。此外,只有最
右边的 8个灯泡用于表示结果,第九个灯泡用来标识上溢 /下溢,它指明了一个不能用 8个灯泡
表示的数。当加法操作得到的和大于 2 5 5(称为上溢)或减法计算中出现一个负数(下溢)时,
这个灯泡就会亮。减数比被减数大时,结果就是一个负数。
这个加法机主要增加了一个求 8位二进制数的补数的电路。由于一个数的补数就是取其每
一位的相反数,所以这个电路看起来很简单,就是 8个反向器而已。
输入
输出
该电路存在一个问题,就是它不分情况地对输入求反。我们需要一台既能做加法又能做
减法的机器,而此电路只有做减法时才取反。对它进行一下改进,如下图所示:108
编码的奥秘
下载
输入
取反
输出
图中标识为“取反”的信号输入到每一个异或门中。回忆一下异或门的功能:
X O R 0 1
0
1 0
1 1
0
如果“取反”信号为 0 ,则异或门的 8 个输出和 8 个输入是相同的。例如,如果输入是
0 11 0 0 0 0 1 , 则输出也是 0 11 0 0 0 0 1 ;若“取反”信号为 1 ,则输出取反。例如,当输入是
0 11 0 0 0 0 1时,输出为 1 0 0 1111 0。让我们把 8个异或门集成到一个盒子里,称为求补器:
输入 7 输入 6 输入 5 输入 4 输入 3 输入 2 输入 1 输入 0
取反
求补器
输出 7 输出 6 输出 5 输出 4 输出 3 输出 输出 1 输出 0
2
求补器、8位加法器及一个异或门可按下图连接:
A输入
B输入
取反
求补器
8位加法器
上溢
下溢
和输出第13章 如何实现减法
下载
109
注意上图中有 3个信号都标识为“ S U B”,这是加 /减法转换开关。当该信号为 0时做加法,
为1时做减法。做减法时, B输入在送入加法器之前先求补。此外,做减法时,通过设置加法
器的进位输入端 ( C I )为1,使由加法器得到的结果加 1。对加法而言,求补电路没有起作用,
C I输入也就是 0。
“S U B”信号及加法器的 C O输出作为异或门的输入来控制表示上溢 /下溢的小灯泡。如果
“S U B”信号为0(表示做加法),则当C O输出为1时灯泡点亮,这表示加法的和大于 2 5 5。
当做减法时,如果被减数大于减数,则加法器的 C O端正常输出 1,这表示在减法的最后
一步中要减去 1 0 0 0 0 0 0 0 0。所以,只有当加法器的 C O输出为 0时,上溢 /下溢灯泡才被点亮。
这时减数大于被减数,差是个负数。上面这个加 /减法器现在还不能表示负数。
你一定兴致勃勃地想知道该如何实现减法了。
本章一直在谈论负数,但没有指出二进制负数的表示方法。你可能会认为它的表示和十
进制负数一样,只需在数的前面加个负号。例如,- 7 7在二进制中写成- 1 0 0 11 0 1。你当然可
以这么表示,但别忘了用二进制数的目的在于只用 0和1表示所有的东西,当然也包括一个小
小的负号了。
你可以用某一位代替负号,当该位为 1时就表示负数,为 0时表示正数,这似乎也是可行
的。但还有一种方法,它不仅能表示负数,而且还很适于把正数和负数相加到一起。这种方
法的不足之处是你必须提前决定数字需要多少位。
通常用来表示正、负数的方法的好处是这种方法能表示所有的正数、负数。我们把 0想象
成向一个方向延伸的无穷的正数流和向另一个方向延伸的无穷的负数流的中点:
... -1 000 000 -999 999... -3 -2 -1 0 1 2 3... 999 999 1 000 000 ...
但是,如果并不需要无限大或无限小的数,而是完全可以确定计算中所遇到的数的范围,情况
便有所不同了。
下面来看看帐户的例子,人们有时可以在帐户上看到负数。假设帐户上从来没有超过
$ 5 0 0的存款,而银行给我们的预支额是 $ 500 ,这就意味着帐户上的数字在 $ 4 9 9~-$ 500 之间。
假设我们不会一次取出 $ 5 0 0,也不会写一张超过 $ 5 0 0的支票,同时我们只处理美元,而不考
虑到更小的货币单位 — 美分。
这些假设表明帐户能处理的数字范围是从- 5 0 0~4 9 9,总共 1 0 0 0个数。这个限制暗示我
们只能用 3位十进制数,且可不用负号来表示这 1 0 0 0个数。其中的关键在于我们不需要 5 0 0~
9 9 9之间的正数,所以它们就可以用来表示负数。下面是其工作原理:
用5 0 0表示 - 5 0 0
用5 0 1表示 - 4 9 9
用5 0 2表示 - 4 9 8
用9 9 8表示 - 2
用9 9 9表示 - 1
用0 0 0表示0
用0 0 1表示1
用0 0 2表示2110
编码的奥秘
下载
用4 9 7表示 4 9 7
用4 9 8表示4 9 8
用4 9 9表示4 9 9
换句话说,以5、6、7、8、9开头的3位数实际上都表示负数。不用如下的表示法:
-500 -499 -498 ... -4 -3 -2 -1 0 1 2 3 4 ... 497 498 499
而用这样的表示法:
500 501 502 ... 996 997 998 999 000 001 002 003 004 ... 497 498 499
注意这样形成了一个环形排序,最小的负数( 5 0 0)看上去是最大的正数( 4 9 9)的延续。
数字9 9 9是比零小的第一个负数。如果给 9 9 9加上1,通常得到 1 0 0 0。但由于只处理 3位数,所
以实际上是 0 0 0。
这种处理称为1 0的补数。要把3位负数转换成 1 0的补数,需从 9 9 9中减去它再加 1。换句话
说,1 0的补数是 9的补数再加 1。例如,要把- 2 5 5写成1 0的补数,应先从 9 9 9中减去 2 5 5得到
7 4 4,再加上1后得到7 4 5。
你可能听说过“减法不过是负数的加法”,你也可能回答过“其实还是不得不做减法”。
然而,通过使用 1 0的补数,就不用去做减法了,全部都可以用加法来计算。
假设你有余额为 $ 1 4 3的帐户,并写了一张$ 7 8的支票,这表明你要把- 7 8加到1 4 3上。-7 8
的补数是 9 9 9-7 8 + 1,即9 2 2。所以新的余额是 1 4 3+9 2 2(忽略上溢),即6 5。若我们再写一
张$ 1 5 0的支票,则必须减去1 5 0,用补数表示就是8 5 0。先前的余额0 6 5加上8 5 0等于9 1 5,所以,
新的余额实际上是- $ 8 5。
二进制中对应的系统称为 2的补数 。假设我们用 8位二进制数工作,范围从 0 0 0 0 0 0 0 0~
11111111,对应于十进制的 0~2 5 5。这时如果你想要表达负数,则以 1开头的每个 8位数都表
示一个负数,如下所示:
二进制数 十进制数
1 0 0 0 0 0 0 0 -1 2 8
1 0 0 0 0 0 0 1 -1 2 7
1 0 0 0 0 0 1 0 -1 2 6
1 0 0 0 0 0 11 -1 2 5
111111 0 1 -3
1111111 0 -2
11111111 -1
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 1 0 2
0 11111 0 0 1 2 4
0 11111 0 1 1 2 5
0 111111 0 1 2 6
0 1111111 1 2 7第13章 如何实现减法
下载
111
你可以表示的数的范围从- 1 2 8~1 2 7。最左边的一位称为符号位, 1表示负数, 0表示正
数。
要计算2的补数得先求出 1的补数再加上 1,这等同于先求反再加 1。例如,十进制数 1 2 5是
0 11111 0 1,要用2的补数来表示- 1 2 5,可先取反得1 0 0 0 0 0 1 0,再加1就得到1 0 0 0 0 0 11。可用上
表来验证这个结果。要回到原来的数只需同样的操作:取反后加 1。
这个系统使不用负号就能表示正、负数,它也使我们只用加法规则就可以随意进行正、
负数运算。例如,计算- 1 2 7 + 1 2 4,利用上表即得
1 0 0 0 0 0 0 1
+ 0 1 1 1 1 1 0 0
1 1 1 1 1 1 0 1
和是十进制的- 3。
这里要注意上溢或下溢,即结果大于 1 2 7或小于-1 2 8的情况。例如,1 2 5加1 2 5:
0 1 1 1 1 1 0 1
+ 0 1 1 1 1 1 0 1
1 1 1 1 1 0 1 0
因为最高位是1,结果代表一个负数:- 6。再看-1 2 5加上它自已:
1 0 0 0 0 0 1 1
+ 1 0 0 0 0 0 1 1
1 0 0 0 0 0 1 1 0
由于限制了只取 8位数,所以最左边的 1被扔掉,剩下的 8位表示6。
一般而言,若两个操作数的符号相同,而结果的符号与操作数的符号不相同时,这样的
加法是无效的(即加法运算产生了溢出!)。
现在,二进制数可以有两种不同的使用方法。二进制数可以是无符号的或有符号的,无
符号的二进制 8位数的表示范围从 0~2 5 5,有符号的二进制 8位数的表示范围从- 1 2 8~1 2 7。
这些数本身不会告诉你它们是否带有符号。例如,假设有人问:“1 0 11 0 11 0对应于十进制数的
几?”这时,你必须先问清楚它是无符号数还是有符号数?它可能是 1 8 2或-7 4。
这就是二进制数的麻烦:它们仅仅是一些 0和1而没有告诉它们的任何含义。下载
第14章 反馈与触发器
人人都知道电可以使物体运动。随便看一眼就会发现,很多家用电器中都装了电动机,
如钟、风扇,食品加工机、 C D机等等。电也能使扬声器中的磁芯振动,从而使音响设备、电
视机产生了声音、话音和音乐。不过,电使物体运动的一个最简单、最神奇的例子可能是电
子蜂鸣器和电铃。
将继电器、电池、开关按如下形式连接:
如果你觉得它看起来很奇怪,则你还没有发挥出你的想像力。我们还从未见过如此连接
的继电器。原来的继电器中,输入和输出通常是分开的,这里却构成一个闭环。当闭合开关
时,电路连通了:
接通的电路使电磁铁把金属簧片拉下来(电流的作用):下载
第14章 反馈与触发器
113
当金属簧片改变位置后,电路不再完整,电磁铁失去了磁性,金属簧片又弹回原来的位
置:
这样,电路便又一次接通了。可见,只要开关是闭合的,金属簧片就会上下跳动 —使电
路闭合或断开 — 并制造一种声音。如果金属簧片制造了一种刺耳的声音,它就构成了一个
蜂鸣器。如果金属簧片附上一把小锤子,再加一个金属锣,它就构成了一个电铃。
有两种方法可用来连接继电器以构造一个蜂鸣器,下面是另一种方法的描述:
你可能从上述图中认出了这是第 11章介绍过的反向器,所以电路可以简化为:
输出
对于反向器而言,当输入为 0时,输出为 1;输入为 1时,输出为 0。在该电路中闭合开关
会使反向器中的继电器间断地闭合和断开。如果去掉开关,可以使反向器连续地工作,如下
图示:
输出
这幅图似乎在演示一种逻辑矛盾,反向器的输出是和其输入相反的,但是在这里,其输
出同时又是其输入。需要特别指出的是,反向器实际上是一个继电器,而继电器从一个状态
转换到另一个状态是需要时间的。所以,即使输入和输出是相等的,输出也会很快地改变,
成为输入的倒置(当然,随即输出也就改变了输入,如此反复)。
电路的输出是什么呢?其实就是提供电压和不提供电压之间的变换。或者说输出要么是 0,
要么是1。114
编码的奥秘
下载
这个电路称为振荡器 ,它和我们以前见到的每样东西都有本质上的区别。以前,所有的
电路都靠手动地断开或闭合开关来改变状态,而振荡器却不需要人的干涉,它可以自主地工
作。
当然,单独的一个振荡器不会有什么用,但在本章的后面及接下去的几章里,你会看到
这个电路和其他电路连接后构成了自动控制中一个十分关键的部分。所有计算机都靠某种振
荡器来使其他部件同步工作。
振荡器的输出是 0和1的交替序列,可以用下图形象地来表示它:
图中,水平轴表示时间,垂直轴表示输出是 0或1:
时间
此图表示随着时间的变化,振荡器的输出在 0和1之间交替变化。基于这个原因,振荡器
有时称为时钟(c l o c k),因为通过对振荡次数记数还可确定时间。
那么,振荡器运行的速度有多快呢?也就是说,金属簧片上下跳动的频率是多少?每秒
有多少次呢?很明显,这依赖于继电器是如何构造的。容易想到,一个大的、笨重的继电器
只能迟钝地上下摆动;而一个小的、轻巧的继电器可以迅速地跳动。
我们把振荡器从某个时间的输出开始,经历一段变化又回到同样输出的这一段间隔称为
振荡器的一个循环(c y c l e):
一个循环
时间
一个循环所需要的时间称为振荡器的周期。假设一个振荡器的周期是 0 . 0 5秒,则可以在水
平轴上标出时间:
一个循环
0
0.025 0.05 0.075 0.10 0.125 0.15
时间
振荡器的频率是周期的倒数。本例中,若振荡器的周期是 0 . 0 5秒,则其频率是 1÷0 . 0 5秒,
即每秒钟2 0个循环。这表明振荡器的输出每秒钟改变 2 0次。
每秒循环数与每小时英里数、每平方英寸磅数、每份食物(饮料)的卡路里数等毋需多
解释的术语一样是一个很容易理解的概念,但已不常用。为了纪念第一个发送和接收无线电
波的人 — 鲁道夫・赫兹 ( 1 8 5 7-1 8 9 4 ),我们用“赫兹”这个词表示每秒的循环数。这个用法第14章 反馈与触发器
下载
115
始于2 0世纪2 0年代的德国,后来传到其他国家。
于是,我们可以说这个振荡器的频率是 2 0赫兹,或直接简写为 2 0 H z。
到目前为止,我们只是在假设一个振荡器的速度。到本章末尾,我们可以构造一种器件
来真正地测量一个振荡器的速度。
为了构造这个器件,先看一个用特殊方式连接的一对或非门。或非门的特点是只有两个
输入都为0时,输出才为1:
N O R 0 1
0
1 1
0 0
0
下图是含有两个或非门、两个开关和一个灯泡的电路:
注意图中奇特的连接方式:左边或非门的输出是右边或非门的输入,右边或非门的输出是左
边或非门的输入。这是一种反馈。事实上,这和在振荡器中类似,输出又返回作为一种输入。
这是本章中大部分电路的特点。
在上图电路中,一开始,只有左边或非门的输出有电流,因为它的两个输入均为 0。现在
闭合上面的开关,左边或非门的输出变为 0,于是右边或非门的输出变为 1,灯泡点亮:
神奇之处在于当你断开上面的开关时,由于或非门的输入中只要有一个为 1,其输出就是
0,因而左边或非门的输出不变,灯泡仍然亮着:116
编码的奥秘
下载
你不觉得奇怪吗?两个开关都断开着,和第一幅图一样,但灯泡却亮着。这种情形和以
前所见到的完全不同。通常,一个电路的输出仅仅依赖于输入,这里的情况却不一样。无论
断开或闭合上面的开关,灯泡总是亮着。这里开关对电路没有什么影响,原因是左边或非门
的输出一直是0。
现在闭合下面的开关。由于右边或非门的输入中有一个是 1,则其输出变为 0,灯泡熄灭。
左边或非门的输出此刻变为 1:
现在,再断开下面的开关,灯泡仍旧不亮:
此电路和初始电路一样。然而这回却是下面开关的状态对灯泡没有什么影响。总结起来就是:
• 闭合上面的开关使灯泡点亮,当再断开时,灯泡仍然亮着。
• 闭合下面的开关使灯泡熄灭,当再断开时,灯泡仍然不亮。
电路的奇特之处是:有时当两个开关都断开时,灯泡亮着;而有时,当两个开关都断开
时,灯泡却不亮。当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器。
触发器是 1 9 1 8年在英国射电物理学家 William Henry Eccles(1875-1 9 6 6 )和F. W. J o r d a n的工作中
发明的。
触发器电路可以保持信息,换句话说,它有记忆性。它可以“记住”最近一次是哪个开
关先闭合的。如果你遇到这样一个触发器,它的灯泡亮着时,你可以确定最近闭合的是上面
的开关;而灯泡灭着时则是下面的开关。
触发器和跷跷板很像。跷跷板有两个稳定状态,它不会长期停留在不稳定的中间位置。
你只要一看跷跷板就知道哪边是最近被压下来的。
触发器是十分关键的工具,尽管你现在可能还没看出来。它们赋予电路“记忆”,使其知
道以前曾有过的状态。想像一下,如果你没有记忆力,你该如何去数数,你记不住你刚数过
的数,当然也无法确定下一个数是什么。同样,一个能计数的电路(本章后面要提到)必定
需要触发器。
触发器有很多种,刚才所看到的是最简单的一种,称为 R - S(或 R e s e t - S e t,复位 /置位)
触发器。下面以对称的方式把它重新绘出来:第14章 反馈与触发器
下载
117
用于点亮灯泡的输出称为 Q,另一个输出 -
Q 是Q的倒置。如果 Q是0, -
Q 就是1,反之亦然。
两个输入端S(S e t)和R(R e s e t)分别表示 置位和复位。你可以把“置位”理解为把 Q设为1,
- 变为
而“复位”是把 Q设为0。当S为1时(对应于前面图中闭合上面开关的情况),Q变为1而 Q
0;当R为1时(对应于前面图中闭合下面开关的情况),Q变为0而 -
Q 变为1。当S和R都为0时,
输出保持Q原来的状态。输入与输出的关系小结于下表中:
输入
输出
禁止
这张表称为功能表 、逻辑表 或真值表 。它指明不同的输入组合能产生不同的输出结果。由于
R - S触发器有两个输入端,因而不同的输入组合有 4种,分别对应于表中的 4行。
注意表中倒数第 2行中S和R均为零,而输出标识为 Q和 -
Q 。这表示当 S和R输入均为零时,
Q和 -
Q 端的输出保持 S、R同时设为 0以前的输出值。表中最后一行说明 S和R输入都为 1是非法
- 互为倒置的关系相
的、禁止的。这是因为 S、R同时为1时,两个输出 Q和 -
Q 均为零,这与 Q和 Q
矛盾。所以,当你用 R - S触发器设计电路时,要避免使 R、S输入同时为 1的情况。
R - S触发器通常画成有两个输入,两个输出的方块图,如下图所示:
R - S触发器能够记住哪一个输入端最近被输入高电位,这确实很有趣。但更有用的电路应
该能记住某个特定时间点上上一个信号是 0还是1。
在实际构造这种电路之前,先来思考一下它的行为功能。它需要两个输入,其中一个称
为数据端 (D a t a)。像所有数字信号一样,数据端输入可以是 0或1。另一个输入称为保持位
(Hold that bit)。通常情况下,保持位设为 0,这时,数据端对电路没什么影响。当保持位置
为1时,电路就反映出数据端的值。接着,保持位又置为 0,这时,电路将记住数据端输入的
最近一个值。数据端信号的任何改变不会对电路再有影响。
换句话说,它的功能表可以这样写:
输入
数据端
保持位
输出118
编码的奥秘
下载
在前两种情况下,保持位置为 1,Q端输出和数据端输入相同;后两种情况下,当保持位
置为0时,Q端输出和它以前的值相同,即保持原状态。注意,后两种情况中当保持位为 0时,
Q端输出不再受数据端输入的影响,功能表可以简化表示为:
输出
输入
数据端
保持位
X表示不关心其取值情况,它的值对于电路输出没有影响。
基于R-S 触发器来实现保持位的功能要求在输入端增加两个与门,如下图所示:
复位
保持位
置位
要使与门输出为 1,两个输入端必须同时为 1。在上图中,Q输出为0,而 -
Q 输出为1。
只要保持位置为 0,置位信号对于输出就没有影响:
复位
保持位
置位
同样,复位信号对电路输出也没有影响:
复位
保持位
置位
只有当保持位信号是 1时,电路的功能才和前述的 R - S触发器相同:
复位
保持位
置位第14章 反馈与触发器
下载
119
这时,由于上面与门的输出和复位端输入相同,而下面与门的输出和置位端输入相同,
所以此电路的功能就和普通的 R - S触发器是一样的了。
但我们还没有达到目标,我们只想要两个输入,而不是三个,怎么办呢?前面讲过 R - S触
发器中两个输入同时为 1的情况是禁止的;而两个输入同时为零的情况没有什么意义,因为那
只是输出保持不变的简单情况。这里,只要将保持位置为 0,就可以完成同样的功能。
可见,真正有意义的输入是 S为0,R为1或R为0,S为1。把数据端信号当作置位信号,它
取反后的值就是复位端信号,如下图示:
保持位
数据端
- 为1。只要保持位为 0,数据端输入对于电
在这种情况下, S和R输入以及输出 Q均为0, Q
路输出就没有影响:
保持位
数据端
当保持位为 1时,电路反映出数据端输入的值:
保持位
数据端
- 则相反。现在,保持位又回到 0:
Q端输出现在和数据端输入是一致的, Q
保持位
数据端120
编码的奥秘
下载
这时,电路会记得当保持位最后一次置为 1时数据端输入的值。数据端以后的变化对电路
的输出没有影响:
保持位
数据端
这个电路称为电平触发的 D型触发器 ,D(D a t a)表示数据端输入。所谓电平触发 是指当
保持位输入为某一特定电平(本例中为“ 1”)时,触发器才对数据端的输入值进行保存。(很
快,你将会看到另一种形式的触发器。)
通常情况下,当这样一个电路出现在书中时,输入并不被标为保持位,而是标为“时钟”。
当然,这个信号并不是一个真的时钟,但它有时却具有类似钟一样的属性,即在 0和1之是有
规律地来回变化。但是现在时钟只是用来指示什么时候保存数据:
时钟
数据端
把数据端简写为 D,时钟端简写为 C l k,其功能表如下所示:
输入
输出
这个电路就是所谓的电平触发的 D型锁存器,它表示电路锁存住一位数据并保持至将来使
用。它也可以称为 1位存储器。本书将在第 1 6章中说明如何将多个 1位存储器连起来以构成多
位存储器。
在锁存器中保存多位值是很有用的。假如你想用第 1 2章中的加法机把三个 8位数加起来,
你可以在第 1行开关上输入第一个加数,在第 2行开关上输入第二个加数,但是你必须把第一
次加法运算的结果记录下来,然后以同样方式把记下来的结果和第三个加数再用开关输入。
这是十分麻烦的。
使用锁存器可以解决这个问题。让我们把 8个锁存器集成到一个盒子里,形成一个 8位锁
存器。每个锁存器用到两个或非门、两个与门和 1个反向器。时钟端输入是互相连在一起的。
结果如下图所示:第14章 反馈与触发器
下载
Clk
121
8位锁存器
这个锁存器一次可以保存 8位数。上面的8个输入标为 D 0 ~D 7 ,下面的8个输出标为 Q 0 ~Q 7 。左
边的输入是时钟( C l k),时钟信号通常为 0。当时钟信号为 1时,D端输入被送到 Q端输出。当
时钟信号变为 0时,8位输出值保持不变,直到时钟信号再次被置为 1。8位锁存器也可以画成
下面的样子:
8位锁存器
下面是8位加法器:
8位加法器
通常(先不考虑上一章的减法),8个A输入和8个B输入是连在开关上的, C I(进位输入)
端接地,8个S(和输出)和C O(进位输出)端连着灯泡。
经修改, 8位加法器的输出既与灯泡相连,也作为 8位锁存器的数据端 ( D )输入。标为“保
存”(S a v e)的开关是锁存器的时钟输入,用于保存加法器的运算结果:
开关
开关
8位锁存器
保存
A
B
2-1选择器
输出
8位加法器
灯泡
灯泡
来自锁存器122
编码的奥秘
下载
标识为2 - 1选择器的方块是让你用一个开关来选择加法器的 B端输入是取自第 2排开关还是
取自锁存器的 Q端输出。当选择开关闭合时,就选择了用 8位锁存器的输出作为 B端输入。 2 - 1
选择器用了 8个如下电路:
B
选择
输出
A
如果选择( S e l e c t)端输入为 1,或门的输出和 B端输入是一样的。这是因为上面与门的输
出和B端输入是一样的,而下面与门的输出是 0。同样,如果选择端输入是 0,或门的输出则和
A端输入是一样的。总结起来如下表所示:
输出
输入
输出端
A
B
修改后的加法机中包含了 8个这样的1位选择器。所有选择端的信号输入是连在一起的。
改进过的加法机不能很好地处理进位输出 ( C O )信号。如果两个数的相加使进位输出信号
为1,则当下一个数再加进来时,这个信号就被忽略了。一个可能的解决方法是使加法器、锁
存器、选择器均为 1 6位宽度,或者至少比你可能遇到的最大的和的位数多一位。这个问题会
在第1 7章中专门讲述。
对加法机一个更好的改进方法是完全去掉一排开关,但是这需要先对 D触发器做一点儿小
的改进,对它加一个或门和一个称为清零(C l e a r)的输入信号。清零信号通常为 0,但当它为
1时,Q输出为0,如下图所示:
清零
时钟
数据端
无论其他信号是什么,清零信号总迫使 Q输出为0,起到了给触发器清零的作用。
你也许还不明白为什么要设置这个信号,为什么不能通过把数据端输入置 0和时钟端输入
置1来使触发器清零呢?这也许因为我们并不能控制数据端的输入。下图中, 8个锁存器连着 8
位加法器的输出:第14章 反馈与触发器
下载
123
开关
8位加法器
8位锁存器
清零
相加
灯泡
注意,标识为“相加” ( A d d )的开关此刻控制着锁存器的时钟输入。
你可能会发现这个加法器比前面那个好用,尤其是当你需要加上一长串数字时。刚开始
时,按下清零开关,这个操作使锁存器输出为 0,并熄灭了所有的灯泡,同时使加法器的 B端
输入全为 0。接着,通过开关输入第一个加数,闭合“相加”开关,则此加数反映在灯泡上。
再输入第二个数并再次闭合“相加”开关,由开关输入的 8位操作数加到前面的结果上,其和
输出到灯泡。如此反复,可以连加很多数。
触发器是电平触发式的,意思是说只有在时钟端输入从 0变到1后(即高电平时),数据端
输入的值才能保存在锁存器中。注意,在时钟端输入为 1期间,数据端输入的任何改变都将反
- 端的输出值上。
应在Q或 Q
对一些应用而言,电平触发时钟输入已经足够用了;但对另外一些应用来说,边沿触发
时钟输入更为适用。对于边沿触发器而言,只有当时钟从 0变到1的瞬间,输出才会改变。在
电平触发器中,当时钟输入为 0时,数据端输入的任何改变都不会影响输出;而在边沿触发器
中,当时钟输入为1时,数据端输入的改变也不会影响输出。只有在时钟输入从 0变到1的瞬间,
数据端的输入才会影响边沿触发器的输出。
边沿触发的 D型触发器是由两级 R - S触发器按如下方式连接而成的:
数据端
时钟124
编码的奥秘
下载
这时,时钟输入既控制着第一级,也控制着第二级。但是应该注意到时钟信号在第一级中取
了反,这意味着除了当时钟信号为零时保存数据外,第一级工作原理和 D型触发器完全相同。
第二级的输出是第一级的输入,当时钟信号为 1时,它们被保存。总的结论就是只有当时钟信
号从0变为1时,数据端输入才会保存下来。
让我们进一步分析。下面是处于非工作状态的触发器,其数据端、时钟输入均为 0,Q端
输出也是0:
数据端
时钟
现在,使数据端输入为 1:
数据端
时钟
这改变了第一级触发器状态,因为时钟信号取反后为 1。但第二级仍保持不变,因为时钟
端输入仍为 0。现在把时钟输入变为 1:
数据端
时钟
这就引起第二级触发器改变,使 Q端输出变为 1。与前面不同的是现在无论数据端输入如
何变化(如变为 0),它也不会影响 Q端的输出值:第14章 反馈与触发器
下载
125
数据端
时钟
- 端输出只有在时钟输入从 0变到1的瞬间才发生改变。
Q和 Q
边沿触发的 D型触发器的功能表需要一个新符号来表示这种从 0到1的瞬时变化,即用一个
向上指的箭头(↑)表示:
输入
输出
箭头表示当 C l k信号从0变到1时,Q端输出和数据端输入是一样的,这称为 C l k信号的“正
跳变”(“负跳变”是从 1到0的转换)。触发器的符号图如下所示:
图中的小三角符号表示触发器是边沿触发的。
现在向你展示一个使用边沿触发器的电路。先回忆一下本章开始构造的振荡器,振荡器
的输出是在 0和1之间变化的:
输出
把振荡器的输出连到边沿触发的 D型触发器的时钟输入端,并把 Q 端输出连到自己的 D输
入端:
触发器的输出同时又是它自己的输入。(实际上,这种构造可能是有问题的。振荡器是由
来回迅速转变状态的继电器构成的。振荡器的输出和构成触发器的继电器相连,而这些继电
器不一定能跟上振荡器的速度。为了避免这些问题,这里假设振荡器中继电器的速度比这个
电路中其他地方的继电器的速度都慢。)
观察下面的功能表,就可以明白电路中发生的情况了。刚开始时, C l k输入和 Q端输出都
是0,则 Q 端输出为1,而它和D输入是相连的:126
编码的奥秘
下载
输入
输出
当C l k输入从0变到1后,Q端输出就和 D输入一样了:
输入
输出
但是因为 -
Q 端输出变为 0,因而D输入也变为 0。C l k输入现在是 1:
输入
输出
当C l k信号变回为 0时,不会影响输出:
输入
输出
-
现在C l k信号再变为 1。由于D输入为0,则Q为0且 Q为1:
输入
输出
所以D输入也变为 1:
输入
输出
以上发生的情况总结起来就是:每当 C l k输入从0变到1时,Q端输出就发生改变,或者从 0
变到1,或者从1变到0。看看下面的图,问题就更清楚了:下载
第14章 反馈与触发器
127
当C l k输入从0变到1时,D的值(与 Q 的值是相同的)被输出到 Q端。当下一次 C l k信号从
0变到1时,同样会改变 D和 Q 的值。
若振荡器的频率是 2 0赫兹(即每秒 2 0次循环),则Q的输出频率是它的一半,即 1 0赫兹。
由于这个原因,这种电路 (其中 Q 输出依循触发器的数据端输入 )称为分频器。
当然分频器的输出可以是另一个分频器的 C l k输入,并再一次进行分频。下面是三个分频
器连在一起的情况:
让我们来看一下上图顶部的 4个信号的变化规律:
这里只给出了这幅图的一部分,因为这个电路会周而复始地变化下去。从这个图中,有
没有发现使你眼熟的东西?
提示你一下,把这些信号标上 0和1:
现在看出来了吗?把这个图顺时针旋转 9 0度,读一读横向的 4位数字,每一组输出都对应
了十进制中 0~1 5中的一个数:128
编码的奥秘
下载
二进制 十进制
0 0 0 0
0 0 0 1
0 0 1 0
0 0 11
0 1 0 0
0 1 0 1
0 11 0
0 111
1 0 0 0
1 0 0 1
1 0 1 0
1 0 11
11 0 0
11 0 1
111 0
1111 0
1
2
3
4
5
6
7
8
9
1 0
11
1 2
1 3
1 4
1 5
这个电路只具备了一个计数功能,如果再多加上几个触发器,它就可能计更多的数。第 8
章曾指出在一个递增的二进制数序列中,每一列数字在 0和1之间变化的频率是其右边那一列
数字变化频率的一半,这个计数器模仿了这一点。时钟信号每一次正跳变时,计数器的输出
就递加了1。
可以把8个触发器集成于一个盒子里,构成一个 8位计数器:
8位行波计数量
这个计数器称为 8位行波(异步)计数器,因为每一个触发器的输出都成为下一个触发器
的时钟输入。变化是沿着触发器一级一级地传递的,最后一级触发器的变化必定要延迟一些。
更复杂的计数器是“并行(同步)计数器”,在这种计数器中,所有输出是同时改变的。
输出端信号已标识为从 Q 0 ~Q 7 ,Q 0 是第一个触发器的输出。如果把灯泡连到这些输出上,
就可以把8位结果读出来。
这样一个计数器的时序图可以把 8个输出分开来表示,也可以把它们一起表示,如下图所
示:
时钟信号的每个正跳变发生时,一些 Q输出可能改变,另一些可能不改变,但总体上是使第14章 反馈与触发器
下载
129
原来的结果递增了 1。
本章前面曾提到过可以找到某种方法来确定振荡器的频率,现在这个方法已经找到了。
如果把振荡器连到 8位计数器的时钟输入上,计数器会显示出振荡器经历了多少次循环。当计
数器总和达到 11111111时,它又会返回到 0 0 0 0 0 0 0 0。使用计数器确定振荡器频率的最简单方
法是把计数器的输出连到 8个灯泡上。当所有输出为 0时(即没有一个灯泡点亮),启动一个秒
表;当所有灯泡都点亮时,停住秒表。这就是振荡器循环 2 5 6次所需要的时间。假设是1 0秒钟,
则振荡器的频率就是 2 5 6÷1 0,或者说是 2 5 . 6赫兹。
当触发器功能增加时,它也变得更复杂。下面这个触发器称为具有预置( P r e s e t)和清零
功能的边沿触发的 D型触发器。
清零
预置
时钟
通常情况下,预置和清零信号输入会忽视时钟和数据端输入,且均为 0。当预置信号输入
为1时,Q变为1, Q 变为0。当清零信号为 1时,Q为0, Q 变为1(同R - S触发器中的S和R输入
一样,预置和清零信号不能同时为 1)。其他情况下,该触发器的行为和普通边沿触发的 D型触
发器是一样的。
输入
输出130
编码的奥秘
下载
电路图符号可以简化地用下图代替:
现在,我们已经知道如何用继电器来做加法、减法和计数,是不是很有成就感?因为我
们所用的硬件是 1 0 0多年以前就存在的东西,我们还有更多的空间去探索。但是先暂时休息一
下,不用再去构造什么,回过头来再看看关于数字的问题吧。下载
第15章 字节与十六进制
上一章中的两个改进的加法机清晰地解释了数据路径的概念。在整个电路中, 8位值从一
个部件传到另一个部件。它们是加法器、锁存器、选择器的输入,经过运算或操作又从这些
部件输出。这些数由开关定义,最后由灯泡来表示结果。可以认为电路中的数据路径的宽度
是8位。可是,为什么一定是 8位,而不是 6位、7位、9位或1 0位呢?
最简单的回答就是这些加法机是在第 1 2章中最原始的加法机上改进而来的,而最原始的
那个加法机就是 8位。不过,这个解释似乎很缺乏说服力。实际上,用 8位的原因是它表示一
个字节。
字节这个词大概是在 1 9 5 6年前后由 I B M公司最早提出来的。这个词起源于 b i t e,但用 y代
替了i,以便不会被人误认为它是 b i t。曾经有一段时期,字节仅仅简单地表示特定数据路径上
数据的位数。但是到了 2 0世纪6 0年代中期,随着 I B M的3 6 0系统的发展(一种大型复杂的商用
计算机),字节这个词专门用来表示 8位二进制数。
作为一个 8位数,一个字节可以从 0 0 0 0 0 0 0 0取值到11111111。这些数可以代表 0~2 5 5的正
数,也可以表示 - 1 2 8~1 2 7范围之内的正、负数。总之,一个特定的字节可以代表 2 8 即2 5 6种不
同事物中的一个。
8位数事实上是很适用的,字节在很多方面都比一位数优越。 I B M采用字节的一个原因就
是它们易于以 B C D(将在第 2 3章中描述)这种格式保存。巧的是,在以后的各章中你会看到
字节用于保存文本也是很合适的,因为世界上大部分书面语言都可以用少于 2 5 6个字符的字符
集来表示(除了汉语、日语、韩语等所用的表意文字以外)。用字节表示黑白图像中的灰度也
是很合适的,因为人眼大约能区分 2 5 6种不同程度的灰度。当一个字节不足以表示信息时(如
刚才说的表意语言:汉语、日语、韩语等),用两个字节,即 2 1 6 或65 536也可以很好地表示。
半个字节,即4位二进制数,有时被称为半位元组,它比起字节而言,用的并不频繁。
由于字节在计算机内部经常出现,所以尽可能简单明了地表示它会带来很大方便。例如,
一个8位二进制数 1 0 11 0 11 0的确很直观但是不简明。
当然也可以用十进制数来表示字节,但这要求从二进制换算成十进制,这样做不仅不简
单,反而是件很令人讨厌的事。第 8章曾描述了一种很直观的方法。每一位二进制数字写到对
应的方盒子中,并在其下方标上 2的乘方数。把每一列相乘后再相加即可得到对应的十进制数。
下面是1 0 11 0 11 0的转换:
把十进制数转换为二进制数就更麻烦了。你可以用十进制数去除以以递减顺序排列的 2的
幂,每除一次,商是一个二进制位,而余数则继续去除以下一个最大的 2的幂。下面是十进制
数1 8 2转换成对应二进制数的过程:第15章 字节与十六进制
下载
132
第8章有关于这个方法的更多描述。总之,在十进制数和二进制数之间进行转换通常不是
件十分简单的事。
从第8章中我们还学习了八进制数字系统,八进制数字系统只使用数字 0、1、2、3、4、5、
6、7。在八进制数和二进制数之间进行转换却是小菜一碟,你只要记住每个八进制数字对应 3
位二进制数字即可,如下表所示:
二进制
0 0 0
0 0 1
0 1 0
0 11
1 0 0
1 0 1
11 0
111
八进制
0
1
2
3
4
5
6
7
如果已有一个二进制数字(如 1 0 11 0 11 0),则从最右边的数字开始,每 3位二进制数字组
成一组,即可转换为对应的八进制数:
可见,字节 1 0 11 0 11 0可以表示为八进制的 2 6 6。 这显然已简单了很多,八进制确实是表
示字节的一个好方法,但其中仍然有一个问题。
字节的二进制表示范围是从 0 0 0 0 0 0 0 0~11111111,对应的八进制表示范围是从 0 0 0~3 7 7。
上例清楚地表示出 3位二进制数对应于最右边和中间的八进制数,而 2位二进制数对应于最左
边的八进制数,这就表明一个 1 6位二进制数的八进制表示和把它分成两个字节后的八进制表
示有所不同:
为了使多字节值能和单字节值的表示一致,需要的系统应该能使每个字节平分,这意味
着应该把每个字节分成 4组,每组2位(以4为基数);或2组,每组4位(以1 6为基数)。
让我们看看以 1 6为基数的情况,这是我们还未接触过的新的记数系统。它被称为“十六
进制( h e x a d e c i m a l)”,这个词本身就让人迷惑,因为大部分以 h e x a -为前缀的词都是指与 6有
关的事物,而这里 h e x a d e c i m a l却是指1 6。虽然微软公司在技术出版物的格式方面明确地声明
不要将十六进制缩写为 hex ,但绝大多数人还是使用这种缩写。
在十进制中,我们这样计数:
0 1 2 3 4 5 6 7 8 9 10 11 12 ......133
编码的奥码
下载
在八进制中,不需要 8和9:
0 1 2 3 4 5 6 7 10 11 12 ......
同样,以4为基数的系统不需要 4、5、6或7:
0 1 2 3 10 11 12 ......
而二进制只需要 0和1:
0 1 10 11 100 ......
但是十六进制有些不同,它需要的符号比十进制还要多,如下所示:
0 1 2 3 4 5 6 7 8 9 ??????10 11 12 ......
上图中 1 0出现的地方是表示十进制中的数 1 6。此外,还需要 6个符号来表示十六进制数,
但这些符号是什么呢?它们来自哪里呢?最形象的方法是引入 6个新符号,例如:
它们不同于大部分数字用的符号,这些符号的优点是便于记忆,而且从某种意义上代表
了它们应该表示的数字。你看,重 1 0加仑的牛仔帽、一个橄榄球(一个橄榄球队有 11人)、一
打椰子、一只黑猫(和不吉利的 1 3相联系)、一轮满月(一般出现在新月后的第 1 4天晚上)以
及让人们联想到 Julius Caesar 在三月的第 1 5天被暗杀时所用的匕首。
每个字节都可以用两个十六进制数表示,换句话说,一个十六进制数代表 4位二进制数,
即半个字节。下表描述了在二进制数、十六进制树和十进制数之间的转换:
二进制数
十六进制数
十进制数
二进制数
下图表示如何用十六进制表示字节 1 0 11 0 11 0:
即使要表示多字节数也很容易:
十六进制数
十进制数第15章 字节与十六进制
下载
134
一个字节总是由一对十六进制数来表示。
不过,我们绝不会真的用橄榄球或匕首来表示十六进制数,事实上,我们用 6个拉丁字母
来表示那6个十六进制数,如下所示:
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ......
下表表示出在二进制数、十六进制数和十进制数之间的转换:
二进制数 十六进制数
0 0 0 0
0 0 0 1
0 0 1 0
0 0 11
0 1 0 0
0 1 0 1
0 11 0
0 111
1 0 0 0
1 0 0 1
1 0 1 0
1 0 11
11 0 0
11 0 1
111 0
1111 0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
十进制数
0
1
2
3
4
5
6
7
8
9
1 0
11
1 2
1 3
1 4
1 5
字节1 0 11 0 11 0可以由十六进制数 B 6来表示,而不用再画上一个橄榄球。同前面的章一样,
用下标来表示记数系统的基数,如: 1 0 11 0 11 0 T W O 表示二进制、 2 3 1 2 F O U R 表示四进制、2 6 6 E I G H T 表
示八进制、 1 8 2 T E N 表示十进制、 B 6 S I X T E E N 则表示十六进制。不过,这真是挺麻烦的。还好,有
更简单、更通用的方法来表示十六进制: B 6 H E X 还可以进一步简化为 B 6 h。
在十六进制数中,每一位的位置都对应于 1 6的幂:
1的个数
16的个数
256的个数
4096的个数
65 536的个数
十六进制数 9 A 4 8 C h是:
9A48Ch = 9×1 0 0 0 0 h +
A×1 0 0 0 h +
4×1 0 0 h +
8×1 0 h +
C×1 h135
编码的奥码
下载
用1 6的乘方表示为:
9A48Ch = 9×1 6 4 +
A×1 6 3 +
4×1 6 2 +
8×1 6 1 +
C×1 6 0
用对应的十进制数代入为:
9A48Ch = 9×6 5 5 3 6 +
A×4 0 9 6 +
4×2 5 6 +
8×1 6 +
C×1
注意,在写一个数时,不用下标来表示数的基数也不会引起混淆。 9就是9,不管它是十
进制数还是十六进制数;而 A则显然是个十六进制数,相当于十进制中的 1 0。
把所有数字转换成十进制数需要下列运算:
9A48Ch = 9×6 5 5 3 6 +
1 0×4 0 9 6 +
4×2 5 6 +
8×1 6 +
1 2×1
答案是631 948。以上是一个十六进制数如何转换成十进制数的过程。
下面是把任何一个 4位十六进制数转换成十进制数的模板:
例如,这儿有一个7 9 A C h的转换过程。记住,十六进制中的A和C对应于十进制中的1 0和1 2:
把十进制数转换为十六进制数需要做除法。如果数字比 2 5 5小,则可以用 1个字节来表示,
对应于两个十六进制数。为了求出这两个数,用原数去除以 1 6得到商和余数。举例说明, 1 8 2
除以1 6得11,余6,所以十六进制表示为 B 6 h。
如果想要转换的十进制数比 65 536小,则十六进制表示会有 4位或更少。下面是把这样一
个十进制数转换为十六进制数的一个模板:下载
第15章 字节与十六进制
136
先把整个十进制数放到左上角的盒子里,作为第一个被除数,用它除以 4 0 9 6(第一个除
数),商放到被除数下面的盒子里,余数放到被除数右边的盒子里。余数成为新的被除数,用
它除以2 5 6。以下是31 148如何转换成十六进制数的过程:
当然,十进制数的 1 0和1 2用十六进制表示就是 A和C,故结果是 7 9 A C h .
这个方法的问题是如果你想用一个计算器来做除法运算,它不会显示出余数是多少。如果
你用31 148除以4 0 9 6,计算器给出的结果只能是 7 . 6 0 4 4 9 2 1 8 7 5。为了计算余数你得用 4 0 9 6×7
(得到28 672),再从31 148中减去它;或者用 4 0 9 6乘以0 . 6 0 4 4 9 2 1 8 7 5,即商的小数部分。(不
过,有些计算器具有十进制数和十六进制数之间的转换功能。)
把小于65 535的十进制数转换为十六进制数的另一个方法是先把原数除以 2 5 6而分为两个
字节,对于每个字节,再除以 1 6。下面是模板:
从最上面开始,每做完一次除法,商就进入除数左下方的盒子里,而余数进入右边的盒
里里。例如,51 966的转换过程是:
得到的十六进制数字是1 2、1 0、1 5和1 4,即C A F E,它看起来倒更像一个单词而非一个数字!
下面是和十六进制相关的加法表:137
编码的奥码
下载
可以用这张表和通常的进位规则来对十六进制数做加法:
4 A 3 3 7 8 E 2
+ 8 7 7 A B 9 8 2
D 1 A E 3 2 6 4
曾在第 1 3章中讲过可以用 2的补数来表示负数。如果在二进制中处理 8位带符号数,则所
有的负数都是以 1开头的。在十六进制中,两位带符号数若是以 8、9、A、B、C、D、E或F开
头则是负数。例如, 9 9 h可能表示十进制的 1 5 3(如果处理的是 1个字节的无符号数)或十进制
的-1 0 3(如果处理的是有符号数)。
字节9 9 h也有可能就是十进制的 9 9,关于这一点会在第 2 3章中解释,但是下一步必须先讲
讲存储器。下载
第16章
存储器组织
每天早上,当我们从睡梦中醒来时,记忆会填充大脑的空白。我们会记起我们在哪里,
做过什么,计划做什么。我们可能一下子就能想起来,也可能几分钟都想不起来,不过,总
的来说,我们通常能够重新组织自己的生活,保持高度的连续性,开始新的一天。
当然,人类的记忆是无序的。当回忆高中的几何课时,你可能会想到是谁坐在你前面;
或者那一天当老师要解释什么是 QED(quod erat demonstrandum,证完 /证毕)的时候,刚好进
行消防演习。
人类的记忆也非安全无比。其实,书写的发明就是为了弥补人类记忆的不足。前一天晚
上你可能因为突然冒出的一个关于剧本的好主意而在凌晨三点醒来,抓起床边特地准备的笔
和纸记下来以便不会忘掉,第二天早上你就可以看到这个好主意并开始着手写剧本。当然你
也可以不用这样。
先写后读,先保存后取回,先存储后访问,存储器的作用就是在这两类事件间保证信息
的完好无损。无论什么时候存储信息,都要用到不同类型的存储器。纸是保存文本信息的最
佳媒体,磁带则能很好地保存音乐和电影。
电报继电器 — 当集成为逻辑门然后再集成为触发器 — 也一样可以保存信息。正如我们
所知道的,一个触发器可保存 1位信息。保存 1位信息当然并不代表保存全部信息,但这是一
个开端。一旦我们知道了如何存储 1位信息,就可以容易地存储 2位、3位或更多位信息。
第1 4章曾讲过电平触发的 D型触发器,它由一个反向器、两个与门和两个或非门构成:
时钟
数据端
当时钟输入为1时,Q端输出与数据端输入是相同的。但当时钟输入变为0时,Q端输出将
维持原来的数据端输入,再改变数据端输入不会影响Q端输出,直到时钟输入再次变为1为止。
触发器的逻辑表格如下:
输入
输出
在第1 4章中,这种触发器的功能体现在两个不同的电路中。而在本章,它仅以一种方式
来使用 — 即用于保存 1位信息。正因为如此,给输入端和输出端重新命名,以便与该目的更
为一致。第16章 存储器组织
下载
139
数据输出
写入
数据输入
这是同一个触发器,但现在 Q输出端命名为数据输出(Data Out),时钟输入端(在第 1 4
章是作为保持位)命名为写入(Wr i t e)。就像可以在纸上记录信息一样,写入信号使得数据
输入(Data In)信号写入或存储到电路中。通常,若写入信号 ( W )为0,则数据输入 ( D I )信号
对输出无影响。而当我们想在触发器中存储数据输入信号时,写入信号应先置 1后置0。就像
在第1 4章提到的,这种类型的电路也叫锁存器,因为它锁定数据。下面画出了一个 1位锁存器,
但没有画出其所包含的单个部件:
把多个1位锁存器连成多位锁存器是相当容易的,只需连接好写入信号:
写入
输入
输出
该8位锁存器具有 8个输入端和 8个输出端。另外,这个锁存器有一个写入输入端,通常为
0。要在这个锁存器中存储一个 8位二进制数,应将写入信号先置 1后置0。也可以把这个锁存
器画成一个整体,就像这样:
8位锁存器
为了与1位锁存器一致,也可以画成这样:140
编码的奥秘
下载
数据输入
8位锁存器
数据输出
写入
另外一种集成 8个1位锁存器的方法不像上述这么直接。假设只想用一个数据输入信号端
和一个数据输出信号端,且又希望它具备在一天或一分钟内存储 8次数据输入信号的能力。同
时,也希望能通过检测这个数据输出信号端就可以检查这 8个数据。
换句话说,我们只想存储 8个单独的1位数,而不想在 8位锁存器中存储 1个8位数。
为什么会有这种想法呢?可能是因为我们仅有一个灯泡的缘故吧!
我们知道这需要 8个1位锁存器。先不要考虑这些数据是怎样存储在这些锁存器中的,先
让我们把注意力放在如何用一个灯泡来检查 8个锁存器的数据输出信号上。当然,我们通常用
手工把灯泡从一个锁存器移到另一个锁存器来测试各个锁存器的输出,不过,我们更倾向于
用更自动化的方法来实现。实际上,我们打算用开关来选择想要检查的锁存器。
那么,需要多少个开关呢?若是 8个锁存器,则需要 3个开关。 3个开关可表示 8个不同的
值:0 0 0、0 0 1、0 1 0、0 11、1 0 0、1 0 1、11 0和111。
目前已有8个1位锁存器、3个开关、1个灯泡,此外还有“其他东西”用在开关和灯泡之间:
这是什么?
这个“其他东西”就是标识为“这是什么?”的神秘盒子,它上面有 8个输入端,左侧有
3个输入端。通过闭合和断开这三个开关,就可以从 8个输入中选择一个,使其经过底部至输
出端输出,该输出使灯泡发光。
“这是什么?”到底是什么呢?我们以前曾见过类似的东西,尽管没有这么多的输入端。
它类似于第 1 4章中第一个改进的加法机里用到的电路。那时我们需要某种东西用于是选择一
行开关还是选择一个锁存器的输出作为加法器的输入,我们把这种东西叫 2 - 1选择器,这里需
要8 - 1选择器:第16章 存储器组织
下载
141
数据输入
选择输入
8-1选择器
输出
8 - 1选择器具有 8个数据输入端(显示在上部)和 3个选择输入端 (Select Input)(显示在左
侧),选择输入端用于选择哪个输入数据在输出端输出。例如,若选择输入端为 0 0 0,则输出
D 0 的值;若选择端为 111,则输出D 7 的值;若选择端为 1 0 1 ,则输出D 5 的值。其逻辑表如下:
输入
输出
8 - 1选择器由三个反向器、八个 4输入与门和一个 8输入或门构成,如下所示:
输出
这是一个相当复杂的电路,但只需一个例子就可以使你明白它是如何工作的。假设
S 2 = 1 , S 1 = 0 , S 0 = 1,从上面数第六个与门的输入包括 S 0 、-
S 1 、S 2 ,它们全为 1。没有其他与门有同
样的三个输入信号,因此,其他与门输出全部为 0。若D 5 =0,则第六个与门输出为 0;若D 5 =
1,则其输出为1。对最右边的或门来说也是如此。因此,若选择端为 1 0 1,则输出为 D 5 。142
编码的奥秘
下载
概括一下我们想干什么。我们想连接 8个1位锁存器,它们能够通过一个数据输入信号端
分别写入,也能通过一个数据输出信号端分别检查。已经证明可以用一个 8 - 1选择器从 8个锁
存器中选择一个数据输出信号,如下图所示:
8-1选择器
输出
到现在已完成了任务的一半。我们已经实现了输出端的要求,现在再来看一下输入端。
输入端包括数据输入信号及写入信号。在锁存器的输入端,可以把所有数据输入信号连
接在一起。但不能把 8个写入信号也都连在一起,因为我们还想分别向每个锁存器中写入数
据。此外,还要有一个单独的写入信号,它必须能连到其中任一个(并且只能是一个)锁存
器上:
数据输入
写入
这是什么?
为了完成这项工作,需要另外一个电路,这个电路看起来与 8 - 1选择器有点相似,但实际
上却正好相反。这就是 3 - 8译码器。前面我们曾见过简单的数据译码器 — 第11章曾通过连接
开关来选择理想的猫的颜色。
3 - 8译码器有 8个输出端。任何情况下,锁存器除了一个输出端外,其余的均为 0。这个例
外是由S 0 、S 1 、S 2 输入信号所选择的输出端。该输出端输出的也是数据输入端的输入:第16章 存储器组织
下载
143
数据输入
-
再说一遍,从上面数第六个与门的输入包括 S 0 、 S 1 、S 2 ,没有另外的与门有同样的三个输
入。若选择输入端为 1 0 1,则其他与门输出都为 0。若数据输入为 0,则第六个与门输出为 0;
若数据输入为1 ,则其输出为 1。其逻辑表格如下:
输出
输入
数据
数据
数据
数据
数据
数据
数据
数据
下面是具有 8个锁存器的完整电路:
地址
写入
数据
3-8译码器
8-1选择器
输出
数据输出
数据输入144
编码的奥秘
下载
注意,译码器和选择器的三个选择信号相同,现在这三个信号都记作 地址(A d d r e s s)。
就像信箱号一样, 3位地址决定了选择 8个锁存器中的哪一个。在输入端,地址输入决定写入
信号触发哪一个锁存器来存储输入的数据。在输出端(图的下部),地址输入控制 8 - 1选择器
选择8个锁存器中的一个进行输出。
这种锁存器的配置有时也称为读/写存储器,但通常叫作随机访问存储器或 R A M。R A M
可存储8个单独的1位数据,如下图所示:
地址
数据输入
数据输出
写入
称它为存储器是因为它能保存信息,称为读/写存储器是因为可以在每个锁存器中保存
新的数据(也就是写数据),同时还可以查看每个锁存器中所保存的数据(也就是读数据)。
称它为随机访问存储器是因为通过简单地改变地址输入就可以从 8个锁存器中的任意一个读出
或写入数据。相比之下,其他类型的存储器必须顺序读出 — 也就是,在可以读出存储在地
址1 0 1的数据之前,必须读出存储在地址 1 0 0的数据。
R A M配置通常称作 R A M阵列,上述这种特定配置的 R A M阵列以简写形式8×1的方式组织
起来。阵列中可以存放8个数,每个仅占1位,R A M阵列中能存储的位数等于这两个值的乘积。
R A M阵列可通过各种方法来组合。例如,可以把两个 8×1 RAM 阵列连接起来,使它们
按照相同的方法来寻址:
地址
数据输入
数据输出
写入
数据输入
数据输出
这两个8×1 RAM 阵列的地址和写入输入端连接在一起,所以其结果为一个 8×2 RAM阵
列:
地址
数据输出
数据输入
写入第16章 存储器组织
下载
145
这个R A M阵列可存储 8个数,但每个数占 2位。
两个8×1 RAM阵列也可以按照与单个锁存器连接相同的方式 — 通过一个2 - 1选择器和一
个1 - 2译码器 —来组合,如下图所示:
写入
地址
数据输入
选择
1-2译码器
2-1选择器
数据输出
连接到译码器和选择器的选择( S e l e c t)输入实质上选择两个 8×1 RAM阵列中的一个,
在这里它也就是第 4根地址线。所以,该图实际上是一个 1 6×1 RAM 阵列:
地址
数据输出
数据输入
写入
此R A M阵列可存储 1 6个数,每个数占 1位。
R A M阵列的存储容量与地址输入端数目有直接关系。无地址输入端时(即 1位锁存器和 8
位锁存器这种情况),只能存1个数;有一个地址输入端时,可存 2个数;有两个地址输入端时,
可存4个数;有三个地址输入端时,可存 8个数;有四个地址输入端时,可存 1 6个数。其关系
可归纳成如下等式:
RAM 阵列的存储容量 = 2 地址输入端数目
上面已讲了如何构造小的 RAM 阵列,那么再规划大的 RAM 阵列应该并不困难。例如:
地址
数据输入
写入
数据输出146
编码的奥秘
下载
这个R A M阵列可存储 8 1 9 2位信息,按 1 0 2 4个数、每个 8位来组织。因为 1024 = 2 1 0 ,所以
它有1 0条地址线。此外,它有 8个数据输入端和 8个数据输出端。
换句话说,这个 RAM 阵列可存储 1 0 2 4个字节。就像一个邮局有 1 0 2 4个邮箱,每个信箱中
有一个不同的1字节数。
1 0 2 4个字节即 1K 字节(k i l o b y t e),1 K字节在此会引起许多混淆。公制里前缀 k(来自于
希腊文k h i l i o i ,意思为1千)经常用到,如 1 k g = 1 0 0 0 g , 1 k m = 1 0 0 0 m。但这里所说的 1 K字节= 1 0 2 4
字节 — 而非1 0 0 0字节。
原因在于公制是基于 1 0的幂,而二进制是基于 2的幂,这两种进制永远不会有相同的值。
1 0的整数次幂为 1 0、1 0 0、1 0 0 0、1 0 0 0 0、1 0 0 0 0 0等,而2的整数次幂为 2、4、8、1 6、3 2、6 4
等,没有1 0的整数次幂与2的整数次幂相等的情况。
但有时它们非常接近。的确, 1 0 0 0非常接近1 0 2 4,可以用“约等于 (≈)”符号进行数学化
表示:
2 1 0 ≈1 0 3
这个关系式并非不可思议,它只不过表明 2的某次幂等于 1 0的某次幂而已。这种特例允许
人们方便地把1 0 2 4字节称作1 K字节。
K字节简写为 K或K B。所以,上面展示的 R A M阵列存储1 0 2 4字节或1 K ( 1 K B )。
不能把1 K B的R A M阵列说成是存储 1 0 0 0字节,它大于 1 0 0 0,即1 0 2 4,为了让人知道你在
说什么,你可以把它说成“ 1 K”或“1 K字节”。
1 K字节的存储器具有 8个数据输入端, 8个数据输出端和 1 0个地址输入端。由于是通过 1 0
条地址线来访问字节,所以 R A M阵列可存储 2 1 0 个字节。无论何时再加上一条地址线,其存储
容量将翻倍。下面每一行都都表示存储容量的翻番:
1KB = 1024B = 2 1 0 B≈1 0 3 B
2KB = 2048B = 2 11 B
4KB = 4096B = 2 1 2 B
8KB = 8192B = 2 1 3 B
16KB = 16 384B = 2 1 4 B
32KB = 32 768B = 2 1 5 B
64KB = 65 536B = 2 1 6 B
128KB = 131 072B = 2 1 7 B
256KB = 262 144B = 2 1 8 B
512KB = 524 288B = 2 1 9 B
1024KB = 1 048 576B = 2 2 0 B ≈ 1 0 6 B
可以看出左侧的数字也是 2的整数次幂。
按照同样的逻辑,我们能把 1 0 2 4字节称作 1 K B ,当然也可以把 1 0 2 4 K B称作 1 M 字节
(m e g a b y t e,希腊文m e g a s意思为大),M字节缩写为 M B。以下仍是存储容量翻番的式子:
1MB = 1 048 576B = 2 2 0 B≈1 0 6 B
2MB = 2 097 152B = 2 2 1 B
4MB = 4 194 304B = 2 2 2 B第16章 存储器组织
下载
147
8MB = 8 388 608B = 2 2 3 B
6MB = 16 777 216B = 2 2 4 B
32MB = 33 554 432B = 2 2 5 B
64MB = 67 108 864B = 2 2 6 B
128MB = 134 217 728B = 2 2 7 B
256MB = 268 435 456B = 2 2 8 B
512MB = 536 870 912B = 2 2 9 B
024MB = 1 073 741 824B = 2 3 0 B≈1 0 9 B
希腊文g i g a s意思为巨大,所以把 1 0 2 4 M B称作1 G字节( g i g a b y t e ),缩写为G B。
同样,1 T字节( t e r a b y t e,希腊文 t e r a s意思为庞然大物)等于 2 4 0 字节(约 1 0 1 2 )或1 099 511
627 776B,terabyte缩写为T B。
1KB约为1000B,1MB约为1 000 000B,1GB约为1 000 000 000B,1TB约为1 000 000 000 000B。
再大的数就很少用了,如 1 P B(p e t a b y t e)= 2 5 0 B或1 125 899 906 842 624字节,约等于
1 0 1 5 。1 E B ( e x a b y t e ) = 2 6 0 B或1 152 921 504 606 846 976字节,约等于1 0 1 8 。
下面提供一些基本常识。在此书编写的时候( 1 9 9 9年),家用电脑一般都配有 3 2 M B或
6 4 M B或1 2 8 M B的随机访问存储器(为不至于混淆,这里不谈任何关于硬盘驱动器的事情,而
只谈论R A M),即33 554 432B或67 108 864B或134 217 728B。
当然,人们总拣方便的讲。有 65 536字节内存的人会说“我有 6 4 K”;有33 554 432字节
的人会说“我有 3 2 M”。虽说不多,但有 1 073 741 824字节的人也会说“我有 1 G”。
有时人们可能会提到 K位或M位(注意是位而不是字节),不过这很少见。人们谈到存储
器时,几乎总是指字节数而非位数。
(当然,把字节转换成位,乘 8即可。)在线路传送数据时,
通常会有这样的短语每秒千位( k b p s )或每秒兆位(m b p s )出现。例如, 5 6 K的调制解调器指的是
5 6 K b p s ,而非每秒千字节。
至此我们已经明白如何构造所需的 R A M阵列,但不要离题太远。现在让我们看一下已经
集成了65 536字节的存储器:
地址
数据输入
数据输出
写入
为什么是6 4 K B而非3 2 K B或1 2 8 K B?因为65 536是一个整数,刚好为2 1 6 B,也即该R A M阵列
有1 6位地址。换句话说,该地址正好是 2个字节。用十六进制来表示其地址范围是 0 0 0 0 h~
FFFFh.
6 4 K B的内存在1 9 8 0年的P C机上是比较普遍的配置,尽管它不是用电报继电器制成的。但
是,你真的能用继电器来实现吗?肯定不能。因为按照我们的设计方案需要为每位存储器提
供9个继电器,那么 6 4 K×8的R A M阵列需要将近5 0 0万个继电器。
利用控制面板来操作所有的存储器 — 写入数据到存储器或验证写入的数据 — 将更加先
进。这种控制面板用 1 6个开关来表示地址, 8个开关来表示需要输入存储器的 8位数据, 8个灯148
编码的奥秘
下载
泡来显示8位数据,再用一个开关来表示写入信号,如下图所示:
控制面板
接管
写入
所有的开关均显示在 0位置。另外,还有一个标识为接管 ( t a k e o v e r )的开关,使用这个开关
的目的是使其他电路可以使用与控制面板相连的同一个存储器。当接管开关置0时(如图所示),
控制面板上的其余开关将不起任何作用;而当此开关置 1时,控制面板将对存储器进行专门控
制。
这些都可以用若干 2 - 1选择器来实现。实际上,需要 2 5个— 1 6个接地址信号、 8个接数据
输入开关、另外 1个接写入开关。其电路如下:
写入
数据
输入
地址
25个开关
接管
25个2-1选择器
8个灯泡
数据输出
当接管开关断开时(如上图),6 4 K×8 RAM阵列的地址、数据输入和写入信号来自于外
部信号,显示在 2 - 1选择器的左上角;当接管开关闭合时, R A M阵列的地址、数据输入和写入
信号来自于控制面板开关传来的信号。无论哪种情况, R A M阵列的数据输出信号传到 8个灯
泡上或其他可能的地方。
下图是带有控制面板的 6 4 K×8 RAM 阵列:第16章 存储器组织
下载
149
控制面板
地址
数据输入
数据输出
写入
当接管开关闭合时,可用 1 6个地址开关来选择 65 536 个地址中的任何一个,而灯泡将显
示当前地址中所存的 8位数据。可用 8个数据开关来定义一个新数,并通过写入开关把它写入
存储器中。
通过6 4 K×8 RAM阵列和控制面板可以与需要处理的 65 536个8位数据中的任何一个保持
联系。但我们也留了一些机会让别的东西 — 也许是其他一些电路 — 使用存在存储器中的数
据,或者把数据写入存储器。
还有一个必须注意的有关存储器的问题,它非常重要。在第 11章介绍逻辑门的概念时,
并未画出构成逻辑门的单个继电器的构造。特别地,没有标出每个继电器连接的电源。任何
时候当继电器触发时,电流流过电磁线圈并在适当的位置吸下金属簧片。
如果一个装满65 536字节的6 4 K×8 RAM阵列被关掉电源,将会发生什么情况呢?所有的
电磁铁将失去磁性,所有继电器的触点将回到未触发状态, R A M中的内容也将永远丢失。
这就是随机访问存储器也称为易失性存储器的原因,它需要恒定的电源来保持其中的内
容。下载
第17章 自 动 操 作
人类是非常富于创造性而且是十分勤勉的,但是,人类在本质上也是十分懒惰的。非常
明显,人类并不愿意去工作,这种对工作的反感导致人们用大量的时间来设计和制造可以把
工作日缩短到几分钟的设备。幻想使人感到兴奋,甚至远比我们所看到新奇的事物更令人兴
奋得多。
当然不会在这里介绍自动割草机的设计。本章将通过设计更精密的机器,使加减法运算
更加自动化,这听起来也许有些不可思议。本章最后设计出的机器将具有广泛的用途,它实
际上可以解决任何利用加减法的问题,这些问题的范围太大了。
当然,由于精密机器越来越复杂,因此有些部分可能会很粗糙。不过如果你略过了某些
困难的细节,没有人会责备你。有时,你可能会不耐烦并且发誓再也不会因为一个数学问题
而去寻求电或机械的帮助。不过请耐心坚持到底,因为本章最后将发明一个叫作计算机的机
器。
我们曾在第 1 4章见过一个加法器。它有一个 8位锁存器,累加由 8个开关输入的数的和:
开关
8位加法器
8位锁存器
清零
相加
灯泡
前面曾讲过, 8位锁存器用触发器来保存 8位数据。使用这个设备时,必须首先按下清零
开关使锁存器的存储内容清零,然后用开关来输入第一个数字。加法器简单地把这个数字与
锁存器输出的零相加,因此其结果就是你刚输入的数字。按下相加开关可在锁存器中保存该
数并且通过灯泡显示出来。现在从开关上输入第二个数,加法器把这个数与存储在锁存器中
的数相加,再按下相加开关把总和存储在锁存器中并通过灯泡显示出来。通过这种方法,你
可以加上一串数字并显示出运算总和。当然,其中存在的一个局限是 8个灯泡不能显示总和超
过2 5 5的数。
第1 4章介绍该电路的时候,只讲到一种锁存器,它是电平触发的。在电平触发的锁存器
中,时钟输入端必须先置 1然后回到 0,才能使锁存器保存数据。当时钟信号等于 1时,锁存器
的数据输入可以改变,这种改变将会影响所保存的数据输出。第 1 4章的后面又介绍了边沿触
发的锁存器,这种锁存器在时钟输入从 0变化到 1的瞬间保存数据。由于边沿触发的锁存器易第17章 自 动 操 作
下载
151
于使用,所以假定本章用到的锁存器为边沿触发的锁存器。
用于累加数字的锁存器叫作累加器,本章后面将会看到累加器并非仅仅进行简单的累加。
累加器通常是一个锁存器,保存第一个数字,然后该数字又加上或减去另一个数字。
上面这个加法机存在的最大问题已经相当明显:如果想把 1 0 0个二进制数加起来,你就得
坐在加法机前耐着性子输入每一个数字并累加起来。当你完成时,却发现有两个数字是错误
的,你只好又重复全部的工作。
不过,也可能并非如此。上一章用了差不多 5 0 0万个继电器来构造一个 6 4 K B的R A M阵列。
另外,我们还连接了一个控制面板,用来闭合接管开关接通线路,并使用开关进行 R A M阵列
的写入和读出。
控制面板
地址
数据输入
数据输出
写入
如果你向 R A M阵列中输入 1 0 0个二进制数字,而不是直接输入到加法机中,那么进行数
据修改会容易得多。
现在我们面临着一个挑战,即如何将R A M阵列连到累加器上。显而易见,R A M的数据输出
信号应该代替累加器的开关组。但是,用一个 1 6位的计数器(正如在第 1 4章构造的)就可以控
制R A M阵列的地址信号。在下面这个电路中,连到RAM 的数据输入信号和写入信号可以不要:
控制面板
振荡器
16位计数器
8位加法器
清零
8位锁存器
灯泡
当然这并非已经发明的最容易操作的计算装置。在使用之前,必须先闭合清零开关,以
清除锁存器的内容并把 1 6位计数器的输出置为 0 0 0 0 h,接着闭合 R A M控制面板上的接管开关。
你可以从 R A M地址的 0 0 0 0 h处开始输入一组想要加的 8位数,如果有 1 0 0个数,则它们保存在
从0 0 0 0 h~0 0 6 3 h的地址中(也可以把 R A M阵列中没有用到的单元都设置为 0 0 h)。然后断开152
编码的奥秘
下载
R A M控制面板上的接管开关(这样控制面板不会再对 R A M阵列起控制作用了),并断开清零
开关。这时,你就只需坐着看灯泡的亮灭变化了。
其工作情况为:当清零开关第一次断开时, R A M阵列的地址输入为 0 0 0 0 h,保存在 R A M
阵列当前地址的 8位数是加法器的输入。由于锁存器也清零,所以加法器的另 8位输入为0 0 h。
振荡器提供时钟信号 — 一个在0和1之间迅速交替变化的信号。在清零开关断开后,当时
钟由0变为1时,将同时发生两个事件:锁存器保存来自加法器的结果;同时, 1 6位计数器加1,
指向R A M阵列的下一个地址。在清零开关断开后,当时钟第一次由 0变为1时,锁存器保存第
一个数,同时,计数器增加到 0 0 0 1 h;当时钟第二次由 0变为1时,锁存器保存第一个数与第二
个数之和,同时计数器增加到 0 0 0 2 h;依此类推。
当然,这里先做了一些假设,首要一点,振荡器需慢到允许电路的其余部分可以工作。
对于每次时钟振荡,在加法器输出端显示有效和之前,许多继电器必须触发其他继电器。
这种电路有一个问题,即没有办法让它停止。到一定时候,灯泡会停止闪动,因为 R A M
阵列中的其余数都为 0 0 h。这时,你可以看到二进制和。但当计数器最终到达 F F F F h时,它又
会翻到0 0 0 0 h(就像汽车里程表),这时自动加法器又会开始把这些数加到已经计算过的和中。
这种加法机还有一个问题:它只能用于加法,并且只能加 8位数。不仅在R A M阵列中的每
个数不能超过 2 5 5,而且其总和也不能超过 2 5 5。这种加法器也没有办法进行减法运算。虽然
可以用2的补码表示负数,但是在这种情况下,加法器只能处理- 1 2 8~1 2 7之间的数字。让它
处理更大数字(例如, 1 6位数)的一种显而易见的方法就是使 R A M阵列、加法器和锁存器的
宽度加倍,同时再提供 8个灯泡。不过你可能不太愿意做这种投资。
当然,要不是我们最终要去解决这些问题,这儿是不会提到这些问题的。不过我们首先
想谈的却是另外一个问题。如果不是要把 1 0 0个数加成一个数,会怎么样?如果只想用自动加
法器把 5 0对数字加成 5 0个不同的结果又会怎么样?也许你希望有一个万能的机器来累加多对
数字、1 0个数字或1 0 0个数字,并且希望所有的结果都可方便地使用。
前面提到的自动加法器在与锁存器相连接的一组灯泡上显示出其相加结果。对于把 5 0对
数字加成 5 0个不同的和来说,这种方法并不好。你可能希望把结果存回 R A M阵列中,然后,
在方便的时候用 R A M控制面板来检查结果。控制面板上有专门为此目的而设计的灯泡。
这意味着连接在锁存器上的灯泡可以去掉。不过,锁存器的输出端必须连接到 R A M阵列
的数据输入端上,以便于和可以写入到 R A M中:
控制面板
16位计数器
8位加法器
8位锁存器第17章 自 动 操 作
下载
153
上图中省略了自动加法器的其余部分,特别是振荡器和清零开关,因为不再需要显著标
出计数器和锁存器的清零和时钟输入来源。此外,既然我们已经充分利用了 R A M的数据输入
端,就需要有一种方法来控制 R A M的写入信号。
我们不去考虑这个电路能否工作,而把重点放在需要解决的问题上。当前需要解决的问
题是能配置一个自动加法器,它不会仅用来累加一串数字。我们希望能随心所欲地确定累加
多少数字、在R A M中存储多少不同的结果以供日后检查。
例如,假设我们希望先把三个数字加在一起,然后把另两个数字加在一起,最后再把另
外三个数加在一起。我们可能会将这些数字存储在从地址 0 0 0 0 h开始的 R A M阵列中,存储器
的内容如下所示:
第一个和放在这里
第二个和放在这里
第三个和放在这里
这是本书第 1 6章所说明的内容。方格里是存储单元中的内容,存储器的每一个字节在一
个方格中。方格的地址在方格左面,并非每一个地址都要表示出来,存储器的地址是连续的,
因而可以算出某个方格的地址。方格的右侧是关于这个存储单元的注释,它们表示出我们希
望自动加法器在这些空格中存储三个结果。(虽然这些方格是空的,但存储单元并非空的。存
储单元中总有一些东西,即使只是随机数,但此时它不是有用的数。)
现在可以试一下十六进制算术运算并且把结果存到方格中,但这并不是此项试验的要点,
我们想让自动加法器来做一些额外的工作。
不是让自动加法器只做一件事情 — 在最初的加法器中,只是把 R A M地址中的内容加到
称为累加器的 8位锁存器中 — 实际上是让它做四件不同的事。要做加法,需先从存储器中传
送一个字节到累加器中,这个操作叫作 L o a d(装载)。第二项所要执行的操作是把存储器中的
一个字节加 ( A d d )到累加器中。第三项是从累加器中取出结果,保存 ( S t o r e )到存储器中。最后,
需要有一些方法使自动加法器停止 ( H a l t )工作。
详细说来,让自动加法器所做的工作如下所示:
• 把地址0 0 0 0 h中的数装载到累加器中
• 把地址0 0 0 1 h中的数加到累加器中
• 把地址0 0 0 2 h中的数加到累加器中
• 把累加器中的数保存到地址 0 0 0 3 h中
• 把地址0 0 0 4 h中的数装载到累加器中154
编码的奥秘
下载
• 把地址0 0 0 5 h中的数加到累加器中
• 把累加器中的数保存到地址 0 0 0 6 h中
• 把地址0 0 0 7 h中的数装载到累加器中
• 把地址0 0 0 8 h中的数加到累加器中
• 把地址0 0 0 9 h中的数加到累加器中
• 把累加器中的数保存到地址 0 0 0 A h中
• 停止自动加法器的工作
注意,同最初的自动加法器一样,存储器的每个字节的地址是连续的,开始处为 0 0 0 0 h。
以前自动加法器只是简单地把存储器中相应地址的数加到累加器中。某些情况下,现在仍然
需要这样做,但有时我们也想直接把存储器中的数装载到累加器中或者把累加器中的数保存
到存储器中。在所有事情都完成以后,我们还想让自动加法器停下来以便检查 R A M阵列中的
内容。
怎样完成这些工作呢?只是简单地键入一组数到 R A M中并期望自动加法器来正确操作是
不可能的。对于 R A M中的每个数字,我们还需要一个数字代码来表示自动加法器所要做的工
作:装载,加,保存或停止。
也许最容易(但肯定不是最便宜)的方法是把这些代码存储在一个完全独立的 R A M阵列
中。这第二个 RAM 阵列与最初的 R A M阵列同时被访问,但它存放的不是要加的数,而是用
来表明自动加法器将要对最初的 R A M阵列的相应地址进行某种操作的代码。这两个 R A M阵列
可以分别标为数据(最初的 R A M阵列)和代码(新的 R A M阵列):
控制面板
代码
16位计数器
控制面板
数据
已经确认新的自动加法器能够把“和”写入到最初的 R A M阵列(标为数据),而要写入新
的R A M阵列(标为代码)则只能通过控制面板来进行。
我们用4个代码来表示自动加法器希望能实现的 4个操作。 4个代码可任意指定,下面为可
能的一组代码:第17章 自 动 操 作
下载
操作码
155
代码
L o a d(装载)
Store (保存)
Add ( 加)
Halt ( 停止)
1 0 h
11 h
2 0 h
F F h
为了执行以上例子中提到的三组加法,需要用控制面板把下面这些数保存到代码 R A M阵列中:
你可能想把这个 R A M阵列中的内容与存放累加数据的 R A M阵列的内容作一比较。你会发
现代码 R A M中的每个代码或者对应于数据 R A M中一个要装入或加到累加器的数,或者表示
一个要存回到存储器中的数。这样的数字代码通常称作指令码或操作码,它们“指示”电路
执行某种“操作”。
前面谈到过,早期自动加法器的 8位锁存器的输出需要作为数据 R A M阵列的输入,这就
是“保存”指令的功能。另外还需要一个改变:以前, 8位加法器的输出是作为锁存器的输入,
但现在为了实现“装载”指令,数据 R A M的输出有时候也要作为 8位锁存器的输入,这种改
变需要2 - 1数据选择器。改进的自动加法器如下图:
控制面板
代码
16位计数

控制面板
数据
8位加法

2-1选择器
8位锁存
器156
编码的奥秘
下载
上图中少了一些东西,但它显示了各种组件间的 8位数据通路,一个 1 6位计数器为 2个
R A M阵列提供地址。通常,数据 RAM 阵列输出到 8位加法器上执行加法指令。 8位锁存器的
输入可能是数据 R A M阵列的输出也可能是加法器的输出,这需要 2 - 1选择器来选择。通常,
锁存器的输出又流回到加法器,但对“保存”指令而言,它又作为数据 R A M阵列的输入。
上图中缺少的是控制这些组件的信号,统称为控制信号。它们包括1 6位计数器的时钟(C l k)
和清零( C l r )输入,8位锁存器的C l k和C l r输入,数据 R A M阵列的写入( W )输入以及2 - 1选择器的
选择( S )输入。其中有一些信号明显基于代码 RAM 阵列的输出,例如,若代码 RAM 阵列的输
出表示装载指令,则2 - 1选择器的S输入必须为0(选择数据R A M阵列的输出)。仅当操作码为保
存指令时,数据R A M阵列的W输入才为1。这些控制信号可以由逻辑门的各种组合来产生。
利用最小数量的附加硬件和新增的操作码,也能让这个电路从累加器中减去一个数。第 1
步是扩充操作码表:
操作码 代码
L o a d
S t o r e
A d d
S u b t r a c t (减)
H a l t 1 0 h
11 h
2 0 h
2 1 h
FFh
加法和减法只通过操作码的最低有效位来区分。若操作码为 2 1 h,除了在数据 R A M阵列
的输出数据输入到加法器之前取反并且加法器的进位输入置 1外,电路所做的几乎与电路执行
加法指令所做的完全相同。在下面这个改进的有一个反相器的自动加法器里, C 0 信号可以完
成这两项任务:
控制面板
代码
16位计数

控制面板
数据
反相器
8位加法器
2-1选择器
8位锁存器第17章 自 动 操 作
下载
157
现在假设把 5 6 h和2 A h相加再减去 3 8 h,可以按下图所显示的存储在两个 R A M阵列中的操
作码和数据进行计算:
“代码”
“数据”
结果放在此处
装载操作完成后,累加器中的数为 5 6 h。加法操作完成后,累加器中的数为 5 6 h加上2 A h的
和,即8 0 h。减法操作使数据 R A M阵列的下一个数( 3 8 h)按位取反,变为 C 7 h。加法器的进
位输入置为 1时,取反的数C 7 h与8 0 h相加:
C 7 h
+ 80h
+ 1h
4 8 h
其结果为4 8 h。(按十进制,8 6加4 2减5 6等于7 2。)
还有一个未找到适当解决方法的问题是加法器及连到其上的所有部件的宽度只有 8位。以
往唯一的解决方法就是连接两个 8位加法器(或其他的两个部件),形成1 6位的设备。
但也有更便宜的解决方法。假设要加两个 1 6位数,例如:
7 6 A B h
+ 232Ch
这种1 6位加法同单独加最右边的字节(通常称作低字节):
A B h
+ 2Ch
D 7 h
然后再加最左边的字节,即高字节
7 6 h
+ 23h
99h
得到的结果一样,为 9 9 D 7 h。因此,如果像这样把两个 1 6位数保存在存储器中:
“代码”
“数据”
低字节结果
高字节结果158
编码的奥秘
下载
结果中的D 7 h存在地址0 0 0 2 h中,9 9 h存在地址0 0 0 5 h中。
当然,并非所有的数都这样计算,对上例中的数是这样计算。若两个 1 6位数7 6 A B h和
2 3 6 C h相加会怎么样呢?在这种情况下, 2个低字节数相加的结果将产生一个进位:
A B h
+ 6Ch
11 7 h
这个进位必须加到 2个高字节数的和中:
1 h
+ 76h
+ 23h
9 A h
最后的结果为9 A 1 7 h。
可以增强自动加法器的电路功能以正确进行 1 6位数的加法吗?当然可以。需要做的就是
保存低字节数相加结果的进位,然后把该进位作为高字节数相加的进位输入。如何存储
1位
呢?当然是用1位锁存器。这时,该锁存器称为进位锁存器。
为了使用进位锁存器,需要有另一个操作码,称作“进位加”(Add with Carry)。在进行
8位数加法运算时,使用的是常规“加法”指令。加法器的进位输入为 0,加法器的进位输出
锁存在进位锁存器中(尽管根本不必用到)。
在进行 1 6位数加法运算时,仍然使用常规“加法”指令来进行低字节加法运算。加法器
的进位输入为 0,其进位输出锁存到进位锁存器中。要进行高字节加法运算就要使用新的“进
位加”指令。这时,两个数相加使用进位锁存器的输出作为加法器的进位输入。如果低字节
加法有进位,则其进位可用在第二次运算中;如果无进位,则进位锁存器的输出为 0。
如果进行1 6位数减法运算,还需要一个新指令,称为“借位减”(Subtract with Borrow)。
通常,减法操作需要使减数取反且把加法器的进位输入置为 1。因为进位通常不是 1,所以往
往被忽略。在进行 1 6位数减法运算时,进位输出应保存在进位锁存器中。高字节相减时,进
位锁存器的结果应作为加法器的进位输入。
加上新的“进位加”和“借位减”操作,共有 7个操作码:
操作码
L o a d
S t o r e
A d d
S u b t r a c t
Add with Carry(进位加)
Subtract with Borrow(借位减)
H a l t
代码
1 0 h
11 h
2 0 h
2 1 h
2 2 h
2 3 h
F F h
在减法和借位减法运算中,需要把送往加法器的数取反。加法器的进位输出作为进位锁
存器的输入。无论何时执行加法、减法、进位加法和借位减法操作,进位锁存器都被同步。
当进行减法操作,或进位锁存器的数据输出为 1并且执行进位加法或者借位减法指令时, 8位
加法器的进位输入被置为 1。
记住,只有上一次的加法或者进位加法指令产生进位输出时,进位加法操作才会使 8位加第17章 自 动 操 作
下载
159
法器的进位输入为 1。任何时候进行多字节数加法运算时,不管是否必要,都应该用进位加法
指令计算。为正确编码前面列出的 1 6位加法,可用如下所示方法:
“代码”
“数据”
低字节结果
高字节结果
不管是什么样的数,该方法都能正确工作。
有了这两个新的操作码,极大地扩展了机器处理的范围,使其不再只局限于进行 8位数加
法。重复使用进位加法指令,能进行 1 6位数、2 4位数、 3 2位数、 4 0位数等更多位数的加法运
算。假设要把 3 2位数7 A 8 9 2 B C D h与6 5 A 8 7 2 F F h相加,则需要一个加法指令及三个进位加法指
令:
“代码”
数据
低字节结果
次高字节结果
次高字节结果
最高字节结果
当然,把这些数存放到存储器中并非真的很好。这不仅要用开关来表示二进制数,而且
数在存储器中的地址也并不连续。例如, 7 A 8 9 2 B C D h从最低有效字节开始,每个字节分别存
入存储器地址 0 0 0 0 h、0 0 0 3 h、0 0 0 6 h及0 0 0 9 h中。为了得到最终结果,还必须检查地址 0 0 0 2 h、
0 0 0 5 h、0 0 0 8 h及0 0 0 B h中的数。
此外,当前设计的自动加法器不允许在随后的计算中重复利用计算结果。假设要把 3个8
位数加起来,然后再在和中减去一个 8位数,并且存储结果。这需要一次装载操作、两次加法
操作、一次减法和一次保存操作。但如果想从原先的和中减去另外一个数会怎么样呢?那个
和是不能访问的,每次用到它时都要重新计算。
原因在于我们已经建造了一个自动加法器,其中的代码 R A M和数据 R A M阵列同时、顺
序地从0 0 0 0 h开始寻址。代码 R A M中的每条指令对应于数据 R A M中相同地址的存储单元。一160
编码的奥秘
下载
旦“保存”指令使某个数据保存在数据 R A M中,这个数就不能再被装载到累加器中。
为了解决这个问题,要对自动加法器做一个基本的及大的改变。虽说刚开始看上去会异
常复杂,但很快你就会看到一扇通向灵活性的大门打开了。
让我们开始吧,目前我们已经有了 7个操作码:
操作码
代码
L o a d
S t o r e
A d d
S u b t r a c t
Add with Carry
Subtract with Borrow
H a l t
1 0 h
11 h
2 0 h
2 1 h
2 2 h
2 3 h
F F h
每个操作码在存储器中占 1个字节。除了“停止”代码外,现在希望每条指令在存储器中
占3个字节,其中第一个字节为代码本身,后两个字节存放一个 1 6位的存储器单元地址。对于
装载指令来说,其地址指明数据在数据 R A M阵列中的存储单元,该存储单元存放要装载到累
加器中的字节;对于加法、减法、进位加法和借位减法指令来说,地址指明要从累加器中加
上或者减去的字节的存储单元;对于保存指令来说,地址指明累加器中的内容将要保存的存
储单元。
例如,当前自动加法器所能做的最简单的工作就是加两个数。要完成这项工作,可以按
照下面的方法来设置代码 R A M阵列 和数据 R A M阵列:
“代码”
“数据”
结果
在改进的自动加法器中,每条指令(除了“停止”)需要3个字节:
“代码”
把地址0000h处的字节装入累加器
把地址0001h处的字节加到累加器
把累加器的内容存入地址0002h处
停止
每条指令(除了“停止”)后跟2个字节,用来表示在数据 R A M阵列中的 1 6位地址。这三
个地址碰巧为0 0 0 0 h、0 0 0 1 h和0 0 0 2 h,它们可以是任何其他地址。
前面说明了如何使用加法和进位加法指令来相加一对 1 6位数 — 比如7 6 A B h和2 3 2 C h。必
须把2个数的低字节保存在存储器单元 0 0 0 0 h和0 0 0 1 h中,把2个高字节保存在 0 0 0 3 h和0 0 0 4 h中,第17章 自 动 操 作
下载
161
其相加结果保存在 0 0 0 2 h和0 0 0 5 h中。
这样,我们可以用更合理的方式来保存两个加数及其结果,这可能会保存在以前从未用
过的存储区域:
“数据”
结果的高字节放在这里
结果的低字节放在这里
这6个存储单元不必像图中这样连在一起,它们可分散在整个 64KB 数据 R A M阵列中的任
何地方。为了把这些地址中的数相加,必须在代码 R A M阵列中按如下所示设置指令:
“代码”
“代码”
把地址4001h处的 把地址4000h处的字节装入
字节装入累加器 累加器
把地址4003h处的 把4002h处的字节同进位加到累
字节加到累加器 加器
把累加器中的
内容存入地址
4005h处 把累加器中的内容存入地址
4004h处
停止
可以看到保存在地址 4 0 0 1 h和4 0 0 3 h中的两个低字节首先相加,并把结果保存在地址 4 0 0 5 h
中。两个高字节(在地址 4 0 0 0 h和4 0 0 2 h中)利用进位加法进行相加,其结果保存在地址 4 0 0 4 h
中。如果去掉“停止”指令并向代码 R A M中加入更多指令,随后的计算就可以简单地通过存
储器地址来利用原先的数及它们的和。
实现这种设计的关键就是把代码 R A M阵列中的数据输出到3个8位锁存器中,每个锁存器保
存3字节指令的一个字节。第一个锁存器保存指令代码,第二个锁存器保存地址的高字节,第三
个锁存器保存地址的低字节。第二和第三个锁存器的输出组成了数据RAM 阵列的1 6位地址:
8位
锁存

控制面板
16位
计数

8位
锁存

8位
锁存

控制面板
数据162
编码的奥秘
下载
从存储器中取出指令的过程叫作取指令。在上述加法机中,每个指令长 3个字节。因每次
只能从存储器中取出一个字节,因此每次取指令需要 3个时钟周期。此外,一个完整的指令周
期需要四个时钟周期。所有这些变化使得控制信号变得更为复杂。
机器响应指令代码执行一系列操作称为执行指令,但这并不是说机器是有生命的东西,
它也不是通过分析机器码来决定做什么。每一个机器码用唯一的方式触发各种控制信号,使
机器产生各种操作。
注意,为了使上述加法机更为有用,我们已经放慢了它的速度。利用同样的振荡器,它
进行数字加法运算的速度只是本章列出的第一个自动加法器的
1 / 4 。这符合一个叫作
TA N S TA A F L的工程原理, TA N S TA A F L的意思是“世界上没有免费的午餐”。通常,机器在
某一方面好一点儿,在另一些方面必然会差一些。
如果不用继电器来建造这样一个机器,电路的大部分显然只是两个 64KB RAM阵列。确
实,早就该省去这些组件,并且一开始就决定只用 1 K B的存储器。如果能保证存储的所有东
西都在地址 0 0 0 0 h~0 3 F F h之间,那么用少于 6 4 k B的存储器也能很好地解决问题。
然而,你可能也不会太在意用到了两个 R A M阵列。事实上,也确实不用。前面介绍过的
两个R A M阵列 — 一个存储代码,一个存储数据 — 使得自动加法器的体系结构变得尽可能
清晰、简单。但既然已经决定每条指令占 3个字节 — 用第二和第三个字节来表示数据的存储
地址 — 就不再需要有两个独立的 R A M阵列,代码和数据可存储在同一个 R A M阵列中。
为了实现这个目标,需要一个 2 - 1选择器来确定如何寻址 R A M阵列。通常,像前面一样,
其地址来自 1 6位计数器。 R A M数据输出仍然连接到用来锁存指令代码及其 2字节地址的三个
锁存器上,但它们的 1 6位地址是 2 - 1选择器的第二个输入。在地址被锁存后,选择器允许被锁
存的地址作为R A M阵列的地址输入:
数据
8位锁存

控制面板
16位计
数器
2-1选 8位锁存
择器 器
8位锁存

作者: zzz19760225     时间: 2016-2-9 10:03
代码第17章 自 动 操 作
下载
163
我们已经取得了很大的进步。现在把指令和数据输入到一个 R A M阵列中已成为可能。例
如,下图显示出怎样把两个 8位数相加再减去第三个数:
把地址0010h处的字节装入累加器
把地址0011h处的字节加到累加器
从累加器减去地址0012h处的字节
把累加器中的内容存入地址0013h处
停止
最后结果放在这里
通常,指令开始于0 0 0 0 h,这是因为复位后计数器从0 0 0 0 h处开始访问R A M阵列。最后的停
止指令存储在地址0 0 0 C h处。可以把这3个数及其运算结果保存在R A M阵列中的任何位置(除了
开始的1 3个字节,因为这些存储单元已经被指令占用)
,因而我们选择从0 0 1 0 h处开始存储数据。
现在假设你需要再加两个数到结果中,你可以输入一些新的指令来替换你刚输入的所有
指令,不过可能你并不想这样做。你也许更愿意在那些已有的指令末尾接着新的指令,但首
先得用一个新的装载指令来替换地址 000Ch 中的停止指令。此外,还需要两个新的加法指令、
一个保存指令和一个新的停止指令。唯一的问题在于有一些数据保存在地址 0010h 中,必须
把这些数据移到更高的存储地址中,并且修改那些涉及到这些存储器地址的指令。
想一想,把代码和数据混放在一个 R A M阵列中也许并不是一个迫切的问题,但可以肯定,
这样的问题迟早会到来,因此必须解决它。在这种情况下,可能你更愿意做的就是从地址
0 0 2 0 h处开始输入新指令,从地址 0 0 3 0 h处开始输入新数据:
把地址0013h处的字节装入累加器
把地址0030h处的字节加到累加器
把地址0031h处的字节加到累加器
把累加器中的内容存入地址0032h处
停止
最后结果放在这里164
编码的奥秘
下载
注意第一条装载指令指向存储单元 0 0 1 3 h,即第一次运算结果存储的位置。
因此现在有开始于0 0 0 0 h的一些指令、开始于0 0 1 0 h的一些数据、开始于0 0 2 0 h的另外一些指
令以及开始于0 0 3 0 h的另外一些数据。我们想让自动加法器从0 0 0 0 h处开始并执行所有的指令。
我们必须从 0 0 0 C h处去掉停止指令,并用其他一些东西来替换它,但这样就足够了吗?问
题在于无论用什么来替换停止指令都会被解释为一个指令字节,并且至此后存储器中每隔 3个
字节 — 在0 0 0 F h、0 0 1 2 h、0 0 1 5 h、0 0 1 8 h、0 0 1 B h和0 0 1 E h处,字节也会被解释为一个指令字
节。如果其中一个正好是 11 h会怎样呢?这是一个保存指令。如果保存指令后的两个字节刚好
指向地址 0 0 2 3 h又会怎样呢?机器会把累加器的内容写入该地址中,但是该地址中已经包含有
一些重要的东西。即使没有诸如此类的事情发生,加法器从存储器地址 0 0 1 E h的下一个地址中
取得的指令字节将在地址 0 0 2 1 h中,而不是0 0 2 0 h中,而0 0 2 0 h却正好是下一个指令的真实所在。
我们是否都同意不把停止指令从 0 0 0 C h处移走,而期待最佳方案呢?
不过,我们可用一个叫作 J u m p(转移)的新指令替换它。现在把它加入到指令表中。
操作码
代码
L o a d
S t o r e
A d d
S u b t r a c t
Add with Carry
Subtract with Borrow
Jump (转移)
H a l t
1 0 h
11 h
2 0 h
2 1 h
2 2 h
2 3 h
3 0 h
F F h
通常,自动加法器顺序寻址 R A M阵列。转移指令改变其寻址模式,而从 R A M阵列的某个
特定地址开始寻址。这样的命令有时也叫分支( b r a n c h)指令或者g o t o指令,即“转到另外一
个地方”的意思。
在前面的例子中,可用转移指令来替换 0 0 0 C h中的停止指令:
转移到地址0020h处的指令
30h 就是转移指令的代码,其下的 1 6位地址表示自动加法器要读的下条指令的地址。
因此,在前面的例子中,自动加法器仍从地址 0 0 0 0 h处开始,执行一条装载、一条加法、
一条减法和一条保存指令,然后执行转移指令,接着继续从 0 0 2 0 h处执行一条装载、两条加法
和一条保存指令,最后执行停止指令。
转移指令影响 1 6位计数器。当自动加法器遇到转移指令时,计数器被强制输入紧随转移
指令代码的新地址,这可以通过组成 1 6位计数器的边沿触发的 D型触发器的预置( P r e)和清
零( C l r )输入来实现:165第17章 自 动 操 作
下载
前面曾讲过,正常操作下,预置和清零输入都应该为 0。但如果 Pre = 1 ,则Q = 1 ;如果
Clr = 1,则Q = 0 。
如果想装载一个新值(称作 A,代表地址)到单个触发器中,可这样连线:
置位
复位
通常,置位信号为 0。这时,触发器的预置端为 0。除非复位信号为 1,否则清零端也为 0。
这样触发器可以不通过置位信号就可以清零。当置位信号为 1时,若A = 1 ,则Pre = 1且Clr =
0;若A = 0,则Pre = 0且Clr = 1。这意味着 Q端的值设置为A端的值。
1 6位计数器的每一位都需要一个这样的触发器。一旦装载一个特定的值,计数器将从那
个值开始继续计数。
然而,这些变化并不大。从 R A M阵列中锁存的1 6位地址既可作为 2 - 1选择器(它允许该地
址作为R A M阵列的地址输入)的输入也可作为 1 6位计数器的输入并由置位信号设置:
“数据”
8位
锁存

“代码”
置位
控制面板
复位
16位计
数器
2-1选
择器
8位
锁存

8位
锁存

显而易见,只有当指令代码为 3 0 h且其后面的地址被锁存,我们才必须保证置位信号为 1。166
编码的奥秘
下载
转移指令当然很有用,但它并非和一条只有时跳转而并非时刻跳转的指令一样有用,这样
的一个指令叫作条件转移。为了显示该命令如何有用,可提出这样一个问题:怎样才能让自
动加法器完成两个 8位数的相乘?例如,怎样才能得到像 A 7 h乘以1 C h这样简单运算的结果?
很容易,不是吗?两个 8位数相乘的结果是一个 1 6位数。为了方便起见,乘法中的 3个数
都用1 6位数来表示。首要的工作是决定把乘数和乘积放在何处:
16位的乘数
16位的被乘数
16位的结果从这里开始存放
每个人都知道A 7 h和1 C h(即十进制的2 8)相乘的结果与 A 7 h相加2 8次的结果相同。因此,
在1 0 0 4 h和1 0 0 5 h处的1 6位数就是累加结果。下图显示的是把 A 7 h加一次到那个位置的代码:
把地址1005h处的字
节装入累加器
把地址1004h处的字
节装入累加器
把地址1001h处的字 把1000h处的字节同进位
节加到累加器 加到累加器
把累加器的内容存到
地址1005h处 把累加器的内容存入
地址1004h处
在这6条指令执行完后,存储单元 1 0 0 4 h和1 0 0 5 h处的1 6位数等于A 7 h乘以1。因此,为了使
这1 6位数等于A 7 h乘以1 C h,这6个指令必须重复执行 2 7次。可以通过在地址 0012h 处接着输入
2 7次这6个指令来实现;也可以在 0 0 1 2 h处输入停止指令,然后按 2 8次复位键来得到最终结果。
当然,这两个方案都不理想。它们需要你做某些事情 (输入大批指令或者按复位键 )的次数
和乘数相当。当然你不愿意这样去进行 1 6位数的乘法运算。
但是如果在0012h 处输入转移指令会怎么样呢?这个指令使计数器从 0 0 0 0 h重新开始计数:
转移到地址0000h处的指令
这当然是一个技巧。第一次执行指令后,存储单元 1 0 0 4 h和1 0 0 5 h处的1 6位数等于A 7 h乘1,
然后转移指令使其返回到存储器顶部。第二次执行指令后,此 1 6位数等于 A 7 h乘2。终于,其第17章 自 动 操 作
下载
167
结果将等于 A 7 h乘1 C h。不过这样的过程并不会停止,它将不断地运行、运行、运行。
我们想让转移指令做的是使循环过程只重复所需的次数,这就是条件转移,它实施起来
并不困难。我们要做的第一件事情就是增加一个与进位锁存器类似的 1位锁存器。因为只有 8
位加法器的输出全为 0时它才锁存 1,所以叫它零锁存器:
8位加法器
零标志位
只有当或非门的 8个输入全为 0时,其输出才为 1。同进位锁存器的时钟输入一样,只有当
加法、减法、进位加法或借位减法指令运行时,零锁存器的时钟输入才锁存一个数,这个被
锁存的数值叫作零标志位。注意它,是因为它似乎行为相反:如果加法器输出全为 0,则零标
志位为1;若加法器输出不全为 0,则零标志位为 0。
利用进位锁存器和零锁存器,可以在指令表中再添加四条指令:
操作码
L o a d
S t o r e
A d d
S u b t r a c t
Add with Carry
Subtract with Borrow
J u m p
Jump If Zero (零转移)
Jump If Carry (进位转移)
Jump If Not Zero (非零转移)
Jump If Not Carry (无进位转移 )
H a l t
代码
1 0 h
11 h
2 0 h
2 1 h
2 2 h
2 3 h
3 0 h
3 1 h
3 2 h
3 3 h
3 4 h
F F h
例如,只有当零锁存器输出为 0时,非零转移指令才转移到指定地址。换句话说,如果上
一次加法、减法、进位加法和进位减法指令计算结果为 0,则没有转移发生。实现这个设计只
需在实现常规转移命令的控制信号上再加上一个控制信号:如果为非零转移指令,则只有当
零标志位为 0时,1 6位计数器的置位信号才被触发。
利用上述代码实现两个数的乘法所需的操作可由如下开始于地址 0 0 1 2 h处的指令完成:
把地址1003h处的字节装入累加器
把地址001Eh处的字节加到累加器
把累加器的内容存到地址1003h处
若零标志位不为0,转移到地址0000h处
停止168
编码的奥秘
下载
正如我们所设计的,循环一次后,位于 1 0 0 4 h和1 0 0 5 h处的1 6位数等于 A 7 h乘以1。上图中
的这些指令把字节从 1 0 0 3 h处装载到加法器中,此字节为 1 C h。再把这个字节与 0 0 1 E h处的数
据相加,此处数据正好是停止指令,但当然也是有效数字。把 F F h同1 C h相加与从 1 C h减去1的
结果相同,都等于 1 B h。这个值不为 0,所以零标志位为 0,字节 1 B h存回到地址 1 0 0 3 h处。接
下来是一条非零转移指令,零标志位没有置为 1,所以转移发生。下一条指令位于地址 0 0 0 0 h
处。
记住,存储指令不会影响零标志位。零标志位只能被加法、减法、进位加法、借位减法
指令所影响,因此它同这些指令中最近一个执行时所设置的值相同。
循环两次后,位于 1 0 0 4 h和1 0 0 5 h处的1 6位数将等于A 7 h乘以2。而1 B h加上 F F h等于1 A h,
不是0,因此又返回到存储器顶部。
循环到第 2 8次时,位于1004h 和1 0 0 5 h处的1 6位数等于 A 7 h乘以1 C h。位于1 0 0 3 h处的值等
于1,它将加上 F F h结果等于 0,因此零标志位被置位。非零转移指令不再转移到存储器地址
0 0 0 0 h处,相反,下一条指令为停止指令。至此,我们完成了全部工作。
现在可以肯定,很长一段时间以来我们已经装配了一组硬件,同时可以把它叫作计算机。
当然,它只是一台原始的计算机,但它毕竟是一台计算机。它与我们以前设计的计算器的不
同之处在于条件转移指令,控制重复或循环是计算机和计算器的区别。这里已经演示了条件
转移指令是如何使得这台机器进行两个数的乘法运算的。用类似的方法,它也能计算两个数
的除法。而且,还不局限于 8位数。它能加、减、乘、除 1 6位、2 4位、3 2位甚至更多位的数,
而且如果它能实现这些操作,也就能计算平方根,对数和三角函数。
既然已装配了一台计算机,就可以开始使用一些计算机方面的词汇。
我们装配的计算机归类为数字计算机,因为它采用的是离散值。曾经有过模拟计算机,
但它们正逐渐消失。(数字数据是离散数据,是具体的确定的值;而模拟信息是连续的、在整
个范围内变化的值。)
数字计算机有 4个主要部分:处理器、存储器、至少一个输入设备和一个输出设备。上述
机器中,存储器是一个 6 4 K B的 R A M阵列。输入和输出设备分别是 R A M阵列控制面板上的几
行开关和灯泡。这些开关和灯泡使人们可以输入数据到存储器并检查结果。
处理器是计算机中除存储器、输入 /输出设备以外的一切东西。处理器也叫中央处理器单
元或C P U。再通俗一点儿,处理器有时也称作计算机的大脑。但尽量避免用这样的术语,这
是因为在本章中我们所设计的东西根本不像大脑。(今天,微处理器这个词用得非常普及。微
处理器只是一个很小的处理器,通过采用第 1 8章将要讲到的技术而实现。但此刻我们用继电
器所建造的东西则很难用 “微”来定义。)
我们所建造的处理器是一个 8位处理器。累加器宽度为 8位,并且许多数据通路的宽度都
是8位,只有 R A M阵列的地址的数据通路是 1 6位的。如果用 8位的地址通路,则存储器容量只
能限于2 5 6字节而非65 536字节,那样处理器则有太大的局限性。
处理器有一些组件。已经确定的一个是累加器,它是一个简单的锁存器,用来在处理器内
部保存数据。我们所设计的计算机中, 8位反向器和 8位加法器一起称作算术逻辑单元或 A L U。
A L U只能进行算术运算,主要是加法和减法。在稍微复杂一点儿的计算机中(我们将会看到),
A L U也可进行逻辑运算,如“与”、“或”、“异或”。1 6位计数器叫作程序计数器 P C。
我们的计算机是用继电器、电线、开关和灯泡建造的,所有这些都是硬件。与之对应,第17章 自 动 操 作
下载
169
指令和输入存储器中的其他数据叫作软件,之所以叫“软件”是因为它们比硬件更容易改变。
当谈论计算机时,“软件”和“计算机程序”,更简单地讲“程序”是同义的,编写软件
也称作计算机程序设计。当采用一系列计算机指令使计算机进行两个数的乘法时,我们所做
的工作就是计算机程序设计。
通常,在计算机程序中,可以区分代码(即指令)和供代码使用的数据。有时这种区分
并不明显,如停止指令还可作为数- 1执行双重功能。
计算机程序设计有时也叫编写代码或编码。有时计算机程序员也叫编码员,尽管一些人
可能认为这是一个贬义的名词。程序员更愿意被称作“软件工程师”。
处理器可以响应的操作码(如指装载和存储的 1 0 h和11 h)叫作机器码,或机器语言。之
所以用“语言”这个术语是因为机器码类似于可读 /写的人类语言可被机器理解和响应。
我们要用很长的短语表示机器所执行的指令,如:进位加法( Add with Carry )。通常,
机器码都分配指定了用大写字母表示的短的助记符,这些助记符有 2或3个字符。下面是一系
列可能的上述计算机所能识别的机器码的助记符:
操作码
装载(L o a d)
保存(S t o r e)
加(A d d)
减(S u b t r a c t)
进位加(Add with Carry)
借位减(Subtract with Borrow)
转移(J u m p)
零转移(Jump If Zero)
进位转移( Jump If Carry)
非零转移( Jump If Not Zero)
无进位转移( Jump If Not Carry)
停止(H a l t)
代码 助记符
1 0 h
11 h
2 0 h
2 1 h
2 2 h
2 3 h
3 0 h
3 1 h
3 2 h
3 3 h
3 4 h
F F h L O D
S TO
A D D
S U B
A D C
S B B
J M P
J Z
J C
J N Z
J N C
H LT
这些助记符特别适于和另外一对简洁短语结合使用。例如,不说像“把 1 0 0 3 h处的值装载
到累加器中”这样罗嗦的话,而是用下面语句来代替:
LOD
A,[1003h]
位于助记符 L O D右边的A和[ 1 0 0 3 ]叫作操作数,它们是特定的装载( L o a d)指令的操作对
象。左边的操作数为目的操作数( A代表累加器),右边的为源操作数,方括号表示要装载到
累加器中的值不是 1 0 0 3 h,而是存储在存储器地址 1 0 0 3 h中的值。
同样,指令“把 0 0 1 E h处的字节加到累加器中”可简写为:
ADD
A,[001Eh]
而“把累加器中的内容保存到地址 1 0 0 3 h处”记作:
STO
[1003h],A
注意,目的操作数(存储指令的存储单元)仍然在左边,源操作数在右边。累加器的内
容存储在地址1 0 0 3 h处。指令“若零标志位不为 1则转移到0 0 0 0 h处”可简洁地记作:
JNZ 0000h
该指令中没有使用方括号,这是因为该指令是转移到地址
0 0 0 0 h处而不是转移到地址170
编码的奥秘
下载
0 0 0 0 h中保存的值所表示的位置处。
用缩写指令的形式来表示很方便,因为指令能以可读的方式连续列出来而不需画出存储
器的分配图。为了表示某一指令存储在某一地址,可以用一个十六进制地址后加冒号来表示,
如下所示:
0000h:LOD A,[1005h]
下面表示了一些存储在某一地址的数据:
1000h:00h,A7h
1002h:00h,1Ch
1004h:00h, 00h
用逗号隔开的两个字节表示第一个字节保存在左边的地址中,第二个字节保存在紧接着
该地址的下一个地址中。上述三行相当于:
1000h:00h,A7h,00h,1Ch,00h,00h
因此,整个乘法程序可写成如下一系列语句:
0000h:
LOD A,[1005h]
ADD A,[1001h]
STO [1005h],A
LOD A,[1004h]
ADC A,[1000h]
STO [1004h],A
LOD A,[1003h]
ADD A,[001Eh]
STO [1003h],A
JNZ 0000h
001Eh: HLT
1000h: 00h,A7h
1002h: 00h,1Ch
1004h: 00h,00h
使用空格和空行只是为了使程序具有更好的可读性,以方便人们阅读程序。
写代码时最好不要用真实的数字地址,因为它们是会变的。例如,如果要把数字存储到
地址2 0 0 0 h~2 0 0 5 h处,需要重写许多语句。较好的方法是使用标号来指定存储单元,这些标
号是简单的单词,或类似于单词的东西,如:
BEGIN:
LOD A,[RESULT+1]
ADD A,[NUM1+1]
STO [RESULT+1],A
LOD A,[RESULT]
ADC A,[NUM1]
STO [RESULT],A
LOD A,[NUM2+1]
ADD A,[NEG1]第17章 自 动 操 作
下载
171
STO [NUM2+1],A
JNZ BEGIN
NEG1:
HLT
NUM1: 00h,A7h
NUM2: 00h,1Ch
RESULT:00h,00h
注意,标号 N U M 1、N U M 2和R E S U LT都表示保存两个字节的存储单元。在这些语句中,
标号 N U M 1 + 1 、N U M 2 + 1 和R E S U LT + 1 都指向特定标号后的第二个字节。注意,
N E G 1
(negative one)用来标记H LT指令。
此外,为了不忘记这些语句的意思,可以加上一些注释,它们与语句之间用分号隔开:
BEGIN:
LOD A,[RESULT+1]
ADD A,[NUM1+1]
;Add low-order byte(加低字节)
STO [RESULT+1],A
LOD A,[RESULT]
ADC A,[NUM1]
;Add high-order byte(加高字节)
STO [RESULT],A
LOD A,[NUM2+1]
ADD A,[NEG1]
;Decrement second number(第二个数减1)
STO [NUM2+1],A
JNZ BEGIN
NEG1: HLT
NUM1: 00h,A7h
NUM2: 00h,1Ch
RESULT: 00h,00h
以上表示的是一种计算机程序设计语言,称作汇编语言。它是全数字的机器代码和指令
描述性语言的综合,且存储器地址用符号表示。人们有时会把机器语言和汇编语言弄混淆,
因为它们是表示同种事情的两种不同的方法。汇编语言的每条语句都对应于机器代码的特定
字节。
如果你想为本章所创建的计算机编写程序,你可能首先想用汇编语言写出来(在纸上)。
然后,在认为它正确并准备测试它时,可以对它进行手工汇编:这意味着用手工的方法把每
一个汇编语句转换成机器代码,仍然写在纸上。接着,你可以用开关把机器码输入到 R A M阵
列并运行该程序,即让机器执行指令。
学习计算机程序设计的概念时,不可能很快就能正确知道程序的毛病所在。编写代码时
— 特别是用机器代码 — 很容易产生错误。输入一个错误的数字已经很不好了,但如果输入
一条错误的指令会怎么样呢?本想输入 1 0 h (装载指令 ),但却输入了 11 h(保存指令),不但机
器不会把期望的数据装载,而且该处的数据还会被累加器中的内容覆盖。
一些错误可以导致难以预料的结果。假设使用无条件转移指令转移到没有有效指令代码
的位置,或者偶然使用存储指令覆盖了一些指令,任何事情都可能发生(经常如此)。
上述乘法程序中也有一些毛病。如果你执行它两次,则第二次将会是 A 7 h乘以2 5 6,并且
结果将加到原来计算的结果中。这是因为程序执行一次后,地址 1 0 0 3 h处的值为 0。当程序第
二次执行时,F F h将加到那个值中,其结果不为 0,程序将继续执行直到它为 0。172
编码的奥秘
下载
我们已看到上述机器可以进行乘法运算,同样,它也可以进行除法运算。此外,它可利
用这些基本功能进行平方根、对数和三角函数的计算。机器所需要的只是用来进行加法、减
法的硬件及利用条件转移指令来执行适当代码的一些方法。正如一个程序员所说:“我可以用
软件完成其余功能”
当然,软件可能相当复杂。许多书中都描述了一些算法供程序员解决专门的问题,本书
还没准备这样做。我们一直在考虑自然数而没有考虑如何在计算机中表示十进制小数,我们
将在第2 3章介绍它。
前面已说过几次,建造这些设备的所有硬件在 1 0 0多年前就有了。但本章中出现的计算机
在那时却没有建造出来。在 2 0世纪3 0年代中期,最早的继电器计算机制造出来时,包含在设
计中的许多概念还未形成,直到 1 9 4 5年左右人们才开始意识到。例如,直到那时候,人们仍
然设法在计算机内部使用十进制数而不是二进制数;计算机程序也并非总是存储在存储器中,
而是有时把它存在纸带上。特别是早期计算机的存储器非常昂贵且体积庞大。不管是在 1 0 0年
前还是在现在,用 5 0 0万个电报继电器来建造 6 4 K B的R A M阵列都是荒唐的。
当我们展望和回顾计算器和计算装置的历史时,可能会发现根本没必要建造这样精致的
继电器计算机。就像在第 1 2章提到的,继电器最终会被真空管和晶体管这样的电子设备所取
代。或许我们也会发现他人制造的相当于我们设计的处理器和存储器的东西能小到放在手掌
中。下载
第18章 从算盘到芯片
纵观历史,人类发明了很多灵巧的工具和机器以满足广泛的需求,从而使数学运算变得
更容易了些。虽然人类天生就有使用数字的能力,但仍能经常需要帮助。人们常遇到一些自
己不能轻易解决的问题。
数字可看成是早期帮助人类记录商品和财富的工具。许多文明,包括古希腊和美洲土著,
都借用石子或谷物来计数。在欧洲使用计数板,而在中国则对由框和珠子组成的算盘较为熟
悉:
没有人真的喜欢乘法和除法,但却有人为它做过什么,苏格兰数学家 Join Napier(1550-
1 6 1 7 )就是这少数人中的一个。他发明了对数来简化这些操作,两数之积简化为它们对数的和。
因此,如果你想使两数相乘,先在对数表中分别查出它们的值,然后相加,再用相反的方法查
对数表就可得到它们的积。
对数表的建立,使得随后 4 0 0年里一些最伟大的思想家一直为此忙碌,而另一些人却在设
计使用小装置来代替对数表。一种有对数标尺的滑尺已有很长的历史了,它由 Edmund Gunter
(1 5 8 1-1 6 2 6)发明并由 William Oughtred(1 5 7 4-1 6 6 0)修正。1 9 7 6年,当K e u ff e l & E s s e r公司
将其公司最后制造的滑尺捐赠给华盛顿特区的 Smithsonian 学院时,滑尺的历史也就宣告结束
了,其中的原因是手持计算器的出现。
N a p i e r也发明了一种乘法辅助器,它由刻在骨头、号角、像牙上的数字条组成,因而这样
的辅助器称为 N a p i e r骨架。1 6 2 0年左右,Wilhelm Schickard(1 5 9 2-1 6 3 5)制造出了最早的有
点儿自动功能的由 N a p i e r骨架组成的机械计算器。几乎在同时出现了由互相连结的轮子、齿
轮和水平仪组成的另外一种计算器,这种机械计算器的两个最主要的制造者是数学家和哲学
家布莱兹・帕斯卡 ( 1 6 2 3-1 6 6 2 )和莱布尼兹 ( 1 6 4 6-1 7 1 6 )。
你一定能记得最初的 8位加法器和能自动进行多于 8位数的加法计算的计算机中的进位是
多么令人讨厌。进位原先似乎只是加法运算中的一个小问题,但在加法机中却成了一个中心
问题。即使设计一个能进行除进位外的所有工作的加法机,也不能说工作就算完成了。
进位处理是否成功是评估老式计算机的关键。例如,帕斯卡设计的进位机制禁止减法运
算。为了进行减法,必须加上 9的补码,这在第 1 3章中已经讲到。直到 1 9世纪后期,才出现了
真正可以为人们所使用的机械计算器。174
编码的奥秘
下载
一个奇特的发明对计算的历史产生了深远的影响,就像它对纺织所产生的深远影响一样,
这就是约瑟夫・玛丽・杰奎德 ( 1 7 5 2-1 8 3 4 )所发明的自动织布机。杰奎德织布机(大约产生于
1 8 0 1年)使用上面已打孔的金属卡片(就像钢琴上的金属卡片)来控制编织物的图案。杰奎
德的一大杰作就是用黑白丝线织成的自画像,为此使用了大约 1万张卡片。
在1 8世纪(甚至直到 2 0世纪4 0年代),计算机就像一个以计算数字谋生的人。使用星星进
行航海导航经常需要对数表,并且三角函数表也是必需的。如果需要发布新表,则需要许多
计算机来工作,然后把结果汇总起来。当然,在这一过程的任何阶段,即从初始化计算到设
置类型来打印最后几页都可能会出现错误。
从数学表中消除错误的愿望激发了查尔斯・巴贝芝( 1 7 9 1—1 8 7 1)。巴贝芝是一位英国的
数学家和经济学家,他和摩尔斯差不多是同一时代的人。
在那时,数学表(以对数表为例)并不是通过计算表中每
一项确切的对数值而建立的,因为这得花费很多时间。取而代
之的是选择一些数进行对数计算,而介于这些数中间的那些数
则采用插补,即称作差分的方法,通过相对简单的计算来得到。
大约在 1 8 2 0年,巴贝芝认为可以设计并制造一台机器来自
动建立表,甚至可以到自动设置打印类型这一步,这样可以消
除错误。他构想了差分机,这是一个很大的机械加法机。通过
切换,可使位于 1 0个不同位置的轮子来表示各位数的十进制数
字,负数用 1 0的补码来计算。尽管一些早期的模型可以证明巴
贝芝的设计是可行的,并且也从英国政府获得了一些支持,但差分机却从未完成过。巴贝芝
于1 8 3 3年放弃了这一工作。
然而,就在那个时候,巴贝芝又有了一个更好的构想,这就是解析机 (重复的设计和再设
计不断耗费着巴贝芝的生命,直到他死去 ),解析机是 1 9世纪最接近计算机的发明。在巴贝芝
的设计中,有一个存储系统(类似于今天存储器的概念)和运算器(算术单元)。乘法由重复
加法来实现,除法由重复减法来实现。
解析机最精华的部分在于它可以用卡片来编程,这些卡片是由杰奎德的按图案编织的织
布机上的卡片经过改造而制成的。正如艾达・奥古斯塔,即拉弗雷斯女伯爵( 1 8 1 5-1 8 5 2)在
她翻译的由一个意大利数学家写的,关于巴贝芝解析机的文章的按语里写的:“我们可以说解
析机编织的是代数模型,正如杰奎德织布机编织的是花和叶一样”。
巴贝芝可能是第一个意识到计算机中条件转移的重要性的人。拉弗雷斯女伯爵关于此也
曾写道:“操作循环必须理解成一批操作,这些操作可以重复多次。无论是只重复两次还是无
穷次,都是一个循环,归根到底重复组成了循环的这些操作。许多情况下,还会出现一个或
多个循环的重复,即循环的循环或多个循环的循环”。
尽管差分机最终由 G e o rg和Edvard Scheutz 父子在1 8 5 3年制成,但巴贝芝的机器那时已被
遗忘了很久,直到 2 0世纪3 0年代人们开始追寻 2 0世纪计算机的根源时才再次想起。巴贝芝曾
经做的东西已经被后来的技术所超越,除了他对自动化的超前认识外,他并没有为 2 0世纪的
计算机工程留下什么东西。
计算机历史上另一个里程碑来源于美国宪法第二部分的第一篇。这一部分里除其他事情
外还要求每 1 0年进行一次人口普查。 1 8 8 0年人口普查的时候,人口信息按年龄、性别及祖籍下载
第18章 从算盘到芯片
175
来收集,数据的收集差不多花了七年的时间来进行。
由于担心 1 8 9 0年的人口普查可能需要超过 1 0年的时间,人口普查局寻求使该系统工作自
动化的可能性并选用了赫曼・霍勒瑞斯 ( 1 8 6 0—1 9 2 9 )开发的机器,此人是 1 8 8 0年人口普查的
统计员。
5
1
霍勒瑞斯的想法是采用马尼拉穿孔卡片,大小是 6 8 × 3 4 。
(虽然霍勒瑞斯不可能知道巴贝芝如何使用卡片在他的解析机上编
程,但他却很熟悉杰奎德织布机上卡片的使用。)卡片上的孔组成
2 4列,每列 1 2个,这样共有 2 8 8个位置,这些位置表示某个人在人
口普查记录中的某些特征。普查员通过在卡片的适当位置上打 1 / 4
英寸的方孔来标识这些特征。
本书可能使得人们习惯于用二进制码的概念来思考问题,因
此,你可能马上会想到卡片上的 2 8 8个穿孔点可以存储 2 8 8位信息。
但是,这些卡片并不是这样用的。
例如,在纯二进制系统中,人口普查卡片会有一个位置来表示性别,可以用打孔表示男
性,未打孔表示女性(或者相反)。但是,霍勒瑞斯的卡片用两个位置表示性别,一个位置打
孔表示男性,另一个位置打孔表示女性。同样,用两个穿孔表示年龄,一个穿孔指明一个 5年
的年龄范围: 0~4、5~9、1 0~1 4等等,另一个孔用 5个位置中的一个来表明在该范围内的确
切年龄。年龄编码需要卡片上总共 2 8个位置。而纯二进制系统只需要 7个位置就可编码 0~1 2 7
的任何年龄。
我们应该原谅霍勒瑞斯在记录人口普查信息时没有采用二进制系统,对于 1 8 9 0年的人口
普查员来说,把年龄转换成二进制数要求太高了一些。还有一个实际原因来解释穿孔卡片系
统为什么不能全部是二进制的是因为二进制系统可能出现这样一种情形,即所有的孔都被打
孔,使得卡片很脆弱,结构不牢固。
人口普查的数据收集可进行统计或制成表格。你可能想知道每一个区域内有多少人生活,
当然,你也可能对人口的年龄分布统计信息感兴趣。正因为如此,霍勒瑞斯制造了一个制表
机,它能结合手工操作和自动操作。操作员把一个有 2 8 8个弹簧针的板子压到每一个卡片上,
对应于卡片上每一个穿孔的针接触水银池形成电路,电路触发电磁铁使十进制计数器计数。
霍勒瑞斯在分类卡片的机器上也用了电磁铁。例如,如果需要统计所记录的每一个职业
的年龄资料,首先需要按职业对卡片分类,然后对每一个职业统计年龄资料。分类机与制表
机一样用手压,但分类机使用电磁铁打开一个开口,对应于 2 6个分隔区域中的一个,操作员
把卡片放入分隔区域,然后用手工关上开口。
这项实验在自动进行 1 8 9 0年的人口普查工作中取得了巨大成功,处理了超过 6 2 0 0万张的
卡片,包含的数据是 1 8 8 0年人口普查的 2倍,而数据处理只花了大约 1 8 8 0年人口普查所花时间
的1 / 3。霍勒瑞斯和他的发明享誉全球。 1 8 9 5年,他甚至到了莫斯科并成功地卖出了他的设备,
该设备在1 8 9 7年第一次用于俄罗斯的人口普查。
霍勒瑞斯开始进行各种活动。 1 8 9 6年,他创立了制表机公司,出租和出售穿孔卡片设备。
1 9 11年,经过合并,该公司成为计算-制表-记录 ( c c o m p u t i n g - Ta b u l a t i n g - R e c o r d i n g )公司,即
C - T- R公司。到 1 9 1 5年,C - T- R的主席是 Thomas J.Wa t s o n ( 1 8 7 4-1 9 5 6 ),他在1 9 2 4年把公司的
名字改为国际商用机器公司,即 I B M。176
编码的奥秘
下载
1 9 2 8年,原先的 1 8 9 0年的人口普查卡片已经演化成为著名的“不会卷曲、折叠’、翘页”
的I B M卡片,有 8 0列1 2行。它们用了 5 0多年,即使在最后几年也被称作霍勒瑞斯卡片。在第
2 0、2 1和2 4章将要讲到这些卡片的影响。
在把目光移到 2 0世纪之前,不要对 1 9世纪那个年代有太多的偏见。显然,本书主要着眼
于数字系统的发明,这些发明包括电报、布莱叶盲文、巴贝芝机器和霍勒瑞斯卡片。当与数
字概念和数字设备一起工作时,很容易会把整个世界都想像成数字世界。但是, 1 9世纪的特
征更多体现在那些不是数字的发明及发现上。的确,我们感受到的自然世界只有很小一部分
是数字的,它更接近于是连续的而不那么容易被量化。
尽管霍勒瑞斯在他的卡片制表机和卡片分类机上用了继电器,但是直到 2 0世纪3 0年代中
期,人们才真正开始用继电器来制造计算机 (后来叫机电式计算机 )。这些机器上用的继电器通
常不是电报继电器,而是那些用来在电话系统中控制呼叫路由的继电器。
早期的继电器计算机并不像我们在上一章中制造的继电器计算机(将会看到,后者计算
机的设计基础是基于从 2 0世纪7 0年代开始的微处理器)。特别地,今天对我们来说计算机内采
用二进制数是显然的,但那时并不是这样。
我们所设计的继电器计算机与早期的继电器计算机之间的另一个区别是在 2 0世纪3 0年代,
没有人会狂热到用继电器构造524 288位的存储器!所需的造价、空间及功耗使得这样大的存储
器不可能实现。可用的很小的存储器只是用来存储中间结果,而程序本身存储在像带有穿孔的
纸带这样的物理媒体上。的确,把代码和数据放入存储器的处理方式是一个很现代化的概念。
按年代排列,第一个继电器计算机似乎是由 Conrad Zuse(1 9 1 0-1 9 9 5)建造的。 1 9 3 5年
当他还是一个工程系的学生的时候,他就开始在他父母位于柏林的住所里制造计算机。他采
用的是二进制数,但却是早期版本,且用的是机械存储器而不是继电器。 Z u s e在老式的 3 5毫
米的电影胶片上穿孔来进行计算机编程。
1 9 3 7年,贝尔电话实验室的 G e o rge Stibitz(1 9 0 4-1 9 9 5)把一对电话继电器安装在家里,
并且又连接了一个 1位加法器到餐桌上,后来他的夫人称它为“K机器”
(K表示k i t c h e n,厨房)

该实验导致在1 9 3 9年产生了贝尔实验室的复数计算机。
与此同时,哈佛大学的研究生 Howard Aiken(1 9 0 0-1 9 7 3)因需要某种方法来做大量重
复计算,从而使得哈佛大学和 I B M合作,制造出了最终称为 Harvard Mark I 的自动顺序控制
计算机( A S C C:automated sequence controlled calculator),此项工作在 1 9 4 3年完成。这是
第一台打制表格的数字计算机,它终于实现了巴贝芝的梦想。 Mark II 是以巨大的继电器为基
础的机器,使用了 13 000个继电器。由 A i k e n领导的哈佛计算实验室讲授了计算机科学的第 1
课。
继电器并不是制造计算机的最好器件,因为它是机械的,工作时需弯曲一个金属簧片,
如果超负荷工作,簧片就会折断;如果有一小片污垢或纸片粘在触点之间,继电器就会失效。
一个著名的事件发生在 1 9 4 7年,从 Harvard Mark II 计算机的一个继电器中找到一只蛾子。
Grace Murry Hopper (1 9 0 6—1 9 9 2)1 9 4 4年加入A i k e n的小组,此人后来在计算机程序设计语
言领域非常有名。他在计算机日志中记录了这只蛾子,写道“第一次发现了真正的 b u g”。
继电器的一种可能的替代品是真空管,真空管由 John Ambrose Fleming (1 8 4 9—1 9 4 5)
和Lee de Forest (1 8 7 3—1 9 6 1)发明用来同无线电设备连接。到 2 0世纪4 0年代,真空管早已
用来放大电话信号。事实上,每一家的落地式收音机都装上了用来放大无线电信号的真空管,下载
第18章 从算盘到芯片
177
以便人们能听见。真空管可以连接成与、或、与非和非门,这一点非常像继电器。
逻辑门是由继电器还是由真空管来制造的并不重要。利用逻辑门可集成加法器、选择器、
译码器、触发器和计数器。前面几章讲的基于继电器的器件在当继电器被换成真空管时仍然
可用。
不过真空管也有问题,它们昂贵、耗电量大、散发的热量多。然而最大的问题在于它们
最终会被烧毁,这也就是它们的寿命问题。有真空管收音机的人就习惯于隔一段时间更换这
些管子。电话系统设计成有许多多余的管子,因此损失点儿管子也不是大的问题。(没有人能
指望电话系统不出一点儿问题。)然而计算机中的一个管子烧毁以后,并不能很快被检测到,
而且,计算机中使用了如此多的真空管,可能每几分钟就会烧毁一个。
使用真空管相对于继电器的最大好处在于它每百万分之一秒(即 1微秒)就可以跳变一次。
真空管改变状态(开关闭合或断开)的速度比继电器快 1 0 0 0倍,在最好的情况下,继电器状态
的变化大约需 1毫秒,即千分之一秒。有趣的是,在早期计算机的研究中,速度问题并不是最
重要的,这是因为早期计算机总的计算速度与机器从纸带或电影胶片中读取程序的速度密切相
关。正是因为计算机是基于这种方式制造的,真空管比继电器速度快多少也就无关紧要了。
在2 0世纪4 0年代初,真空管开始在新的计算机中替换继电器。直到 1 9 4 5年,晶体管制成。
正如继电器机器称为机电式计算机,真空管则是第一台电子计算机的基础。
在英国, C o l o s s u s计算机( 1 9 4 3年开始使用)用于破译德国的“ E n i g m a”代码生成器生
成的密码。为这个项目(和英国以后的一些计算机项目)做出贡献的人是艾伦・
M・图灵
( 1 9 1 2—1 9 5 4 ),他当时由于写了两篇很有影响的论文而闻名于世。第一篇论文发表于 1 9 3 7年,
其中首先提出了“计算能力”的概念,用以分析计算机可以做到和不能做到的事。他构思出
了现在称为图灵机的计算机抽象模型。图灵写的第二篇著名论文的主题是人工智能,他介绍
了一个测试机器智能的方法,现在称作图灵测试法。
在摩尔电气工程学校, J.Presper Eckert(1919-1 9 9 5 )和John Mauchly(1907—1 9 8 0 )设计了
E N I A C(electronic numerical integrator and computer,电子数字积分器和计算机)。它采用了
18 000个真空管,于 1 9 4 5年末完成。纯粹按吨位(大约 3 0吨)计算, E N I A C是曾经制造出来
的(也许以后也是)最大的计算机。到 1 9 7 7年,你可以在电器行买到更快的计算机。然而,
E c k e r t和M a u c h l y的专利却被 John V. A t a n a s o ff ( 1 9 0 3—1 9 9 5 )给阻挠了。 A t a n a n s o ff在早期曾设
计了一个电子计算机,但它从未很好地工作过。
E N I A C引起了数学家约翰・冯・诺依曼 ( 1 9 0 3—1 9 5 7 )的兴趣。从 1 9 3 0年开始,匈牙利出
生的冯・诺依曼就一直住在美国。他是一个令人瞩目的人物,
因能在脑子里构思复杂的算法而享有很高的声誉,他是普林斯
顿高级研究学院的一名数学教授,研究范围很广,从量子理论
到游戏理论的应用再到经济学。
冯 ・ 诺 依曼 帮 助 设 计了 E N I A C 的后 继产品 E D VA C
(electronic discrete variable automatic computer )。特别是在
1 9 4 6年与 Arthur W . B u r k s和Herman H.Goldstine 合写的论文
《Preliminary Discussion of the logical Design of an Electronic
Computing instrumert 》中,他描述了有关计算机的几点功能,
这些功能使得 E D VA C比E N I A C更先进。 E D VA C的设计者感觉178
编码的奥秘
下载
到在计算机内部应该使用二进制数,而 E N I A C用的是十进制数;计算机应该具有尽可能大的
存储器,当程序执行时,这个存储器可用来存储程序代码和数据;( E N I A C中的情况不是这
样,对E N I A C进行编程是通过断开开关和插上电缆来进行的。)指令应该在存储器中顺序存放
并用程序计数器来寻址,但也应该允许条件转移。这种设计思想叫作存储程序概念。
这种设计思想是重要的革命化的一步,今天称为冯・诺依曼体系结构,上一章建造的计
算机就是典型的冯・诺依曼机器。但冯・诺依曼体系结构也带来冯・诺依曼瓶颈,冯・诺依
曼型机器需要花费大量的时间从存储器中取出指令来准备执行。应该还记得第 1 7章最后设计
的计算机取指令的时间占整个指令周期的 3 / 4。
在E D VA C时代,用真空管构建存储器是不值得的,因而人们使用一些古怪的方法来解决
这个问题。一个成功的方法就是水银延迟线存储器,它使用 5英尺长的水银管子。在管子的一
端,每隔1微秒向水银发一个小脉冲。这些脉冲需要 1毫秒的时间到达管子的另一端(此时,它
们像声波一样会被检测到,然后送回到开始的地方),因此每个水银管可存储大约 1 0 2 4位信息。
直到2 0世纪5 0年代中期,磁芯存储器才开发出来。这种存储器由大量的环绕着电线的电
磁金属环组成,每个小环保存 1位信息。在磁芯存储器被其他技术取代后的相当一段时期内,
还经常听到老程序员把由处理器访问的存储器称作磁芯。
在2 0世纪4 0年代,冯・诺依曼并不是唯一一个对计算机的本质进行概念上思考的人。
克劳德・香农( 1 9 1 6年出生)是另外一个有着重大影响的思想家。第 11章曾经提到他1 9 3 8年
的硕士论文,论文中确立了开关、继电器和布尔代数之间的关系。 1 9 4 8年,当他在贝尔电话
实验室工作时,他在《 Bell System Technical Journal》上发表了一篇题为《 A Mathematical
Theory of Communication》的论文,其中不仅引入了“位”的概念,而且确立了一个现代称
为“信息理论”的研究领域。信息理论涉及在噪声(经常阻碍信息传送)存在的情况下传送
数字信息以及如何进行信息补偿等问题。 1 9 4 9年,他写了第 1篇关于编写让计算机下棋的程序
的文章; 1 9 5 2年他设计了通过继电器控制的机械老鼠,这个老鼠可以在迷宫中记住路径。香
农同时也因为他会骑独轮车,玩变戏法而在贝尔实验室很出名。
Norbert Wi e n e r ( 1 8 9 4-1 9 6 4 ) 1 8岁时就在哈佛大学取得了数学博士学位,因《 C y b e r n e t i c s ,
o r Control and Communication in the Animal and Macbine》(1 9 4 8)一书而闻名于世。他首次
使用控制论( C y b e r n e t i c s)这个词来表示一种把人及动物的生物活动与计算机及机器人的机
理联系起来的理论。在现代文化里,广泛使用 c y b e r-前缀表示与计算机相关的东西。更特别的
是,成千上万的计算机通过因特网进行的互连称作 c y b e r s p a c e(信息空间),这个词来自科幻
小说作家William Gibson 1984年的小说《 N e u r o m a n c e r》中的词c y b e r p u n k。
1 9 4 8年,E c k e r t - M a u c h l y计算机公司(Remington Rand公司的后继者)开始开发第一台商
用计算机 U N I VAC(universal automatic computer),并于1 9 5 1年完成。第一台被送往人口普查
局。U N I VA C的首次网络应用是用于 C B S,用来预测 1 9 5 2年的总统选举结果。 Walter Cronkite
称它为“电脑”。同样是在 1 9 5 2年,I B M发布了它的第一个商用计算机系统,即 7 0 1。
从此,开始了社团和政府使用计算机的漫长历史。然而,之所以对这段历史感兴趣可能
是因为我们要追踪另一段历史轨迹 — 即降低计算机造价和大小并且使它进入家庭的轨迹,
它开始于1 9 4 7年一场几乎不被人注意的电子技术突破。
贝尔电话实验室许多年里都是这样一个地方:聪明的人可以在此做他感兴趣的任何事。
所幸的是,他们之中有人对计算机感兴趣,如已经提到的 G e o rge Stibitz 和Claude Shannon,第18章 从算盘到芯片
下载
179
他们在贝尔实验室工作的时候都为早期的计算机作出了突出的贡献。后来,在 2 0世纪7 0年代,
贝尔实验室诞生了很有影响的操作系统 U N I X和程序设计语言 C语言,这些在随后的几章里将
要讲到。
1 9 2 5年1月1日,美国电话电报公司正式把它的科学和技术研究部分与商业部分分离,另
外建立附属机构,这样贝尔实验室诞生了。贝尔实验室的主要目的是为了研究能够提高电话
系统性能的技术。幸运的是,它的要求非常含糊,可以包含所有的事情。但在电话系统中,
一个明确的长期的目标是:在线路上传输的声音信号能不失真地放大。
从1 9 1 2年起,贝尔电话系统就采用了真空管放大器,大量的研究和工程人员着手提高电
话系统使用的真空管的性能。尽管这样,真空管仍然有许多问题。管子体积大,功耗大且最
终会烧毁。不过,在当时却是唯一的选择。
1 9 4 7年1 2月1 6日,当贝尔实验室的两个物理学家 John Bardeen(1908 —1 9 9 1 )和Wa l t e r
B r a t t a i n ( 1 9 0 2—1 9 8 7 )在装配一个不同类型的放大器时,所有的一切都改变了。这种新型放大
器由锗片 — 一种称作半导体的元素 — 和一条金箔构成。一个星期后,他们给他们的上司
William Shockley(1 9 1 0—1 9 8 9)进行了演示。这就是第一个晶体管,一种被人们称为 2 0世纪
最伟大的发明的器件。
晶体管不是凭空产生的。 8年前,即 1 9 3 9年1 2月2 9日,S h o c k l e y在笔记本写下:“今天我
想用半导体而不是真空管做放大器在原理上是可能的。”第一个晶体管被发明以后,随后许多
年它继续被完善。 1 9 5 6年,S h o c k l e y、B a r d e e n和B r a t t a i n获得诺贝尔物理学奖 — “因为他们
在半导体上的研究并且发明了晶体管。”
本书的前面谈到了导体和绝缘体。之所以称作导体是因为它们非常容易导电,铜、银和
金都是很好的导体。并非巧合,所有这三种元素都在元素周期表的同一列。
前面讲过,原子中的电子分布围绕在原子核的外层。上述三种导体的特征是只有一个单
独的电子在最外层。这个电子很容易与原子的其余部分分离并自由移动形成电流。与导体相
对的是绝缘体,像橡皮和塑料,它们几乎不能导电。
锗和硅元素(还有一些化合物)称为半导体,并不是因为它们的导电性是导体的一半,
而是因为它们的导电性可以用多种方法来控制。半导体最外层有 4个电子,是最外层所能容纳
电子最大数目的一半。在纯半导体中,原子彼此非常稳固地结合在一起,具有与金刚石相似
的晶状结构。这种半导体不是好的导体。
但是半导体可以掺杂,意思是与某种杂质相混合。半导体很容易与其他杂质结合而变得
不纯。有一类杂质为原子的结合提供额外的电子,这种半导体叫
N 型半导体( N 表示
n e g a t i v e);另一种类型的杂质掺杂生成 P型半导体。
两个N型半导体中夹一个 P型半导体可制成放大器,称作 N P N晶体管,对应的三部分分别
是集电极( C o l l e c t o r)、基极( B a s e )和发射极( E m i t t e r )。
下面是一个 N P N晶体管的示意图:
集电极
基极
发射极180
编码的奥秘
下载
基极上的一个小电压能控制一个很大的电压经过集电极到发射极。若基极上没有电压,
它会有效截止晶体管。
晶体管通常被封装在一个直径大约为 1 / 4英寸的小金属容器里,有三个引脚伸出:
晶体管首创了固态电子器件,意思是晶体管不需要真空,可由固体做成,特别是指由半
导体和当今最普遍的硅制成。除了比真空管体积更小外,晶体管功耗小,发热少,并且更耐
用。携带一个电子管收音机很不方便。晶体管收音机靠小电池供电,并且不像电子管,它不
会变热。对于 1 9 5 4年圣诞节早晨收到礼物的幸运者来说携带晶体管收音机已成为可能。那些
第一批袖珍晶体管收音机是由德克萨斯仪器公司制造的,该公司是半导体革命中的一个重要
公司。
然而,晶体管的第一个商业应用是助听器。为了纪念贝尔一生为聋人的贡献, AT&T公
司允许助听器生产厂家不用付任何专利权税就可使用晶体管技术。第一台晶体管电视机出现
于1 9 6 0年,而今天,电子管器件几乎已消失了。(然而,并未完全消失,一些高保真发烧友及
电子吉他手还是喜欢用电子管放大器来放大声音而不是用晶体管。)
1 9 5 6年,S h o c k l e y离开贝尔实验室成立 S h o c k l e y半导体实验室。他迁到加利福尼亚的 P a l o
A l t o — 他的成长之地。他的公司是那里成立的第一家从事这种工作的公司。后来,其他半导
体及计算机公司也在那儿建立了业务,于是旧金山南部的这个地方也就成为现在非正式地称
作硅谷(Silicon Va l l e y)的地方。
真空管原是为放大信号而开发的,但它们也用来作为逻辑门的开关。晶体管也是如此。
下面你将会看到一个由晶体管组成的与门在构造上很像用继电器组成的与门。只有当 A 输入
为1且B输入为1时,两个晶体管才都导通,输出才为 1。这里所示的电阻用来防止短路。
正如你所看到的,下图连接了两组晶体管,右边一个是或门,左边一个是与门。在与门
电路里,上面管子的发射极连接到下面管子的集电极。在或门电路里,两个晶体管的集电极
都连到电源,发射极连到一起:
或门
与门
A输入
A输入
B输入
输出
B输入
输出下载
第18章 从算盘到芯片
181
因此,我们所学的有关由继电器构造逻辑门和其他部件的知识也适用于晶体管。继电器、
电子管和晶体管最初主要用来放大信号,但也可用同样的方法连接成逻辑门来建造计算机。
第一台晶体管计算机制造于 1 9 5 6年,短短几年内,新计算机的设计中就放弃使用电子管了。
这里有一个问题:晶体管当然使计算机更可靠,更小和更省电,但晶体管能使计算机的
制造更简单吗?
并非如此。虽然晶体管使得在一个小空间里能安装更多的逻辑门,但你还得担心这些组
件的互连。连接晶体管形成逻辑门像连接继电器和真空电子管一样困难,某种程度上,它甚
至更困难,因为晶体管较小,不容易掌握。如果想用晶体管建造第
1 7章所建造的计算机及
6 4 K B的 R A M阵列,设计工作中的一部分将是设法发明某种能容纳所有组件的结构。这些劳
动是乏味的,需要在数百万晶体管之间建立起数百万连接。
然而,就像我们所发现的,一些晶体管的连接会重复出现。许多对晶体管几乎都是先连
接成门,门再连接成触发器、加法器、选择器或译码器,触发器再组成多位锁存器或 R A M阵
列。如果晶体管事先能连接成通用的结构,那么组装一台计算机就容易多了。
这种思想应该首先由英国物理学家 G e o ffrey Dummer(1909出生)在1 9 5 2年5月的一次演讲
中提出,他说:
“我想预测一下未来。随着晶体管的出现及半导体的日益广泛应用,现在似乎可以设想电
子设备在一个固体块里而无需接线。这个块由隔离、传导、整理、放大四个层组成,电子功
能通过各层的隔离区域直接连接起来。”
然而,真正可用的产品还不得不再等几年。
在对D u m m e r的预言毫不知情的情况下, 1 9 5 8年7月,德克萨斯仪器公司的 Jack Kilby(生
于1 9 2 3年)想到了在一个硅片上造出许多晶体管、电阻及其他电子组件的方法。 6个月以后,
即1 9 5 9年1月,Robert Noyce (1 9 2 7—1 9 9 0)也找到了基本上相同的方法。 N o y c e原先曾为
S h o c k l e y半导体实验室工作过,但在 1 9 5 7 年,他和其他 7位科学家离开实验室并成立了
F a i r c h i l d(仙童)半导体公司。
在技术史上,同时产生的发明很普遍,可能超出了你的想像。尽管 K i l b y比N o y c e早6个月
发明了这项技术,并且德克萨斯仪器公司比仙童公司也早申请专利,但 N o y c e还是首先获得了
专利。法律上的争斗随之而来,但仅过了 1 0年,问题就得到了令他们都满意的解决。尽管他
们从未在一起工作过,但 K i l d y和N o y c e被认为是集成电路,或称 I C,更普遍的是叫芯片的共
同发明者。
集成电路要经过复杂的工序才能生产出来,这些工序包括把很薄的硅晶片分层,精确地
上涂料,和在不同的区域蚀刻形成微部件。尽管开发一种新的集成电路很昂贵,但收益来自
于它的大量生产 — 生产得越多,就越便宜。
实际的硅晶片薄且很脆弱,为了保护芯片并提供某种方法使芯片中的部件与别的芯片连
接,芯片必须安全地封装。集成电路的封装有几种不同的方式,但通常多采用矩形塑料双排
直插式封装(或 dual inline package,D I P),有1 4、1 6或4 0个管脚从旁边伸出:182
编码的奥秘
下载
这是一个 1 6管脚的芯片。如果你拿着芯片,并使芯片上的凹陷朝左时(如图),从芯片左
下角起环绕到右边至末端,管脚依次编号为 1~1 6,第1 6管脚在左上角。每一边管脚之间相距
刚好为1 / 1 0英寸。
2 0世纪6 0年代,空间项目和军备竞赛刺激了早期的集成电路市场。在民用方面,第一个
包含有集成电路的商业产品是 1 9 6 4年由Z e n i t h出售的助听器。 1 9 7 1年,德克萨斯仪器公司开
始出售第一批袖珍计算器,同时 P u l s a r出售了第一块数字表(显然数字手表中集成电路的封装
完全不同于刚才图示的例子)。随后出现了其他很多种包含有集成电路的产品。
1 9 6 5年,戈登・E・摩尔(当时在仙童公司,后来是 I n t e l公司的合伙创始人)注意到技术
以这样一种方式在发展: 1 9 5 9年后,可以集成到一块芯片上的晶体管的数目每年都翻一番。
他预测这种趋势将继续下去。事实上后来这种趋势放慢了些,因此摩尔定律(最终这样命名)
修改为预计每 1 8个月在一个芯片上集成的晶体管数量将增长一倍。这仍是一个令人惊异的增
长速度,这也就解释了为什么家用电脑只用了短短几年好像就已过时了。一些人认为摩尔定
律将继续适用到 2 0 1 5年。
早期,人们习惯于说小规模集成电路,即 S S I(small-scale integration),指那些少于 1 0个
逻辑门的芯片;中规模集成电路,即 M S I(1 0~1 0 0个门);大规模集成电路,即 L S I(1 0 0~
5 0 0 0个门)。随后的术语为超大规模集成电路,即 V L S I(5 000~50 000个门);极大规模集
成电路,即 S L S I(5 0 0 0 0~100 000个门);特大规模集成电路,即超过 100 000个门。
本章的其余部分和下一章将把时钟停留在 2 0世纪7 0年代中期,即第一部《星球大战》发
行前的年代,那时, V L S I刚刚出现,且好几种技术用来制作构成集成电路的组件,每一种技
术有时被称为一个 I C家族。到7 0年代中期,两个“家族”流行开来: T T L和C M O S。
T T L代表晶体管-晶体管逻辑。 7 0年代中期,如果你是一位数字电路设计工程师(即用 I C
来设计大的电路),一本 1 . 2 5英寸厚的、德克萨斯仪器公司于 1 9 7 3年出版的名为《 The TTL
Data Book for Design Engineer》( T T L工程师设计数据手册)的书(以下简称《T T L数据手册》)就
会是你书桌上的常客。这是一本关于德克萨斯仪器公司和其他公司出售的 T T L集成电路7 4 0 0系
列的完整的参考书,之所以这样称呼是因为该家族的 每个集成电路都以开头是7 4的数字标识。
7 4 0 0系列中每一个集成电路由许多预先按特定方式连接的逻辑门组成。一些具备简单的
预先连接的逻辑门的芯片可以用来建造更大的组件。还有一些芯片提供通用组件,如:触发
器、加法器、选择器和译码器。
7 4 0 0系列中第一个集成电路是号码 7 4 0 0本身,它在《 T T L数据手册》里描述为:“四个双
输入正与非门”。这意味着这个特定的集成电路包含四个 2输入与非门。它们之所以称为“正”
与非门是因为有一个电压值与逻辑 1对应,没有电压值与逻辑 0对应。这个集成电路是一个 1 4
管脚的芯片,数据手册中的一个小图展示了管脚对应的输入和输出:下载
第18章 从算盘到芯片
183
该图是芯片的俯视图(管脚在下面),小的凹陷在左边。
管脚1 4标为V C C ,等同于 V符号,它表明是电压 (顺便说一下,大写字母 V的双下标表明是
一个电源,下标中的 C是指晶体管的集电极输入,它在内部连接到电源 )。管脚 7标为 G N D,
表示接地。在特定电路中所使用的任何集成电路都必须接电源和公共地。
对于T T L 7 4 0 0系列,V C C 必须在4 . 7 5~5 . 2 5 V之间,换句话说,电源电压必须在 5 V±5 %的
范围内。若电压低于 4 . 7 5 V,芯片就无法工作;若超过 5 . 2 5 V,芯片则会被烧坏。通常 T T L器
件不能使用电池供电,即使你刚好有一个 5 V的电池,电压也不可能刚好适合于芯片。 T T L通
常需要从墙上接入电源。
7 4 0 0芯片中每一个与非门有两个输入和一个输出,它们独立工作。前面曾把输入用 1(表
明有电压)和 0(表明无电压)加以区分,实事上与非门的输入电压可在 0(地)~ 5 V(V C C )
之间变化。 T T L中,0~0 . 8 V之间的电压视为逻辑“ 0”,2~5 V之间的电压视为逻辑“ 1”,应
当避免出现0 . 8~2 V之间的输入电压。
T T L的典型输出是 0 . 2 V代表逻辑“ 0”,3 . 4 V代表逻辑“ 1”。由于电压可能会有点儿变化,
集成电路的输入 /输出有时称作“高”或“低”,而不是“ 1”或“ 0”。此外,低电平也可以表
示逻辑“ 1”,高电平也可以表示逻辑“ 0”,这种说法称为负逻辑。当 7 4 0 0芯片称作“四个双
输入正与非门”时,“正”就表示上面讲到的正逻辑。
如果T T L的典型输出是 0 . 2 V代表逻辑“ 0”,3 . 4 V代表逻辑“ 1”,则输出确实是在输入范
围内,即逻辑“ 0”在0~0 . 8 V、逻辑“ 1”在2~5 V之间,这也是 T T L能隔离噪声的原因。一
个“ 1”输出即使下降 1 . 4 V 后,电压仍可以高到作为“ 1”电平输入;一个“ 0”输出升高
0 . 6 V后,电压仍可以低到作为“ 0”电平输入。
了解一个集成电路最重要的事实可能是它的延迟时间,这指的是输入变化反应到输出所
花费的时间。
芯片的延迟通常以纳秒来计算,纳秒缩写为 n s。1纳秒非常短暂,千分之一秒为 1毫秒,
百万分之一秒为1微秒,十亿分之一秒才是 1纳秒。 7 4 0 0芯片与非门的延迟时间要保证少于
2 2纳秒,也就是 0 . 0 0 0 0 0 0 0 2 2秒,或十亿分之 2 2秒。
不能感觉纳秒的长短不仅仅是你一人,地球上任何人除了对纳秒有智力上的理解之外就
没有什么了。纳秒比人所经历的任何事物要短暂得多,所以它们永远也不会被理解,任何解
释都只会使纳秒变得更难以捉摸。例如,你拿着一本书离你的脸有一英尺远,那么 1纳秒就是
光从书到你的眼所用的时间。现在,你能说你对纳秒有了更好的认识?
然而,纳秒在计算机中出现是可能的。正如在第 1 7章所见,计算机处理器很笨拙地做着
简单的事情 — 从存储器中取一个字节到寄存器,把一个字节同另一个字节相加,再把结果
存回存储器。计算机(不是第 1 7章中的计算机,而是现在使用的计算机)能做大量事情的唯
一原因就是那些操作能迅速执行。引用 Robert Noyce的话:“当你理解了纳秒之后,在概念上
计算机操作就相当简单了。”
我们继续细读《 T T L工程师设计数据手册》,就会在书中看到许多熟悉的小条目。 7 4 0 2芯
片有四个双输入或非门, 7 4 0 4有六个反相器, 7 4 0 8有四个双输入与门, 7 4 3 2有四个双输入或
门,7 4 3 0有一个8输入与非门:184
编码的奥秘
下载
图中缩写N C表示该引脚没有连接到内部电路。
7 4 7 4芯片是听起来很熟悉的一个芯片,它是“带预置和清零的双 D型正边沿触发器”。如
下图示:
T T L数据手册甚至还包含这个芯片的每个触发器的逻辑图:
预置
清零
时钟
你会发现这与第 1 4章结尾处的图很相似,只是第 1 4章的图中使用的是或非门。《T T L数据
手册》中的逻辑表也有一点点不同:第18章 从算盘到芯片
下载
输入
185
输出
上表中,“H”代表高电平,“L”代表低电平。你也可以把它们想成是 1或0。在上述触发
器里,预置与清零输入通常为“ 0”,在这里它们为“ 1”。
继续翻阅《T T L数据手册》,你会发现 7 4 8 3芯片是一个 4位二进制全加器,7 4 1 5 1是一个8 - 1
数据选择器, 7 4 1 5 4是4 - 1 6译码器, 7 4 1 6 1是同步4位二进制计数器, 7 4 1 7 5是四个带清除功能
的D型触发器。你可以选择这些芯片中的两个做一个 8位锁存器。
所以现在你该明白从第 11章起使用的各种各样的组件是如何来的了,它们都是从《 T T L
工程师设计数据手册》中得来的。
作为一名数字电路设计工程师,需要花费大量的时间去通读《 T T L数据手册》,了解要使
用的T T L芯片的类型。一旦掌握了你所需要的工具,你就可以用 T T L芯片实际组装第 1 7章所示
例的计算机。把芯片连接起来要比连接晶体管容易得多,然而你可能不想用 T T L组成6 4 K B的
R A M阵列。在 1 9 7 3年的《 T T L数据手册》中,所列最大容量的 R A M芯片才 2 5 6×1位,需要
2 0 4 8个这种芯片才能组成 6 4 K B的R A M!T T L远不是组织存储器的最好技术,第 2 1章将要更多
地谈到关于存储器的事情。
你可能也想用好一些的振荡器。可以将 T T L反相器的输出端连到输入端,但使用一个事
先可预测频率的振荡器要更好一些。构造一个这样的振荡器很容易,就是使用一个石英晶体,
在一块小片上引出两条线。这些晶体在特定的频率下产生振荡,通常每秒至少 1 0 0万周。每秒
一百万周称为兆赫,缩写为 M H z。如果第 1 7章所示的计算机是用 T T L构造的话,那么它在
1 0 M H z的时钟频率下可能会运行地很好。每一条指令需要 4 0 0纳秒的执行时间。当然,这已经
比用继电器工作时所能想像的要快多了。
另一个流行的芯片家族是(现在仍然是) C M O S,它代表由金属氧化物填充的半导体。
如果你是 7 0年代中期用 C M O S集成电路进行电路设计的业余爱好者,你可能会使用一本由
National Semicondactor(国家半导体公司 )出版的参考书,它在你所在地方的电器行就能见到,
书名为《CMOS Databook》。此书包含了C M O S集成电路4 0 0 0系列的信息。
T T L的电源要求是在 4 . 7 5~5 . 2 5伏之间,但 C M O S则可以是 3~1 8伏之间的任何数值,范
围多么大呀!此外, C M O S比T T L功耗要小,这就可以使用电池来驱动小型 C M O S电路。
C M O S的缺陷是速度慢。例如, CMOS 4008 4位全加器在 5伏电压下只能保证 7 5 0纳秒的延迟。
当电源电压升高时,速度加快 — 1 0伏时,延迟为 2 5 0纳秒; 1 5伏时,延迟为 1 9 0纳秒。但是
C M O S设备不能接近于 TTL 4位加法器, TTL 4位加法器的延迟为 2 4纳秒。(2 5年前,在T T L的
速度和C M O S的低功耗之间的权衡是很清楚的,今天,也有低功耗的 T T L和高速率的 C M O S。)
实践上,你可以在塑料面包板上连接这些芯片进行实验:186
编码的奥秘
下载
每一个有 5个孔的短行在塑料板下是电导通的。你把芯片插在面包板上,并使芯片跨在中
间的长槽上,管脚插入槽两边的孔中。集成电路的每一个管脚都与其他 4个孔电连接。你可以
将线插入其余孔中来连接芯片。
你也可以使用一种称为线缠绕的技术使芯片的连接更加牢固。每一个芯片插入带有长方
形柱子的插座上:
每一个柱子对应于芯片的一个管脚,插座本身也插入打孔的板上。在板的另一边,你会
看到特殊的用线缠绕的插槽紧紧包裹着围绕柱子的绝缘线。柱子的方形边缘穿破绝缘层并使
它和导线电连接。
如果你实际在使用集成电路来构造一个电路,就要使用一块印刷线路板。以前,这是业
余爱好者可以做的事情。板子上有孔,并覆盖一层薄的铜箔。首先,你要在需要保护的区域
的铜箔上涂上防酸物,并用酸腐蚀其余部分,然后你把集成电路插座(或集成电路本身)直
接焊在板的铜上。由于集成电路之间有许多内部连接,一层铜箔通常是不够用的,商业制造
的印刷线路板有许多内部互连的层。
到7 0年代早期,已可以在一块电路板上用集成电路构造一个完整的计算机处理器。把整
个处理器做在一块芯片上已只是时间问题。尽管德克萨斯仪器公司 1 9 7 1年为单片计算机申请
了专利,但实际的制造荣誉却属于 I n t e l — 一家于 1 9 6 8年,由前仙童雇员 Robert Noyce 和
Gordon Moore 建立的公司。 I n t e l的第一个主要产品是 1 9 7 0年生产的可存储 1 0 2 4位的存储器芯
片,在当时这是可做在一块芯片上的最大存储容量。
I n t e l在为由日本的 B u s i c o m公司生产的可编程计算器设计芯片时,决定采用不同的方法。
正如I n t e l公司的工程师Ted Hoff写的:“不是想使他们的设备成为一个带有编程能力的计算器,
而是想使它作为通常目的计算机可编程为一个计算器”。这就产生了Intel 4004,第一个“芯片
上的计算机”或微处理器。 1 9 7 1年11月,4 0 0 4投入使用,它带有 2 3 0 0个晶体管。(根据摩尔定
律,1 8年后微处理器应该有 4 0 0 0倍数量的晶体管,即大约 1 0 0 0万个,这是相当准确的预计。)
有了晶体管的数量,下面将描述 4 0 0 4的其他三个很重要的特性。自 4 0 0 4诞生以来,这三
个指标经常用来作为微处理器相互比较的标准。
第一, 4 0 0 4是4位的微处理器。这意味着处理器的数据通路宽度只有 4位,做加、减法运
算时,它一次只处理 4位。相比较,第 1 7章中开发的计算机有 8位数据通路,所以它是 8位处理下载
第18章 从算盘到芯片
187
器。正如我们将看到的 4位微处理器很快就被 8位微处理器所超越,没有人会停滞不前。 7 0年
代后期, 1 6位微处理器出现了。回想一样第 1 7章的内容,以及在 8位处理器上进行两个 1 6位数
相加所需要的指令代码,你就会欣赏 1 6位处理器带给你的好处。 8 0年代中期, 3 2位微处理器
出现了,并从那以后一直作为家用计算机的主流微处理器。
第二, 4 0 0 4有最大每秒 108 000 周的时钟频率,即 1 0 8 K H z。时钟频率是可连接到微处理
器并能运行的振荡器的最大频率。再要快的话,微处理器就可能出错。到 1 9 9 9年,家用计算
机微处理器的时钟频率已达到 5 0 0 M H z — 大约4 0 0 4运行速率的 5 0 0 0倍。
第三,4 0 0 4可寻址的存储器是 6 4 0个字节。这看起来是一个小得可笑的数字,然而这和当
时可用的存储芯片的容量是相匹配的。下一章你就会看到,两年内微处理器可达到 6 4 K B的寻
址空间,这是第 1 7章所提及的机器的容量。到 1 9 9 9年,I n t e l的微处理器已达 6 4 T B的可寻址空
间,尽管大多数人家用电脑的 R A M容量还低于 2 5 6 M B。
这三个数字不会影响一台计算机的能力。例如,一个 4位处理器要进行 3 2位数的加法,只
要简单地按 4位一次进行。某种意义上,所有数字计算机都是相同的。如果一个处理器的硬件
能做别的处理器做不了的,那么别的处理器可以用软件实现,最终它们能做同样的事情。这
也就是图灵 1 9 7 3年的论文里有关计算能力的含义。
然而,处理器根本的不同是在速度上。同时,速度也是我们为什么使用计算机的一个重
要原因。
最大时钟频率是影响处理器总体速度的一个显著因素,时钟频率决定了每一条指令的执
行速度。处理器的数据宽度也影响其执行速度。虽然一个 4位处理器可进行 3 2位数的加法运算,
但它的执行速度不可能与 3 2位处理器一样。然而,令人迷惑的是,处理器可寻址的最大存储
器容量也是影响速度的一个因素。最初,寻址空间看起来好像与处理器速度无关,而只反映
了处理器在执行某些需要大量存储空间的功能时处理器的能力限度。但处理器通过利用存储
器地址来控制用于保存或提取信息的其他媒体,可避开存储容量的限制。(例如,假设写到某
个存储地址的每个字节实际上都是在纸带上穿孔,从存储地址读的每个字节都是从纸带上读。)
然而这种做法减慢了整个计算机的处理速度 — 又是速度问题。
当然,这三个数字都只是初略地显示了微处理器的运行速度。这些数字没有告诉任何有
关微处理器内部体系结构或机器码指令的效率和能力的问题。处理器越来越复杂,许多以前
用软件来实现的普通工作现在可以用微处理器来实现。我们在后面的各章中可看到这种趋势
的一些例子。
即使所有的数字计算机都具有同等的能力,即使它们只能做与图灵设计的原始计算机器
一样的工作,处理器的执行速度最终也会影响计算机系统的总体用途。例如,比人类大脑的
计算速度还慢的计算机是毫无用处的。当我们在现代计算机的屏幕上看电影时,如果处理器
需要花费1分钟的时间来处理每一帧,我们也是无法忍受的。
回到2 0世纪7 0年代中期,先不说 4 0 0 4的局限性,但毕竟它是一个开始。 1 9 7 2年4月,I n t e l
发布了8 0 0 8 — 一个8位微处理器,时钟频率为 2 0 0 K H z,可寻址1 6 K B的存储空间。(仅用三个
数来总结一个处理器是多么容易。)后来, 1 9 7 4年5月期间, I n t e l和M o t o r o l a公司同时发布了
对8 0 0 8进行改进的微处理器,这两种芯片改变了整个世界。下载
第19章 两种典型的微处理器
微处理器 — 集成计算机中央处理器( C P U)的所有组件在一个硅芯片上 — 诞生于1 9 7 1
年。它的产生有一个很好的开端:第一个微处理器是 Intel 4004,其中有2 3 0 0个晶体管。今天,
差不多3 0年过去了,为家用计算机所制造的微处理器中将近有 10 000 000个晶体管。
微处理器实际的作用基本上保持不变。现在的芯片上附加的上百万个晶体管可以做许多有
趣的事情,但在微处理器最初的探索过程中,这些事情更多的是分散我们的注意力而不是给我
们以启迪。为了对微处理器的工作情况获得更清晰的认识,让我们先看一下最初的微处理器。
这些微处理器出现在 1 9 7 4年。在该年度, I n t e l公司在4月推出了 8 0 8 0,M o t o r o l a(摩托罗
拉) — 从2 0世纪5 0年代开始生产半导体和晶体管产品的公司 — 在8月份推出了 6 8 0 0。它们
并非是那年仅有的微处理器。同样是在 1 9 7 4年,德克萨斯仪器公司推出了 4位的TMS 1000,用
在许多计算器、玩具和设备上; National Semiconductor(国家半导体公司)推出了 PA C E,它
是第一个1 6位的微处理器。然而,回想起来, 8 0 8 0和6 8 0 0是两个最具有重大历史意义的芯片。
I n t e l设定8 0 8 0最初价格为 $ 360,这是对IBM System/360的一个讽刺。IBM System/360是
一个大型机系统,由许多大公司使用,要花费几百万美元。(今天,你只花 $ 1 . 9 5就可以买到
一个8 0 8 0芯片。)这并不是说 8 0 8 0可以与S y s t e m / 3 6 0相提并论,但不用几年, I B M公司也将会
正视这些很小的计算机。
8 0 8 0是一个8位的微处理器,有 6 0 0 0个晶体管,时钟频率为 2 M H z,可寻址 6 4 K B的存储空
间。6 8 0 0(今天也只卖$ 1 . 9 5)有大约4 0 0 0个晶体管,也可寻址 6 4 K B的存储空间。第 1代6 8 0 0
的时钟频率为 1 MHz,但到 1 9 7 7年M o t o r o l a公司发布新款的 6 8 0 0时,其时钟频率已为 1 . 5 M H z
和2 MHz 。
这些芯片称作“单芯片微处理器”,不太准确的名称为“一个芯片上的计算机”。处理器
只是整个计算机的一部分。此外,计算机至少还需要一些随机访问存储器( R A M)、供人们
输入信息到计算机的方法(输入设备),供人们从计算机获取信息的方法(输出设备),以及
其他可把所有这些东西连接在一起的芯片。这些组件将在第 2 1章详细介绍。
从现在起,我们只考察微处理器。描述微处理器时,通常是用框图来画微处理器的内部
组件及它们是如何连接的。但在第 1 7章已有够多的图了,现在,我们将通过观察处理器与外
界的相互作用来了解它的内部 。换句话说,为了弄清楚它的作用,可以把微处理器看成是一
个黑盒子,它的内部操作不需要做详细研究。我们可以通过测试芯片的输入和输出信号,特
别是芯片的指令集来掌握微处理器的功能。
8 0 8 0和6 8 0 0都是4 0管脚的集成电路。这些芯片最普通的 I C封装大约是 2英寸长,半英寸宽,
1 / 8英寸厚:下载
第19章 两种典型的微处理器
189
当然,你看到的只是外包装。位于其内部的硅晶片非常小,就拿早期的 8位微处理器来说,
其硅晶片小于1 / 4平方英寸。外包装保护硅晶片并通过管脚提供对芯片的输入和输出点的访问。
下图显示了 8 0 8 0的4 0个管脚的功能:
本书的所有电气或电子设备都需要某种电源供电。 8 0 8 0的一个特别之处在于它需要三种
电源电压:管脚 2 0必须连到 5伏电源上,管脚 11连到- 5伏电源上,管脚 2 8连到1 2伏电源上;管
脚2接地(1 9 7 6年,I n t e l发布了8 0 8 5芯片,简化了这些电源需求)。
其余管脚都画有箭头。从芯片中出来的箭头表示输出信号,这是由微处理器控制的信号,
计算机中其余芯片对此作出响应。指向芯片的箭头表示输入信号,这是来自于其他芯片的信
号,8 0 8 0对它们做出响应。有些管脚既是输入又是输出。
第1 7章的处理器需要振荡器使它工作。 8 0 8 0需要两个不同的 2 MHz 同步时钟输入,在 2 2
和1 5管脚上分别标记为 ∅ 1 和∅ 2 。这些信号可以很方便地由 I n t e l公司生产的 8 2 2 4时钟信号发生
器提供。给这个芯片连上一个 18 MHz的石英晶体,剩下的工作它基本上可以完成。
一个微处理器通常有多个输出信号来寻址存储空间,这种信号的数目与微处理器可寻址
的存储器空间的大小直接相关。 8 0 8 0有1 6个地址信号,标为 A 0~A 1 5,具有寻址 2 1 6 即65 536
字节的存储空间的能力。
8 0 8 0是一个 8位微处理器,一次可从存储器中读出、写入 8位数据。它包括 8个数据信号
D 0 ~ D 7 ,这些信号是在此芯片中仅有的几个既作为输入又作为输出的信号。当微处理器从存储
器读数据时,这些管脚作为输入;当微处理器向存储器写数据时,这些管脚作为输出。
微处理器的另外 1 0个管脚是控制信号。例如, R E S E T输入用来复位微处理器。输出信号
-
- R信号对应于 R A M阵列的写入输入。)另外,当芯
W R表示微处理器要向 R A M中写数据。( W
片读取指令时,其他控制信号会在某个时候出现在 D 0 ~ D 7 管脚。由 8 0 8 0构成的计算机系统通常
使用8 2 2 8系统控制芯片来锁存这些附加的控制信号。后面将会讲述一些控制信号。由于 8 0 8 0
的控制信号非常复杂,因此,除非你想基于 8 0 8 0芯片来实际设计计算机,否则最好不要用这
些控制信号来折磨自己。190
编码的奥秘
下载
假定8 0 8 0微处理器连接了 6 4 K B的存储器,这样可以不通过微处理器来读写数据。
8 0 8 0芯片复位后,它从存储器的地址 0 0 0 0 h处读取该字节,送到微处理器中。这可以通过
在地址信号端 A 0 ~A 1 5 输出1 6个0来实现。它读取的字节必须是 8 0 8 0指令,这种读取字节的过
程叫作取指令。
在第1 7章构造的计算机里,所有指令(除了停止指令 H LT)都是3个字节长,包括一个操
作码和两个字节的地址。在 8 0 8 0中,指令长度可以是 1个字节、2个字节或3个字节。有些指令
可使8 0 8 0从存储器的某一位置处读出一个字节送到微处理器中;有些指令可使 8 0 8 0从微处理
器中把数据写入存储器的某一位置处;其他指令可使 8 0 8 0不使用 R A M而在内部执行。第一条
指令执行完后, 8 0 8 0访问存储器中的第二条指令,依此类推。这些指令组合在一起构成一个
计算机程序,用来完成一些自己感兴趣的事情。
当8 0 8 0运行在最高速度即 2 MHz 时,每个时钟周期为 5 0 0纳秒( 1除以 2 000 000 周等于
0 . 0 0 0 0 0 0 5 0 0秒)。第1 7章中的每条指令都需要 4个时钟周期, 8 0 8 0的每条指令则需要 4~1 8个
时钟周期,这意味着每条指令的执行时间为 2~9微秒(即百万分之一秒)。
了解微处理器功能的最好方法可能是在系统方式下测试其完整的指令集。
第1 7章最后出现的计算机仅有 1 2条指令。一个 8位微处理器很容易就有 2 5 6条指令,每个操
作码对应于某个 8位值。(如果一些指令有2个字节的操作码,则实际会有更多的指令)。8 0 8 0虽
没有那么多,但它也有 2 4 4条操作码。这看起来似乎很多,但总的来说,却又不比第 1 7章中的
计算机功能多多少。例如,如果想用 8 0 8 0做乘法或除法,仍然需要写一段小程序来实现。
第1 7章中讲过,处理器指令集的每个操作码都和某个助记符相联系,有些助记符之后可
能还有操作数。但这些助记符仅用来方便地表示操作码。处理器只读取字节,它并不懂组成
这些助记符的字符的含义。
第1 7章中的计算机有两条很重要的指令,称作装载( L o a d)和保存( S t o r e)指令。这些
指令都占用三个字节的存储空间。装载指令的第一个字节是操作码,操作码后的两个字节表
示1 6位地址。处理器把在此地址中的字节送到累加器。同样,保存指令把累加器中的内容存
储到指令指定的地址处。
下面,我们用助记符来简写这两个操作:
LOD A ,[aaaa]
STO [aaaa],A
在此, A表示累加器(装载指令的目的操作数,保存指令的源操作数),a a a a表示一个 1 6
位的存储器地址,通常用 4位十六进制数来表示。
8 0 8 0中的8位累加器称作 A,就像第 1 7章中的累加器。正如第 1 7章中的计算机一样, 8 0 8 0
也有两条与装载和保存指令功能一样的指令。 8 0 8 0中这两条指令的操作码为 3 2 h和3 A h,每个
操作码后有一个 1 6位地址。 8 0 8 0的助记符为 S TA(代表存储累加器的内容)和 L D A(代表装
载到累加器):
操作码 指令
3 2 S TA [aaaa],A
3 A LDA A,[aaaa]
除了累加器,8 0 8 0微处理器内部还包括 6个寄存器( r e g i s t e r),每个寄存器可以保存 8位的
值。这些寄存器和累加器非常相似,事实上,累加器被看作是一种特殊的寄存器。和累加器第19章 两种典型的微处理器
下载
191
一样,这 6个寄存器也是锁存器。处理器可以把数据从存储器传送到寄存器,也可以把数据从
寄存器送回到存储器。然而,这些寄存器没有累加器的功能强大。例如,当两数相加时,其
结果通常送往累加器而非其中一个寄存器。
在8 0 8 0中,除累加器外的 6个寄存器的名字分别为 B,C,D,E,H和L。人们通常问的第
一个问题是“用 F和G干什么?”,第二个问题是“用 I,J和K又要做什么?”,答案是使用寄
存器H和L具有某种特殊的含义。 H代表高(H i g h),L代表低( L o w )。通常把 H和L的8位合起来
记作H L来表示一个 1 6位寄存器对,H作为高位字节, L作为低位字节。这个 1 6位值通常用来寻
址存储器。后面我们将看到它的简单用法。
所有这些寄存器都是必需的吗?为什么不在第 1 7章中的计算机中用到它们呢?从理论上
说,它们并非必需,但是使用它们会很方便。许多计算机程序在同一时刻要用到几个数据,
如果所有这些数据都存储在微处理器的寄存器中而非存储器中,执行程序将会更快,因为程
序访问存储器的次数越少,那么它的运行速度也就越快。
8 0 8 8指令中,有一个至少 6 3个指令码供一条 8 0 8 0指令使用的指令,它就是 M O V指令,即
M o v e的简写。该条指令只有一个字节,用于把一个寄存器中的内容传送到另一个寄存器中
(或同一个寄存器中)。使用大量 M O V指令是设计带有 7个寄存器(包括累加器)的微处理器
的正常结果。
下面是前3 2条M O V指令。记住目的操作数在左边,源操作数在右边:
操作码
指令
操作码 指令
MOV D ,B
4 0 MOV B ,B 5 0 4 1 MOV B ,C 5 1 MOV D ,C
4 2 MOV B ,D 5 2 MOV D ,D
4 3 MOV B ,E 5 3 MOV D ,E
4 4 MOV B ,H 5 4 MOV D ,H
4 5 MOV B ,L 5 5 MOV D ,L
4 6 MOV B ,[ H L ] 5 6 MOV D ,[ H L ]
4 7 MOV B ,A 5 7 MOV D ,A
4 8 MOV C ,B 5 8 MOV E ,B
4 9 MOV C ,C 5 9 MOV E,C
4 A MOV C ,D 5 A MOV E ,D
MOV E ,E
4 B MOV C ,E 5 B 4 C MOV C ,H 5 C MOV E ,H
4 D MOV C ,L 5 D MOV E ,L
4 E MOV C ,[ H L ] 5 E MOV E ,[ H L ]
4 F MOV C ,A 5 F MOV E ,A
这些都是很方便的指令。当一个寄存器中有值时,可以把它传送到其他寄存器中。注意,
上述指令中有四条指令用到 H L寄存器对,如:
MOV
B,[HL]
前面列出的 L D A指令把一个字节从存储器中传送到累加器中,这个字节的 1 6位地址直接
跟在L D A操作码的后面。这里的 M O V指令把一个字节从存储器中传送到寄存器 B中,但被装
载到寄存器中的字节的地址是保存在寄存器对 H L中。H L寄存器是怎样得到 1 6位存储器地址的
呢?它可以通过多种方法来实现,或许是通过某种方法计算出来的。192
编码的奥秘
下载
总之,这两条指令
LDA
MOV
A,[aaaa]
B,[HL]
都把一个字节从存储器中装载到微处理器中,但它们用两种不同的方法来寻址存储器地
址。第一种方法叫作直接寻址方式,第二种方法叫作间接寻址方式。
第二批3 2条M O V指令表明用 H L寻址的存储器地址也可以作为目的操作数:
操作码 指令 操作码
6 0
6 1
6 2
6 3
6 4
6 5
6 6
6 7
6 8
6 9
6 A
6 B
6 C
6 D
6 E
6 F MOV H ,B
MOV H ,C
MOV H ,D
MOV H ,E
MOV H ,H
MOV H ,L
MOV H ,[ H L ]
MOV H ,A
MOV L ,B
MOV L ,C
MOV L ,D
MOV L ,E
MOV L ,H
MOV L ,L
MOV L ,[ H L ]
MOV L ,A 7 0
7 1
7 2
7 3
7 4
75
7 6
7 7
7 8
7 9
7 A
7 B
7 C
7 D
7 E
7 F
指令
MOV [HL],B
MOV [HL],C
MOV [HL],D
MOV [HL],E
MOV [HL],H
MOV [HL],L
H LT
MOV [HL],A
MOV A ,B
MOV A ,C
MOV A ,D
MOV A ,E
MOV A ,H
MOV A ,L
MOV A ,[ H L ]
MOV A ,A
其中一些指令如:
MOV
A,
A
做的是无用的事,而像:
MOV
[HL],[HL]
这样的指令是不存在的。和这条指令相对应的操作码实际上是停止指令。
观察这些M O V操作码更明显的方法是考察它的位模式, M O V操作码由8位组成:
01dddsss
其中字母ddd 代表指代目的操作数的 3位代码,s s s代表指代源操作数的3位代码。这3位代码是:
000= 寄存器 B
001= 寄存器 C
010= 寄存器 D
0 11= 寄存器 E
100= 寄存器 H
101= 寄存器 L
110= HL 中保存的存储器地址中的内容
111= 累加器A
例如,指令:
MOV
L , E
相应的操作码表示为 0 11 0 1 0 11,或6 B h。可以通过检查前面的表来验证。第19章 两种典型的微处理器
下载
193
因此可能在 8 0 8 0内部某个地方,标有 s s s的3位标识用在 8 - 1数据选择器中,标有 d d d的3位
标识用于控制3 - 8译码器,此译码器用来决定哪一个寄存器锁存了一个值。
也可能使用寄存器 B和C来构成一个 1 6位寄存器对 B C,用寄存器 D和E来构成一个 1 6位寄
存器对 D E。如果每一个寄存器对都包含用于装载或保存一个字节的存储器地址,则可以使用
下述指令:
操作码
操作码 指令
0 2 S TAX [BC] ,A
指令
0 A LDAX A ,[ B C ]
1 2 S TAX [DE] ,A 1 A LDAX A ,[ D E ]
另一种类型的传送指令叫做传送立即数,指定的助记符为 M V I。传送立即数指令占两个
字节,第一个是操作码,第二个是 1个字节的数据。此字节从存储器中传送到一个寄存器中或
由H L寻址的存储单元中。
操作码
06 MVI
0 E
16 MVI
1 E
26 MVI
2 E
3 6
3 E
指令
B,x x
MVI C ,x x
D,x x
MVI E ,x x
H,x x
MVI L ,x x
MVI [HL],x x
MVI A ,x x
例如,当指令:
MVI
E,37h
执行后,寄存器 E中包含有字节3 7 h。这就是第三种寻址方式,即立即数寻址方式。
3 2个操作码的集合完成四种基本算术运算,那是在第 1 7章开发处理器时我们就已熟悉的
运算,即加法( A D D)、进位加法( A D C)、减法( S U B)和借位减法( S B B)。所有情况中,
累加器是两个操作数之一,也是结果的目的地址。
操作码 指令 操作码 指令
SUB A ,B
8 0 ADD A ,B 9 0 8 1 ADD A ,C 9 1 SUB A ,C
8 2 ADD A ,D 9 2 SUB A ,D
8 3 ADD A ,E 9 3 SUB A ,E
8 4 ADD A ,H 9 4 SUB A ,H
8 5 ADD A ,L 9 5 SUB A ,L
8 6 ADD A ,[ H L ] 9 6 SUB A ,[ H L ]
8 7 ADD A ,A 9 7 SUB A ,A
8 8 ADC A ,B 9 8 SBB A ,B
8 9 ADC A ,C 9 9 SBB A ,C
8 A ADC A ,D 9 A SBB A ,D
8 B ADC A ,E 9 B SBB A ,E
8 C ADC A ,H 9 C SBB A ,H
8 D ADC A ,L 9 D SBB A ,L
8 E ADC A ,[ H L ] 9 E SBB A ,[ H L ]
8 F ADC A ,A 9 F SBB A ,A194
编码的奥秘
下载
假设A中是3 5 h ,寄存器B中是2 2 h ,当指令:
SUB
A,B
执行后,累加器中的结果为 1 3 h。
若A中的值为 3 5 h ,寄存器 H中的值为 1 0 h,L中的值为 7 C h,存储器地址 1 0 7 C h中的值为 4 A
h,则指令:
ADD A,[HL]
把累加器中的内容( 3 5 h )和通过寄存器对 H L寻址得到的值( 4 A h)相加,并把结果
(7 F h)保存到累加器中。
A D C和S B B指令允许8 0 8 0加/减1 6位、2 4位、3 2位和更多位的数。例如,假设寄存器对 B C
和D E都包含1 6位数,你想把它们相加,并把结果存到 B C中。下面是具体做法:
MOV A,C
ADD A,E
MOV C,A
MOV A,B
ADC A,D
MOV B,A
;低位字节
;高位字节
其中有两条加法指令, A D D指令用于低位字节相加, A D C指令用于高位字节相加。第一
条加法指令的进位位包含在第二条加法指令中。因为只能利用累加器进行加法运算,所以在
这么短的代码中也需要至少 4条M O V指令。许多 M O V指令常常出现在 8 0 8 0代码中。
该是谈论8 0 8 0标志位的时候了。在第1 7章的处理器中,已有进位标志位 C F和零标志位 Z F。
8 0 8 0还有3个标志位,即符号标志位 S F、奇偶标志位 P F和辅助进位标志位 A F。所有标志位都
保存在另一个叫作程序状态字( P S W:program status word)的8位寄存器中。像 L D A、S TA
和M O V这样的指令不影响标志位,而 A D D、S U B、A D C和S B B指令却要影响标志位,影响的
方式如下:
• 当运算结果最高位为 1时,符号标志位 S F为1,表示结果为负。
• 当结果为0时,零标志位Z F为1。
• 当运算结果中“ 1”的个数为偶数时,奇偶标志位 P F = 1;当运算结果中“ 1”的个数为
奇数时,奇偶标志位 P F = 0。P F有时用来粗略地检测错误,此标志位在 8 0 8 0程序中不常
用。
• 当A D D或A D C运算产生进位或 S U B与S B B运算不发生借位时,进位标志位 C F = 1。(这点
不同于第1 7章中的计算机进位标志的实现。)
• 当操作结果的低 4位向高 4位有进位时,辅助进位标志位 A F = 1。此标志位只用在 D A A
(十进制调整累加器)指令中。
有两条指令直接影响进位标志位 C F:
操作码
3 7
3 F
指令
S T C
C M C
含义
置C F为1
C F取反
作者: zzz19760225     时间: 2016-2-9 10:12
第1 7章中的计算机可执行 A D D、A D C、S U B和S B B指令(尽管没什么灵活性),但8 0 8 0还
可以进行逻辑运算 A N D(与)、O R(或)和X O R(异或)。算术运算和逻辑运算都可通过处理
器的算术逻辑单元( A L U)来执行:第19章 两种典型的微处理器
下载
操作码
指令
操作码
AND A ,B
AND A ,C
AND A ,D
AND A ,E
AND A ,H
AND A ,L
AND A ,[ H L ]
AND A ,A
XOR A ,B
XOR A ,C
XOR A ,D
XOR A ,E
XOR A ,H
XOR A ,L
XOR A ,[ H L ]
XOR A ,A
A 0
A 1
A 2
A 3
A 4
A 5
A 6
A 7
A 8
A 9
A A
A B
A C
A D
A E
A F
B 0
B 1
B 2
B 3
B 4
B 5
B 6
B 7
B 8
B 9
B A
B B
B C
B D
B E
B F
195
指令
OR A ,B
OR A,C
OR A ,D
OR A ,E
OR A,H
OR A,L
OR A,[ H L ]
OR A ,A
CMP A ,B
CMP A ,C
CMP A ,D
CMP A ,E
CMP A ,H
CMP A ,L
CMP A ,[ H L ]
CMP A ,A
A N D、X O R和O R指令按位运算,即逻辑操作只是单独地在对应位之间进行。例如:
MVI A,0Fh
MVI B,55h
AND A,Bh
累加器中的结果将为 0 5 h。如果第三条指令为 O R运算,则结果为 5 F h;如果第三条指令为
X O R运算,则结果为 5 A h。
C M P(比较)指令与 S U B 指令基本上一样,除了结果不保存在累加器中。换句话说,
C M P执行减法操作再把结果扔掉。这是为什么?是因为标志位。根据标志位的状态可知道所
比较的两数之间的关系。例如,当如下指令:
MVI B,25h
CMP A,
B
执行完时, A中的内容没有改变。然而,若 A中的值为 2 5 h,则Z F标志置位;若 A中的值
小于2 5 h,则CF = 1。
这8个算术逻辑运算也可以对立即数进行操作:
操作码 指令 操作码 指令
C 6
C E
D 6
D E ADI A ,x x
ACI A ,x x
SUI A,x x
SBI A ,x x E 6
E E
F 6
F E ANI A ,x x
XRI A ,x x
ORI A ,x x
CPI A ,x x
例如,上面列出的两条指令也可以用下面的指令来替换:
CPI
A,25h
下面是其他两条 8 0 8 0指令:
操作码
2 7
2 F
指令
D A A
C M A
C M A即complement accumulator,它对累加器中的值进行取反操作。每个 0变为1,每个1196
编码的奥秘
下载
变为0。如果累加器中的值为 0 11 0 0 1 0 1,C M A指令使它变为 1 0 0 11 0 1 0。也可以用下述指令来
使累加器按位取反:
XRI
A,FFh,
D A A即Decimal Adjust Accumulator,如前所述,它可能是 8 0 8 0中最复杂的一条指令。微
处理器中有一个完整的小部件专门用于执行这条指令。
D A A指令帮助程序员用 B C D码表示的数来进行十进制算术运算。在 B C D码中,每一小块
数据的范围在 0 0 0 0~1 0 0 1之间,对应于十进制的 0~9。利用B C D码格式,每 8位字节可存储两
个十进制数字。
假设累加器中的值为 B C D码的2 7 h。由于是 B C D码,则它实际上指的是十进制的 2 7。(十
六进制的2 7 h等于十进制的3 9。)再假定寄存器 B中的值为 B C D码的9 4 h。如果执行指令:
MOV A, 27 h
MOV B, 94 h
ADD A,
B
累加器中的值将为 BB h ,当然,它不是B C D码,因为B C D码中的每一块不能超过 9。但是,
现在执行指令:
DAA
则累加器中的值为 2 1 h,且CF = 1,这是因为 2 7和9 4的十进制和为 1 2 1。如果想进行 B C D
码的算术运算,这样做是相当方便的。
经常需要对一个数进行加 1或减1操作。在第 1 7章的乘法程序中,我们需要对一个数减 1,
使用的方法是加上 FFh ,它是 - 1的2的补码。 8 0 8 0中包含特殊的用于寄存器或存储单元的加 1
指令(称作增量)和减 1指令(称作减量):
操作码
指令
0 4
0 C
1 4
1 C
2 4
2 C
3 4
3 C
操作码
INR B
INR C
INR D
INR E
INR H
INR L
INR [HL]
INR A
指令
0 5
0 D
1 5
1 D
2 5
2 D
3 5
3 D
DCR B
DCR C
DCR D
DCR E
DCR H
DCR L
DCR [HL]
DCR A
单字节指令 I N R和D C R可影响除C F外的所有标志位。
8 0 8 0也包含4个循环移位指令,这些指令可使累加器中的内容左移或右移 1位:
操作码
0 7
0 F
1 7
1 F
指令
R L C
R R C
R A L
R A R
含义
累加器循环左移
累加器循环右移
累加器带进位循环左移
累加器带进位循环右移
这些指令只影响 C F。
假定累加器中的值为 A 7 h,即二进制的 1 0 1 0 0 111。R L C指令使A中的内容向左移位,最高
位(移出顶端)成为最低位(移进底端),同时决定进位标志位 C F的状态。其结果为 0 1 0 0 1111
且CF = 1。R R C指令用同样的方法向右移位。开始为 1 0 1 0 0 111,执行R R C指令后,其结果为第
19章 两种典型的微处理器
下载
197
11 0 1 0 0 11且CF = 1。
R A L和R A R指令有些不同。当向左移位时, R A L指令把C F移入累加器的最低位,而把最
高位移入 C F中。例如,如果累加器的内容为 1 0 1 0 0 111,CF = 0,R A L指令执行的结果是累加
器的内容变为 0 1 0 0 111 0,且CF = 1 。同样,在相同的初始条件下, R A R指令使累加器的内容
变为0 1 0 1 0 0 11,CF = 1。
对于乘2(左移1位)和除2(右移一位)操作,移位指令非常方便。
把微处理器寻址的存储器叫作随机访问存储器( R A M)是有原因的:微处理器可以简单
地根据提供的地址访问某一存储位置。 R A M就像一本书一样,我们可以打开它的任何一页。
它并不像做在微缩胶片上的一个星期的报纸,要找到周六版,需扫过大半周。同样,它也不
同于磁带,要播放磁带上的最后一首歌需快进整个一面。微缩胶片和磁带的存储不是随机访
问的,而是顺序访问的。
R A M确实效果不错,对于微处理器来说更是如此。但在使用存储器时有所差别是有好处
的,下面就是一种既非随机又非顺序访问的存储方式:假定你在一个办公室里,人们到你桌
前给你分配工作,每个工作都需要某种文件夹。通常你会发现你在继续某项工作之前,必须
使用另外一个文件夹先做一些相关的工作。因此你把第一个文件夹放在桌子上,又拿出第二
个文件夹放在它上面进行工作。现在又有一个人来让你做一个优先权高于前面工作的工作,
你拿来一个新文件夹放在那两个上面继续工作。而此项工作又需要另外一个文件夹,这样在
你的桌子上很快就摆了一堆文件夹了。
注意,这个堆非常明确地、有序地保存了你正在做的工作的轨迹。最上面的文件夹总是
最高优先权的工作,去掉这个以后,下一个肯定是你就要做的,如此类推。当你最终去掉了
桌子上的最后一个文件夹后(你开始的第 1项工作),你就可以回家了。
以这种方式工作的存储器技术叫做作堆栈( s t a c k)。从底向上压入堆栈,从顶向下弹出堆
栈,因此这也叫后进先出存储器,或 L I F O。最后放入堆栈中的数据最先被取出,最先放入堆
栈中的数据最后被取出。
计算机中也可以使用堆栈,不是用来保存工作而是用来存储数据,且已被证明使用起来
非常方便。向堆栈中放入数据叫作 p u s h(压入),从堆栈中取走数据叫作 p o p(弹出)。
假定你正在用汇编语言设计程序,程序中使用了寄存器 A、B和C。但在编程过程中,你
发现此程序需要去做另一件事 — 一个小的计算,其中也要使用寄存器 A,、B、C。而你最终
要回到先前的程序,并使用 A、B、C中原有的值。
当然,你能做的工作只是简单地把寄存器 A、B、C中的值保存到存储器中的不同位置,
以后再把这些位置的值装载到寄存器中,但这样做需要保存值被保存的位置。一个显然的方
法是把寄存器压入堆栈:
PUSH A
PUSH B
PUSH C
一会儿再解释这些指令的作用。现在,我们只需要知道它们以某种方式把寄存器的内容
保存在一个后进先出的存储器中。一旦这些语句执行了,你的程序就可以毫无顾虑地利用这
些寄存器来做其他工作。为了得到原来的值,只需简单地按与压入堆栈相反的顺序把它们从
堆栈中弹出即可,如下所示:198
POP C
POP B
POP A
编码的奥秘
下载
记住是后进先出。如果用错了 P O P语句的顺序,就会引起错误。
堆栈机制的一个好处在于一个程序的不同部分都可以使用堆栈而不会出现问题。例如,
在把A、B、C压入堆栈中后,程序的其他部分还可能需要把寄存器 C、D、E的内容压入堆栈:
PUSH C
PUSH D
PUSH E
接着,这一部分程序所要做的就是在第一部分弹出 C、B和A之前,用下述方法恢复寄存
器的值:
POP E
POP D
POP C
堆栈是怎样实现的呢?首先,堆栈只是不被别的东西使用的正常的 R A M的一部分。 8 0 8 0
微处理器包含一个特殊的 1 6位寄存器来对这一部分存储器进行寻址,这个 1 6位寄存器叫作堆
栈指针。
这里举的压入和弹出寄存器的例子对于 8 0 8 0来说不太准确。 8 0 8 0的P U S H指令实际上是存
储1 6位的值到堆栈, P O P指令用来恢复它们。因此 8 0 8 0不用像 PUSH C 和POP C 这样的指令,
它有下述8条指令:
操作码
C 5
D 5
E 5
F 5
指令
PUSH
PUSH
PUSH
PUSH
操作码
BC
DE
HL
PSW
C 1
D 1
E 1
F 1
指令
POP
POP
POP
POP
BC
DE
HL
PSW
PUSH BC指令把寄存器B和C的内容保存到堆栈中, POP BC指令恢复它们。最后一行的
缩写P S W指的是程序状态字,前面讲过,它是包含有标志位的 8位寄存器。最后一行的两条指
令实际上是把累加器和 P S W都压入和弹出堆栈。如果你想保存所有寄存器和标志位的内容,
可以使用:
PUSH PSW
PUSH BC
PUSH DE
PUSH HL
当以后想恢复这些寄存器的内容时,按相反的顺序使用 P O P指令:
POP HL
POP DE
POP BC
POP PSW
堆栈是怎样工作的呢?假设堆栈指针为 8 0 0 0 h,PUSH BC指令将引起下面这些情况发生:
• 堆栈指针减 1至7 F F F H
• 寄存器B的内容保存在堆栈指针所指的地址处,即 7 F F F h处第19章 两种典型的微处理器
下载
199
• 堆栈指针减 1至7 F F E H
• 寄存器C的内容保存在堆栈指针所指的地址处,即 7 F F E h处
当堆栈指针仍然为 7 F F E h时,POP BC指令执行,用来反向执行每一步:
• 从堆栈指针所指的地址(即 7 F F E h)处装载数据到寄存器 C中
• 堆栈指针增 1至7 F F F h
• 从堆栈指针所指的地址(即 7 F F F h)处装载数据到寄存器 B中
• 堆栈指针增 1至8 0 0 0 h
对每个 P U S H指令,堆栈都会增加 2个字节,这可能导致程序出现小毛病 — 堆栈可能会
变得很大以致会覆盖掉程序所需的一些代码和数据。这就是堆栈上溢问题。同样,过多的
P O P指令会过早用光堆栈内容,这就是堆栈下溢问题。
如果8 0 8 0同一个6 4 K B的存储器连接,你可能想把初始堆栈指针置为 0 0 0 0 h。第一条 P U S H
指令使地址减 1变为F F F F h,这时堆栈占用了存储器的最高地址。如果你的程序放在从 0 0 0 0 h
处开始的存储器区域,则它和堆栈离的就太远了。
对堆栈寄存器进行赋值的指令是 L X I,即load extended immediate(装载扩展的立即数)。

下面这些操作码后的指令也是把两个字节装载到 1 6位寄存器:
操作码
0 1
11
2 1 指令
LXI BC,x x x x
LXI DE,x x x x
LXI HL,x x x x
3 1 LXI SP,x x x x
指令:
LXI
BC,527Ah
等价于
MVI B,52
MVI C,7A h
L X I指令保存一个字节。另外,上表中最后一条 L X I指令用来对堆栈指针赋值。微处理器
复位后,这条指令并不常用来作为首先执行的指令之一:
0000 h:
LXI
SP,0000 h
也可以对寄存器对和堆栈指针执行加 1和减1操作,就好像它们是 1 6位寄存器一样:
操作码
0 3
1 3
2 3
3 3
指令
INX
INX
INX
INX
BC
DE
HL
SP
操作码
0 B
1 B
2 B
3 B
指令
DCX
DCX
DCX
DCX
BC
DE
HL
SP
即然是在讨论 1 6位指令,可以看看更多一些这样的指令。下面的指令是把 1 6位寄存器对
的内容加到寄存器对 H L中:
操作码 指令
0 9 DAD HL,B C
1 9 DAD HL,D E
2 9 DAD HL,H L
3 9 DAD HL,S P200
编码的奥秘
下载
上面这些指令可节约几个字节。例如,第一条指令正常需要 6个字节:
MOV
A,L
ADD A,C
MOV L,A
MOV A,H
ADC A,B
MOV H,A
D A D指令通常用于计算存储器地址,这条指令只影响 C F。
下一步让我们看以下各种指令。下面的两个操作码后都紧跟着一个 2字节地址,分别保存
和装载寄存器对 H L的内容:
操作码
指令 含义
2 h SHLD [aaaa],H L 直接保存H L
2 A h LHLD HL,[ a a a a ] 直接装载H L
寄存器L的内容保存在地址 a a a a处,寄存器 H的内容保存在地址 a a a a + 1处。
下面两条指令用来从寄存器对 H L中装载程序计数器 P C或堆栈指针 S P:
操作码
指令
含义
E 9 h PCHL PC,H L 把 H L中的内容装载到 P C
F 9 h SPHL SP,H L 把H L中的内容装载到 S P
P C H L指令实际上是一种转移指令, 8 0 8 0执行的下一条指令保存在 H L寄存器对中的地址
所对应的存储单元中。 S P H L是另外一个设置 S P的方法。
下面两条指令中,第一条指令使 H L的内容与堆栈中最上面的两个字节进行交换,第二条
指令使H L的内容与寄存器对 D E的内容进行交换:
操作码
指令
含义
E 3 h XTHL HL,[ S P ] H L与堆栈顶端的内容交换
E B h XCHG HL,D E DE 和H L交换
除了P C H L外,还没有讲过 8 0 8 0的转移指令。前面第 1 7章中讲过,处理器中有一个叫作程
序计数器 P C的寄存器, P C中包含处理器取回并执行的指令的存储器地址。通常 P C使处理器顺
序执行存储器中的指令,但有些指令 — 通常命名为 J u m p(转移)、B r a n c h(分支)或 g o t o
(跳转) — 能使处理器偏离这个固定的过程。这些指令使得 P C装载另外的值,处理器所取的
下一条指令将在存储器的其他位置。
尽管简单、普通的转移指令很有用,但条件转移指令更有用。这些指令可使处理器根据
某些标志,如 C F或Z F,来转移到另外的地址处。条件转移指令的存在使得第 1 7章中的自动加
法机成为一般意义上的数字计算机。
8 0 8 0有5个标志位,其中 4个对条件转移指令有用处。 8 0 8 0支持9种不同的转移指令,包括
无条件转移指令和基于 Z F、C F、P F、S F是1还是0的条件转移指令。
在介绍这些指令之前,先介绍一下与此相关的另外两种指令。第一个是 C a l l(调用)指令。
C a l l指令与 J u m p指令的不同之处在于:前者把一个新值装入到程序计数器 P C中,处理器保存
P C中原来的地址,保存在哪里?当然,在堆栈中。
这种策略意味着 C a l l指令可有效地保存“程序从哪里跳转”的标记。处理器最终可利用此第19章 两种典型的微处理器
下载
201
地址返回到原来的位置。这个返回指令叫 R e t u r n。R e t u r n指令从堆栈中弹出两个字节,并把该
值装载到P C中。
C a l l和R e t u r n指令是任何处理器中都很重要的功能。它们允许程序员编写子程序,子程序
是程序中经常用到的代码段。(“经常”一般意味着“不止一次”。)子程序是汇编语言中的基
本组成部分。
让我们看一个例子。假设你正在编写一个汇编语言程序,并且需要使两个数相乘,因此
你可以写出一段代码来做这项工作,然后继续往下编写程序,现在又需要使两个数相乘。因
为你已知道如何进行两数相乘,因此你只需简单地重复使用同样的指令来完成它。但只是简
单地两次把这些指令输入到存储器吗?希望不是,这是对时间和存储空间的浪费,更好的方
法是转送到原来的代码处。由于无法返回到程序的当前位置,所以一般的 J u m p指令不能用。
但使用C a l l和R e t u r n指令可以让你完成所需的功能。
进行两数相乘的一组指令可以作为一个子程序。下面就是这样的子程序。在第
1 7章中,
被乘数(和结果)存放在存储器的某一地址中;而在 8 0 8 0子程序中,寄存器 B的值和寄存器 C
中的值相乘,然后把 1 6位乘积装入寄存器 H L中:
Multiply:
PUSH PSW
PUSH BC
SUB H,H
SUB L,L
MOV A,B
CPI A,00h
JZ AllDone
;保存要改变的寄存器
;设置HL(结果)为0000h
;乘数送到A
;如果为0,结束
MVI B,00h ;BC的高字节置0
Multloop: DAD
DEC
JNZ HL,BC
A
Multloop ;BC 加到HL
;乘数减1
;不为0,转移
AllDone: POP
POP
RET BC
PSW ;恢复保存的寄存器
;返回
注意,上述子程序的第 1行开始有一个标号 M u l t i p l y。当然,这个标号对应于子程序所在
的存储器地址。子程序开始用了两个 P U S H指令,通常在子程序开始处应先保存(以后恢复)
它需要使用的寄存器。
然后该子程序把 H和L寄存器置为 0。虽然可以使用 M V I指令而不用 S U B指令,但那需要使
用4个字节的指令而不是2个字节的指令。子程序执行完后,寄存器对 H L中保存有相乘的结果。
下一步该子程序把寄存器 B的内容(乘数)移入 A中,并且检查它是否为 0。如果它为 0,
乘法子程序到此结束,因为结果为 0。由于寄存器 H和L已经为0,因而子程序可以只使用 J Z指
令跳转到末端的两个 P O P指令处。
否则,子程序把寄存器 B置为0。现在,寄存器对 B C中包含一个 1 6位的被乘数, A中为乘
数。D A D指令把B C(被乘数)加到 H L(结果)中。 A中的乘数减 1,且只要它不为 0,J N Z指
令就又使 B C加到 H L中。此小循环继续下去,直到 B C加到 H L中的次数等于乘数。(可以用
8 0 8 0的移位指令编写一个更有效的乘法子程序。)202
编码的奥秘
下载
利用这个子程序完成 2 5 h与1 2 h相乘的程序用下面的代码:
MOV B,
MOV C,
CALL
25h
12h
Multiply
C a l l指令把P C的值保存在堆栈中,该值是 C a l l指令的下一条指令的地址。然后, C a l l指令
使程序转移到标号 M u l t i p l y所标识的指令,即子程序的开始。当子程序计算完结果后,执行
R E T(返回)指令,即从堆栈中弹出程序计数器的值,程序继续执行 C a l l指令后面的语句。
8 0 8 0指令集中包括条件 C A L L指令和条件 R e t u r n指令,但它们远不如条件转移指令用得多。
下表中完整地列出了这些指令:
条件
操作码
指令
操作码
指令
操作码
指令
你可能知道,存储器并不是唯一连接在微处理器上的设备。一个计算机系统通常需要输
入输出设备以便于实现人机通信。输入输出设备通常包括键盘和显示器。
微处理器是怎样与外围设备 (对于连接到微处理器而不是存储器的东西的称呼 )进行通信的
呢?外围设备具有与存储器相似的接口,微处理器可通过对应于外设的具体地址来对外设进
行读写。在有些微处理器中,外围设备实际上占用了通常用来寻址存储器的地址,这种配置
叫作内存映像 I / O。然而在 8 0 8 0中,在 65 536 个正常地址外还有 2 5 6个附加地址专门为输入输
出设备预留,这些就是 I / O端口(I/O Port)。I / O地址信号为 A 0 ~A 7 ,但I / O访问与存储器访问
不同,由8 2 2 8系统控制芯片锁存的信号来区分。
O U T指令用于把累加器中的数据写到紧跟该指令的字节所寻址的 I / O端口中。 I N指令把端
口的数据读入到累加器中。
操作码 指令
D 3 OUT PP
D B IN
PP
外围设备有时需要引起微处理器的注意。例如,当你在键盘上按键时,如果微处理器能
马上知道这件事通常是有帮助的。这由称作 中断 (i n t e r r u p t)的机制来完成,这是连接至第19章 两种典型的微处理器
下载
203
8 0 8 0 I N T输入端的,由外设产生的信号。
然而,当8 0 8 0复位时,它不能对中断产生响应。程序必须通过执行 E I(Enable interrupts)
指令来允许中断,通过执行 D I(Disable Interrupts)指令来禁止中断。
操作码 指令
F 3
F B D I
E I
8 0 8 0的I N T E输出端信号表明允许中断。当外设需要中断微处理器当前工作时,它把 8 0 8 0
的I N T输入端设置为 1。8 0 8 0通过从存储器中取出指令对它作出响应,但控制信号表明有中断
发生。外设通常通过提供下述指令之一来响应 8 0 8 0:
操作码
C 7
C F
C 7
D F
指令
RST
RST
RST
RST
操作码
0
1
2
3
E 7
E F
E 7
F F
指令
RST
RST
RST
RST
4
5
6
7
以上称作 R e s t a r t指令,它们与 C A L L指令相似,也需要把当前程序计数器的值压入堆栈。
但R e s t a r t指令随后转移到一个特定的位置: RST 0 转移到地址 0000h 处, RST 1 转移到地址
0 0 0 8 h处等等,直到 RST 7转移到地址 0 0 3 8 h处。位于这些地址中的代码段来处理中断。例如,
来自键盘的中断引起 RST 4指令执行,地址 0 0 2 0 h处的一些代码从键盘读取数据(这将在第 2 1
章做全面介绍)。
到此为止,已讲述了 2 4 3个操作码。下述 1 2个字节与任何操作码无关: 0 8 h、1 0 h、1 8 h、
2 0 h、2 8 h、3 0 h、3 8 h、C B h、D 9 h、D D h、E D h和F D h。这样总共有 2 5 5个操作码。下面还要
提到一个操作码:
操作码
0 0
指令
N O P
N O P代表 no op,即no operation (无操作)。N O P指令使微处理器什么都不做。这有什
么作用吗?用于填空。 8 0 8 0通常可以执行一批 N O P指令而不会有任何坏情况发生。
以下不打算再详细讨论 Motorola 6800 ,因为它的设计与功能与 8 0 8 0非常相似。下面是
6 8 0 0的4 0个管脚:204
编码的奥秘
下载
V S S 代表接地, V C C 是5 V电源。与 8 0 8 0相似, 6 8 0 0有1 6个地址输出信号和既可作为输入又
-
-
可作为输出的 8个数据信号。它有 R E S E T信号和R / W信号。 I R Q信号代表中断请求 。6 8 0 0的
时钟信号比8 0 8 0的更加简单。 6 8 0 0没有I / O端口的概念,所有输入输出设备都必须是 6 8 0 0存储
器地址空间的一部分。
6 8 0 0有一个1 6位程序计数器 P C、一个1 6位堆栈指针 S P、一个8位状态寄存器(作为标志)
以及两个 8位累加器 A和B。它们都被看成是累加器( B不是只作为一个寄存器)是因为没有能
用A来做而不能用B来做的事。 6 8 0 0没有附加的 8位寄存器。
6 8 0 0中有一个 1 6位索引寄存器( index register),可用来保存一个 1 6位地址,很像 8 0 8 0中
的寄存器对 H L。对于许多指令来说,它们的地址都可以由索引寄存器和紧跟在操作码后的地
址之和得到。
虽然 6 8 0 0和8 0 8 0所实现的操作相同 — 装载、保存、加法、减法、移位、转移、调用,
但很明显的区别是:它们的操作码和助记符完全不同。例如,下面是 6 8 0 0的分支转移指令:
操作码 指令
2 0 h
2 2 h
2 3 h
2 4 h
2 5 h
2 6 h
2 7 h
2 8 h
2 9 h
2 A h
2 B h
2 C h
2 D h
2 E h
2 F h B R A
B H I
B L S
B C C
B C S
B N E
B E Q
B V C
B V S
B P L
B M I
B G E
B LT
B G T
B L E
含义
转移
大于则转移
小于或相同则转移
进位为0则转移
进位置1则转移
不等则转移
相等则转移
溢出为0则转移
溢出置1则转移
为正则转移
为负则转移
大于或等于 0则转移
小于0则转移
大于0则转移
小于或等于 0则转移
6 8 0 0没有像 8 0 8 0中那样的奇偶标志位 P F,但它有一个 8 0 8 0中没有的标志位 — 溢出标志
位(overflow flag)。上述转移指令中有些依赖于标志位的组合。
当然8 0 8 0和6 8 0 0指令集是不同的,这两个芯片是同一时间由不同的两个公司的两组不同
的工程师设计的。这种不兼容性意味着每一种芯片不能执行对方的机器代码,为一种芯片开
发的汇编语言程序也不能翻译成可在另一种芯片上执行的操作码。编写可在多于一种处理器
上执行的计算机程序是第 2 4章的主题。
8 0 8 0和6 8 0 0还有一个有趣的不同点:在两种微处理器中, L D A指令都是从一个特定的地
址处装载到累加器。例如,在 8 0 8 0中,下列字节序列:
8080LDA指令第19章 两种典型的微处理器
下载
205
将把存储在地址 3 4 7 B h处的字节装载到累加器。现在把上述指令与 6 8 0 0的L D A指令相比
较,后者采用称作 6 8 0 0的扩展地址模式:
6800LDA指令
该字节序列把存储在地址 7B34h 处的字节装载到累加器 A中。
这种不同点是很微妙的。当然,你也可能认为它们的操作码不同:对 8 0 8 0来说是3 A h,对
6 8 0 0来说是 B 6 h。但主要是这两种微处理器处理紧随操作码后的地址是不同的, 8 0 8 0认为低
位在前,高位在后; 6 8 0 0则认为高位在前,低位在后。
这种 I n t e l和M o t o r o l a微处理器保存多字节数时的根本不同从没有得到解决。直到现在,
I n t e l微处理器在保存多字节数时,仍是最低有效字节在前(即在最低存储地址处);而
M o t o r o l a微处理器在保存多字节数时,仍是最高有效字节在前。
这两种方法分别叫作 l i t t l e - e n d i a n ( I n t e l方式)和big-endian (Motorola方式)。辩论这两种方
式的优劣可能是很有趣的,不过在此之前,要知道术语 b i g - e n d i a n来自于 Jonathan Swift 的
《G u l l i v e r’s Tr a v e l s》,指的是 Lilliput 和B l e f u s c u在每次吃鸡蛋前都要互相碰一下。这种辩论
可能是无目的的。先不说哪种方法在本质上说是不是正确的,但这种差别的确当在基于 l i t t l e -
endian 和b i g - e n d i a n机器的系统之间共享信息时会带来附加的兼容性问题。
这两种微处理器后来怎样了呢? 8 0 8 0用在一些人所谓的第一台个人计算机上,不过可能
更准确的说法是第一台家用计算机上。下图是 Altair 8800 ,出现在 1 9 7 5年1月份的《 P o p u l a r
E l e c t r o n i c s》杂志的封面上。
当你看到 Altair 8800 时,前面面板上的灯泡和开关看起来似乎很熟悉。这和第 1 6章为
64KB RAM阵列建议的初始“控制面板”的界面是同一类型的。
8 0 8 0之后出现了 Intel 8085,更具意义的是出现了 Z i l o g制造的 Z - 8 0芯片。 Z i l o g是Intel 公
司的竞争对手,是由 I n t e l公司的前雇员,也曾在 4 0 0 4芯片上做出重要贡献的 Federico Faggin206
编码的奥秘
下载
建立的。 Z - 8 0与8 0 8 0完全兼容,且增加了许多很有用的指令。 1 9 7 7年,Z - 8 0用于Radio Shack
TRS-80 Model1上。
也是在1 9 7 7年,由Steven Jobs 和Stephen Wo z n i a k建立的苹果计算机公司推出了 APPLE II。
APPLE II 既不用 8 0 8 0也不用 6 8 0 0,而是使用了采用 M O S技术的更便宜的 6 5 0 2芯片,它是对
6 8 0 0的增强。
1 9 7 8年6月,I n t e l公司推出了 8 0 8 6,一个 1 6位微处理器,它可访问的存储空间达到 1 M B。
8 0 8 6的操作码与 8 0 8 0不兼容,但它包含乘法和除法指令。一年后, I n t e l公司又推出了 8 0 8 8,
其内部结构与 8 0 8 6相同,但其外部按字节访问存储器,因此该微处理器可使用较流行的为
8 0 8 0设计的8位支持芯片。I B M在其5 1 5 0个人计算机 — 通常叫作IBM PC — 上使用了8 0 8 8芯
片,这种个人计算机在 1 9 8 1年秋季推出。
I B M进军P C市场产生了巨大影响,许多公司都发布了与 P C兼容的机器(兼容的含义在随
后各章里将要详细讨论)。多年来,“IBM PC兼容机”也暗指“Intel inside”,特指所谓x 8 6家
族的I n t e l微处理器。Intel x86家族继续发展,1 9 8 5年出现了3 2位的3 8 6芯片,1 9 8 9年出现了4 8 6
芯片。1 9 9 3年初,出现了 Intel Pentium微处理器,普遍地用在 P C兼容机上。虽然这些 I n t e l微处
理器都不断增加了指令的指令集,但它们仍然支持从 8 0 8 6开始的所有以前处理器的操作码。
苹果公司的 Macintosh 首次发布于 1 9 8 4年,它使用了Motorola 68000 — 一个1 6位的微处
理器,也即 6 8 0 0的下一代处理器。 6 8 0 0 0和它的后代(常称为 6 8 K系列)是制造出的最受欢迎
的一类微处理器。
从1 9 9 4年开始, M a c i n t o s h计算机开始使用 Power PC, 一种由M o t o r o l a、I B M和A p p l e公司
联合开发的微处理器。 P o w e r P C是由一种称作 R I S C(精简指令集计算机)的微处理器体系结
构来设计的,它试图通过简化某些方面以提高处理器的速度。在 R I S C计算机中,每条指令通
常长度相同,(在P o w e r P C中为3 2位),存储器访问只限于装载和保存指令,且指令做简单操
作而不是复杂操作。 RISC 处理器通常有大量的寄存器以避免频繁访问存储器。
因为P o w e r P C具有完全不同的指令集,所以它不能执行 6 8 K的代码。但现在用于 A P P L E
M a c i n t o s h的 PowerPC 微处理器可仿真 6 8 K。运行于PowerPC 上的仿真程序逐个检验 6 8 K程序
的每一个操作码,并执行适当的操作。仿真程序不如 P o w e r P C自身代码那样快,但可以工作。
按照摩尔定律,微处理器中的晶体管数量应该每 1 8个月翻一番。这些多增加的晶体管有
什么用处呢?
有些晶体管用于增加处理器的数据宽度,从 4位到8位到1 6位再到3 2位;另外一些增加的晶
体管用于处理新的指令。现在大多数微处理器都有用于浮点算术运算的指令(这将在第 2 3章解
释);还有一些新增加的指令用来进行一些重复计算,以便在计算机屏幕上显示图片和电影。
现代处理器使用了一些技术用来提高速度,其中之一是流水线技术,处理器在执行一条
指令的同时读取下一条指令。由于转移指令会改变执行流程,实际上这样达不到预期效果。
现在的处理器还包含一个 Cache( 高速缓冲存储器 ),它是做在处理器内部的快速 R A M阵列,
用于保存最近执行的指令。因为计算机程序经常执行一些小的指令循环,因而 C a c h e可以避免
这些指令重复装载。所有这些速度提升措施都需要在处理器中有更多的逻辑器件和晶体管。
如前所述,微处理器只是完整的计算机系统的一部分(尽管是最重要的部分)。我们将在第2 1章构造这样一个系统,但首先必须学习怎样编码存在存储器中的除了操作码和数字外的
其他东西。我们必须返回到小学一年级,再学习一下怎样读写文本。下载
作者: zzz19760225     时间: 2016-2-9 10:18
第20章 ASCII码和字符映射
数字计算机存储器按位存储,所以,需要在计算机上处理的信息必须按位的形式存储。
我们已经知道如何用位来表示数和机器码,下一个问题是如何用它来表示文本。毕境世界上
大量堆积的信息是文本形式的,就像装满图书馆的书、杂志和报纸。尽管我们最终要用计算
机来存放声音、图像和电影信息,但我们还是以较容易的文本存放开始。
为了以数字形式表示文本,必须开发一些系统使得系统里的每一个字母有唯一的编码。
文本中也存在数字和标点符号,所以也必须有它们的编码。简单地说,所有的字母、数字和
符号都要编码,这样的系统叫作字符编码集,每一个编码叫作字符编码。
第一个问题是:这些编码需要多少位?这并不是容易回答的问题。
当考虑用位表示文本的时候,需要切合实际。我们习惯于看到书中、报刊、杂志上精美
的文本格式,段落按照相同的间隔整齐地分成一行一行,但这些并不是文本的本质。当我们
在杂志上看到一个小故事,几年后在一本书中又看到同样故事的时候,我们不会因为书中文
本间距的不同而认为是不同的故事。
换句话说,不要以这种印刷成行列的二维格式来看待文本,应该把文本看成是一维的字
母、数字和标点符号流,此外,也许还有额外的编码用来表示一段的结束和另一段的开始。
再来看看,如果在杂志上看到一个故事,后来又在书中看到同样的故事但字样有些不同,
这是一个大问题吗?如果杂志上的写法为
Call me Ishmael
而书中的写法为
Call me Ishmael
这些差别难道是我们真正关心的吗?恐怕不是。印刷样式是微妙地影响了文本的观感,但故
事本身并没有因为样式的改变而不同。样式可以经常修改,但不会带来什么影响。
接下来另外一个简化问题的方法是:用平版的文本。没有斜体,没有粗体,没有下划线,
没有颜色,没有空心体,没有上下标,没有音调标记,没有 Å、 é 、 n  ̃ 、  ̇ o  ̇ 等符号,只有
9 9 %英语文本里纯粹的拉丁字母。
在对摩尔斯电码和布莱叶盲文的早期研究中,可以看到如何将字母字符表示成二进制的形
式。尽管这些系统在特定的场合应用地很好,但用到计算机里都有一些问题。例如:摩尔斯电
码是宽度可变的编码:对常用的字符采用短编码,对不常用的字符采用长编码。这样的编码系
统适用于电报,但对计算机来说却不合适。另外,摩尔斯电码对字母的大小写没有区分。
布莱叶盲文是宽度固定的编码,很适合计算机。每一个字符由 6位表示,也可以区分大小
写,尽管它是用特殊的 e s c a p e码来区分的,该代码表明下一个字符为大写。这也就是说,每个
首部字符需要两个代码而不是一个。数字用 s h i f t码表示,在这个特定的代码后紧跟的代码被
看作表示数字,直到又一个 s h i f t码将其转换到字符状态。
我们的目标是开发一个字符编码集,使得像如下的句子
I have 27 sisters。208
编码的奥秘
下载
可以用一串代码来表示,每一个代码具有一定的位数。一些代码用来表示字母,一些表示标
点符号,一些表示数字。甚至有代码来表示字间的空格。上面的句子中有 1 8个字符(包括字
间空格),这样一个句子的连续字符代码常称作文本串。
在文本串里,用代码来表示数字 (如2 7 )似乎很奇怪,因为前面许多章里已讲过用位来表示
数字。我们可能会用简单的二进制数 1 0和111作为该句中 2和7的代码,但用在这里是不合适的。
该句中,字符 2和7可像英文作品中出现的任何一种字符一样来看待 ,它们可能具有与它们的实
际值毫不相干的字符代码。
也许最经济的字符编码是 5位编码,它首先用于 1 8 7 4年的电报机,是由法国电报服务公司
职员Emile Baudot 发明的。他的编码 1 8 7 7年被服务公司采纳,后来由 Donald Murray修改并在
1 9 3 1年被 C C I T T,即现在的国际电联 (ITU) 标准化。该编码的正式名称是国际电报字母表
N O . 2或I TA - 2,在美国通常称为 B a u d o t,尽管更科学的叫法为 M u r r a y编码。
在2 0世纪, B a u d o t经常用于电传打字机。 B a u d o t电传打字机有一个键盘,除了只有 3 0个
键和一个间隔棒外,有些像打字机。电传打字机的键实际上是转换器,它产生二进制代码并
且通过电传打字机的输出电缆一位紧接一位地传送出去。电传打字机也有打印机制,从电传
打字机的输入电缆输入的代码触发电磁铁在纸上打印出字符 。
由于B a u d o t是5位编码,所以总共只有3 2个代码,这些代码的十六进制值范围从 0 0 h~1 F h。
下表是3 2个 代码所对应的字母表中的字符 :
十六进制码
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 A
0 B
0 C
0 D
0 E
0 F
B a u d e t字符
T
C a rriage Return(回车)
O
S p a c e(空格)
H
N
M
Line Feed(换行)
L
R
G
I
P
C
V
十六进制码
1 0
11
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 A
1 B
1 C
1 D
1 E
1 F
B a u d e t字符
E
Z
D
B
S
Y
F
X
A
W
J
F i g u re Shift(数字转义)
U
Q
K
Letter Shift(字符转义)
代码0 0 h没有指定。其余的 3 1个代码中, 2 6个指定给字母表中的字符, 5个用斜体字或短
语表示出来了。
代码0 4 h是空格代码,用来分隔不同的字;代码 0 2 h和0 8 h表示回车和换行。这些术语来自
于电传打字机。当在电传打字机上打字并且到了一行的末尾时,按下一个杠杆或按钮来完成
两件事情。第一,使打印头回到开始处,以便从纸的左边开始打印下一行,这是回车。第二,
移动打印头紧接至刚完成的那一行的下一行,这是换行。在 B a u d o t中,独立的键产生这两个
代码。打印的时候, B a u d o t电传打字机响应这两个代码,完成相应动作。
在B a u d o t系统里,如何表示数字和标点符号呢?这就是代码 1 B h的作用,在表中标识为数
字转义。在数字转义代码之后,所有的代码序列被看作是数字或标点符号,直到遇到字符转第20章 ASCII码和字符映射
下载
209
义代码( 1 F h )再返回到字符状态。下表是数字和标点符号的代码。
十六进制码
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 A
0 B
0 C
0 D
0 E
0 F
十六进制码
B a u d o t字符
5
C a rriage Return
9
S p a c e
#
,

Line Feed
)
4
&
8
0
:
=
1 0
11
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 A
1 B
1 C
1 D
1 E
1 F
B a u d o t字符
3
+
Who Are Yo u ?
?

6
$
/
-
2
Bel (响铃)
F i g u re Shift
7
1
(
Letter Shift
实际上, I T U没有定义代码 0 5 h、0 B h和1 6 h,而是保留为“国家使用”,这个表里列出的
是美国的用法。这些代码在某些欧洲国家语言中用作重音符号。响铃代码用来敲响电传打字
机上能听见的铃声;“ Who Are Yo u”代码激活一种机制,用它电传打字机能识别自己。
像摩尔斯电码一样,这 5位编码不能区别大、小写。语句
I SPENT $25 TODAY.
由下面的十六进制数据流来表示:
0C 04 14 0D 10 06 01 04 1B 16 19 01 1F 04 01 03 12 18 15 1B 07 02 08
注意三个转义代码 : 1 B h在数字的前面, 1 F h在数字的后面,最后一部分之前又有 1Bh。该
行代码用回车、换行代码来结束。
然而,如果一行两次传送该数据流到电传打印机,将会出现以下情形:
I SPENT $25 TODAY.
8‘03,5 $25 TODAY.
这是怎么回事?打印机接收到的上一行的最后一个转义代码是数字代码,所以第二行开
始的代码被解释成数字。
类似这样的问题是采用转义代码所产生的典型的令人烦恼的结果。尽管 B a u d o t是很经济
的编码,但人们可能更想采用能唯一表示字符或标点符号且对大、小写进行区分的代码。
如果想确定比 B a u d o t更好的编码系统需要多少位,只需把各种符号加起来:大小写字母
需5 2个代码,0~9数字需1 0个代码,这已经有 6 2个,加上一些标点符号,则超过了 6 4个代码,
这意味着需要多于 6位的编码。但是距离 1 2 8个字符数,似乎还有足够的余地。如果超过 1 2 8个
字符,则需要8位编码。
所以答案应该是7。如果不用转换代码来区分大、小写,那么英文里应该用7位来表示字符。
这些字符编码都是什么呢?当然,我们可以随心所欲地编码。如果打算自己制造计算机
且计算机的每一个硬件都由自己制造,自己编程且不把自己所造的计算机去与任何其他计算
机连接,则可以构造自己的编码,所要做的就是给每一个字符一个唯一的编码。
但是因为很少有独立制造和使用计算机这种情形发生,所以通常是大家遵循并使用同一210
编码的奥秘
下载
编码。这样制造出来的计算机就可以与其他计算机兼容,并且可以交换文本信息。
我们可能也不应该随意编码,例如,当在计算机上处理文本时,如果字母表上的字符是按
顺序进行编码的,则会带来很多好处,其码这样的顺序使得按字母排序和分类更容易一些。
幸运的是,我们已经有了这样一个标准,即美国信息交换标准代码,简写为 A S C I I码。它
1 9 6 7年正式公布,此后一直是计算机工业界最为重要的标准。除了一个大的例外(在后面讲
到),可以肯定的是,无论什么时候处理文本,总会以某种方式涉及到 A S C I I码。
A S C I I码是7位编码,用二进制代码 0 0 0 0 0 0 0~1111111 ,即十六进制代码 0 0 h~7 F h来表示。
让我们来看 A S C I I码,但不要从最开始看,因为前 3 2个代码比其余代码理解起来要困难一些。
从第二批的 3 2个代码开始讲起,它包括标点符号和 1 0个数字。下表列出了它们的十六进制代
码及对应的字符:
十六进制码 A S C I I字符 十六进制码
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 A
2 B
2 C
2 D
2 E
2 F s p a c e
!

#
$
%
&

(
)
*
+
,
-
.
/ 3 0
3 1
3 2
3 3
3 4
3 5
3 6
3 7
3 8
3 9
3 A
3 B
3 C
3 D
3 E
3 F
A S C I I字符
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
注意2 0 h是空格符,用来分隔单词和句子。
接下来的 3 2个代码包括大写字母和一些附加的标点符号。除 @符号和下划线之外,这些
符号在打字机上不经常出现,它们出现在标准的计算机键盘上:
十六进制码
4 0
4 1
4 2
4 3
4 4
4 5
4 6
4 7
4 8
4 9
4 A
4 B
4 C
4 D
4 E
4 F
A S C I I字符
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
十六进制码 A S C I I字符
5 0
5 1
5 2
5 3
5 4
5 5
5 6
5 7
5 8
5 9
5 A
5 B
5 C
5 D
5 E
5 F P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
-第20章 ASCII码和字符映射
下载
211
接下来的3 2个字符包括所有小写字母和一些附加的标点符号,也是在打字机上不常出现的:
十六进制码
A S C I I字符
6 0
6 1
6 2
6 3
6 4
6 5
6 6
6 7
6 8
6 9
6 A
6 B
6 C
6 D
6 E
6 F
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
十六进制码
7 0
7 1
7 2
7 3
7 4
7 5
7 6
7 7
7 8
7 9
7 A
7 B
7 C
7 D
7 E
A S C I I字符
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
注意该表中少了与 7 F h对应的最后一个字符。如果你一直在统计,这三个表总共列出了 9 5
个字符。因为A S C I I码是7位编码,可以有 1 2 8个代码,所以还有 3 3个代码可用。下面简单地讲
一下这些代码。
文本串:
Hello,you!
可以表示成 A S C I I码的十六进制形式
48 65 6C 6C 6F 2C 20 79 6F 75 21
注意除了字母代码以外,还有逗号(代码 2 C)、空格(代码 2 0)和感叹号(代码 2 1)。下
面是另一短句:
I am 12 years old.
用A S C I I码表示为:
49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E
注意句中数字 1 2表示成十六进制数 3 1 h和3 2 h,分别是数字 1和2的A S C I I码。当数字 1 2作为文
本流的一部分时,它不应该被表示成十六进制码 0 1 h和0 2 h,或者B C D码1 2 h,或者十六进制代
码0 C h。这些代码在A S C I I码里都表示的是其他意思。
ASCII码表示的大写字母与其对应的小写字母的ASCII码值相差20h,这使得编写某些程序代
码更为容易,如:把一个字符串变成大写。假设在内存的某个区域存放有字符串,一个字节放
一个字符。下面的8080子程序假设字符串的首地址存放在寄存器HL中;寄存器C存放有字符串
的长度,即字符串中的字符个数:
Capitalize: MOV A,C
;C=number of characters left(C为余下的字符数)
CPI A,00h ;Compare with 0(与0比较)
JZ ;If C is 0, we’re finished(如果C为0,则结束)
AllDone
MOV A ,[HL] ;Get the next character(取下一个字符)
CPI A,61h ;Check if it’s less than 'a'(判断是否小于'a')212
SkipIt:
AllDone:
编码的奥秘
下载
JC SkipIt ;If so,ignore it(如果是,则跳过)
CPI A,7Bh
JNC SkipIt ;Check if its greater than 'z'(判断是否大于'z')
;If so ,ignore it(如果是,则跳过)
SBI A,20h
MOV [HL],A ;It’s lowercase,so subtract 20h(是小写,则减20h)
;Store the character(保存字符)
INX HL
;Increment the text address(字符地址加1)
DCR C
;Decrement the counter(计数器减1)
JMP Capitalize ;Go back to the top(返回到程序开始处)
RET
从小写字母减去 2 0 h转换成大写字母的语句可以用下面的语句代替:
ANI A,DFh
A N I指令是一个“与”立即数的操作,它把累加器中的数值与 D F h(即二进制数11 0 11111)
执行按位“与”操作,即把两个数的对应位进行“与”操作“与”操作保留 A中的所有位,除
了从左边数第3位被置成0。把这个位设置为0也即把A S C I I码表示的小写字母转换成大写字母。
上面列出的 9 5个代码也称作图形字符,因为它们可以显示出来。 A S C I I码还包括3 3个控制
字符,它们不能显示出来但表示执行某一特定功能。鉴于完整性,这里列出了 3 3个控制字符,
即使它们很难理解也不要担心。在 A S C I I码公布以后,更多地是想把它们用在电传打字机上,
现在许多代码已经很少见到了。
十六进制码
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 A
0 B
0 C
0 D
0 E
0 F
1 0
11
1 2
1 3
1 4
1 5
1 6
1 7
缩写词
N U L
S O H
S T X
E T X
E O T
E N Q
A C K
B E L
B S
H T
L F
V T
F F
C R
S O
S I
D L E
D C 1
D C 2
D C 3
D C 4
N A K
S Y N
E T B
控制字符名称

标题开始
文本开始
文本结束
传输结束
询问
应答
响铃
退格
水平制表
换行
垂直制表
换页
回车
移出
移入
转义
设备控制 1
设备控制 2
设备控制 3
设备控制 4
否定应答
同步
传输块结束第20章 ASCII码和字符映射
下载
213
(续)
十六进制码 缩写词
1 8
1 9
1 A
1 B
1 C
1 D
1 E
1 F
7 F C A N
E M
S U B
E S C
F S
G S
R S
U S
D E L
控制字符名称
作废
载体结束
替代字符
扩展
文件分隔或信息分隔 4
组分隔或信息分隔 3
记录分隔或信息分隔 2
单元分隔或信息分隔 1
删除
控制字符可以与图形字符混合使用来设置一些基本的文本格式。这很容易理解,想像一
下诸如电传打字机或简单打印机之类的设备,它们对 A S C I I码流作出的响应是在纸上打印出字
符。设备的打印头通过打印一个字符并向右移动一格来对 A S C I I码作出响应。上面这些很重要
的控制字符就用来改变这种通常的动作。
例如:看以下的十六进制字符串
41
09
42
09
43
09
0 9字符是一个水平制表符,简称 Ta b。假设打印页面上所有的水平字符位置是从 0开始,Ta b的
作用是在下一个水平位置即 8的倍数处开始打印下一个字符,如下所示:
A
B
C
这是保持字符按列对齐的简便方法。
换页符(1 2 h)的作用是使打印机跳过当前页开始打印下一页。
退格符用来在一些旧的打印机上打印复合字符,例如,假设计算机要控制电传打字机以
重音标记来打印小写字母 e,即è,可以通过用十六进制码 65 08 60来实现。
最重要的控制字符是回车和换行,它们与 B a u d o t码中的回车换行符意义相同。在打印机
中,回车符使打印头移到打印页面的左边,换行符使打印头移到下一行,用两个代码通常表
示从新的一行开始。单独使用回车符可以用来在一个已有的行上打印,单独使用换行符可以
用来跳到当前位置的下一行而不移到左边。
尽管 A S C I I 码是计算机世界的主要标准,但在许多 I B M大型机系统上却没有采用。在
S y s t e m / 3 6 0系统中, I B M研制了自己的 8位字符编码,即扩展的 B C D交换代码 E B C D I C。该编
码是早期的 BCDIC 6 位编码的扩展,从 I B M穿孔卡片使用的代码演变而来。穿孔卡片可以存
放8 0个文本字符,这种模式由 IBM 1928年首先引入并且用了 5 0多年。214
编码的奥秘
下载
当考察穿孔卡片与相关的 8位E B C D I C字符编码的关系时,需要记住的是,在若干种不同
技术的支持下这种代码已经经历了好几代的演变。正因为如此,不要指望从中发现太多的逻
辑性和一致性。
穿孔卡片中,字符编码由一列上穿出的一个或多个矩形孔的组合而形成,字符本身通常
在接近卡片的上边沿处打印出来。下面的 1 0行由数字标识,分别是第 0行、第 1行直到第 9行。
在第0行之上没有数字的行为第 11行,最上边的行为第 1 2行,没有第 1 0行。
以下是一些常用的 I B M穿孔卡片术语:行 0~9称作数字行或数字穿孔,行 11和1 2称作区
域行或区域穿孔。有一些 I B M穿孔卡片也会带来混淆,把行 0和9看作是区域行而不是数字行。
一个8位E B C D I C字符编码由高半字节( 4位)与低半字节组成。低半字节是与字符的数字
穿孔一致的 B C D码,高半字节是与区域穿孔一致的编码。回忆一下第 1 9章的B C D编码标准,
它是用二进制编码十进制数,即用 4位编码来代表十进制的 0~9。
对数字 0~9,没有区域穿孔,没有区域穿孔对应的高半字节是 1111,低半字节是数字穿
孔的B C D码。下面是 0~9的E B C D I C编码:
十六进制码
E B C D I C字符
F 0
F 1
F 2
F 3
F 4
F 5
F 6
F 7
F 8
F 9
O
1
2
3
4
5
6
7
8
9
对大写字母,如果只有第 1 2行有穿孔,则用 11 0 0来标识;如果只有第 11行有穿孔,则用
11 0 1来标识;如果只有第 0行有穿孔,则用 111 0来标识。大写字母的 E B C D I C编码为:
十六进制码 E B C D I C字符
十六进制码 E B C D I C字符
C 1 A D 1 J
十六进制码
E B C D I C字符
C 2 B D 2 K E 2 S
C 3 C D 3 L E 3 T
C 4 D D 4 M E 4 U
C 5 E D 5 N E 5 V
C 6 F D 6 O E 6 W
C 7 G D 7 P E 7 X
C 8 H D 8 Q E 8 Y
C 9 I D 9 R E 9 Z
注意这些编码的编号次序。在一些场合,当用 E B C D I C文本编写程序的时候,这些次序有
时还真令人头痛。
小写字母与大写字母的数字穿孔相同但区域穿孔不同。小写 a~i的第1 2行和第0行有穿孔,
相应的区域代码为 1 0 0 0;j~r的第1 2行和第11行有穿孔,区域代码为 1 0 0 1;s~z的第11行和第
0行有穿孔,区域代码为 1 0 1 0。小写字母的E B C D I C编码为:第20章 ASCII码和字符映射
下载
十六进制码
8 1
8 2
8 3
8 4
8 5
8 6
8 7
8 8
8 9
E B C D I C字符
a
b
c
d
e
f
g
h
i
十六进制码
E B C D I C字符
9 1
9 2
9 3
9 4
9 5
9 6
9 7
9 8
9 9
十六进制码
j
k
l
m
n
o
p
q
r
A 2
A 3
A 4
A 5
A 6
A 7
A 8
A 9
215
E B C D I C字符
s
t
u
v
w
x
y
z
当然,标点符号和控制字符也有 E B C D I C编码,但对该编码系统的全面考察并不需要。
似乎I B M穿孔卡片上的每一列就足以提供 1 2位的编码信息,每个孔代表 1位,是这样吗?
果真如此的话,可以用穿孔卡片上每一列 1 2个位置中的 7个来表示A S C I I码的字符代码。但是,
实际上,这并不合适,太多的穿孔将会影响到卡片物理状态的平直。
E B C D I C中的许多 8位码没有定义,建议采用 A S C I I码的7位编码是合理的。当 A S C I I码研
制出来的时候,存储器非常昂贵,于是一些人感到 A S C I I码应该用 6位码并且采用转义字符来
区分大小写用以节约存储器。这种观点没有被接受,相反,人们认为 A S C I I码应该是8位编码,
因为即使在当时人们也普遍认为计算机应该是按 8位存储,而不是 7位。当然,8位字节现在是
标准的。因此,尽管 A S C I I码在技术上是7位编码,但它普遍是接 8位值来存储的。
字节与字符之间的等价关系的确很方便,我们只需简单地通过统计字符数就可以粗略估
计一个文本文件所需要的存储空间。当然,用 K和M来表示计算机存储空间用得更为广泛一
些。
例如,传统的8 . 5×11英寸的双倍空隙打印页面有 1英寸的页边空白和大约 2 7行的正文。每
行约6 . 5英寸宽,每英寸有 1 0个字符,这样一页共有 1 7 5 0个字节。单倍空隙打印页面大约是它
的2倍,约3 . 5 K B。
《NEW Yo r k e r》杂志每页有 3列,每列有6 0行,每行大约有 4 0个字符,这样每页有 7 2 0 0个
字符(或字节)。《纽约时代》每页有 6列。如果页面都是文字而没有标题和图片(这是不常有
的),则每列有1 5 5行,每行大约有 3 5个字符,从而整个页面有 32 550个字符,即 3 2 K B。
硬面书每页大约 5 0 0个字,平均每个字有 5个字母,确切的说,应该是 6个字符,因为要把
字间空格统计在内,这样书的每页约 3 0 0 0个字符。假设平均每本书有 3 3 3页(这可能是一个估
计较高的数字),则意味着平均每本书大约是 1 M B。
当然,每本书的差别很大:
F.Scott Fitzgerald的 《The Great Gatsby》大约300KB。
J.D.Salinger的 《Catcher in the Rye 》大约400KB。
Mark Twain的《The Adventures of Huckleberry Finn》大约540KB。
John Steinbeck 的《The Grapes of Wrath》大约 1MB。
Herman Melville的《Moby Dick》大约1.3MB。
Henry Fielding 的 《The History of Tom Jones》大约 2.25MB。
Margaret Mitchell的 《 Gone With the Wind 》大约 2.5MB。
Stephen King 的《 The Stand》大约2.7MB。
Leo Tolstoy 的《 War and Peace 》大约3.9MB。
Marcel Proust 的 《Remembrance of Things Post》 大约 7.7MB。216
编码的奥秘
下载
美国国会图书馆大约有 20 000万本书,总共有 2 0万亿字符,即2 0 T B的文本数据。(图书馆
还有大量的照片和录音。)
尽管A S C I I码是计算机世界里最重要的标准,但它并不是完美的。 A S C I I码的最大问题在
于它太倾向于美国!的确, A S C I I码即使对那些以英语为主要语言的国家也几乎是不合适的。
尽管A S C I I码包含有美元符号,但英镑符号呢?还有许多西欧国家语言中用到的重音符号呢?
更不用说在欧洲一些国家里使用的非拉丁字母,包括希腊文、阿拉伯文、希伯来文和西里尔
文。此外,还有印度及东南亚国家用到的婆罗门教的手迹。而一个 7位编码又如何来处理成千
上万的中文、日文、韩文笔画以及韩语音节?
在研究 A S C I I码的时候,也一直在考虑其他国家的需要 ,尽管没有充分考虑非拉丁字母。
根据公开的 A S C I I码标准,1 0个A S C I I码代码(4 0 h、5 B h、5 C h、5 D h、5 E h、6 0 h、7 B h、7 C h、
7 D h和7 E h)可用来重新定义而为某一国家使用。另外,如果需要,数字符号( #)可用英镑
符号(£)替换,美元符号( $)可用通用货币符号(¤)替换。显而易见,只有使用包含这
些替换符号的特定文本文档的所有人都知道这些变化的时候,替换符号才有意义。
由于许多计算机系统按 8位来存储字符,则可以设计扩展的 A S C I I码字符集来包含 2 5 6个字
符而不仅仅是 1 2 8个。在这样的字符集里,代码 0 0 h~7 F h定义成与 A S C I I码一致;代码 8 0 h~
F F h可定义成表示另外的字符。这种技术已被用来定义附加的字符代码,包含重音字母及非拉
丁字母。作为例子,这里有一个 9 6个字符的 A S C I I码的扩展,称之为第 1号拉丁字母表,定义
的字符编码从 A 0 h~F F h。在该表里,十六进制字符编码的高半字节由最高行给出,低半字节
由左边列给出:下载
第20章 ASCII码和字符映射
217
代码A 0 h对应的字符为非断开空格。通常计算机处理格式文本是按照行和段来编排的,每
一行以空格符号断开,对应的 A S C I I码为2 0 h。代码 A0h 用来显示一个空格,但不能用来断开
一行。非断开空格可以用在如“ WW II ”这样的文本中。代码 A D h定义成软连字符,该连字
符用来分开一个字中间的音节,且只在需要连接被两行分开的一个单词时才使用。
遗憾的是,近几十年来出现了许多不同的 A S C I I 码的扩展,导致了混淆和不兼容性。
A S C I I码通过扩展甚至可以编码中文、日文和韩文的笔画。有一个流行的编码叫作 S h i f t - J I S
(日本工业标准) ,其代码 8 1 h~9 F h用来表示 2字节字符编码的起始字节。以这种方法, S h i f t -
J I S可编码约 6 0 0 0个额外字符。遗憾的是, S h i f t - J I S不是使用这种技术的唯一系统。在亚洲,
还有三个很流行的双字节字符集。
双字节字符集有许多问题,不兼容性只是其中之一。另一个问题是,一些字符 — 特别是
普通的A S C I I码字符 — 是用1个字节编码来表示的,而成千上万的笔画则是由双字节编码来
表示,从而导致使用这样的字符集很困难。
在假定会有一个特定的字符编码系统能适用于世界上所有语言的前提下, 1 9 8 8年,几个
主要的计算机公司一起开始研究一种替换 A S C I I码的编码,称为 U n i c o d e。鉴于A S C I I码是7位
编码,U n i c o d e采用1 6位编码,每一个字符需要 2个字节。这意味着 U n i c o d e的字符编码范围从
0 0 0 0 h~F F F F h,可以表示 65 536个不同字符。对世界上所有可用计算机进行来通信的语言来
说,有足够的扩展空间。
U n i c o d e编码不是从零开始的,开始的 1 2 8个字符编码 0 0 0 0 h~0 0 7 F h与A S C I I码字符一致。
U n i c o d e编码0 0 A 0 h~0 0 F F h也与前面讲到的对 A S C I I码扩展的第 1号拉丁字母表一致。其他世
界范围的标准也收编在 U n i c o d e中。
尽管 U n i c o d e对现有的字符编码做了明显改进,但并不能保证它能很快被人们接受。
A S C I I码和无数的有缺陷的扩展 A S C I I码已经在计算机世界中占有一席之地,要把它们逐出计
算机世界并不是件容易的事。
对U n i c o d e来说的一个实实在在的问题是,它改变了一个文本字符与 1个字节存储器之间
的等效关系。用 A S C I I码编码,《The Grapes of Wr a t h》 这本书的大小约为 1M 字节;而用
U n i c o d e编码,约是 2 M B,这也算是采用 U n i c o d e编码付出的代价吧。下载
第21章 总 线 连 接
处理器无疑是计算机中最重要的部件,但并不是唯一的部件 。一台计算机也需要随机访
问存储器( R A M)来存放机器码指令以便让处理器执行。计算机还必须有一些方法使这些指
令进入 R A M(输入设备)以及一些方法使程序执行结果得以看见(输出设备)。前面讲过,
R A M是易失性的,当断电时,它的内容就会丢失。所以计算机中另一个有用的部件是永久存
储设备,当计算机断电的时候,它们可以保存代码和数据。
组成一台完整计算机的所有集成电路必须安装在电路板上。在一些小型机器上,所有的
集成电路可以安装在一块板上,但更常见的是,不同的部件分开安装在两块或更多的板上,
这些板之间通过总线互相通信。简单地说,总线是提供给计算机中每块电路板的数字信号的
集合,这些信号可以分为 4类:
• 地址信号。这些信号由微处理器提供,常用来寻址 R A M单元,也可用来寻址连接到计
算机上的其他部件。
• 数据输出信号。也由微处理器提供,用来写入数据到 R A M或其他设备。要仔细推敲输
入(i n p u t)和输出(o u t p u t)的含义。数据输出信号是从微处理器输出,变成 R A M和其
他设备的数据输入信号。
• 数据输入信号。是由计算机的其余部分提供,由微处理器读入的信号。数据输入信号通
常来自于 R A M的输出,也即表示微处理器读入存储器内容。但是其他部件也提供数据
输入信号给处理器。
• 控制信号。由各种各样的信号组成,通常与计算机的特定处理器的控制信号一致。控制
信号可来自于微处理器或从其他部件传送到微处理器。例如,微处理器可用一个控制信
号来指示它要写一些数据到某一存储器地址。
另外,总线给计算机中的各个电路板提供电源。
早期家用计算机流行的一种总线是 S - 1 0 0总线,该总线 1 9 7 5年在第一台家用计算机 M I T S
A l t a i r上首先采用。尽管这种总线以 8 0 8 0微处理器为基础,但后来它也被其他一些处理器,如
6 8 0 0采用。 S - 1 0 0的电路板的规格是 5 . 3×1 0英寸,电路板的一边有 1 0 0个接头可插在插槽里
(这就是S - 1 0 0的来源)。
S - 1 0 0计算机有一块较大的板称为母板或主板,上面有若干个 (如:1 2个)互相连接起来的
S - 1 0 0总线插槽,这些插槽有时也叫扩展槽, S - 1 0 0电路板(也叫扩展板)插到插槽里。 8 0 8 0
微处理器及支持芯片(第 1 9章曾提到过)在此 S - 1 0 0板上。RAM 在另一个或更多的其他 S - 1 0 0
电路板上。
S - 1 0 0总线是为 8 0 8 0芯片设计的,它有 1 6个地址信号, 8个数据输入信号, 8个数据输出信
号(前面讲过, 8 0 8 0自身是把数据输入、输出信号混合在一起的,由 8 0 8 0所在电路板上的另
一个芯片来把这些信号分开成单独的输入、输出信号)。总线上还有 8个中断信号,这些信号
由那些需要 C P U立即做出响应的部件产生。例如(在本章后面将要讲到),当在键盘上敲一个
键时,键盘会产生中断信号, 8 0 8 0执行一个小程序确定是哪一个键并做出相应反应。包含下载
第21章 总 线 连 接
219
8 0 8 0的电路板上通常还有一个芯片称作 Intel 8214优先级中断控制单元,它用来处理这些中断。
当中断产生时,该芯片产生一个中断信号给 8 0 8 0,8 0 8 0响应中断。该芯片提供 R S T(R e s t a r t)
指令使得微处理器保存当前的程序计数器,并根据具体的中断信号转移到地址 0 0 0 0 h、0 0 0 8 h、
0 0 1 0 h、0 0 1 8 h、0 0 2 0 h、0 0 2 8 h、0 0 3 0 h或0 0 3 8 h处去执行。
如果正在设计一个具有新的总线类型的新计算机,你可以选择公开你的总线规范或者保
密。
如果一个总线规范是公开的,其他厂商 — 称为第三方厂商 — 可以设计并销售与这种总
线相配套的扩展板。这些附加的扩展板使得计算机更有用且更令人满意,计算机的大量销售
为扩展板提供了更大的市场。这种现象刺激许多小的计算机系统设计者坚持开放体系结构的
原则,允许其他厂商生产计算机的外围设备。这样总有一种总线最终可以认为是工业界的标
准。标准已成为个人计算机工业的重要组成部分。
最著名的开放式体系结构个人计算机起源于 IBM PC。1 9 8 1年秋季, I B M公开了包括整个
计算机完整电路图的 P C机技术参考手册,其中还包括 I B M为它制造的所有扩展板。这个手册
是很重要的工具,它使得许多制造商可以生产自己的 P C机扩展板并且事实上产生了 P C机的
“克隆”体 — 兼容P C机,兼容P C机与I B M P C机几乎完全相同且运行相同的软件。
源于IBM PC 的更新换代产品现在已占到桌面计算机系统大约 9 0 %的份额。尽管 I B M自身
只有很少的市场份额,但它毕竟要比最初的 P C机采用专有设计的封闭式体系结构所占的份额
要大。苹果公司的 M a c i n t o s h机开始就采用封闭式体系结构,根本不考虑开放其体系结构,这
当初的决定可以用来解释为什么在目前的桌面计算机市场上 M a c i n t o s h只占有不到 1 0 %的份额。
(记住一点,无论一个计算机系统是在开放体系结构还是封闭体系结构下设计,都不会影响到
其他公司开发在该计算机系统上运行的软件。只有那些特定的视频游戏软件开发商才会限制
其他公司开发用于他们系统的软件。)
最初的IBM PC使用Intel 8088微处理器,可寻址 1 M存储空间。尽管 8 0 8 8处理器内部是 1 6
位,但在外部按照 8位来寻址存储器。 I B M为最初的 P C机设计的总线现在称作 I S A(i n d u s t r y
standard architecture, 工业标准体系结构)总线。扩展板上有一个 6 2针的插头,信号包括 2 0个
地址信号, 8个组合(复用)数据输入 /输出信号, 6个中断请求信号和 3个D M A (d i r e c t
memory access,直接存储器访问)请求信号。 D M A允许存储设备(本章最后将要讲到)比采
用别的方法更快地进行操作。通常,微处理器处理所有的内存读 /写操作,但通过 D M A,其他
设备可绕过微处理器通过总线直接进行内存读 /写操作。
在S - 1 0 0系统里,所有的部件都安装在扩展板上。在 IBM PC机里,微处理器、一些支持
芯片及一些 R A M安装在I B M所称的系统板上,系统板也常称作主板或母板。
1 9 8 4年,I B M推出了Personal Computer AT (先进技术型个人计算机 ),它采用 1 6位的I n t e l
8 0 2 8 6微处理器,可寻址 1 6 M存储器。 I B M保留了已有的总线,但另加了一个 3 6针的插槽,其
中包括新增的 7个地址信号(尽管只需要 4个),8个数据输入 /输出信号, 5个中断请求信号和 4
个D M A请求信号。
无论是数据宽度(从 8位到1 6位到3 2位)还是输出的地址信号数目,当处理器在这些方面
的增长超出总线能力时,就需要对总线进行更新换代;当处理器达到较高的速度时,它也会
超出总线的能力。早期的总线是为时钟频率是几兆赫而不是几百兆赫的处理器设计的。如果
总线的设计不能适应高速传输,则可能引起射频干扰( R F I),从而引起收音机或电视机附近220
编码的奥秘
下载
的静态或其他噪声干扰。
1 9 8 7年,I B M推出了微通道体系结构( micro channel architecture,M C A)总线,这种总
线的某些方面 I B M已申请了专利,这样 I B M就可以从其他使用这种总线的公司收到授权费用。
可能也正因为如此, M A C总线没有成为工业标准。取而代之的是 1 9 8 8年9家公司(不包括I B M )
联合推出的 3 2位E I S A(Extended Industry Standard Architecture,扩展的工业标准体系结构)总
线。近年来, I n t e l公司设计的外围部件互联( peripheral component interconnect,P C I)总线
在P C兼容机上已普遍采用。
为理解计算机中各种不同部件是如何工作的,让我们再重新回到 7 0年代中期较质朴的年
代。假想我们正在为 A l t a i r或者为我们自己设计的 8 0 8 0、6 8 0 0计算机设计电路板,我们可能打
算为计算机设计一些存储器,用一个键盘作输入,一个电视机作输出,此外还有一些方法用
来保存关闭计算机电源时存储器中的内容。现在来看一看我们所设计的把这些部件添加到计
算机中所用的各种各样的接口。
第1 6章讲过, R A M阵列有地址输入、数据输入、数据输出信号,并且有一个控制信号用
来写入数据到存储器。地址输入信号的个数决定了 R A M阵列中可以存放的数值的个数:
R A M阵列中数值的个数 = 2 地址输入信号个数
数据输入/输出信号的数目表明了存放的数值的位数。
7 0年代中期家用计算机中常用的存储器芯片是 2 1 0 2:
2 1 0 2是MOS(metal_oxide semiconductor, 金属氧化物半导体 )家族的成员,与 8 0 8 0、6 8 0 0
中使用的 M O S技术一样, M O S半导体器件很容易与 T T L芯片连接,但前者通常比 T T L器件的
晶体管密度高但速度较慢。
通过统计地址信号( A 0 ~A 9 )、数据输出信号( D O)和数据输入信号( D I),可以算出这
种芯片可以存放 1 0 2 4位。根据采用的 2 1 0 2芯片的类型,访问时间 — 即从一个地址提供给芯
-
片到数据输出成为有效所需要的时间 — 从3 5 0~1 0 0 0纳秒不等。 R / W(读/写)信号在读存
-
储器时是 1。当向芯片写数据时, R / W必须在至少为 1 7 0~5 5 0纳秒的时间段内为 0,这也取决
于所选用的 2 1 0 2芯片类型。
-
-
特别要提到的是 C S信号,它表示片选。当信号为1时,片子不被选中,意味着片子对R / W
-
信号不做响应。然而, C S信号对芯片还有一种重要作用,我们下面将简单描述一下。
当然,如果要为一个8位的微处理器组织存储器,则肯定希望存储器按 8位而不是1位存放。
按最少计算,需要把 8个这样的 2 1 0 2芯片连接在一起用来存放整个字节。可以把所有 8个芯片
- -
对应的地址信号、 R / W和 C S信号连接起来达到此目的,结果如下图所示:第21章 总 线 连 接
下载
221
地址
数据输出
数据输入
这是一个1 0 2 4×8的R A M阵列,即1 K B的R A M
从实际观点来看,需要把这些存储芯片安装在一个电路板上。在一块板上可以装多少
呢?如果真的把它们紧紧安装在一起,可以在一个 S - 1 0 0板上安装 6 4个这样的芯片,提供 8 K B
存储器。但是,最好还是宽松地安装,用 3 2个芯片组成 4 K B存储器。连接在一起用来存储完
整字节的一组芯片(见上图)称为存储体。一个 4 K B存储器由 4个存储体组成,每个存储体有
8个芯片。
像8 0 8 0、6 8 0 0这样的8位微处理器有 1 6位地址可用来寻址 6 4 K B存储器。如果连接的是有 4
个存储体的 4 K B存储器板,则存储器板中 1 6位地址信号完成的功能如下:
选择存储板
选择存储体
寻址RAM
1 0个地址信号 A 0 ~A 9 直接连到R A M芯片,地址信号 A 1 0 和A 11 用来选择4个存储体中的一个,
地址信号 A 1 2 ~A 1 5 用来确定是哪一块存储器板。每个 4 K B存储器板占据微处理器整个 6 4 K B存
储空间1 6个不同的4 K B地址空间范围中的一个,它们分别是:
0 0 0 0 h~0 F F F h或
1 0 0 0 h~1 F F F h或
2 0 0 0 h~2 F F F h或
F 0 0 0 h~F F F F h
假定一个 4 K B存储器板的地址范围是 A 0 0 0 h~A F F F h,则意味着地址 A 0 0 0 h~A 3 F F h提供
给其中的第 1个1 K B存储体,地址 A 4 0 0 h~A 7 F F h提供给第 2个存储体,地址 A 8 0 0 h~A B F F h提
供给第3个存储体,地址 A C 0 0 h~A F F F h提供给第4个存储体。
连接4 K B存储器板是很经常的,后面可看到如何灵活地确定存储器板的地址范围。为获
得灵活性,可以使用 D I P开关,一种双排直插封装的系列( 2~1 2个)微小开关。它可以插入
到普通的I C插座中:
可以把这个开关和总线中的高 4位地址信号连接到称作(比较器) 的电路中:222
编码的奥秘
下载
前面讲过,只要两个输入中有一个而不是两个都为 1,则X O R(异或)门的输出为 1。这
也就是说如果两个输入相同 — 都为0或都为1 — 则异或门的输出为 0。
假设闭合对应于 A 1 3 和A 1 5 的开关,则意味着我们选择的存储器板的地址范围从 A 0 0 0 h~
A F F F h。
如果来自总线的地址信号 A 1 2 、A 1 3 、A 1 4 和A 1 5 与开关中设置的地址相同,则 4个异或门的输
出都是0,也即N O R(或非)门的输出为 1:
-
可以把E q u a l信号通过2-4译码器生成 C S信号来选择存储器板中的 4个存储体之一:下载
第21章 总 线 连 接
223
-
CS第1个存储体
-
CS第2个存储体
-
CS第3个存储体
-
CS第4个存储体
例如A 1 0 = 0,A 11 = 1,则选择第 3个存储体。
如果回忆一下第 1 6章所讲的组织 R A M阵列的繁琐细节,可能会认为还需要 8个4 - 1选择器
从4个存储体中选择正确的数据输入信号。但是,这并不需要。
通常, T T L兼容集成电路的输出信号或者大于 2 . 2伏(逻辑 1)或者小于 0 . 4伏(逻辑 0)。
如果试着把输出信号连接起来,会出现什么情况呢?如果一个集成电路的输出为 1,另一个输
出为0,把这两个输出连接到一起后,结果会是什么呢?你是无法回答的。那么为什么集成电
路的输出信号不能连接在一起呢?
2 1 0 2芯片的数据输出信号是三态输出。除了逻辑 0和逻辑 1外,数据输出信号还可以是第
-
三种状态,这种状态就是什么都不是,就好像芯片的引脚什么都没有连接。当 C S输入为 1的
时候,2 1 0 2芯片就进入第三种状态,这意味着可以把 4个存储体对应的数据输出信号连接到一
起,并用这 8个组合输出作为总线的 8个数据输入信号。
需要强调一下三态输出的概念,因为它对总线的操作至关重要。连到总线上的所有芯片
都可以使用总线上的数据输入信号向处理器传送数据。任何时候,连到总线上的众多电路板
中只有一个用来确定总线上的数据输入信号是什么。其他电路板不被选中,输出为第三态。
2 1 0 2芯片是一个静态随机访问存储芯片,即 S R A M ,与动态 R A M (D R A M )不同。
S R A M每存储1位需要4个晶体管(与第1 6章讲到的用触发器作存储器所需要的晶体管数不完全
相同),而D R A M每位只需要一个晶体管。 D R A M的缺点是它的外围支持电路较复杂。
只要芯片有电, S R A M芯片如 2 1 0 2就会保持已存储的内容;如果断电,则内容会丢失。
在这方面, D R A M也是如此。但 D R A M还需要周期性地对存储器进行访问,即使这些内容是
不需要的。这称之为刷新, 1秒钟内含有好几百次刷新,就好像隔一段时间就推一下某个人使
他不要入睡一样。
抛开在使用D R A M上的争论,过去几年 DRAM 芯片容量的不断增长使得 D R A M得到广泛
的应用。 1 9 7 5年, I n t e l公司首创了 D R A M芯片,它可以存储 16 384 位。与摩尔法则一致,
D R A M芯片的容量基本上是每三年增长 4倍。现在的计算机通常在系统板上有存储器槽,可以
插上若干个D R A M芯片组成称为单行直插存储体( S I M M)或双行直插存储体( D I M M)的小
电路板。现在1 2 8 M B的D I M M售价在$ 300 以下。
即然已经知道了如何组织存储器,因此可不必把微处理器的存储空间都分配给存储器,
可以留一部分存储空间给输出设备。
阴极射线管( C RT)— 外观上有些像在家里看到的电视机 — 已成为计算机最普通的输224
编码的奥秘
下载
出设备。连到计算机上的 C RT通常称为视频显示器或监视器,提供信号给显示器的电子部件
称为视频适配器。视频适配器是计算机中的一块电路板,通常称为视频卡。
虽然视频显示器或电视机的二维图像看起来似乎很复杂,但它实际上是由一束连续的射
线很快扫过屏幕而形成的。射线从左上角开始,从左到右扫过屏幕,然后很快回到左边,开
始第 2行。每个水平行称为扫描行,每次回到下一行的开始称为 水平回扫。当射线扫描完最
后一行后,就从屏幕右下角回到左上角( 垂直回扫),并不断重复这一过程。以美国的电视
信号为例,这种扫描每秒进行 6 0次,称之为场频。由于扫描速度很快,图像在屏幕不会出现
闪烁。
由于采用隔行扫描,电视的情况有点儿复杂。两个场需要用来形成一个单独的帧,帧是
一个完整的静态视频图像。每个场完成整个帧的一半扫描线 — 第一个场完成偶数扫描线,
第二个场完成奇数扫描线。水平扫描频率,即扫描每个水平行的频率,为 15 750 赫兹。把它
除以6 0赫兹,为2 6 2 . 5行,这就是一个场的扫描线数。整个帧是它的两倍,即 5 2 5条扫描线。
不考虑隔行扫描技术的细节,生成视频图像的连续射线由一个连续信号来控制的。尽管
电视节目在进行广播或通过有线电视系统传送的时候是音频和视频的混和,但最终还是分开
的。这里讲到的视频信号与从 V C R、摄像机和电视机的视频插口上输入 /输出的信号是一致
的。
对黑白电视来说,视频信号很简单也容易理解(彩色电视则要麻烦一些)。每秒6 0次场扫
描,同时扫描信号中包含有用来标明一个场开始的垂直同步脉冲,脉冲电压为 0伏(地),宽
度为4 0 0毫秒。水平同步脉冲用来标明每个扫描行的开始,它的信号为 0伏,宽度为5毫秒,每
秒出现15 750次。在两次水平同步脉冲之间,信号从 0 . 5伏(黑)~2伏(白)变化, 0 . 5伏~2
伏之间的电压用来表示灰度。
因而电视图像部分是数字的,部分是模拟的。图像在垂直方向上分成 5 2 5行,但每一个扫
描线的电压是连续变化的 — 用来模拟图像的可视强度。但是电压并不是无限制地变化,电
视机能响应的信号变化频率有上限,称为电视机带宽 。
带宽是通信中很重要的概念,它关系到某个传输媒体上能够传输的信息量。在电视机中,
带宽限制了视频信号变化的速率。美国的广播电视带宽为 4 . 2 M H z。
如果把视频显示器连接到计算机,则很难把显示器想像成是模拟和数字混合的设备,它
很容易看成是一个地地道道的数字设备。从计算机的观点来看,视频图像很容易想像成是由
离散的点组成的矩形网格,这些离散的点称之为像素。
视频带宽限制了水平扫描行上像素的个数。我们定义带宽为视频信号变化 (从黑到白,再
从白到黑 )的速率。具有 4 . 2 M H z带宽的电视机允许每秒 4 2 0万次2个像素或者 — 用水平扫描频
率15 750去除2×4 200 000 — 每个水平扫描行 5 3 3个像素。但是大约 1 / 3的像素是不可用的,
因为它们被隐藏了 — 或者在图像的远端或者在射线水平回扫中。水平扫描行上剩下大约有
3 2 0个像素是有用的。
同样,在垂直方向上也不是 5 2 5个像素都有用。实际上,在屏幕的上、下部和在垂直回扫
过程中都会有损失。计算机在用电视机显示时不采用隔行扫描,垂直方向上的像素数目是
2 0 0。
因此,最初连到普通电视机上的视频适配器的分辨率为 3 2 0×2 0 0,即水平方向3 2 0个像素,
垂直方向2 0 0个像素:下载
第21章 总 线 连 接
225
为了确定网格上像素总数,可以去统计也可以简单地用 3 2 0×2 0 0得到64 000 个像素。根
据视频适配器的配置(下面将会做简要的解释),每个像素可以是黑或白的,也可以为某一特
定的颜色。
如果需要显示一些字符,能显示多少个呢?
这显然依赖于每个字符的像素数目。下图是一种可能的方法,每个字符使用
8×8网格
(6 4像素):
这是A S C I I码2 0 h~7 F h对应的字符。(不可显示的字符对应的 A S C I I码从0 0 h~1 F h。)
每个字符由 7位A S C I I码来标识,而每个字符的显示情况由相对应的 6 4位来确定。可以把
这6 4位信息看成代码。
使用这种字符定义,可以在 3 2 0×2 0 0视频显示器中显示 2 5行,每行 4 0个字符。这足以显
示Amy Lowell完整的一首短诗:226
编码的奥秘
下载
视频适配器需要一些 R A M来存储所显示的信息,微处理器可以向这个 R A M写入信息用来
改变屏幕显示的信息。更为方便的是,这个 R A M可以是微处理器存储空间的一部分。上面讲
到的显示适配器需要多少 R A M呢?
这并不是一个简单的问题,结果可能的范围是从 1 K B~1 9 2 K B。
从最低估计开始,减少视频适配器所需存储器的方法之一就是限制适配器只显示字符。
我们已知一屏可以显示 2 5行,每行 4 0个字符,即总共 1 0 0 0个字符。这样视频适配器上的 R A M
只需存储这 1 0 0 0个字符的7位A S C I I码。这1 0 0 0个7位值大约是 1 0 2 4字节即1 K B。
视频适配器还需要有包含所有 A S C I I码字符点阵的字符生成器,这些字符生成器通常是只
读存储器,即 R O M。R O M是一种集成电路,特定的地址下得到特定的数据输出。不像 R A M,
R O M没有数据输入信号。
也可把R O M看成是把一种代码转换成另一种代码的转换电路。存储 1 2 8个A S C I I码字符的
8×8点阵的R O M需要7个地址信号(代表 A S C I I码)和 6 4个数据输出信号。这样, R O M就把7
位A S C I I码转换成可确定字符显示结果的 6 4位代码。然而6 4位的输出信号会使得芯片过大!如
果有1 0个地址信号、 8个输出信号就会变得很方便,其中 7位地址信号确定某一 A S C I I码字符
(这 7位地址信号来自于视频适配器的数据输出),其余 3个地址信号用来标识字符中的一行。
如:地址0 0 0标识最高行;111标识最低行。8位输出是每一行的 8个像素 。
例如,假设 A S C I I码为4 1 h。这是大写字母 A,且有8行,每行8位。下表显示了字符 A的1 0
位地址(空格分开了 A S C I I码和行代码)和数据输出信号:
地址 数据输出
1000001 000
1000001 001
1000001 010
1000001 011
1000001 100
1000001 101
1000001 11 0
1000001 111 0 0 11 0 0 0 0
0 1111 0 0 0
11 0 0 11 0 0
11 0 0 11 0 0
111111 0 0
11 0 0 11 0 0
11 0 0 11 0 0
0 0 0 0 0 0 0 0第21章 总 线 连 接
下载
227
从中你是否看见了以 0构成的背景上显示 1来画出的A?
显示字符的视频显示适配器必须还要有一个光标逻辑电路。光标是一个小下划线用来表
明键盘中输入的下一个字符将要显示的位置。光标字符的行,列位置值通常存在视频卡的两
个8位寄存器中,微处理器可向其中写入数据。
如果显示适配器并非只限于显示文本,则称为图像适配器。微处理器通过写入信息到图
像视频卡上的 R A M而在屏幕上显示图像,其中包括各种大小和模式的字符。图像视频卡比仅
显示字符的视频卡所需的存储器容量要大。显示 3 2 0×2 0 0像素的图像视频卡有 64 000个像素。
如果一个像素对应于 1位R A M,则该视频卡需要 64 000 位R A M,即8 0 0 0字节。但是,这是最
低的要求。 1位对应于 1个像素只能表示两种颜色 — 如,黑和白。 0可能对应于黑色像素, 1
可能对应于白色像素。当然,黑白电视机显示的不仅仅是黑、白两种颜色,还可以显示出不
同的灰度。为了在图像视频卡上显示灰度,通常一个像素对应于一个字节的 R A M。00h 对应
于黑色, F F h对应于白色,中间的数据对应于不同的灰度。显示 2 5 6种不同灰度的 3 2 0×2 0 0视
频卡需要64 000字节的R A M,与一直在讲的 8位微处理器的整个地址空间非常接近。
如果要达到很好的色彩效果,则每个像素需要 3个字节。仔细观察彩色电视机或计算机的
视频显示器,可以看到每种颜色是三原色,即红、绿和蓝的不同混合。为了获得各种颜色,
需要一个字节来标明三原色每种颜色的强度。这样需要 192 000字节的 R A M。(本书最后一章
将会讲到更多有关彩色图形的内容。)
视频适配器能够显示的颜色的多少与每个像素所用的位数有关。这种关系与本书中讲到
的许多编码很相似,也牵涉到 2的幂:
颜色数 = 2 每个像素使用的位数
3 2 0×2 0 0分辨率是标准电视机所能达到的最大分辨率,正因为如此,为计算机特制的显
示器比电视机具有更高的带宽。 1 9 8 1年IBM PC所用的显示器可以显示 2 5行,每行 8 0个字符,
这是I B M巨大且昂贵的大型机的 C RT显示器上的字符数目。对 I B M来说, 8 0是一个很特殊的
数字,因为它正好是 I B M穿孔卡片上的字符数。的确,早期连到主机上的 C RT显示器主要用
来显示穿孔卡片的内容。偶尔你会听到一种过时的叫法,把仅显示字符的视频显示器的所有
行称为卡片。
多年来,视频显示适配器的分辨率及显示的颜色不断增加。一个重要的里程碑是 1 9 8 7年
IBM PS/2个人计算机系列和苹果公司的 Macintosh II都采用了水平6 4 0像素,垂直 4 8 0像素的视
频适配器。这是从那时起就已保持的最低标准的视频分辨率了。
6 4 0×4 8 0分辨率是一个具有重要意义的里程碑。也许你不会相信,它之所以重要的原因
还要追溯到托尔斯・爱迪生!大约在 1 8 8 9年,当爱迪生和工程师 William Kennedy Laurie
D i c k s o n研究电影摄影机和电影放影机的时候,他们决定使电影画面的宽比高要多出 1 / 3。宽和
高的比例称为长宽比。 E d i s o n和D i c k s o n确定的这个比例通常表示为 1 . 3 3∶1或4∶3;在6 0多年
的时间里,这个长宽比为许多电影所采用,并且电视上也采用了这个长宽比。直到 1 9 5 0年的
早期,好莱坞引入宽银幕技术来与电视竞争才打破了 4∶3的长宽比。
像电视一样,许多计算机监视器的长宽比也是 4∶3,这很容易用尺子测量一下来验证。
6 4 0×4 8 0分辨率的比例也是 4∶3,这意味着水平方向上 1 0 0个像素的物理长度与垂直方向上
1 0 0个像素的物理长度是一样的。这是计算机图像的重要特征,称之为正方形像素 。
现在的视频适配器和监视器都能实现 6 4 0×4 8 0的分辨率,但也存在其他各种各样的显示228
编码的奥秘
下载
模式,常见的分辨率有 8 0 0×6 0 0,1 0 2 4×7 6 8,1 2 8 0×9 6 0和1 6 0 0×1 2 0 0。
尽管总有人认为计算机显示器和键盘是按照同样的方式连到计算机上的 —敲入什么就在
屏幕上显示什么 — 实际上,它们是不同的。
键盘上的每一个键是一个简单的开关,键按下则开关闭合。可能有类似于打字机的 4 8个
键的键盘,现在个人计算机键盘通常有 1 0 0多个键。
连到计算机上的键盘应该有硬件来为每一个按键提供唯一的代码,一种可能的方法是这
个代码是该键对应的 A S C I I码。但是,这种方法既不实用也不可取。例如, A这个键可以对应
于A S C I I码4 1 h或6 1 h,这取决于是否同时按下了 s h i f t键。此外,现在的计算机键盘有许多键并
不对应于 A S C I I码字符,键盘硬件产生的代码是一种称之为扫描码的代码。一个小的计算机程
序可以计算出在键盘上按下的某一个键时所对应的 A S C I I码(如果有的话)。
为使键盘硬件的描述不至于太繁杂,假设键盘只有 1 6个键。无论什么时候按下一键,键
盘硬件会产生一个 4位代码,范围是 0 0 0 0~1111。
键盘硬件包括了前面讲到的一些部件:
振荡器
4位计数器
2-4译码器
4-1选
择器
图的左下部是键盘的 1 6个键,用简单的开关来表示。一个 4位计数器迅速地循环对应于 1 6
个键的代码。循环所有的代码所需的时间必须比按下并松开一个键所需的时间要短。
4位计数器的输出作为 2 - 4译码器和 4 - 1选择器的输入。如果没有键按下,选择器的输入没
有一个为 1,则选择器的输出不为 1。如果有一个键按下,则对某一特定的 4位计数器的输出来
说,选择器的输出为 1。例如,如果从右上角开始的第二个键按下,并且如果计数器的输出为
0 11 0,则选择器的输出为 1:第21章 总 线 连 接
下载
振荡器
229
4位计数器
4位锁
存器
2-4译码器
4-1选
择器
中断
那就是该键所对应的代码。当该键被按下,没有其他计数器的输出将会使选择器输出为 1。
每个键都有自己的代码。
如果键盘有 6 4个键,则需要6位扫描码,也即需要 6位计数器。可以用 3 - 8译码器和8 - 1选择
器把键排成8×8阵列。如果键盘的键在 6 5~1 2 8个之间,则需要 7位代码。可以把键排成 8×1 6
阵列,采用 4 - 1 6译码器和8 - 1选择器(也可用 3 - 8译码器和1 6 - 1选择器)。
下面将发生什么取决于键盘接口电路。键盘硬件可以为每一个键安排一个 1位的R A M,由
计数器的输出作为地址。如果键未按下,则 R A M内容为0;按下则为 1。可以由微处理器来读
取R A M的内容以确定每个键的状况。
键盘接口中另一个有用的部分是中断信号。前面讲过, 8 0 8 0微处理器允许外设中断 C P U
的当前工作。微处理器响应中断并从存储器中读入一条指令。这通常是一条 R S T指令,使微
处理器转去执行内存中另外一个区域中的中断处理程序。
本章最后介绍的外围设备是长期存储设备。前面讲过,随机访问存储器 — 不论是用继电
器、电子管还是晶体管构成的 — 在当电源关闭时,内容会丢失。所以,一个完整的计算机
也需要长期存储器。长久以来使用的方法是在纸上或卡片上打孔,就像 I B M的穿孔卡片。在
早期小型计算机中,是通过在滚动的纸带上打孔来保存程序和数据的这便于以后重新装入到
内存中。但是,穿孔卡片和纸带存在一个问题,即介质不能重复使用,当打上一个孔后就不
容易再恢复。另一个问题是效率低,就当时来说,如果想要真切的看到某一比特,可能要花
费太多空间。230
编码的奥秘
下载
所以,现在最流行的长期存储器类型是磁介质存储器。磁介质存储器起源于 1 8 7 8年,当
时美国工程师 Oberlin Smith(1840—1 9 2 6 )描述了它的原理。第一个可用的设备是在 2 0年后即
1 8 9 8年,由丹麦的发明家 Valdemar Poulsen(1 8 6 9—1 9 4 2)制造的。 P o u l s e n的电磁式录音机
起初打算用来记录人不在家时收到的电话信息。他用电磁铁 — 电报机里随处可见的部件 —
和可变长度的金属丝来记录声音。电磁铁按照声音的高低来磁化金属丝。当磁化的金属丝在
通过电磁线圈的时候,根据磁化程度的不同会产生不同的电流。不管采用何种磁化介质,都
是用电磁铁来记录和读取信息的。
1 9 2 8年,澳大利亚发明家 Fritz Pfleumer发明了一种磁记录设备,该设备是在很长的纸带
上采用最初用于生产香烟上金属带的技术覆盖铁粒子,并对它申请了专利。很快,一种强度
更高的醋酸盐纤维素代替了纸,从而导致更耐久和更知名的记录介质的诞生。卷在轴上的磁
带 — 现在都很方便地包装在塑料盒里 — 仍然是用来记录和回放音乐及视频信号的极通用的
介质。
用来记录计算机数字数据的第一个商用磁带系统由 Reming Rand 在1 9 5 0年发明。那时,
1 / 2英寸的卷轴磁带可以存放几兆字节的数据。早期家用计算机采用普通的盒式磁带录音机来
保存信息。一些小程序用来存储内存块的内容到磁带并以后再从磁带读到内存。最早的 I B M
P C有一个连接盒式磁带存储器的接头。今天,磁带仍然是很普遍的介质,特别是对那些要长
期保存的文档。然而,磁带并不是理想的介质,因为不能很快地移动到磁带上的任一点进行
访问,频繁的前进和倒回要花费很多时间。
从几何观点上看,能够进行快速访问的介质是磁盘。磁盘围绕中心旋转,连到臂上的一
个或多个磁头从磁盘外边向中间移动。磁盘上的任何区域都能够被快速访问。
在记录声音信息这一方面,磁盘确实比磁带产生得要早一些。而用来存储计算机数据的
第一个磁盘驱动器是由
I B M 在1 9 5 6年发明的,此 R A M A C (r a n d o m a c c e s s m e t h o d o f
accounting and control)由5 0个盘片组成,直径 2英尺,可以存放 5 M字节数据。
从那时起,磁盘越来越小而容量越来越大。磁盘通常分为软盘和硬盘。软盘是由覆盖磁
性物质的塑料片组成,外面是起保护作用的厚纸板或塑料包装(现在常用)。(塑料包装保护
磁盘不被弯折,因而虽然现在的磁盘与以前的软盘已经有很大区别,但仍然习惯称之为软盘。)
软盘必须插入软盘驱动器,这是连接到计算机上的一个部件,用来向软盘写或从软盘读取信
息。早期的软盘直径为 8英寸。早期的 IBM PC用5 . 2 5英寸的软盘,现在常用的是直径 3 . 5英寸
的软盘。软盘可以从软盘驱动器中取出来,用来在计算机之间传递数据。磁盘现在仍然是商
用软件中一个重要的分发媒体。
硬盘通常由多个金属磁盘组成,永久性地做在驱动器里。硬盘通常比软盘速度快,并可
存储更多的数据。但是,硬盘中的磁盘自身不能移动。
磁盘的表面分成很多同心圆,称为磁道,每个磁道又分成像圆饼切片一样的扇区,每一
个扇区存放一定数量的字节,通常为 5 1 2字节。最早IBM PC 上用的软盘只有一面,分成 4 0个
磁道,每个磁道8个扇区,每个扇区可保存 5 1 2字节。这样,每一个软盘可存放 163 840个字节,
即160KB 。今天, P C兼容机常用的 3 . 5英寸软盘有两面,每面 8 0个磁道,每个磁道 1 8个扇区,
每个扇区可存放 5 1 2字节,这样总共可存放 1 474 560字节,即 1 4 4 0 K B。最早的硬盘驱动器由
IBM PC/XT 在1 9 8 3年使用,可存放 1 0 M B的内容。 1 9 9 9年,2 0吉字节的硬盘驱动器(可存放
2 0 0亿字节)售价都只在 $ 400 以下。下载
第21章 总 线 连 接
231
软盘和硬盘通常与它们的电气接口一起工作,它们与微处理器之间也需要另外的接口。
硬盘驱动器常用的标准接口包括 S C S I(small computer system interface,小型计算机系统接口)、
E S D I(enhanced small device interface, 增强的小型设备接口)和 I D E(integrated device
e l e c t r o n i c s ,集成设备电气接口),所有这些接口均使用 D M A(直接内存访问)来接管总线和在
随机访问存储器和硬盘之间直接传送数据,且不需经过微处理器。每次传输的数量是磁盘扇
区字节数(通常是 5 1 2字节)的倍数。
许多家用计算机的初学者总听到关于兆字节和吉字节的技术谈论,这使得他们对半导体
随机访问存储器与磁盘存储器有什么不同感到很困惑。近几年出现的分类规则也减少了人们
对术语的困惑。
随机访问存储器与磁介质存储器之间的主要区别是:随机访问存储器是易失性的,而软
盘或硬盘上的数据会一直保留,除非故意删除或写覆盖。此外,还有一个显著的不同只有在
理解微处理器如何工作之后才能理解:当微处理器输出一个地址信号后,通常是寻址随机访
问存储器,而不是磁介质存储器。
从磁盘取出数据到内存供微处理器访问需要额外的步骤,即需要微处理器执行一段小程
序去访问磁盘驱动器,使磁盘驱动器把数据传输到内存。
随机访问存储器与磁介质存储器之间的差别有一个比喻:随机访问存储器就像桌面上的
东西,可以直接拿来使用;磁介质存储器就像一个文件柜,如果要用文件柜里的东西,需要
站起来,走到文件柜前,找到需要的文件,并带回到桌面上。如果桌面上太拥挤,还需要把
桌上的一些东西拿回到文件柜中去。
这个比喻很恰当,因为存在磁盘上的数据确实是以所谓的“文件”来存放的。存放文件、
提取文件是操作系统这个很重要软件的职权范围。下载
第22章 操 作 系 统
一直以来,我们似乎在组装着 — 至少在想像中 — 一台完整的计算机。它有一个微处理
器、一些随机访问存储器、一个键盘、一个视频显示器和一个磁盘驱动器。当所有硬件各就
各位以后,我们全神贯注于开关,给它加电,带给它生命。也许这样的描述会在你的脑海里
唤起Victor Frankenstein 装配怪物时的情景,或者想起 G e p p e t t o正在制造将要命名为匹诺槽的
木偶。
但我们还缺少一些东西,既不是惊人的力量,也不是良好的愿望。继续进行下去,打开
新计算机电源,然后告诉我们你看到了什么?
当阴极射线管发热以后,屏幕上显示的是一些整齐排列但又是随机的 A S C I I码字符。这
正如预期的那样,当电源断开时,半导体存储器的内容会丢失;当给它加电时,它处在随机
的不可预料的状态。同样,为微处理器构建的所有 R A M中的内容也是随机的,微处理器把这
些随机的字节当作机器代码来执行。这样不会引起任何坏的情况发生,但是,也没有什么意
义。
这里缺少的正是软件。当微处理器加电或复位时,它执行内存中某个地址里存放的机器
代码。对 8 0 8 0来说,这个地址是 0 0 0 0 h。对正确设计的计算机来说,加电时,该地址处应该有
一个机器代码指令(很可能是多个指令中的第一条)。
机器代码指令又是怎样放到内存的那个地方的呢?在新设计的计算机中,把软件放到合
适地方的处理过程可能是最令人费解的。要理解它,先从一个控制面板着手。该控制面板与
第1 6章讲到的用来写入字节到随机访问存储器然后再读出的控制面板相似:
控制面板
复位
写入
接管
与以前的控制面板不同的是,这个控制面板有一个标明为复位的开关,这个开关连到微
处理器的复位输入。只要这个开关是闭合的,处理器就什么也不做;当断开这个开关后,微
处理器开始执行机器码。
控制面板的使用方法是:复位开关置 O N,复位微处理器 ,中止执行机器码;接管开关置
O N,则接收总线上的地址信号和数据信号。这时,可以使用 A 0 ~A 1 5 开关输入1 6位的存储器地
址。标为 D 0 ~D 7 的灯用来显示该地址的 8位内容。要写入一个新的字节到相应的地址,则应在
D 0 ~D 7 开关上设置该字节,然后把写入开关先拨到 O N再拨到 O F F。完成了向内存中写入相应第22章 操 作 系 统
下载
233
字节以后,把接管开关设置为 O F F,复位开关设置为 O F F,则微处理器开始执行程序。
这就是如何向刚刚从头建成的计算机中输入第一个机器码程序的过程,不用说,这是很
费事的。
又是什么改变了这一切,使得人们乐于在视频显示器前查看自己程序的执行结果呢?在
上一章中已经讲到,只显示字符的视频显示器有 1 K B的随机访问存储器用来存放 2 5行,每行
4 0个字符的 A S C I I码。程序把内容写入到该存储器中,方法与写入到计算机中其他存储器中的
方法一样。
然而,把程序的输出显示到视频显示器并不是那么简单。例如,如果一段程序,执行结
果是4 B h,则不能简单地把这个值写入视频显示器的存储器中。如果这样做,屏幕上将会看到
的是字符 K,因为该字符对应的 A S C I I码是 4 B h。正确的是应写两个 A S C I I码字符到显示器:
3 4 h(是4的A S C I I码)和4 2 h(是B的A S C I I码)。8位的计算结果每半个字节是一个十六进制数
字,该数字必须通过对应的 A S C I I码来显示。
当然,也可以写一段小的子程序来完成这种转换。下面的一段 8 0 8 0汇编语言程序用来把
十六进制数中的一位转换成对应的 A S C I I码(假定包含的十六进制数范围从 0 0 h~0 F h):
NibbleToAscii: CMP A,0Ah ;Check if it’s a letter or number (判断是数字还是字母)
JC Number
ADD A,37h
;A to F converted to 41h to 46h(把A~F转换成41h~46h)
RET
Number:
ADD A,30h
; 0 to 9 converted to 30h to 39h(把0~9转换成30h~39h)
RET
下面的子程序调用 N i b b l e To A s c i i两次,把累加器A中的一个字节转换成两个 A S C I I码数字,
并放在寄存器B和C中:
ByteToAscii:
PUSH
PSW
RRC
;Save accumulator(保存A)
;Rotate A right 4 times...(A右移4次...)
RRC
RRC
RRC
;...to get high-order nibble(取高半字节)
CALL NibbleToAscii;Convert to ASCII code(转换成ASCII码)
MOV
B,A
POP PSW
AND A,0Fh
;Move result to register B(结果放入寄存器B)
;Get original A back(取出原来的A)
;Get low-order nibble(取低半字节)
CALL NibbleToAscii
MOV
C,A
;Convert to ASCII code(转换成ASCII码)
;Move result to register C(结果放入寄存器C)
RET
这些子程序使得可以在视频显示器中按十六进制来显示一个字节。如果要转换成十进制,
再做一些工作即可。此过程与把十六进制数转换成十进制数的方法非常相似 — 用1 0来除几
次即可。
记住,还没有把这些汇编语言程序输入到内存中。也许,你已经把它们写到了纸上并且
转换成了机器码,然后再输入到内存中。这种“手工汇编”是第 2 4章要讲的内容。
尽管控制面板不需要许多硬件,但却不容易使用。它所采用的输入 /输出方法是最坏的方
法。既然聪明到可以从零开始来制造自己的计算机,却还用数字 0和1来作为按键,的确令人234
编码的奥秘
下载
汗颜。那么首先要做的是去掉控制面板。
当然要用键盘来作为按键。前面讲过计算机键盘的构造是只要按下一个键,就会产生一
个对微处理器的中断信号。计算机中的中断控制芯片使得微处理器响应中断,执行一条 R S T
指令。假设这是一条 RST 1指令,这条指令使得微处理器在堆栈中保存当前程序计数器的值并
跳转到地址 0 0 0 8 h处。从这个地址开始,可以输入一些代码(用控制面板)。这些代码称为键
盘处理程序 。
为了使一切都正常工作,还需要一些代码在微处理器复位时执行,这些代码叫初始化程
序。初始化程序首先设置堆栈指针,使得堆栈分配到内存的有效区域,然后,把视频显示存
储器的每一个字节设置为十六进制数 2 0 h,即A S C I I码的空格,这样就可以去掉屏幕上的随机
字符。初始化程序用 O U T(O u t p u t)指令设置光标的位置(光标是视频显示器上的下划线,
指示了新输入的字符将要显示的位置)到第 1行第1列。下一条指令为 E I,即中断允许,该指
令使得微处理器可以响应键盘中断。在此之后是 H LT指令,它停止微处理器的工作。
这就是初始化程序的工作。从这时起,由于执行了 H LT指令,计算机很可能处于停机状
态。能够把计算机从停机状态唤起的事件仅有来自于控制面板的复位信号或从键盘来的中断
信号。
无论何时在键盘上按下一个键,中断信号都使得微处理器从初始化程序最后的 H LT语句
跳转到键盘处理程序。键盘处理程序用 I N(I n p u t)指令来确定按下的键,然后根据按下的键
来执行一些动作(即键盘处理程序处理每一个按键),接着执行一条 R E T(R e t u r n)指令,最
后又回到H LT语句等待另一个键盘中断。
不论按下的是字符、数字还是标点符号,键盘处理程序使用键盘扫描码,结合 S h i f t键是
否被按下,来确定合适的 A S C I I码。然后将 A S C I I码写到视频显示存储器中光标的位置。这个
过程称为回显键到显示器。光标位置增加并移到刚才显示的字符后面的空格处。由此,可以
在键盘上敲入一串字符并显示在屏幕上。
如果按下的键是 B a c k s p a c e(对应的 A S C I I码是0 8 h),则键盘处理程序删除最后写入到视
频显示存储器中的字符,(删除字符是很简单的一件事,只需写入 A S C I I码 2 0 h — 空格字符
— 到某一内存位置。)然后把光标移回一格。
人们通常在键盘上敲入一行字符(需要改正错误时可用
B a c k s p a c e键),然后敲入
R e t u r n (回车)键,回车键在计算机键盘上通常标为 E n t e r。与在电子打字机上敲 R e t u r n键表明已
经准备好开始输入下一行一样,在计算机中敲 E n t e r键表明打字者已经完成了一行文字的键入。
键盘处理程序在处理 R e t u r n或E n t e r键(对应的 A S C I I码为0 D h)的时候,视频显示存储器
的这一行字符被解释成对计算机的一个 命令,也就是说,键盘处理程序要去做的一些事情。
键盘处理程序中包含有命令处理程序用来解释命令,例如三个命令: W、D和R。
如果字符行以 W开始,该命令意味着 Wr i t e(写入)一些字节到内存中。假设敲入到屏幕
上的行如下面这样:
W
1020
35
4F
78
23
9B
AC
67
这个命令指示命令处理程序把十六进制数 3 5、4 F等写入到地址 1 0 2 0 h开始的内存中。为
了完成这项工作,键盘处理程序需要将 A S C I I码转换成字节 — 前面示范的那个变换的反变
换。
如果字符行以 D开头,该命令意味着 D i s p l a y(显示)内存中的一些字节。假使敲入到屏第22章 操 作 系 统
下载
235
幕上的行如下面这样:
D
1030
命令处理程序将会显示从内存地址 1 0 3 0 h开始的存放在内存中的 11个字节(之所以为 11,
是因为在 4 0个字符宽的显示器上,在与上面命令同一行的地址后面能显示的字符数为 11)。可
以用D i s p l a y命令来查看内存中的内容。
如果字符行以R开头,该命令意味着 R u n(运行),如下的命令:
R
1000
意味着“运行从地址 1 0 0 0 h处开始存储的程序”。命令处理程序把 1 0 0 0 h存到寄存器对 H L
中,然后执行指令 P C H L,即把寄存器对 H L的值装入程序计数器,也就是跳转到该地址处执
行程序。
采用键盘处理程序和命令处理程序进行工作是一个重要的里程碑。有了它,无需再用什
么控制面板,从键盘输入容易、迅速且效果良好。
当然,还有问题。当电源断电时,输入的所有代码会丢失。正因为如此,可能要把这些
新代码存到只读存储器,即 R O M中。上一章曾讲到了一个 R O M芯片里存有所有用来在屏幕上
显示A S C I I字符的点阵模式。假定所用的芯片在制造时已经配置有这些数据,则你也可以在家
里自己编程R O M芯片。可编程只读存储器( P R O M )芯片只可以编程一次;可擦除可编程只读
存储器( E P R O M)芯片即可以编程,而且它在紫外光的照射下擦除所有的信息后还可以重新
再进行编程。
前面讲过, R A M板连到 D I P开关, D I P开关允许设定 R A M板的开始地址。如果使用的是
8 0 8 0 系统,初始时一个 R A M板地址应设置成 0 0 0 0 h。如果还有 R O M,则 R O M的地址应为
0 0 0 0 h,而R A M板可以连到更高的地址。
命令处理程序的创建是一个重要的里程碑,不仅因为它对输入到内存中的字节提供了较
快的解释,而且使计算机现在成为交互式的了。当从键盘上敲入一些东西后,计算机就会做
出响应,并在屏幕上显示出来。
一旦有了 R O M中的命令处理程序,就可以开始试着从内存中写入数据到磁盘驱动器(可
能是对应于磁盘扇区大小的块),并且把数据读回到内存。把程序和数据存放在磁盘上比存放
在R A M中要安全得多(后者如果电源出故障它们会丢失),也比存放在R O M中要灵活得多。
也许应该加入一些命令到命令处理程序,如用 S命令来表示存储:
S
2080
2
15
3
这个命令表示从地址 2 0 8 0 h处开始的内存块将要存放到磁盘的第 2面,第1 5磁道,第 3扇区
(内存块的大小根据磁盘扇区的大小确定)。同样,也可以加入一个 L o a d命令:
L
2080
2
15
3
该命令把该扇区的内容从磁盘送回到内存中。
当然,还需要保留存放的地方的记录,可以用手边的本和铅笔来记录。一定要小心不要
把保存在某个地址的代码重载到内存的另一个地址,这样做就别指望它能正常工作。所有的
J u m p和C a l l指令将会出错,因为它们标识的是原来的地址。同样,如果一个程序比磁盘扇区
的大小要大,则需要把它存放到几个扇区。磁盘中有些扇区可能被其他程序或数据占用了,
有些扇区还是空的,因而存放长程序的扇区在磁盘上可能是不连续的。
这样,你可能就会发现手工记录哪些东西存放到哪些地方的工作是相当多的,正因为如236
编码的奥秘
下载
此,就需要有一个文件系统。
文件系统是指在磁盘存储器中按文件来组织数据的方法。文件是存放在一个或多个扇区
中相关数据的集合。更重要的是,每个文件有一个文件名作为标识,便于记住文件中包含的
内容。可以把磁盘看成类似于文件柜,里面的每一个文件都有一个标志用来表示文件的名称。
文件系统通常是称作操作系统的较大软件集合的一部分。本章构造的键盘处理程序和命
令处理程序也肯定包含在操作系统中。先不考虑其漫长的演化过程,让我们看一下真正的操
作系统是在干什么,又是如何工作的。
回顾历史,最重要的 8位微处理器操作系统是 C P / M,是Gary Kildall(出生于 1 9 4 2年)在
2 0世纪 7 0年代中期为 Intel 8080 微处理器而写的,他后来创立了 D R I (digital research
i n c o r p o r a t e d)公司。
C P / M存放在磁盘中。早期 C P / M最常用的存储介质是单面 8英寸磁盘,有 7 7个磁道,每道
2 6个扇区,每扇区 1 2 8个字节(总共 256 256字节),磁盘的头两个磁道包含有 C P / M。下面将
简单地描述 C P / M是如何从磁盘装入到计算机内存中的。
C P / M盘中余下的 7 5个磁道用来存储文件。 C P / M的文件系统虽然很简单,但却满足两个
基本的要求:首先,磁盘中的每个文件有一个名字作为标识,这个名字也存在磁盘中。其实,
C P / M用来读取文件所需的全部信息都与文件一起存放在磁盘中;第二,文件在磁盘中并不占
据连续的扇区。由于经常创建和删除不同大小的文件,因而磁盘上的剩余空间都是碎片。文
件系统具有把大文件存放在不连续扇区的这种能力是非常有用的。
用来存放文件的 7 5个磁道按 分配块进行分组,每一个分配块有 8个扇区,即1 0 2 4字节。磁
盘中共有2 4 3个分配块,编号从 0~2 4 2。
开始的两个分配块(共 2 0 4 8字节)用作目录区。目录区是磁盘中的一个特殊区域,用来
存放磁盘中每一个文件的名称和一些主要信息。存在磁盘中的每一个文件需要一个 3 2字节长
的目录项。因为目录区总共只有 2 0 4 8字节,因而磁盘能够存放 2 0 4 8 / 3 2,即6 4个文件。
每一个3 2字节的目录项包含有以下信息:
字节
0
含义
通常设为0
1~8 文件名
9~11 文件类型
1 2 文件扩展
1 3~1 4
1 5
1 6~3 1
保留(设置为 0)
最后一块的扇区数
磁盘存储表
目录项的第一个字节只在文件系统可供两个或更多人同时共享时使用。在 C P / M中,该字
节通常设置为0,与第1 3、1 4字节一样。
在C P / M中,每个文件的文件名由两部分组成,第一部分称作文件名,最多有 8个字符,
存放在目录项的第 1~8字节;第二部分是文件类型,最多有 3个字符,存放在第 9~11字节。
有几个标准的文件类型,如:
T X T 表示文本文件(即文件中只包含
A S C I I 码), C O M
(C o m m a n d的简称)表示文件内容是 8 0 8 0机器码指令或程序。定义文件时,这两部分由点隔
开,如:第22章 操 作 系 统
下载
237
MYLETTER.TXT
CALC.COM
这种文件命令的方式习惯上称为 8 . 3,表明点前最多有 8个字符,点后最多有 3个字符。
目录项中的磁盘存储表标明了该文件所存放的分配块。假设磁盘存储表的前
4项分别为
1 4 h、1 5 h、0 7 h和2 3 h,其余均为 0,则表明该文件占用 4个分配块,即 4 K B的空间。文件实际
上可能要短一些。目录项的第 1 5字节标明在最后一个分配块中实际用到了多少个 1 2 8字节的扇
区。
磁盘存储表长 1 6字节,可以容纳长达 16 384字节的文件,超过 1 6 K B的文件要使用多个目
录项,称为扩展。在这种情况下,第一个目录项的第 1 2字节设置为0,第二个目录项的第 1 2字
节设置为1,依此类推。
上面提到过文本文件也称为 A S C I I文件,或其他类似名称。文本文件中包含有对应于字符
的A S C I I 码(包括回车和换行代码)供人们浏览。不是文本文件的文件称为二进制文件。
C P / M的C O M文件为二进制文件,因而它包含 8 0 8 0的机器码。
假设一个文件(一个很小文件)包括三个 1 6位数 — 例如, 5 A 4 8 h、7 8 B F h和F 5 1 0 h。由
这三个数字组成的二进制文件长仅为 6字节:
48 5A
BF
78
10
F5
当然,这是存储多字节数的 I n t e l格式,其中低字节在前。为 M o t o r o l a处理器编写的程序则
是按以下方式来创建文件:
5A
48
78
BF
F5
10
若用A S C I I码文本文件存放这同样 3个1 6位数,则由以下这些字节组成:
35 41 34 38 68 0D 0A 37 38 42 46 68 0D 0A 46 35 31 30 68 0D 0A
这些字节是数字和字符的 A S C I I码,每一个数由回车( 0 D h)和换行( 0 A h)终止。文本
文件很容易显示,它们不是作为字节串 ,而是作为字符显示:
5A48h
78BFh
F510h
包含这3个数的A S C I I码文本文件也可以由以下字节组成:
32 33 31 31 32 0D 0A 33 30 39 31 31 0D 0A 36 32 37 33 36 0D 0A
这些字节是与这 3个数等效的十进制数的 A S C I I码:
23112
30911
62736
既然采用文本文件的目的是方便人们阅读,因而没有什么理由不用十进制而非要用十六
进制。
上面提到过, C P / M自身存放在磁盘的头两个磁道。为了执行它, C P / M必须从磁盘装载
到内存。使用C P / M的计算机中,R O M并不需要很多,它只需要用来存放一小段代码,称为引
导程序 (因为这段代码通过自举来引导操作系统的其余部分)。引导程序把磁盘最开始的 1 2 8
个字节的扇区装入内存并执行,这个扇区包含有把 C P / M的其余部分装入内存的代码。整个这
个过程称为 引导操作系统。238
编码的奥秘
下载
最终, C P / M把它自己安排在 R A M的最高地址区域。装载 C P / M以后,整个内存组织如下
所示:
系统参数
临时程序区域
(TPA)
控制台命令处理程序
(CCP)
基本磁盘操作系统
(BDOS)
基本输入/输出系统
最高地址
(BIOS)
该图不是按比例画的。 C P / M的三个部件 — 基本输入 /输出系统( B I O S)、基本磁盘操作
系统( B D O S)和控制台命令处理程序( C C P)仅占用 6 K B的内存,临时程序区域( T PA)
— 在6 4 K B内存的计算机中大约有 5 8 K B — 初始时没有任何东西。
控制台命令处理程序等效于前面构造的命令处理程序,控制台指的是键盘和显示器。
C C P在显示器上显示提示符,就像这样:
A>
提示符提示可以输入信息。在有不止一个磁盘驱动器的计算机中, A指的是第一个磁盘驱
动器, C P / M从该驱动器装入。在提示符后敲入命令并按回车键, C C P就执行该命令并在屏幕
上显示结果信息。命令执行完以后, C C P又显示提示符。
C C P只能识别一些命令,最重要的命令可能是:
DIR
该命令用来显示磁盘目录,即存放在磁盘中的所有文件的列表。可以用特殊字符?和 *来
限定显示具有某些特定名称和类型的文件,例如:
DIR
*.TXT
显示所有文本文件,而
DIR
A???B.*
显示文件名为5个字符,第一个字符为 A,最后一个字符为 B的所有文件。
另外一个命令是 E R A,它是E r a s e的缩写,用来从磁盘中删除文件。例如:
ERA
MYLETTER.TXT
删除具有这个名字的文件,而:
ERA *.TXT
删除所有文本文件。删除文件意味着释放文件的目录项及文件所占用的磁盘空间。
还一个命令是 R E N,它是 R e n a m e的缩写,用来改变文件名。 T Y P E命令用来显示文本文
件的内容。因为文本文件只包含有 A S C I I码,因而该命令还可用来浏览屏幕上的文件内容,
如:第22章 操 作 系 统
下载
TYPE
239
MYLETTER.TXT
S AV E命令用来把临时程序区域中的一个或多个 2 5 6字节的内存块以一个特定名称存入到磁盘
中。
如果敲入一个 C P / M不能识别的命令,就认为输入的是磁盘中的一个程序的名称。程序的
文件类型为C O M,代表命令。 C C P在磁盘中查找叫这个名字的文件,如果有, C P / M把文件从
磁盘装入临时程序区域,该区域从地址 0 1 0 0 h处开始。以上就是告诉你如何运行磁盘中的文件。
如果在C P / M提示符后敲入:
CALC
且如果名称为C A L C . C O M的文件存在于磁盘中,则 C C P把该文件装入从地址 0 1 0 0 h处开始的内
存中,然后转到地址 0 1 0 0 h处的机器码指令开始执行程序。
前面讲述了如何在内存的任一地方加入机器码指令并执行,但按磁盘文件存储的 C P / M程
序必须设计成从内存的特定地址 0 1 0 0 h处开始装入。
C P / M包括几个有用的程序,如 P I P(peripheral interchange program),即外设交换程序,
用来拷贝文件。 E D是文本编辑器,用来创建和修改文本文件。像 P I P和E D这类小且用来完成
简单事务的程序通常称为实用程序。如果运行 C P / M系统,可以购买一些大的应用程序,如字
处理软件或计算机电子报表软件;也可以自己编制这样的软件。所有这些也都以 C O M类型的
文件存储。
到目前为止,已经知道了 C P / M(像许多操作系统一样)如何提供命令和实用程序以便对
文件进行基本的操作。同样,也已经知道 C P / M如何把程序装载到内存并执行。作为一个操作
系统,C P / M还有第三个主要功能。
在C P / M下运行的程序经常需要把输出写到视频显示器,或者从键盘上读入输入的内容,
或者从磁盘读取一个文件和向磁盘中写入一个文件。但通常情况下, C P / M程序并不把程序输
出直接写到视频显示存储器中;同样, C P / M程序也不访问键盘硬件看看输入了什么,它也不
访问磁盘驱动器硬件去读或写磁盘的扇区。
事实上,运行在 C P / M下的程序利用 C P / M中所构建的子程序集来完成这些公共事务。这
些子程序经过特别设计,从而使得程序很容易访问计算机中的硬件 — 包括视频显示器、键
盘和磁盘 — 且程序设计员不用关心这些外设实际上是怎样进行连接的。更重要的是,在
C P / M下运行的程序不需要了解磁道、扇区,这是 C P / M的工作,它可以把文件存放到磁盘,
也可以读取磁盘上的文件。
为程序提供方便访问计算机硬件的手段是操作系统的第三个主要功能。操作系统提供的
这种访问手段称之为应用程序接口,即 A P I(application programming interface)。
在C P / M下运行的程序通过设置寄存器 C为某一特定值(叫作功能值)来使用A P I并执行指
令:
CALL
5
例如,一个程序通过执行下面的指令获取从键盘上输入的键的A S C I I码:
MOV
CALL
C,01h
5
累加器A中包含有输入的键的 A S C I I码。同样
MOV
C,02h240
CALL
编码的奥秘
下载
5
把累加器A中的A S C I I码字符写到视频显示器中光标的位置,光标移到下一个位置。
如果程序中要创建一个文件,则把寄存器对 D E设置为包含有文件名所在的内存区域的地
址,然后执行以下代码:
MOV
CALL
C,16h
5
此例中, C A L L 5指令使C P / M在磁盘上创建一个空文件。程序可以利用其他功能向文件写入,
最后关闭文件,意味着文件已经使用完毕。该程序和其他程序以后可打开文件并读取文件内
容。
C A L L 5到底能做什么呢?在内存 0 0 0 5 h位置由 C P / M设置了一条 J M P(J u m p)指令,该指
令跳转到 C P / M基本磁盘操作系统( B D O S)所在的位置。这个区域包含有一些子程序用来完
成C P / M的每一项功能。 B D O S正如它的名字一样,基本作用是维护磁盘上的文件系统。通常
B D O S必须利用 C P / M基本输入 /输出系统( B I O S)中的子程序,而 B I O S可实现对像键盘、视
频显示器以及磁盘驱动器这样的硬件的访问。实际上, B I O S是C P / M中唯一需要了解计算机硬
件的部分。 C C P利用B D O S的功能来实现自己功能,那些 C P / M提供的实用程序也是如此。
A P I是与设备无关的计算机硬件接口,也就是说在 C P / M下编写的程序不需要知道某一机
器上键盘的工作机制、视频显示器的工作机制或读写磁盘扇区的工作机制,它只是简单地利
用C P / M的功能来完成涉及到键盘、显示器和磁盘的工作。这样, C P / M程序就可以在不同的
计算机上运行,而这些机器可能会用差别很大的硬件来访问外设。(所有 C P / M程序必须运行
在8 0 8 0微处理器上,或能执行 8 0 8 0指令的处理器上,如: Intel 8085或Z i l o g的Z-8 0。)只要计
算机运行 C P / M,则程序就可以利用 C P / M的功能间接访问硬件。如果没有标准的 A P I,程序则
需要针对不同类型的计算机来做不同的工作。
C P / M曾经是 8 0 8 0中非常流行的操作系统,至今仍具有重要的历史意义。 C P / M对其后的
1 6位操作系统 Q D O S(quick and dirty operating system)有很大的影响。 Q D O S是西雅图计算
机产品公司( seattle computer products)的Tim Paterson为I n t e l的1 6位8 0 8 6和8 0 8 8芯片而编写
的。Q D O S后来改名为 8 6 - D O S,由M i c r o s o f t公司注册。该操作系统被授权给 I B M以M S - D O S
这个名称用于第 1代IBM PC 机。尽管 C P / M的1 6位版本(称为 C P / M-8 6)也可用于 IBM PC,
但M S - D O S很快成了标准。 M S - D O S(在I B M计算机上叫 P C - D O S)也允许其他生产 IBM PC
兼容机的厂商使用。
M S - D O S没有保留 C P / M的文件系统,在 M S - D O S文件系统中使用的是一张叫文件分配表
的表,即 FAT。这种技术最初由 M i c r o s o f t公司在 1 9 7 7年采用。磁盘空间分成簇,根据磁盘空
间大小,簇的大小也从 5 1 2~16 384字节不等。每个文件是簇的集合,文件的目录项只表明了
文件开始的簇, FAT能够表明磁盘上每一个簇的下一簇。
M S - D O S磁盘上的目录项长 3 2字节,采用与 C P / M一样的8 . 3文件命名系统,只是术语有些
不同:后面的 3个字符称作文件扩展名而不是文件类型。 M S - D O S的目录项无需包含分配块的
列表,它包含的是这样一些有用的信息,如文件最后修改的日期、时间及文件大小。
M S - D O S的早期版本在结构上很像 C P / M,但M S - D O S中不需要 B I O S,因为 IBM PC 中已
经有完整的 B I O S存放在了 R O M中。M S - D O S的命令处理程序是一个名叫 C O M M A N D . C O M的
文件。M S - D O S的运行程序有两种:具有扩展名 C O M的文件,大小不能超过 6 4 K B;具有扩展
名E X E(可执行)的较大文件。下载
作者: zzz19760225     时间: 2016-2-9 10:29
第22章 操 作 系 统
241
尽管开始时 MS-DOS 支持 CALL 5 API 功能接口,但对新的程序推荐了新的接口。新的
接口利用了 8 0 8 6的一个功能叫作软件中断,这类似于子程序调用,但程序不需要知道它正在
调用的确切地址。程序通过执行指令 INT 21h 调用 MS-DOS 的 API 功能。
理论上讲,应用程序只能通过操作系统提供的接口它们来访问计算机的硬件。但对针对
2 0世纪7 0年代和 8 0年代早期的小型操作系统的应用程序而言,经常绕过操作系统,尤其是在
处理视频显示器的时候。直接写入字节到视频存储器的程序比采用其他方式的程序执行速度
要快。的确,对有些应用程序 — 例如,那些需要在显示存储器上显示图形的应用程序 — 操
作系统是不合适的。 M S-D O S最吸引程序员的地方正是它的“反传统性”,程序员可以编写
程序以达到硬件的最快速度。
正因为如此,运行在 IBM PC 上的流行软件常常是根据 IBM PC的硬件特点编制的。机器
制造商为了与IBM PC竞争也不得不沿袭这些特点。如果不这样做,则会使得这些流行软件不
能运行。这些软件通常要求硬件是“ IBM PC或与IBM PC 100%兼容”。
MS-DOS 2.0版于1 9 8 3年3月发布,它增强了功能来使用硬盘驱动器。虽说当时的硬盘容
量很小(按今天的标准),但很快就变得大了起来。当然,硬盘越大就越能存储更多的文件,
但磁盘上存储的文件越多,则找到某个文件或组织文件就变得越麻烦。
MS-DOS 2.0的解决方法是采用层次文件系统,它对原有的 M S - D O S文件系统做了一些小
的改动。前面讲过,磁盘中有一个区域叫目录,它是一个文件列表,里面包含了有关文件存
放在磁盘的什么地方的信息。在层次文件系统里,一些这样的文件可能本身就是目录,也就
是说,它们是包含其他文件列表的文件,这些文件也有可能还是目录。磁盘中,这个常规的
目录称为根目录,包含在其他目录里的目录称为子目录。目录(有时称文件夹)成为对相关
文件进行分组的一种方法。
层次文件系统以及MS-DOS 2.0的其他一些功能是从U N I X操作系统借鉴来的。U N I X是2 0世
纪7 0年代早期在贝尔实验室开发的,大部分工作由 Ken Thompson (生于 1 9 4 3年)和 D e n n i s
R i t c h i e(生于1 9 4 1年)完成。这个操作系统有趣的名字是一个文字游戏:U N I X先是作为贝尔实
验室为M I T和G E开发的名为M u l t i c s(表示多路复用信息和计算业务: multiplexed information
and computing services)的早期操作系统的一个缺少健壮性的版本。
对设计计算机核心程序的计算机程序员来说, U N I X什么时候都是很好的操作系统。虽然
大多数操作系统都是针对特定计算机的,但 U N I X是可移植的,意思是它可以运行在各种各样
的计算机中。
在开发U N I X的时候,贝尔实验室还是 AT&T的一个辅助机构。为了抑制 AT&T在电话业
的垄断地位, AT&T受到法庭裁决。起初, AT&T被禁止销售 U N I X,公司被迫把它授权给别
人。所以从1 9 7 3年开始, U N I X被广泛授权给大学、公司和政府机构。 1 9 8 3年,AT&T获准重
返计算机业并发布了它自己的 U N I X版本。
由此导致的结果就是没有单一的 U N I X版本,相反,有许多不同的版本,用不同的名称,
运行在不同的计算机上并由不同的经销商销售。许多人把手伸向 U N I X,并在 U N I X上留下印
迹。然而,当人们在 U N I X上加一些东西时,似乎仍然有一种流行的“ U N I X哲学”在引导人
们。这个哲学的其中一部分是用文本文件作为公用的文件形式。许多 U N I X实用程序读取文本
文件,利用它们来做一些工作,然后写入另外一个文本文件。 U N I X的实用程序可以组织起来
形成一个链,然后在这些文本文件上实现不同的处理。242
编码的奥秘
下载
U N I X最初是为只一个人使用时大且昂贵的计算机而编写的。使用 U N I X的计算机通过分
时技术允许多个用户同时与计算机交互操作。由于很快地在所有终端之间切换时间片, U N I X
操作系统使得用户感觉计算机就像在同时为每个人服务。
并行运行多道程序的操作系统称为多任务操作系统。显然,这种操作系统比像
C P / M和
M S - D O S这样的单任务操作系统要复杂得多。多任务使得文件系统复杂化,因为多个用户可
能会试图同时访问同一个文件。多任务同样也影响到计算机如何为不同程序分配内存,所以
需要进行内存管理。由于多道程序并行运行需要更多的内存,因而很可能计算机没有足够的
内存来分配。操作系统可能需要采用虚拟内存技术,当程序不需要某些内存块时可以把它们
存放在临时文件中,等需要时再读回内存。
近几年来,U N I X最令人感兴趣的发展是 F S F(自由软件基金会,free software foundation)
和G U N方案,它们都由 Richard Stallman建立。 G U N表示“ G U N不是U N I X”,当然, G U N不
是U N I X。G U N试图与U N I X兼容但却采用了一种方式来使得软件不成为专有的。 G U N方案导
致了许多与U N I X兼容的实用程序和工具,还有 L i n u x,它是一个与 U N I X兼容的操作系统的内
核。L i n u x的大部分程序由芬兰的 Linus To r v a l d s完成。近几年, L i n u x已经变得很流行。
从2 0世纪8 0年代中期开始,操作系统最显著的发展趋势是开发大型的、成熟的操作系统,
如,苹果公司的 M a c i n t o s h和微软的 Wi n d o w s ,它们结合了图形和可视化视频显示,从而使其更
容易使用。本书最后一章将要描述这种趋势。下载
第23章 定点数和浮点数
日常生活中,有各种各样的数,整数、分数、百分数等等,我们无时无刻不与这些数打
交道。如:用加班 2 . 7 5小时获得的 1倍半的钱来买半匣鸡蛋需支付 8 . 2 5 %的销售税。许多人对
诸如此类的数都感到很适应,并不需要怎么在行,即使在听到“平均每个美国家庭有 2 . 6人”
这样的统计数字的时候,也不会联想到 2 . 6这个数字对人来说是不是要把人肢解了这样可怕的
问题。
在计算机内存里,整数和分数的换算是常见的。存在计算机内存里的东西都是二进制位
的形式,也就是说,都是二进制数。但有些数用位来表示比其他数用位来表示要容易一些。
我们使用位来表示数学上称为自然数而计算机编程人员称为正整型数的数,并介绍如何
用2的补码来表示负整数,而这种方法很容易实现正数、负数的加法。下表列出了 8位、1 6位、
3 2位的正整数及它们的 2的补码的范围:
数的位数
8
正整数范围
0~2 5 5
2的补码范围
-1 2 8~1 2 7
1 6 0~65 535 -32 768~32 767
3 2 0~4 294 967 295 -2 147 483 648~2 147 483 647
要介绍的就是这些。除了整数以外,数学上还定义了有理数,它们可表示成两个整数的
比,这个比也叫分数。例如, 3 / 4是一个有理数,因为它是 3与4的比。可以把这个数写成小数
形式0 . 7 5,当写成小数时,它真正表示了分数,在此为 7 5 / 1 0 0。
回忆一下第7章里的小数系统,在小数点左边的数字与 1 0的整数次幂相关联;同样,在小
数点右边的数字与 1 0的负整数次幂相关联。第 7章用42 705.684作为例子,该数可以表示成与
下面与之相等的形式:
4×10 000+
2×1 0 0 0+
7×1 0 0+
0×1 0+
5×1+
6÷1 0+
8÷1 0 0+
4÷1 0 0 0
注意一下除号,可以把这个序列写成没有除号的形式:
4×10 000+
2×1 0 0 0+
7×1 0 0+
0×1 0+244
编码的奥秘
下载
5×1+
6×0 . 1+
8×0 . 0 1+
4×0 . 0 0 1
最后,可以用1 0的幂的形式表示如下:
4×1 0 4 +
2×1 0 3 +
7×1 0 2 +
0×1 0 1 +
5×1 0 0 +
6×1 0 -1 +
8×1 0 -2 +
4×1 0 -3
有些分数并不容易用小数表示,常见的如 1 / 3。如果用3 去除1,可以得到:
0.3333333333333333333333......
而永无止境。我们通常写成简洁形式,在 3 上面加一道横线来表示无限循环:
0 . -
3
即使这样,把1 / 3写成小数也是有些笨拙的。它还是一个分数,因为它是两个整数的比。同样,
1 / 7是:
0.142857142857142857......
或0.142857
无理数则更不同,如 2的平方根。无理数不能表示成两个整数的比,也就是说,小数部分
是无穷的,没有重复规律或固定模式:
2的平方根是下面这个代数方程的根:
x 2 - 2 = 0
如果一个数不是以整数为系数的代数方程的根,则称为超越数(所有的超越数为无理数,
但并不是所有的无理数都是超越数)。超越数包括π,它是圆的周长与直径的比,近似值为:
3 . 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 8 4 6 2 6 4 3 3 8 3 2 7 9 5 0 2 8 8 4 1 9 7 1 6 9 3 9 9 3 7 5 1 1 . . . . . .
另一个超越数是е,它是下面表达式:

1  n
 1+ 

n 
当n趋近于无穷大时的近似值:
2.71828182845904523536028747135266249775724709369996...
到现在为止,谈到的所有数 — 有理数和无理数 — 统称为实数。这种定义用来与虚数相
区分。虚数是负数的平方根,复数是由虚数和实数组成的。不管名称如何,虚数揭示了现实
世界的奥秘,可以用来(例如)解决电子学的一些高级问题。
习惯上,我们把数看成是连续的。如果给出两个有理数,则可以找出一个数在这两个数
中间。实际上,只需取平均值即可。但是,数字计算机不能处理连续事件。位不是
0就是1,第23章 定点数和浮点数
下载
245
没有中间值。由于这一特性,数字计算机必须处理离散值 。可以表示的离散值的个数直接与
可达到的二进制位数相关。例如:如果用 3 2位来存放正整数,则可以存放 0~4 294 967 295个
整数。如果需要存放 4 . 5这个数,则必须重新考虑一种方法并做一些改动。
小数可以表示成二进制吗?是的,可以。最容易的方法可能是二进制编码的十进制
(B C D)。前面第 1 9章讲到 B C D是十进制数的二进制编码,每一个十进制数字( 0、1、2、3、
4、5、6、7、8和9)需要4位,如下表所示:
十进制数字 二进制数字
0
1
2
3
4
5
6
7
8
9 0 0 0 0
0 0 0 1
0 0 1 0
0 0 11
0 1 0 0
0 1 0 1
0 11 0
0 111
1 0 0 0
1 0 0 1
B C D码特别适用于用美元和美分表示的与钱数有关的计算机程序。银行和保险公司是两
个典型的多与钱打交道的行业,对这类公司的计算机程序来说,许多分数只需要两个十进制
数位。
通常1个字节存储两个 B C D数字,有时将这称为压缩B C D码。2的补码不与 B C D一起使用,
因此,压缩 B C D码通常要有额外的一位 (称作符号位 )来标明是正数还是负数。一个 B C D数存
入整个字节比较方便,所以,小小的符号位通常需要牺牲 4位或8位的存储空间。
来看一个例子。假定计算机要处理的钱数不会超过正、负 1 0 0 0万,换句话说,需要表示
的钱数的范围从- 9 999 999.99~9 999 999.99,则存储在内存的每一笔钱数需要用 5个字节来
表示。例如,- 4 325 120.35用5个字节表示为:
00010100 00110010 01010001 00100000 00100101
或用十六进制表示为:
14h 32h
51h
20h
25h
注意最左边的1用来表示负数,即符号位。如果是正数,则该位为 0。每一个数字需要 4位,
从十六进制值中可以直接看到。
如果需要表示的数的范围从- 99 999 999.99~99 999 999.99,则需要 6个字节 — 1 0个数
字占5个字节,另一个字节仅用来表示符号位。
这类存储和标记方法也称作定点格式,因为小数点通常固定在特定的位置 — 本例中,小
数点在两个小数位之前。注意,实际上并没有什么东西与数一起存放用来标明小数点的位置。
处理定点格式数的程序应该知道小数点在哪里。定点数可以有任意个小数位数,在同一计算
机程序里可以混用这些数字,但是对这些数进行算术运算的那部分程序必须知道小数点的位
置。
定点格式只在知道这些数不会超过预先确定的内存单元,且没有太多小数位的场合比较适
用。在数可能很大或可能很小的场合定点格式完全不适用。假设保留一个内存区域用来存储以
英尺为单位的距离,则存在的问题是距离可能超出范围。从地球到太阳的距离是490 000 0 0 0 0 0 0246
编码的奥秘
下载
英尺,氢原子的半径为 0 . 0 0 0 0 0 0 0 0 0 2 6英尺,则你需要 1 2字节的定点存储空间来容纳这些可能
很大也可能很小的数值。
如果你还记得科学家和工程师们喜欢用称为“科学记数法”的系统来表示数的话,你也
许已找到更好的存储此类数的方法。科学记数法特别适用于表示很大和很小的数,因为它采
用1 0的幂方法从而不用写很长的一串 0。采用科学记数法后,数字
490 000 000 000 写成 4 . 9×1 0 11
数字
0.00000000026 写成2 . 6×1 0 -1 0
在这两个例子里,数字 4 . 9和2 . 6称作小数部分或首数,有时也称作有效数(尽管这个词更
适用于对数运算)。为了与计算机术语相协调,在这儿把科学记数法的这一部分称作有效数。
指数部分是 1 0的幂。在第一个例子中,指数是 11;在第二个例子中,指数是- 1 0。指数
用来指明有效数的小数点要移动的位数。
为方便起见,有效数通常大于或等于 1而小于1 0。尽管下面的数字是相等的:
4 . 9×1 0 11 =4 9×1 0 1 0 =4 9 0×1 0 9 =0 . 4 9×1 0 1 2 =0 . 0 4 9×1 0 1 3
但我们选用第一种格式。这种格式也称作科学记数法的规格化格式 。
注意,指数符号只是标明数的大小而并不表示数本身是正的还是负的。下面是用科学记
数法表示的两个负数的例子:
-5 . 8 1 2 5×1 0 7 等于-58 125 000

-5 . 8 1 2 5×1 0 -7 等于-0 . 0 0 0 0 0 0 5 8 1 2 5
在计算机中,对应于定点表示法的是浮点表示法。浮点格式用来存储较小或较大的数比
较理想,因为它是以科学记数法为基础的。但是,计算机中采用的浮点格式是用科学记数法
表示的二进制数。这里首先要提到的是如何用二进制表示小数数字。
实际上,这比设想的要容易,在十进制表示中,小数点右边的数字具有
1 0的负整数次
幂;在二进制表示中,二进制小数点(也仅是一个点,看起来与十进制小数点一样)右边的
数具有2 的负整数次幂。例如,一个二制数:
1 0 1 . 11 0 1
可以用以下表达式转换成十进制:
1×4+
0×2+
1×1+
1÷2+
1÷4+
0÷8+
1÷1 6
除号可以用 2 的负整数次幂替换:第23章 定点数和浮点数
下载
247
1×2 2 +
0×2 1 +
1×2 0 +
1×2 -1 +
1×2 -2 +
0×2 -3 +
1×2 -4
或者,2的负整数次幂可以从 1开始重复除以2来计算:
1×4+
0×2+
1×1+
1×0 . 5+
1×0 . 2 5+
0×0 . 1 2 5+
1×0 . 0 6 2 5
通过这些计算得到 1 0 1 . 11 0 1等效的十进制数 5 . 8 1 2 5。
在十进制科学记数法中,规格化有效数通常大于或等于 1而小于1 0。同样,二进制科学记
数法的规格化有效数也通常大于或等于 1而小于1 0(即十进制中的 2)。所以,按二进制科学记
数法,数
1 0 1 . 1101 表示成
1 . 0 111 0 1×2 2
这个规则隐含了一件有趣的事实:通常二进制浮点数在二进制小数点的左边除了 1以外再
没有别的了。
现代计算机和计算机程序按照 I E E E在1 9 8 5年制定的标准来处理浮点数,这个标准也为
ANSI(the American national standards institute ,美国国家标准局 )所认可。 A N S I / I E E E
S t d 7 5 4-1 9 8 5称作 I E E E二进制浮点数算术运算标准。它并不像一般标准那样长,只有 1 8页,
但却奠定了以方便的方式编码二进制浮点数的基础。
I E E E浮点数标准定义了两个基本格式:单精度格式,需要 4个字节;双精度格式,需要 8
个字节。
首先看一下单精度格式,它有三部分: 1位个符号位( 0表示正, 1表示负)、8位的指数位
和2 3位的有效数位。如下所示,最低有效数在最右边:
s=1位符号
e=8位指数
f=23位有效数
总共有3 2位,4个字节。因为规格化二进制浮点数的有效数通常在二进制小数点左边为 1,
所以在 I E E E格式中这一位不包含在浮点数的存储空间中。有效数的 2 3位小数部分是反被存储
的部分,所以,即使只有 2 3位用来存储有效数,精度仍然认为是 2 4位的。过一会儿将要看到
2 4位精度的意义。
8位指数范围从 0~2 5 5,称为 移码指数,意思是必须从指数中减去一个数(称为偏移量)
才能确定有符号指数的实际值。对单精度浮点数,偏移量为 127 。248
编码的奥秘
下载
指数0和2 5 5用于特殊用途,在此简单描述一下。如果指数从1变化到2 5 4,则由s(符号位)、
e(指数)和 f(有效数)来表示的数为:
(-1) s ×1 . f×2 e-1 2 7
-1的s次幂是数学上的一种方法,意思是“如果 s为0,则数是正的(因为任何数的 0次幂
等于1);如果s为1,则数是负的(因为- 1的1次幂为-1)”。
表达式的另一部分是 1 . f,意思是 1后面为二进制小数点,再后面为 2 3位的有效小数部分。
它乘以2的幂,其中指数为内存中的 8位移码指数减去 1 2 7。
注意,到现在还没有提到如何表示一个很常见的数字,那就是
0。这是一种特殊情况,
即:
• 如果e等于0,且f等于0,则数为0。通常,所有3 2位均为0则表示0。但是符号位可以是 1,
在这种情况下,数被解释为- 0。-0可以表示一个很小的数,小到在单精度格式中不能
用数字和指数来表示。尽管如此,它们然小于 0。
• 如果e等于0,且f不等于0,则数是有效的。但是,它不是规格化的数,它等于
(-1) s ×0 . f×2 - 1 2 7
注意,二进制小数点左边的有效数为 0。
• 如果e等于2 5 5,且f等于0,则数为正或负无穷大,这取决于符号 s。
• 如果e等于2 5 5,且f不等于0,该值被认为“不是一个数”,简写为N a N。N a N可以表示一
个不知道的数或者一个无效操作的结果。
通常,单精度浮点格式中可以表示的最小规格化的正或负二进制数为:
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T W O ×2 -1 2 6
在二进制小数点之后有 2 3个0。在单精度浮点格式中可以表示的最大规格化的正或负二进
制数为:
1 . 11111111111111111111111 T W O ×2 1 2 7
换算或十进制,这两个数近似为 1 . 1 7 5 4 9 4 3 5 1×1 0 -3 8 和3 . 4 0 2 8 2 3 4 6 6×1 0 3 8 。这就是单精度
浮点数表示法的有效范围。
前面讲过, 1 0位二进制数近似等于 3位十进制数。也就是说,若 1 0位都置1 (即十六进制为
3 F F h,十进制为 1 0 2 3 ),则它近似等于 3位十进制都设置为 9,即9 9 9。或者
2 1 0 ≈1 0 3
这种关系表明按单精度浮点格式存放的 2 4位二进制数大约与 7位十进制数等效。因此,也
可以说单精度浮点格式提供 2 4位二进制精度,或大约 7位十进制精度。它的含义是什么呢?
当观察定点数的时候,数的精度是很显然的。例如,对于钱数,用两位十进制小数的定
点数就可精确到分。但是,对浮点数来说,就不能这么肯定了。根据指数值的不同,有时浮
点数可以精确到比分还小的单位,有时甚至不能精确到元。
粗略地讲,单精度浮点数可精确到 1 / 2 2 4 ,或1 / 1 6 7 7 7 2 1 6,或约百万分之六。这到底是什么
意思呢?
从某种意义上讲,它意味着如果想用单精度浮点数来表示 16 777 216和16 777 217,其结
果是一样的。而且,在这两个数之间的任何数(如 16 777 216.5)也认为是与它们一样的。所第23章 定点数和浮点数
下载
249
有这3个十进制数都按 3 2位单精度浮点数
4 B 8 0 0 0 0 0 h
来存放。当把此数分成符号位,指数和有效数位时,如下所示:
0 10010111 00000000000000000000000
也即为
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T W O ×2 2 4
下一个表示的最大有效数是 16 777 218,它的二进制浮点表示为:
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 T W O ×2 2 4
两个不同的十进制数却以相同的浮点数存放可能是也可能不是一个问题。
如果是为银行编写程序且用单精度浮点数来存储元、分等,则你可能会很苦恼地发现
$262 144.00与$262 144.01是一样的。两个数字都是:
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T W O ×2 1 8
这就是当处理元、分的时候,为什么要用定点数的原因。在处理浮点数的时候,可能还会发
现其他足以使人发疯的小毛病。程序原本计算的结果是 3 . 5 0却成了3 . 4 9 9 9 9 9 9 9 9 9 9 9。浮点计算
中这种事情经常发生,但也没有别的更好的处理方法。
如果想用浮点表示法,又不想出现单精度那样的问题,可以用双精度浮点格式。这样的
数需要8个字节来存放,格式如下:
s=1位符号
e=11位指数
f=52位有效数
指数偏移量为1 0 2 3,即3 F F h,所以,以这种格式存放的数为
(-1) s ×1 . f×2 e-1 0 2 3
它具有与单精度格式中所提到适用于 0、无穷大和 N a N等情形相同的规则。
最小的双精度浮点格式的正数或负数为
(1 . 0 . . . . . . 0) T W O ×2 -1 0 2 2
5 2个0
最大的数为
(1 . 1 . . . . . . 1) T W O ×2 1 0 2 3
5 2个1
用十进制表示,它的范围近似为 2 . 2 2 5 0 7 3 8 5 8 5 0 7 2 0 1 4×1 0 -3 0 8 ~1 . 7 9 7 6 9 3 1 3 4 8 6 2 3 1 5 8×
1 0 3 0 8 。1 0的3 0 8次幂是一个非常大的数,在 1 后面有3 0 8个十进制零。
5 3位有效数(包括没有包含在内的那 1位)的精度与 1 6个十进制位表示的精度十分接近。
相对于单精度浮点数来说这种表示要好多了,但它仍然意味着最终还是有一些数与另一些数
是相等的。例如, 140 737 488 355 328.00与140 737 488 355 328.01是相同的,这两个数按照
6 4位双精度浮点格式存储,结果都是:
4 2 E 0 0 0 0 0 0 0 0 0 0 0 0 0 h
可把它转换为:250
编码的奥秘
下载
(1 . 0 . . . . . . 0) T W O ×2 4 7
5 2个0
当然,开发一种格式用来在存储器中存储浮点数只是在汇编语言程序中实际使用这些数
的工作中的一小部分。如果真的要研制与世隔绝的计算机,则你需要面对编写浮点数的加、
减、乘、除的函数集的工作。幸运的是,这些工作可以被分解成许多小的只涉及到整数的加、
减、乘、除的工作,而整数的四则运算我们已经知道如何实现了。
例如,浮点加法的关键是有效数相加,因而用的技巧是用两个数的指数部分确定有效数
如何移位。假设要做以下加法:
(1 . 11 0 1×2 5 )+(1 . 0 0 1 0×2 2 )
需要把 111 0 1与1 0 0 1 0相加,但不是就这样相加。指数部分的不同表明第二个数必须进行
移位。实际上,需要进行 111 0 1 0 0 0和1 0 0 1 0的整数加法。最后的和是:
1 . 1111 0 1 0×2 5
有时两个数的指数部分差距很大,其中一个数甚至对和没有影响。就像这种情况:把地
球到太阳的距离与氢原子的半径相加。
两个浮点数的相乘是把有效数部分像整型数那样相乘并把两个整型指数相加。通常,规
格化有效数部分可能会引起对新的指数调整一、二次。
浮点算术运算中另一个复杂问题牵涉到较麻烦的计算,如方根、幂、对数和三角函数。
但是,所有这些工作都可以用四个基本的浮点操作:加、减、乘、除来完成。
例如,三角函数 S i n可以通过下列展开式来计算,如下:
参数x必须是弧度, 3 6 0度的弧度为 2 π。感叹号是阶乘符号,其含义是把 1到该数之间的所
有整数相乘,如: 5 !=1×2×3×4×5。这只是进行乘法运算,其中每一项的指数部分也是乘
法。其余的是一些除法、加法和减法。唯一真正麻烦的部分是在最后的省略,它意味着要永
远地计算下去。然而,实际上,如果局限在 0~π / 2的范围(从这里可以推导出所有其他的正
弦函数值),并不需要进行多少展开运算。在展开大约 1 2项以后,已经精确到了双精度数的 5 3
位。
当然,使用计算机是为了使人们更容易完成某些工作,所以,编写浮点运算程序这样的
工作似乎离使用计算机的目的相差甚远。然而,这正是软件的可爱之处:一旦某人为某台机
器编写了浮点运算程序,其他人都可以使用。对科学和工程应用程序来说,浮点运算非常重
要,所以通常有很高的优先权。在计算机出现的早期,一旦新的类型的计算机出来,编写浮
点运算程序通常是第 1项软件工作。
事实上,甚至可以设计计算机机器码指令直接进行浮点运算!显然,说起来容易做起来
难,但这也说明了浮点运算的重要性。如果可以用硬件来实现浮点运算 — 与1 6位微处理器
的乘法和除法指令一样 — 则计算机中所有浮点运算工作将会完成得更快。
最早把浮点运算硬件作为选件的商用计算机是 1 9 5 4年的IBM 704,7 0 4把所有的数按 3 6位
来存储。对浮点数,分成 2 7位的有效数、 8位指数和 1个符号位。浮点运算硬件可做加法、减
法、乘法和除法,其他浮点运算功能必须用软件来实现。下载
第23章 定点数和浮点数
251
桌面机的浮点运算硬件出现在 1 9 8 0年,当时 I n t e l发布了 8 0 8 7数字数据协处理器芯片,一
种集成电路芯片,今天通常称为数学协处理器或浮点运算单元(floating-point unit ,F P U)。
8 0 8 7之所以称为协处理器是因为它不能自己单独使用,它只能与 8 0 8 6或8 0 8 8一起使用, 8 0 8 6
和8 0 8 8是I n t e l的第一个1 6位微处理器。
8 0 8 7有4 0个引脚,使用许多与 8 0 8 6和8 0 8 8相同的信号。微处理器和数学协处理器通过这
些信号连接起来。当 C P U收到一个特殊指令 — 称为E S C,代表 E s c a p e — 则协处理器接管系
统控制权并执行下一条机器代码,即包括三角运算、指数、对数运算的 6 8条指令中的一条。
数据类型以 I E E E标准为基础。那时, 8 0 8 7被认为是所生产的最高级的集成电路。
可以认为协处理器是一个小的自包含的计算机。在响应某个浮点运算机器码指令时(例
如,计算平方根的 F S Q RT指令),协处理器内部执行存放在 R O M中的自己的指令序列,这些
内部指令称为微代码。这些指令通常是循环的,所以计算结果并不是马上可用。尽管如此,
一般来说,数学协处理器至少比用软件来实现的同样例程要快 1 0倍。
初始的IBM PC主板在8 0 8 8芯片的右边有一个 4 0管脚的插槽供 8 0 8 7用。遗憾的是,这个插
槽是空的,需要加速浮点运算的用户必须单独购买 8 0 8 7并自己把它安装上。即使在安装了数
学协处理器后,并不是所有的应用程序都可以运行得更快,一些应用程序 — 如,文字处理
程序 — 几乎不需要浮点运算。其他如电子报表程序则要用到很多浮点计算。这些程序能够
运行得更快,但并不是所有程序都是如此。
可以看到,程序员必须用协处理器机器码指令来编写特定的代码供协处理器执行。因为
数学协处理器不是硬件的标准部分,因而许多程序员怕麻烦不愿意做。但是,他们还是不得
不编写自己的浮点运算子程序(因为许多人并没有安装数学协处理器),所以支持8 0 8 7芯片就
成为一个额外的负担 — 一个不小的负担。最终,如果他们程序运行的机器上有数学协处理
器,程序员要学会编写利用数学协处理器的应用程序;如果没有,则要编写浮点运算仿真程
序。
经过几年后, I n t e l还发布了用于 2 8 6芯片的 2 8 7数学协处理器,用于 3 8 6的3 8 7数学协处理
器。但对于 1 9 8 9年发布的 Intel 486DX,F P U已经做在了 C P U里面,而不再是作为一个选件!
遗憾的是,1 9 9 1年I n t e l发布了一种低价格的 4 8 6 S X,它没有把 F P U做在C P U里面,而是提供了
4 8 7 S X数学协处理器作为一个选件。 1 9 9 3年发布的 P e n t i u m芯片却再一次使做在 C P U内部的
F P U成为标准,也许以后永远会这样。 M o t o r o l a在它的 6 8 0 4 0微处理器里集成了 F P U,该微处
理器于1 9 9 0年发布。以前, M o t o r o l a销售6 8 8 8 1和6 8 8 8 2数学协处理器用来支持早先 6 8 0 0 0家族
的微处理器。P o w e r P C芯片也把浮点运算硬件集成在内部。
尽管浮点运算硬件对专门从事汇编语言程序设计的程序员来说是一个很好的礼物,但是,
与2 0世纪5 0年代早期开始的其他一些工作相比这只是微不足道的进步。我们的下一个主题是:
计算机语言。下载
第24章 高级语言和低级语言
用机器码编程就像用牙签吃东西,刺的块很小且做起来很费力,吃一顿饭要花很长时间。
同样,每个机器码字节只是完成可以想像得到的最小且最简单的计算工作 — 从内存装入一
个数至处理器,与把它另一个数相加,再把结果存回到内存 — 所以,很难想像机器码如何
完成一整项的工作。
至此,我们至少已从第 2 2章开始处的原始模型阶段有了一些进步,从前我们一直用控制
面板上的开关输入二进制数据到内存。在第 2 2章里,介绍了如何写简单的程序用键盘输入并
在视频显示器上检查机器码的十六进制字节码。这当然不错,但还不是改进的终点。
正如我们所知道的,机器码字节与某些短的助记符相关联,如 M O V 、A D D、C A L L和
H LT,因此,可以用一些模糊类似的英语来引用机器码。这些助记符通常与操作数写在一起,
进一步表明机器码指令的功能。例如: 8 0 8 0机器码字节 4 6 h使得微处理器把寄存器对 H L中的
1 6位数寻址的内存单元所存放的内容传送到寄存器 B。这可以很简明地写成:
MOV
B,[HL]
当然,用汇编语言编写程序比用机器码要容易得多,但微处理器并不能理解汇编语言。
我们已经讲过如何在纸上编写汇编程序,只有当想在微处理器上运行汇编语言程序的时候,
才会手工汇编程序,意思是把汇编语言语句转换成机器码字节并输入到内存。
如果能让计算机来做这项转换工作就更好了。如果你正在 8 0 8 0计算机上运行 C P / M操作系
统,则你已经具有了所需要的工具。下面介绍它是如何工作的。
首先,建立一个文本文件,包含有你用汇编语言编写的程序。可以用 C P / M程序E D . C O M
来完成这项工作。该程序是一个文本编辑器,可用来创建、修改文本文件。现假设创建的文
本文件名称为 P R O G R A M 1 . A S M。A S M文件类型表明该文件是汇编语言程序文件,该文件看
起来就像下面这样:
ORG
0100h
LXI DE, Text
MVI C,9
CALL
5
RET
Text: DB
'Hello!$'
END
文件中有几个语句以前没有见过。第一个是 O R G(o r i g i n)语句,该语句不对应于任何一条
8 0 8 0指令,它表示下一条语句的地址从地址 0 1 0 0 h处开始。前面讲过,这就是 C P / M程序装入
到内存的地址。
下一个语句是 L X I(load extended immediate)指令,它装入一个 1 6位数到寄存器对 D E。
本例中, 1 6位数由标号 Te x t给出。标号在程序的下部, D B(Data Byte)语句之前。 D B也是
以前未见到的, D B语句后面可以是几个逗号隔开的字节或(就像本例中)在单引号里的一些
字符。第24章 高级语言和低级语言
下载
253
M V I(move immediate)语句把数 9送到寄存器 C。CALL 5 语句进行C P / M功能调用。功
能9的意思是:显示一个字符串,起始地址由寄存器对 D E给出,遇到美元符号结束。(注意,
文本以美元符号作为字符串的结束是很奇怪的,但 C P / M就采用这种方法。)最后的 R E T语句
用来结束程序并把控制权返还给 C P / M(这实际上是结束 C P / M程序的几种方法之一)。E N D语
句表示汇编语言文件结束。
即然已经有了 7行文本的文本文件,下一步是汇编该文件,即把它转换成机器码。以前是
用手工来完成,自从运行 C P / M后,可以用包含在 C P / M中的名为 A S M . C O M的程序来完成。这
个程序是C P / M汇编程序,在C P / M命令行运行 A S M . C O M,方法为:
ASM
PROGRAM1.ASM
A S M程序汇编 P R O G R A M 1 . A S M文件并创建新的文件,名为 P R O G R A M 1 . C O M,它含有
与编写的汇编语言程序相对应的机器码(实际上,在这个过程中还有另外一步,但在这里并
不重要)。现在,在 C P / M命令行就可以运行 P R O G R A M 1 . C O M,结果显示字符“ H e l l o !”,然
后结束。
P R O G R A M 1 . C O M文件包含有下面1 6个字节:
11 09
01
0E
09
CD
05
00
C9
48
65
6C
6C
6F
21
24
前面3个字节是 L X I指令,紧接着 2个字节是 M V I指令,再后面 3个字节是 C A L L指令,然后是
R E T指令,最后 7个字节是“ H e l l o”、感叹号和美元符号的 A S C I I码。
像A S M . C O M这样的汇编程序所做的工作是:读入一个汇编语言程序(常称作源代码文件),
产生一个包含有机器码的文件 — 可执行文件。从大的方面来看,汇编程序是相当简单的程
序,因为在汇编语言助记符与机器码之间存在一一对应的关系。汇编程序把每一个文本行分
成助记符和参数,然后把这些单词和字符与一张表相对照,该表中存有所有可能的助记符和
参数。通过这种对照就可以找到每个语句所对应的机器码指令。
注意汇编程序是如何得出 L X I指令必须把寄存器对 D E设置为地址 0 1 0 9 h的。如果 L X I指令
本身在0 1 0 0 h处(C P / M把程序装入内存运行时的地址),则0 1 0 9 h是就Te x t字符串的开始地址。
通常,使用汇编程序的程序员并不需要关心程序各部分的地址。
当然,第一个编写汇编程序的人必须手工汇编程序。在同一台计算机上编写新的(或改
进)汇编程序的人可以用汇编语言编程然后用最初的汇编程序来汇编。一旦新的汇编程序经
过了汇编,它也可用来汇编自身。
每当一个新的微处理器诞生,就需要新的汇编程序。新的汇编程序可以在已有的计算机
上编写,利用原有的汇编程序来汇编。这种汇编称之为交叉汇编,即用在计算机 A上的汇编程
序来生成在计算机 B上运行的代码。
尽管汇编程序消除了汇编语言编程缺少创造性这一问题(手工汇编部分),但汇编语言还
存在两个主要问题,第一个(也许你已经猜测到了)是汇编语言程序冗长、乏味。因为你是
在微处理器芯片级编程,所以必须要考虑每一个细节。
第二个问题是汇编语言不可移植。如果为 Initel 8080 编写汇编语言程序,则不适用于在
M o t o r o l a的6 8 0 0上运行,必须用 6 8 0 0的汇编语言重新编程。也许,这不像编写最初的汇编语
言程序那么困难,因为已经解决了主要的组织和算法问题,但是,仍然有许多工作要做。
上一章解释了现代微处理器芯片如何集成机器码指令来进行浮点运算,这当然已经很方
便了,但还不是十分令人满意。一种选择是彻底放弃与处理器相关的实现每个基本算术操作254
编码的奥秘
下载
的机器码,取而代之的是用代数符号来表示许多数学运算。以下是一个例子:
A×Sin(2×PI+B)/C
这里A、B和C是数字,PI = 3 . 1 4 1 5 9。
既然如此,何乐而不为呢?如果这样的一条语句是在一个文本文件里,则可以编写汇编
语言程序读取文本文件并把代数表达式转换成机器代码。
如果只计算一次这样的代数表达式,则可以手算或用计算器计算。如果需要用不同的 A、
B、C值来计算表达式的值,则可能需要考虑如何用计算机来计算。正因为如此,代数表达式
不可能单独出现,应该考虑到表达式的上下文,用不同的值代入计算。
现在已开始创建所谓的高级程序设计语言。汇编语言称作低级语言,因为它与计算机硬
件密切相关。尽管“高级”用来描述除汇编语言以外的任何程序设计语言,但这些语言中,
一些语言还比另一些语言更要高级一些。如果你是一家公司的总裁,且坐在计算机前输入
“计算全年的收益和支出,做出年度报表,打印两千份给所有的股东”,那么你确实正在用非
常高级的语言工作。在现实生活中,程序设计语言并没有达到这样理想的境界。
人类语言是千百年来复杂的影响、随机变化和不断适应的结果,即使像世界语这样的人
工语言也来源于现实语言。然而,高级计算机语言是审慎而周密的概念语言。发明程序设计
语言面临的挑战是如何使语言具有吸引力,因为语言定义了人们如何向计算机发送指令。从
2 0世纪5 0年代开始到 1 9 9 3年,估计已发明和实现了 1 0 0 0多种高级语言。
当然,这还并不足以简单地定义高级语言(它牵涉到语言所采用的语法),还必须有编译
程序用来将高级语言语句转换成机器码。像汇编程序一样,编译程序需要一个字符接一个字
符地读取源代码文件,并分解成短语、符号和数字,但编译程序比汇编程序更复杂。从某种
意义上讲,汇编程序较简单,因为在汇编语言语句与机器码之间有一一对应的关系。编译程
序通常需要把一条高级语言语句转换成许多机器码指令。编译程序不容易编写,许多书中描
述了它们的设计与构造,所以本书不作介绍了。
高级语言有优点也有缺点。最主要的优点是高级语言比汇编语言容易学且容易编写。用
高级语言编写的程序清晰、简明。高级语言通常是可移植的 — 也就是说,它不像汇编语言
那样依赖于特定的处理器。所以,程序设计员不需要知道程序将要运行其上的机器的内部结
构。当然,如果需要让程序在不止一种处理器上运行,则需要相应的编译程序生成针对这些
处理器的机器码。可执行文件仍然只适用于某一个处理器。
另一方面,差不多都是如此,一个好的汇编语言程序设计员可以写出比编译程序所能产
生的更优化的代码。也就是说,用高级语言编写的程序所产生的可执行文件比用汇编语言编
写功能相同的程序所产生的可执行文件要大,且执行速度较慢。(最近几年,随着微处理器的
日趋复杂以及编译程序在优化代码方面的日趋成熟,这种差别已变得不很明显。 )
还有,尽管高级语言使得处理器更容易使用,但并没有使它的功能更强大。而使用汇编
语言可以最大限度地利用处理器的能力。因为高级语言需要转换成机器码,所以高级语言只
会降低处理器的能力。如果一个高级语言是真正可移植的,则它不能使用某种处理器的独有
特点。
例如,许多处理器都有移位指令。前面讲过,这些指令把累加器中的位向左或向右移动。
但是,几乎没有高级语言有这样的操作。如果程序中要用到移位,则需要用乘 2或除2操作来
处理(其实,现在许多编译程序都用处理器的移位指令来实现乘或除以 2的幂)。许多高级语第24章 高级语言和低级语言
下载
255
言同样也不包括按位的逻辑运算。
早先的家用计算机中,许多应用程序是用汇编语言编写的,而现在除非有特殊需要,汇
编语言已经很少用到。由于已在处理器中添加了一些硬件来实现流水线技术 — 同时有多个
指令码累进执行 — 汇编语言则变得更难以掌握。与此同时,编译程序却逐步走向成熟。现
代计算机的大容量存储能力也在这种趋势 — 程序设计员不再满足于编制在小的内存和磁盘
上运行的代码 — 中也扮演着重要角色。
尽管许多早期计算机的设计者都试图用代数符号来阐明他们的观点,但通常认为第一个
真正成功的编译程序是由 Grace Murray Hopper(1 9 0 6-1 9 9 2)于1 9 5 2年在雷明顿为U N I VA C
而设计的 A - 0。当H o p p e r博士1 9 4 4年为Howard Aiken 工作时,就已开始了计算机的早期研究
工作。在她 8 0多岁时,仍然活跃在计算机界,为 D E C公司作一些公关工作。
今天仍然在使用的最古老的高级语言(尽管这些年中得到了广泛的修改)是 F O RT R A N。
许多计算机语言的名字都是大写字母,因为它们是由许多单词的首字母构成的。 F O RT R A N是
由FORmula 前3个字母和 T R A N s l a t i o n的前4个字母混合而成,是在 2 0世纪5 0年代中期由 I B M
公司为 7 0 4系列计算机开发的。多年来, F O RT R A N一直被选作为科学和工程的计算语言,它
广泛支持浮点运算甚至支持复数运算。
所有计算机语言都有它们的支持者和批评者,并且人们可能只热衷于他们所喜好的语言。
尽量站在中立的立场上,我选择一种语言作为原型来解释那些差不多再没有人用的程序设计
概念。这种语言的名字是 A L G O L(即ALGOrithmic Language)。A L G O L也可用来探索高级程
序设计语言的本质,因为从某种意义上来说它正如一粒种子,成为过去 4 0年来许多流行的通
用语言的直接祖先。甚至在今天,人们也用到“类 A L G O L”的程序设计语言。
它的第一个版本是 A L G O L 5 8,由一个国际委员会在 1 9 5 7~1 9 5 8年设计而的。两年后,即
1 9 6 0 年进行了修改,修订版命名为 ALGOL 60 。最后的版本是 ALGOL 68 。本章用到的
A L G O L版本在文档“Revised Report on the Algorithmic Language ALGOL 60”中有描述,该
文档在1 9 6 2年完成,1 9 6 3年第1次印刷。
让我们来编写一些 A L G O L代码。假设一个名为 A L G O L . C O M的编译程序运行在 C P / M或
M S - D O S下。第一个 A L G O L程序是一个名为 F I R S T. A L G的文本文件,注意它的文件类型。
一个A L G O L程序必须由 b e g i n和e n d作为开始和结束,以下为显示一行文本的程序:
begin
print('This is my fist ALGOL program!');
ende
可以用A L G O L编译程序来编译 F I R S T.ALG 程序,操作如下:
ALGOL
FIRST.ALG
A L G O L编译程序的响应可能是显示类似于下面的内容:
Line 3: Unrecognized keyword 'ende'.
A L G O L对拼写的挑剔不亚于传统的英语教师。在输入程序时若拼错了单词 e n d,编译程
序则会告知程序有一个语法错误。当它碰到 e n d e时,它希望那是它可以识别的关键字。
修改了错误以后,可以再运行 A L G O L编译程序。有时,编译程序会直接生成一个可执行
文件(名为F I R S T. C O M,或者是M S - D O S下的F I R S T. E X E);有时,还需要进行另一个步骤。
无论怎样,你都可以从命令行运行 F I R S T程序:256
编码的奥秘
下载
FIRST
F I R S T程序的响应是显示:
This is my fist ALGOL program!
糟糕!还有一个拼写错误。这是一个编译程序不能发现的错误,因此,称为运行时错误
(run-time error)— 即只在运行程序时才出现的错误。
可以看出,在该 A L G O L程序中, p r i n t语句在屏幕上显示一些内容,本例是一行文本(因
此,这个 A L G O L程序等效于本章前面 C P / M下的汇编程序)。p r i n t语句实际上并不是 A L G O L
语言正式定义的一部分,这里只假设正在用的这个 ALGOL 编译程序包含有这样一个实用工具,
有时称作内部函数。p r i n t语句 — 就像许多 ALGOL 语句(除 b e g i n和e n d外)一样 — 后面必
须跟引号。 p r i n t语句向里缩进不是必须的,只不过使得程序结构更清晰。
假设要编写一个程序计算两个数的乘法。每一个程序设计语言都有变量这个概念。在程
序中,变量名可以为一个字母、一个短的字母序列,甚至为一个短词。实际上,变量对应于
一个内存单元,但在程序中是通过名字来引用的,并不是通过内存地址。下面这个程序有 3个
变量,名为 a、b和c:
begin
real
a,b,c;
a:=535.43;
b:=289.771;
c:=a×b;
print ('The product of ',
a, '
and
' ,
b, ' is
',
c);
end
real 语句是说明语句,用来表明程序中要说明的变量。本例中,变量 a、b、c是实数或浮
点数( A L G O L也支持关键字 i n t e g e r,用来说明整型变量)。通常,程序设计语言要求变量名
以字母开头。只要第一个字符是字母,变量名可以包含数字,但不能包含空格及许多其他字
符。通常编译程序要限制变量名的长度。本章的例子都采用一个字母作为变量名。
如果使用的 A L G O L编译程序支持 I E E E浮点数标准,则程序中的 3个变量都需要 4个字节的
存储空间(对单精度数)或 8个字节的存储空间(对双精度数)。
接下来的三个语句是赋值语句。在 A L G O L中,赋值语句定义为冒号后紧跟等号。(在许
多计算机语言中,赋值语句只需用等号。)赋值语句的左边是变量,右边是表达式。前两个赋
值语句是给 a和b赋给一个值,第三个赋值语句中变量 c的值由变量 a和b产生。
今天,在程序设计语言中,大家熟悉的×(乘号)通常不允许使用,因为它不属于 A S C I I
码和 E B C D I C的字符集。许多程序设计语言用星号( *)表示乘法。虽然 A L G O L用斜杠( /)
表示除法,但也包括一个除号(÷)表示整数除法,即表明被除数中有多少倍的除数。
A L G O L中也定义了箭头(↑),这是另一个非 A S C I I码字符,用来表示乘方。
最后是用来显示的 p r i n t语句。本例中即有文本又有变量,它们用逗号隔开。显示 A S C I I字
符可能并不是p r i n t语句的主要工作,本例中,它的功能还包括把浮点数转换成 A S C I I码:
The product of
535.43
and
289.711
is
155152.08653
接着程序终止,返回到操作系统。
如果想乘另外两个数,则需要修改程序,改变数,重新编译,再运行。可以利用一个名
为r e a d的内置函数来避免这种频繁的重新编译工作:第24章 高级语言和低级语言
下载
257
begin
real a,b,c;
print ('Enter the first number: ');
read (a);
print ('Enter the second number: ');
read (b);
c:= a×b;
print ('The product of
',
a, '
and
',
b, '
is ',
c);
end
r e a d语句从键盘读入 A S C I I码字符并转换成浮点数。
高级语言中一个非常重要的结构是循环。循环使得同一段程序依据一个变量的多个不同
的值来运行。假设有一段程序用来计算 3、5、7和9的立方,就可以这样做:
begin
real a, b;
for a := 3, 5, 7, 9 do
begin
b := a× a× a;
print (' The cube of
',
a, ' is ',
b);
end
end
f o r语句设置变量 a的初值为 3,然后执行 d o关键字以后的语句。如果要执行的语句不止一条
(本例中正是如此),则这些语句必须包括在 b e g i n和e n d之间,这两个关键字定义了一个语句
块。f o r语句接着把变量 a设置成5、7和9,并执行这些相同的语句。
下面是f o r语句的另一种形式,它计算 3~9 9间奇数的立方值:
begin
real
a, b;
for a :=3 step 2
until
99
do
begin
b := a× a× a;
print ('The
cube
of
',
a, ' is ' , b);
end
end
f o r语句设置变量 a 的初值为 3,然后执行 f o r语句后的语句块。然后 a以s t e p关键字后面的值 2为
步长增加,得到新值 5,并用来执行代码块。变量 a不断加2,当它超过 9 9时,f o r循环结束。
程序设计语言通常都有非常严格的语法。例如,在 ALGOL 60 中,关键字 f o r后只能跟一
种类型的东西,即变量名。而在英语里,单词 f o r后可以跟许多不同的单词,如“ for example”。
虽然编译程序不是容易编写的简单程序,但它显然要比解释人类语言的程序要简单得多了。
大多数程序设计语言的另一个重要特性是包含条件语句。条件语句只是在某个条件为真
时才允许执行另一条语句。下面是使用 A L G O L内部函数 s q r t的一个例子,用来计算平方根。
s q r t函数不能用来处理负数,所以程序中应避免出现这种情况:258
编码的奥秘
下载
begin
real
a, b;
print ('Enter a number: ');
read (a);
if
a< 0 then
print ('Sorry, the number was negative.');
else
begin
b = sqrt (a);
print ('The square root of ',
a, 'is ',
b);
end
end
左尖括号<是小于号。如果用户输入的一个数小于 0,则执行第一个 p r i n t语句。否则,该数大
于等于0,则执行包含另一个 p r i n t语句的语句块。
到目前为此,本章程序中的每个变量只能存放一个值。用一个变量来存放多个值也是很
方便的,这就是数组。 A L G O L程序中声明一个数组的方法如下所示:
real
array
a[1:100];
作者: zzz19760225     时间: 2016-2-9 10:47
本例中,表明要用该变量来存储 1 0 0个不同的浮点值,这些值称作数组元素。第一个为
a [ 1 ],第二个为 a [ 2 ],最后一个为a [ 1 0 0 ]。方括号中的数字称作数组下标。
下例程序计算从 1~1 0 0的所有数的平方根,把结果存放在数组中并显示出来:
begin
real
array
integer
for
a[1:100];
i;
i :=1
step 1
until 100
do
a[i] := sqrt(i);
for
i :=1
step 1
until 100
do
print ('The square root of ', i, '
is ',
a[i]);
end
程序中也声明了一个整型变量,名为 i(因为它是 i n t e g e r的第一个字母,所以经常用来作
为整型变量名)。在第一个 for 循环中,数组的每一个元素赋值为它的下标的平方根;第二个
f o r循环中,输出这些值。
除了实型和整型外,变量还可以声明为布尔型(为了纪念第 1 0章提到的乔治・布尔)。一
个布尔变量只有两个可能的值,即 t r u e和f a l s e。本章的最后一个程序里将用到布尔数组(和到
目前为止学到的几乎所有特性)。该程序实现称为“ E r a t o s t h e n e s漏勺”的用来找到素数的著
名算法。 E r a t o s t h e n e s(大约公元前 2 7 6-1 9 6年)是亚历山大传说中的图书馆的管理员,他由
于精确地计算出了地球的圆周长而名垂史册。
素数是指只能被 1和它本身整除的自然数。第一个素数是 2(唯一的偶数素数),此外,素
数还有3、5、7、11、1 3、1 7等等。
E r a t o s t h e n e s方法是从以 2开始的正的自然数列表开始。因为 2是素数,则要删除所有是 2第24章 高级语言和低级语言
下载
259
的倍数的数(即除 2以外的所有偶数),这些数都不是素数。因为 3是素数,则要删除所有是 3
的倍数的数。已经知道 4不是素数,因为它已被删除了。下一个素数是 5,则要删除所有是 5的
倍数的数。依此类推,那些余下的数就是素数。
下面的A L G O L程序用来确定 2~10 000的所有素数,通过声明一个布尔数组来标识从 2 ~
1 0 0 0 0的所有数来实现该算法:
begin
Boolean array
integer i,
for step 1
i :=2
a[2:10000];
j
until
10000
do
a[i] := true;
for
i :=2
if
step 1
a[i]
until 100
do
then
for
j := 2
step 1
until 10000 ÷ i
do
a [i × j] := false;
for
i := 2
if
step 1
until 10000
do
a[i] then
print (i);
end
第一个 f o r循环把数组所有元素的布尔值设置为 t r u e。这样,程序一开始假设所有的数都是素
数。第二个 f o r循环从1~1 0 0(为10 000的平方根)。如果数是素数,意味着 a [ i ]为真,则另一
个f o r循环用来把该数的倍数设置为 f a l s e,这些数都不是素数。最后一个 f o r循环输出所有的素
数,即a [ i ]为真时对应的i值。
有时人们在争论程序设计到底是一门艺术还是一门科学。一方面需要在大学里学习有关计
算机科学的课程,另一方面又要看著名的如Donald Knuth的《The Art of Computer Programmign》
系列这样的书。物理学家 Richard Feynman写道“更确切的说,计算机科学更像工程 — 都是
用一些东西来实现另一些东西”。
如果让 1 0 0个不同的人都来编写输出素数的程序,将会得到 1 0 0个不同的方法。即使这些
程序员都有“ E r a t o s t h e n s漏勺”这种思想,也不会正好以同样的方法实现。如果程序设计真
的是一门科学,就不会有如此多的方法,而不正确的解决方法也是经常有的。偶尔程序设计
问题会激起富有创造性和敏锐观察力的火花,而这就是“艺术”的成分。但是,程序设计更
多的是设计和组装的过程,就像在架设一座大桥。
早期的许多程序设计员都是科学家和工程师,他们利用 F O RT R A N和A L G O L所要求的数
学算法来阐述自己的问题。然而,纵观程序设计语言的历史可以发现,人们希望有能被更大
范围的人们所使用的语言。
第一个为商务系统设计的成功语言是 C O B O L(common business oriented language),今天
仍被广泛使用。由美国工业和国防部组成的委员会于 1 9 5 9年早期推出了 C O B O L,它受到了
Grace Hopper的早期编译程序的影响。从某种意义上说, C O B O L使得管理人员 — 可能并不
具体设计编码 — 至少可以看懂程序代码并且能够检查代码是否按所预定的去工作(在现实
生活中,这种情况很少发生)。
C O B O L广泛支持记录和生成报表。记录是按照一致方式组织的信息的集合体,例如:保260
编码的奥秘
下载
险公司可能要维持包含有它所卖的所有险种的一个大文件,每一险种为一单独记录,包括客
户姓名、出生日期和其他信息。早期的许多 C O B O L程序设计成能处理存储在 I B M穿孔卡片上
的8 0列记录,为了尽可能少地占用卡片空间,日期中的年份通常用 2位编码而不是 4位,这导
致了随着2 0 0 0年的到来而普遍出现的“千年虫”问题。
2 0世纪6 0年代中期,伴随着 S y s t e m / 3 6 0项目的开发, I B M公司开发了名为 P L / I的程序设计
语言(I是罗马数字1,P L / I表示programming language number one)。P L / I试图把A L G O L的块
结构、 F O RT R A N的科学和数学计算功能以及 C O B O L的记录和报表能力结合起来。但是,它
却远没有像 F O RT R A N和C O B O L那样流行。
尽管F O RT R A N、ALGOL 、C O B O L和P L / I都有适用于家用计算机的版本,但是它们都不
具备B A S I C所具备的那种对小计算机的影响力。
B A S I C(b e g i n n e r’s all-purpose symbolic instruction code)是D a r t m o u t h数学系的 J o h n
K e m e n y和Thomas Kurtz在1 9 6 4年为D a r t m o u t h的分时系统开发的。 D a r t m o u t h的许多学生并非
主修数学或工程课程,所以他们不能在穿孔卡片和很难的程序设计语法上花费很多时间。
D a r t m o u t h的学生坐在终端前,只需在数字之后简单地敲入 B A S I C语句,即可建立B A S I C程序。
数字表明程序中语句的顺序。没有数字在前的语句是对系统的命令,如 S AV E(存储B A S I C程
序到磁盘)、L I S T(按顺序显示行)和 R U N(编译和执行程序)。第一批印刷的 B A S I C指令手
册中的第一个B A S I C程序为:
10 LET
X = (7 + 8) / 3
20 PRINT
X
30 END
不同于A L G O L,B A S I C不需要程序设计员来指定一个变量是按整数存储还是浮点数存储。
不需要程序员操心,大多数数都是按浮点数存储。
许多后来的 B A S I C版本是解释程序而不是编译程序的。前面讲过,编译程序是读取一个
源文件,并产生一个可执行文件;而解释程序读取源代码并在读的过程中直接执行而不生成
可执行文件。解释程序比编译程序容易编写,但是,解释程序的执行时间却比编译程序的执
行时间要慢。当比尔・盖茨(生于 1 9 5 5年)和他的密友保罗・艾伦(生于 1 9 5 3年)在1 9 7 5年
为Altair 8800编写B A S I C解释程序并创立他们的公司 — 微软公司的时候, B A S I C才开始应用
到家用计算机中。
P a s c a l程序设计语言继承了 A L G O L的许多结构,但也包括了 C O B O L的记录处理程序。该
语言由瑞士计算机科学教授 Niklaus Wi r t h(生于 1 9 3 4年)在 2 0世纪 6 0年代后期设计而成。
P a s c a l在IBM PC程序设计员中很受欢迎,但却以一种特殊的形式 — Turbo Pascal这种产品形
式流行。该产品于 1 9 8 3年由 B o r l a n d公司推出,售价为 $ 4 9 . 9 5。Turbo Pascal (由丹麦学生
Anders Hejlsberg(生于1 9 6 0年)编写)是 P a s c a l的一个版本,提供了完整的集成化开发环境。
文本编辑器和编译程序集成在一个程序里,促进了快速编程。集成化开发环境在大型机上很
流行,但Turbo Pascal却首先在小机器上实现了。
P a s c a l对A d a也有很大影响。 A d a是为美国国防部开发使用的一种语言,是以 Augusta Ada
B y r o n命名的。第 1 8章中已提到过这个人,他是查尔斯・巴贝芝的解析机的见证人。
然后就有了 C语言,一种受到万般宠爱的程序设计语言。它于 1 9 6 9年~1 9 7 3年产生,大部
分是由贝尔电话实验室的 Dennis M.Ritchie 完成的。人们常常问为什么叫 C语言,简单的回答
是它来自于一种早期的语言 B,B是B C P L(Basic CPL)的一种简单版本,而 B C P L又来自于下载
第24章 高级语言和低级语言
261
C P L(combined programming language)。
第2 2章曾提到过 U N I X操作系统被设计成可移植的形式。那时许多操作系统都是用汇编语
言针对特定处理器而编写的。 1 9 7 3年,U N I X采用C来编写(更确切地说是重写)。从那时起,
操作系统和 C语言的关系就开始紧密起来。
C 是很简洁的语言,例如,A L G O L和P a s c a l中用b e g i n和end 来定义的块,在C语言中用{}
来代替。下面是另一个例子,该例对程序设计员来说是很常见的,就是把一个常量与一个变
量相加:
i =i+5;
在C语言中,可以简写为:
i+=5;
如果只需要把变量加 1(即增量),甚至可以这样来简写语句:
i++;
在1 6位或3 2位微处理器中,这样一条语句可以由一条机器码指令来实现。
前面曾提到,许多高级语言不包括移位操作和按位逻辑操作,而这些是许多处理器所支
持的操作, C语言是个例外。另外, C语言的另一重要特点是支持指针,指针实质上是数字化
的内存地址。由于 C有许多操作类似于常见的处理器指令,因而有时候也把 C语言归类于高级
汇编语言。胜过于任何类 A L G O L语言,C更接近于常用的处理器指令集。
然而,所有的类 A L G O L语言 — 即指常用的程序设计语言,是在冯・诺依曼计算机体系
结构基础上设计而成的。在设计计算机语言时,突破冯・诺依曼框架并不容易,而让人们来
使用这种语言则更加困难。一个非冯・诺依曼的语言是 L I S P(LISt Processing ),是由 J o h n
McCarthy 在2 0世纪5 0年代末设计而成的,可用在人工智能领域。另一个与众不同且与 L I S P完
全不同的语言是 A P L(A Programming Language),是由Kenneth Iverson也在2 0世纪5 0年代末
开发而成的。A P L采用了一个奇怪的符号集用来一次在整个数字数组上执行操作。
虽然类A L G O L语言仍保持着主导地位,最近几年,出现了叫作面向对象的程序设计语言,
使这类语言的地位得到加强。这些面向对象语言与图形化操作系统一起使用,图形化内容在
下一章(即最后一章)将作介绍。下载
第25章 图形化革命
1 9 4 5年9月1 0日,《L i f e》杂志的读者看到的大多是平常的一些文章和照片:有关第二次世
界大战结束的故事,舞蹈家 Vaslav Nijinsky在维也纳生活的报道,一则有关美国汽车工人的图
片报道。但那一期的杂志也有意想不到的东西:一篇 Vannevar Bush(1 8 9 0-1 9 7 4)的关于科
学研究的未来的展望性文章。 Van Bush(人们这样称呼他)在计算机历史上写下了重要的一
笔。在 1 9 2 7年~1 9 3 1年任麻省理工学院工程教授期间,他设计了一种具有重大意义的模拟计
算机 —微分分析器。 1 9 4 5年,在《 L i f e》杂志发表这篇文章的时候, B u s h是科学研究和发展
部的主管,负责协调美国在战争期间的科学活动,包括曼哈顿计划。
通过对两个月前第一次发表在《 The AtLantic Monthly 》上的那篇文章的精简, B u s h在
《L i f e》杂志上的文章《 As We May Think 》描述了未来一些假想发明,希望科学家和研究人
员解决日益增多的技术杂志及文章。 B u s h谈到了作为一种解决方案的微缩胶片,勾划出了一
种他称之为 Memex 的设备来保存书、文章、记录和书中的图片。 M e m e x也可根据人们所想
到的关系在这些东西之间建立有关某个主题的联系。他甚至设想出了一个新的职业群体,他
们可在大量的信息载体之间牢固地建立起联系。
尽管描绘未来光辉前景的文章在 2 0世纪很普遍,但《 As We May Think》则不同,它描述
的既不是关于减轻家务负担的设备的故事,也不是关于未来交通运输或机器人的故事,而是
关于信息及如何用新技术处理信息的故事。
从第一台继电器计算器制造出来已经历了 6 5年,计算机变得越来越小、越来越快,也越
来越便宜。这种趋势已改变了计算机的本质。当计算机越来越便宜时,每一个人都可拥有自
己的计算机。计算机越小、越快,软件则变得越高级,同时机器可以完成更多的工作。
更好地利用这些额外功能和速度的一种方法就是改进计算机系统中至关重要的部分,即
用户接口 — 人和计算机的交互点。人和计算机是差别很大的两种物质,但不幸的是,说服
人们调整以适应计算机的特性是比其他方法更容易的方法。
早先,数字计算机根本上不是交互式的。有些使用开关和电缆编程,有些使用穿孔纸带
或胶片编程。到 2 0世纪5 0年代和6 0年代(甚至延续到 7 0年代),计算机进化到使用批处理:程
序和数据穿孔成卡片,然后读入到计算机内存,程序分析数据,得出一些结论,再在纸上打
印出结果。
最早的交互式计算机使用的是电传打字机。如前一章讲到的 D a r t m o u t h分时操作系统(始
于2 0世纪6 0年代早期)支持多个电传打字机,可以同时使用。在这样的系统里,用户在打字
机上敲一行,计算机以回答一行或多行作为响应。打字机和计算机之间的信息交流全部是
A S C I I码流(或其他字符集),除了像回车换行这样简单的控制码外,差不多全是字符代码。
事务只是按纸卷的方向进行。
然而,阴极射线管(在 7 0年代就已经很普遍了)则没有这些限制。可以用软件以更灵活
的方式来处理整个屏幕。然而,可能是为了设法保持显示器输出符合操作系统的显示输出逻
辑,早先为小型计算机编写的软件不断地把 C RT显示器作为“玻璃打字机” — 一行一行地显第25章 图形化革命
下载
263
示直到布满整个屏幕,当有字符到达屏幕底端时,屏幕的内容要向上翻滚。 C P / M和M S - D O S
中的实用程序都是以电传打字机的模式来使用视频显示器。也许原型电传打字机的操作系统
是U N I X,它仍然保持着这种传统。
令人感兴趣的是,A S C I I码字符集并不都适用于阴极射线管显示。在最初设计 A S C I I码时,
代码1 B h标识为 E s c a p e,专门处理字符集的扩充。 1 9 7 9年,A N S I印发了一个标准,题为“使
用A S C I I码的附加控制”。该标准的目的是“为了适应可预见的有关二维字符图像设备输入输
出控制的要求,包括有阴极射线管和打印机在内的交互终端...”
当然, E s c a p e的代码 1 B h只有1个字节,且只有一个含义。 E s c a p e通过作为可变长序列的
开端来表达不同的功能。例如,以下这个序列:
1Bh
5Bh
32h
4Ah
即Escape 代码后面跟上字符 [ 2 J,定义成删除整个屏幕并移动光标至左上角。这是在电传打字
机上所不能实现的。下面这个序列:
1Bh
5Bh
35h
3Bh
32h
39h
48h
即E s c a p e代码后面跟上字符 [ 5;2 9 H,把光标移到第 5行的第2 9列。
由键盘和 C RT组合而成,对来自远方计算机的 A S C I I码(也可能是 E s c a p e序列集合)作出
响应,这样的设备有时称作哑终端。哑终端比打字机要快并且从某种意义上讲也更灵活,但
是它并没有快到足以引起用户界面的真正创新。这种创新来自于 2 0世纪 7 0年代的小计算机,
正如第2 1章中的假想计算机,这种计算机有视频显示存储器作为微处理器地址空间的一部分。
家用计算机显著区别于它们大而昂贵的伙伴的第一个标志可能是
Vi s i C a l c 的使用。
Vi s i C a l c由Dan Bricklin (生于1 9 5 1年)和Bob Frankston(生于1 9 4 9年)设计和编程,于 1979 年推
出,用于 Apple II。Vi s i C a l c在屏幕上呈现给用户一个二维电子数据表。在 Vi s i C a l c出现之前,
报表通常是一张纸,使用行、列来进行一系列计算。 Vi s i C a l c用视频显示器取代了纸,使得用
户可以移动报表,输入数据或公式,在进行修改后重新计算每一项。
令人吃惊的是 Vi s i C a l c是不能复制到大型机上的应用程序。像 Vi s i C a l c这样的程序需要很
快地刷新屏幕。因此,它直接向 Apple II的视频显示器使用的随机访问存储器写入。该存储器
是微处理器地址空间的一部分。大型分时计算机和哑终端之间的接口速度不是很快,从而使
得电子报表程序不能使用。
计算机响应键盘、刷新视频显示器的速度越快,用户和计算机潜在的交互就越紧密。在
IBM PC 机出现的头 1 0年(2 0世纪8 0年代),为它编写的大多数软件是直接写入显示存储器的。
由于I B M建立了一套硬件标准,其他计算机厂商追随这一标准,使得软件厂商可以绕过操作
系统直接使用硬件而不用担心他们的软件在某些机器上不能正确运行(或根本不能运行)。如
果所有的 P C“克隆体”都与它们的视频显示器有不同的硬件接口,则对软件厂商来说要满足
所有不同的硬件设计是非常困难的。
IBM PC所使用的早期的应用程序大多数只有字符输出而没有图形输出。使用字符输出同
样能使得应用程序的执行速度加快。如果视频显示器设计得如第 2 1章所描述的那样,则程序
只需简单地把某个字符的 A S C I I码写入内存就可以在屏幕上显示出该字符。使用图形视频显示
的程序需要写入 8个或更多的字节到内存中才能画出文本字符的图形。
从字符显示到图形显示的变化是计算机革命中极其重要的一步,然而图形方式下计算机
硬件和软件的发展比文本和数字方式下计算机硬件和软件的发展要慢的多。早在
1 9 4 5年,264
编码的奥秘
下载
冯・诺依曼就设想了一种像示波器一样的显示器,可用来使信息图形化。但是,直到 2 0世纪
5 0年代早期,计算机图形才开始成为现实。当时麻省理工学院(得到 I B M资助)建立了林肯
实验室来开发计算机,用于美国空军的空中防卫系统。该项目称为 S A G E(s e m i - a u t o m a t i c -
ground environment),有一个图形显示屏帮助操作员分析大量数据。
在S A G E这样的系统中使用的早期视频显示器不像今天我们在 P C机中所用的显示器。今
天普通的 P C机显示器是光栅显示器。就像电视机,所有的图像由一系列水平光栅线组成,由
一个电子枪射击光束很快地前后移动扫过整个屏幕形成光栅。屏幕可以看成是一个大的矩形
点阵,这些点称为像素。在计算机里,一块内存专门供视频显示使用,屏幕上的每一个像素
由1位或多位表示。这些位值决定像素是否亮,是什么颜色。
例如,今天多数计算机显示器有至少水平方向 6 4 0像素的分辨率,垂直方向 4 8 0像素的分
辨率,像素的总数是这两个数的乘积 307 200。如果1个像素只占用 1位内存,则每个像素只局
限于两种颜色,即通常的黑、白色。如, 0像素为黑,1像素为白。这样的视频显示器需要 3 0 7
2 0 0位的内存,即38 400字节。
随着可能的颜色数目的增多,每个像素需要更多的位,显示适配器也需要更多的内存。
例如,每个像素可以用一个字节来编码灰度。按照这样的安排,字节 00h 为黑,F F h为白,之
间的值代表不同的灰度。
C RT上的彩色由三个电子枪产生,每一个分别负责三原色红、绿、蓝中的一种(可以用
放大镜来观察电视机或彩色计算机屏幕以验证它的正确性。由不同的原色组合来显示图像),
红色和蓝色的组合是黄色,红色与绿色的组合是洋红色,蓝色和绿色的组合是青色,三原色
的组合是白色。
最简单的彩色图像显示适配器每个像素需要 3位。像素可以如以下这样编码,每一个原色
对应1位:
位 颜色
0 0 0
0 0 1
0 1 0
0 11
1 0 0
1 0 1
11 0
111 黑

绿


洋红


但是,这种方式只适合于简单的类似卡通画的图像。许多现实世界中的颜色都是红、绿、
蓝按不同级别组合而成的。如果用 2个字节来表示一个像素,则每一个原色可分配 5位(1位保
留),这样可以给出红、绿、蓝三种颜色各 3 2种不同的级别,即总共可有 32 768种不同的颜色。
这种模式通常称作高彩色或千种颜色。
下一步是用3个字节来表示一个像素,每种颜色占一个字节。这种编码模式使红、绿、蓝
三种颜色各有 2 5 6种不同的级别,这样总共有 16 777 216 种不同的颜色,通常称作全彩色或百
万种颜色 。如果视频显示器的分辨率为水平 6 4 0像素,垂直4 8 0像素,则总共需要 921 600字节
的存储容量,即将近 1 M字节。
每个像素所占的位数有时也称作颜色深度或颜色分辨率。不同颜色数量与每个像素所占
的位数的关系如下:第25章 图形化革命
下载
265
颜色数 = 2 每个像素所占位数
视频适配卡只有一定数量的存储器,这样它所能达到的分辨率和颜色深度将受到限制。
例如,一个具有 1 M字节存储器的视频适配卡可以达到 6 4 0×4 8 0的分辨率,每个像素占 3个字
节。如果想用 8 0 0×6 0 0的分辨率,则没有足够的存储器给每个像素分配 3个字节,而要用 2个
字节来表示一个像素。
尽管现在使用光栅显示器似乎是理所当然的,但在早期由于需要大量存储器,使用光栅
显示器就不太实际。 S A G E视频显示器是矢量显示器,比电视机更像示波器。电子枪可以定位
到显示器上任何部分的点,并且直接画出直线或曲线。利用屏幕上图像的可持续性使得能用
这些直线和曲线来形成最基本的画面。
S A G E计算机也支持光笔,操作者可用来在显示器上改变图像。光笔是特殊的设备,看起
来像一只铁笔,一端连有电线。运行适当的软件后,计算机可以检测到光笔指向的屏幕位置,
并随着光笔的移动而改变图像。
光笔是如何工作的呢?即使是技术专家,在第一次看到光笔的时候也会迷惑不解。关键
在于光笔不发射光 — 它检测光。在 C RT中(无论是用光栅还是向量显示),控制电子枪移动
的电路也可以确定从电子枪射出的光何时打到光笔上,从而确定光笔正指向屏幕的什么位置。
Van Sutherland(生于1 9 3 8年)是预见到新的交互式计算时代的的多个人之一,他在 1 9 6 3年
示范了一个他为 S A G E计算机开发的名为 S k e t c h p a d(画板)的具有革命性意义的图形程序。
画板可以存放图像信息到存储器,并且可以把图像显示在屏幕上。另外,还可以用光笔在显
示器上画图并修改,同时计算机会一直跟踪它。
另外一个交互式计算的设想家是
Douglas Engelbart( 生于 1 9 2 5年)。他曾读过 1 9 4 5年
Vannevar Bush发表的文章《 As We May Think》,并在5年后开始用一生的时间致力于研究新
的计算机界面。 2 0世纪6 0年代中期,当他在 S a n f o r d研究院时,他彻底重新考虑了输入设备,
提出了用有五个尖端的键盘 (此设备没有流行 )以及一个他叫作鼠标的有轮子和按钮的小设备来
输入命令。鼠标现在已广泛用来移动屏幕上的指针,以选择屏幕上的对象。
恰逢光栅显示器在经济上切实可行,许多早期的热衷于交互式图形计算的人们(尽管没
有E n g e l b a r t)也已聚集在 X e r o x公司里。 X e r o x公司于 1 9 7 0年建立了 Palo Alto 研究中心
(PA R C),其中一项就是资助开发产品,以使得公司能进入计算机界。也许 PA R C最著名的设
想家是Alan Kay(生于1 9 4 0年),当他1 4岁的时候碰巧看到了 Robert Heidein 的小故事里描述
的Van Bush 的微缩胶片图书馆,并已设想了一种他称为 D y n a b o o k的轻便计算机。
PA R C的第一个大工程是 A l t o,于1 9 7 2年~1 9 7 3年期间设计和制造出来。按照那个年代的
标准,这是一个给人深刻印象的产品。它是安装在地板上的系统单元,有 1 6位处理器、 2个
3 M B的磁盘驱动器、 1 2 8 K B内存(可以扩充到 5 1 2 K B),以及一个三个按钮的鼠标。在 1 6位单
片微处理器之前出现, A l t o的处理器由大约 2 0 0个集成电路组成。
A l t o的视频显示器是它与众不同的地方之一。屏幕的大小和形状与一张纸差不多 — 8英
寸宽1 0英寸高。它以光栅图形模式工作,有 6 0 6个水平像素和 8 0 8个垂直像素,这样总共 4 8 9
6 4 8个像素。每个像素占 1位存储器,即每个像素不是黑色就是白色。用于视频显示的存储器
容量是6 4 K B,占用部分处理器的地址空间。
通过写入到视频显示存储器,软件可以在屏幕上画出图画或显示不同字体和大小的文本。
通过在桌上滚动鼠标,用户可以在屏幕上定位指针,与屏幕上的对象进行交互。视频显示器266
编码的奥秘
下载
并非像电传打字机那样按行显示用户输入,按行写出程序输出。视频显示器的屏幕是一个二
维的、高密度的信息阵列和更直接的用户输入源。
在2 0世纪7 0年代末期,为 A l t o所写的程序显示出了许多令人感兴趣的特点。多个程序可
放到窗口中并同时显示在屏幕上。 A l t o的视频图像使得软件超出文本范畴,并真正反映用户
的思想。图形对象(如:按钮、菜单及称作图标的小图画)成为用户接口的一部分。鼠标用
来选择窗口或触发图形对象,执行程序功能。
这就是软件,不仅提供了用户接口而且已达到与用户亲密交互的程度。软件进一步扩展了
计算机的应用领域而不再仅进行简单的数字操作。软件设计出来就是—引用Douglas Engelbart
在1 9 6 3年写的论文的标题 — 《for the Augmentation of Man's Intellect》。
在A l t o上开发的PA R C只是图形用户界面即 G U I(graphic user interface)的开始。但X e r o x
公司并没有销售 A l t o(如果要销售的话,价格将在 3万美元以上)。经过 1 0多年,高售价的思
想体现在一种成功的消费品上。
1 9 7 9年,Steve Jobs和来自苹果计算机公司的小组参观了 PA R C,看到的东西给他们留下了
深刻的印象。但是,他们花费了三年多的时间才推出了具有图形接口的计算机,这就是 1 9 8 3
年1月推出的不太受欢迎的 Apple Lisa。而在1年以后,苹果公司就推出了很成功的 M a c i n t o s h。
初始的 M a c i n t o s h配备有 Matorola 6800 微处理器、 6 4 K B的R O M、1 2 8 K B的R A M、一个
3 . 5英寸的磁盘驱动器(可以存储 4 0 0 K B)、一个键盘、一个鼠标和一个视频显示器。该视频显
示器水平 5 1 2个像素,垂直 3 4 2个像素( C RT测量对角只有 9英寸),总共175 104个像素。每一
个像素用1位内存,颜色为黑、白,这样视频显示 R A M大约需要2 2 K B。
最初的M a c i n t o s h硬件做得很好,但是很难进行变革。 1 9 8 4年,出现了使 M a c与其他计算
机完全不同的M a c i n t o s h操作系统,那时通常称作系统软件,后来称为 Mac OS.
像C P / M或M S - D O S这样的基于字符的单用户操作系统不是很大并且没有扩展的应用程序
接口( A P I)。正如第 2 2章解释的那样,这些基于字符的操作系统所需要的是使用文件系统的
应用程序。而像 Mac OS这样的图形操作系统则非常大且有几百个 A P I函数,每一个都由一个
描述该函数功能的名称来标识。
像M S - D O S这样的基于字符的操作系统只需提供几个简单的 A P I函数就能使得应用程序在
屏幕上以电传打字机方式显示字符,但 Mac OS这样的图形操作系统必须提供一种方法才能使
得程序可以在屏幕上显示图形。从理论上来讲,可以通过实现一个 A P I函数来完成,该函数使
得应用程序可以设置某个水平和垂直坐标的像素的颜色。但是,实际证明这种方法效率不高
且图形显示的速度很慢。
因而由操作系统提供完整的图形编程系统就显得非常有意义,这意味着操作系统需包含
有画线、画矩形、画椭圆(包括圆)和字符的 A P I函数。线可以由实线或虚线或点组成;矩形
和椭圆可以用不同的填充模式来填充;字符可以显示成不同字体和大小并具有不同效果,如:
黑体和下划线等。图形系统负责确定如何在显示器上把这些图形对象作为点阵来显示。
图形操作系统下运行的程序使用相同的 A P I在计算机视频显示器和打印机上画出图形。因
此,字处理应用程序在屏幕上显示的文档可以与打印出来的文档非常相似。这种特点称为
W Y S I W Y G,是“ What you see is what you get (所见即所得 )”的英文缩写。这是喜剧演员
Flip Wi l s o n在G e r a l d i n e角色中所贡献的计算机行话。
图形用户界面的吸引力部分体现在不同应用程序的工作大致相同,且与用户经验关系不下载
第25章 图形化革命
267
大。这意味着操作系统还必须支持 A P I函数从而使得应用程序可以实现用户界面的不同部分,
如按钮和菜单等。 G U I通常看起来是友好的用户环境,它对编程人员来说同样是很重要的环
境。编程人员在原来的基础上就可以实现现代用户界面。
在M a c i n t o s h推出之前,几家公司就已开始创建用于 IBM PC 及其兼容机的图形操作系统。
从某种意义上来讲, A p p l e开发人员的工作要容易一些,因为他们硬件和软件一起设计。
M a c i n t o s h系统软件只支持一种类型的磁盘驱动器,一种类型的视频显示器和两种打印机。但
在P C上实现的图形操作系统需要支持许多不同的硬件。
另外,尽管 IBM PC 很早( 1 9 8 1年)就已推出了,但多数人已习惯于用他们喜好的 M S -
D O S应用程序且没有准备放弃它们。 P C机的图形操作系统需要考虑的一个重要方面是,要使
得M S - D O S应用程序的运行就像是专门为新的操作系统设计的应用程序一样。(M a c i n t o s h上就
根本不能运行Apple II软件,因为它采用了不同的微处理器。)
1 9 8 5年,Digital Research 公司( C P / M的后续公司)推出了 G E M(图形环境管理器);
Vi s i c o r p公司(销售Vi s i l a l c的公司)推出了Vi s i O n;Microsoft 公司发布了 Windows 1.0版,它很
快被认为是“视窗战争”中最有可能的胜利者。然而,直到
1 9 9 0年3月发布 Windows 3.0 ,
Wi n d o w s才开始吸引大量的用户。从那时起,它的普及率不断提高。到今天,已有大约 9 0 %的
微机上使用的操作系统是 Wi n d o w s。M a c i n t o s h和Wi n d o w s除了具有相同的外在表现外,它们
的A P I是非常不同的。
理论上讲,除了图形显示外,图形操作系统并不比字符操作系统需要更多的硬件,甚至
不需要硬盘驱动器。最初的 Macintosh 没有,Windows 1.0也不需要。 Windows 1.0甚至不需要
鼠标,尽管每个人都认为用鼠标操作更容易一些。
然而(这儿一点也不奇怪 ),随着微处理器越来越快,内存和外存越来越大,图形用户界面
也越来越流行。越来越多的特点增加到图形操作系统,至使它们越来越大。今天的图形操作
系统通常需要2 0 0 M B的硬盘空间和3 2 M B以上的内存。
图形操作系统的应用程序几乎没有是用汇编语言编写的。早期 M a c i n t o s h上应用程序的流
行语言是 P a s c a l。对于 Wi n d o w s应用程序来说,流行语言是 C。但PA R C再次使用了一种不同
的方法。大约从 1 9 7 2年开始, PA R C的研究人员就在开发一种称为 S m a l l t a l k的语言,体现了面
向对象程序设计,即 O O P的概念。
通常,高级程序设计语言的代码(通常以 s e t、f o r、if 这样的关键字开头的语句)和数据
(用变量来表示的数)之间有区别。毫无疑问,这种区别源自冯・诺依曼计算机体系结构。在
这种体系结构里,要么是机器码,要么是机器码用于操作的数据。
而在面向对象的程序设计中,对象是代码和数据的组合。在对象中,数据存储的实际方
法只能通过与该对象相关联的代码才能理解。对象通过发送或接收消息来与其他对象通信,
它给一个对象发送指令或从那里获得信息。
面向对象语言通常有助于编写用于图形操作系统的应用程序,因为编程人员可以用与用
户感知对象的同样的方式来处理屏幕上的对象(如:窗口和按钮等)。在面向对象语言中,按
钮是对象的一个例子。屏幕上的按钮有一定的尺寸和位置,并显示一些文本或小的图画,所
有这些都是与对象相关的数据。与对象关联的代码确定用户何时用键盘或鼠标按下按钮,并
且发送一个标明该按钮被触发的消息。
然而,最流行的微机上的面向对象语言是传统的类 A L G O L语言的扩展,如 C和P a s c a l。最268
编码的奥秘
下载
流行的由 C扩展的面向对象语言是 C + +(前面讲过,两个 +是增量操作)。C + +大部分是由贝尔
实验室的 Bjarne stroustrup(生于1 9 5 0年)完成的,开始作为转换程序,用来把用 C + +编写的
程序转换成 C程序(尽管 C程序很难看也很难读),C程序可以像通常一样编译。
当然,面向对象语言并不能比传统语言多做些什么。但是编程是解决问题的方式,而面
向对象语言使得编程人员能够考虑那些在结构上通常更好的不同的解决方法。也可以 — 尽
管不是那么容易 — 用面向对象语言编写程序,编译后可在 M a c i n t o s h上或Wi n d o w s下运行。
这样的程序并不直接涉及到 A P I而是使用称作 A P I函数的对象。两个不同的对象定义用来编译
用于Macintosh 或Windows API的程序。
许多小型机上的编程人员不再用命令行编译程序。取而代之的是编程人员开始采用集成
开发环境(I D E),即在一个方便的程序里集成有所需的所有工具并且该程序可像其他图形应
用程序一样运行。编程人员还利用一种称作可视化编程的技术,通过鼠标汇集按钮及其他组
件来设计交互窗口。
第2 2章中讲到了文本文件。这种文件只包含有 A S C I I字符,方便人们阅读。在使用基于字
符的操作系统时,文本文件是在应用程序之间交换信息的理想工具。文本文件的一个最大优
点就是它们是可检索的 — 即程序可以查看许多文本文件并确定它们中的哪一个包含有某一
字符串。但是,一旦某个操作系统中有一个工具可用来显示不同字体、不同大小及不同效果
(如斜体、黑体和下划线),则文本文件似乎就很不适用了。其实,许多字处理程序以独有的
二进制格式来存储文档。文本文件同样也不适用于图形信息。
但是,可以同文本一起编码信息(如字体定义及段落编排),且仍然得到可阅读的文本文
件。关键是选用一个转换字符来表示这些信息。在 M i c r o s o f t设计的 RT F(rich text format)
中,作为在应用程序之间交换格式化文本的一种方法,花括号 { }及反斜杠 \用来封装信息,标
明文本采用何种格式。
P o s t S c r i p t是把这种概念发挥到极致的一种文本格式。 P o s t S c r i p t由A d o b e系统的创始人之
一John Wa r n o c k(生于1 9 4 0年)设计。这是一种通用的图形编程语言 ,主要用来在高端计算
机的打印机上画出字符或图形。
把图形结合到个人计算环境是越来越好、越来越便宜的硬件的直接结果。微处理器越来
越快,存储器越来越便宜,视频显示器及打印机分辨率不断增加且具有更多种颜色,所有这
些促进了计算机图形的使用。
计算机图形产生于两种不同方式,与早些时候为区分图形视频显示器所用的词一样:矢
量和光栅。
矢量图形用直线、曲线及填充的域来生成图形,这是计算机辅助设计(或 C A D)程序的
领域。矢量图形在工程和结构设计中具有重要用途。矢量图形可以按元文件 的格式存放到文
件中。元文件是矢量图形制作命令的聚合,这些命令通常以二进制形式编码。
矢量图形采用直线、曲线及填充的域,因而非常适合于桥梁设计等,但不能指望它来实
际显示建造的桥梁的效果。桥梁效果图是现实世界的图像,用矢量图形来表示太复杂,因而
很难表示出来。
光栅(也称作位图)可用来解决这一问题。位图把图像编码成位的矩形阵列,该阵列对
应于输出设备上的像素。就像视频显示器一样,位图具有空间度(或分辨率),即指图像按像
素表示的宽度和高度。位图也有颜色度(或颜色分辨率 /颜色深度),是指每一个像素对应的下载
第25章 图形化革命
269
位数。位图中的每一个像素用相同的位数来表示。
尽管位图图像是二维的,但位图本身只是一个字节流 — 通常从最上面一行像素开始,接
着是第2行、第3行等等。
一些位图图像是使用为图形操作系统设计的画笔程序通过“手工”生成的,还有一些位
图图像由计算机代码来生成。现在,位图经常用来表现现实世界的图像(如:照片),有几种
不同的硬件可用来把现实世界的图像输入到计算机中,这些设备通常用到称作电荷耦合
(C C D)的器件,它是一种半导体器件,在光照下会放电。一个 C C D单元用来采样像素。
扫描仪是这些设备中最古老的一种。就像影印机一样,它用一行 C C D扫过印制图像(如:
照片)的表面。随着光的强度不同, C C D具有不同的电荷积累。与扫描仪一起工作的软件把
图像转换成位图存放在文件里。
视频摄像机用二维 C C D单元阵列来捕捉图像。通常这些图像录制在录像磁带上。但视频
输出也可以直接送到视频帧输入器,这是用来把模拟信号转换成像素值阵列的一块板。帧输
入器可以使用任何普通的视频源,如 V C R或激光影碟机,甚至直接来自于有限电视盒。
最近,数字照相机价格已适合家庭购买,它看起来很像一般的照相机。但是,数字相机
不用胶片,而是用 C C D阵列来捕捉图像并直接存储到照相机的存储器中,然后传输到计算机
中。
图形操作系统常常支持某种格式的位图文件的存储。 M a c i n t o s h使用P a i n t格式,这个命名
参考了创立这种格式的 M a c P a i n t程序。( M a c i n t o s h的P I C T格式综合了位图和矢量图形,是它
的首选格式。)Wi n d o w s里的格式是 B M P,它是位图文件的扩展名。
位图可能很大,采用一些方法压缩它们是很有用处的。这些工作都归入到计算机科学中
称为数据压缩的范畴。
假设正在处理图像,如前所述,每个像素占 3位。若有一个图片有天空、一栋房子和一块
草坪,这样的图片可能就会有大片的蓝色和绿色。也许,位图的最上面一行是 7 2个蓝色像素,
如果有一些方法能够在文件中编码这 7 2个数字,以表示蓝色像素重复 7 2次,则位图文件可能
会变得更小。这样的压缩称为行程编码,即R L E( run-length encoding)。
一般办公用的传真机采用 R L E压缩方法,在通过电话线传送之前压缩图像。由于传真机
只把图像看成黑色和白色而没有灰度和彩色,因此,通常有很长串的白色像素。
已经流行了1 0多年的位图文件格式是图形交换格式即 G I F,由Compu Serve公司于1 9 8 7年
开发出的。 G I F文件采用称为 L Z W的压缩技术,“L Z W”代表它的创建者: L e m p l e l、Z i v和
We l c h。L Z W比R L E效果更好,因为它检测不同像素值的模式而不仅仅是针对具有相同值的像
素的连续串。
R L E和L Z W都是无损失的压缩技术,因为从压缩数据中可以重新生成完整的初始文件。
换句话说,压缩是可逆的。很容易证明可逆的压缩方法并不适用于所有类型的文件。在某些
情况下,“压缩”文件比初始文件还要大。
最近几年,有损失的压缩技术很流行。有损失的压缩是不可逆的,因为某些初始数据被
丢弃了。不要用有损失的压缩技术来压缩电子报表或文字处理文档,因为每一个数字或文字
也许都是很重要的。但这并不妨碍用有损失的压缩技术来压缩图像,因为只要丢弃的数据不
会使得图片的整体效果有太大差别即可。这就是有损失的压缩技术用于可视心理研究的原因,
它可以研究人的视觉,以确定什么重要,什么不重要。270
编码的奥秘
下载
最重要的用于位图的有损失的压缩技术统称为 J P E G。J P E G表示联合图像专家组( j o i n t
photography experts group),它描述了几种压缩技术,一些是无损失的,一些是有损失的。
把元文件转换成位图文件很简单。因为视频显示存储器与位图在概念上是一致的。如果
一个程序知道如何在视频显示存储器中画一个元文件,则它也知道如何在位图上画元文件。
但是,把位图文件转换成元文件就没那么容易,有些复杂的图像甚至不能转换。与这项
工作相关的一项技术是光学字符识别,即 O C R(optical character recognition)。如果一个位图
上有一些字符(从复印机来的,或扫描页面得到的)并且需要转换成 A S C I I码,就可用 O C R。
O C R软件需要分析位的模式并确定它们代表什么字符。由于这项工作的算法很复杂, O C R软
件并不是1 0 0 %准确。即使有些不准确, O C R软件也试图把手写体转换成 A S C I I码字符。
位图和元文件都是用数字表示的可视信息。音频信息也可以转换成位和字节。
1 9 8 3年,随着激光唱机的出现,数字化音响激起了消费者的热情,它也成为了最大的电
子消费品。C D由P h i l i p s和S o n y公司开发,在一个直径 1 2 c m的盘上一面可存储 7 4分钟的数字化
声音。之所以选择 7 4分钟是因为贝多芬的第九交响曲刚好可以放在一张 C D上。
C D上的声音编码采用脉冲编码调制技术,即 PCM (pulse code modulation)。不管它的名
字多么奇怪,从概念上讲, P C M是很简单的处理过程。
声音是振动产生的。人们的声音是振动,大号的声音是振动,森林里树倒下的声音也是振
动,它们使得空气分子移动,空气一会儿挤压一会儿弹开,一会儿压缩一会儿放松,一会儿向
后一会儿向前,每秒钟进行着成百上千次运动。空气最终震动耳膜,使得我们能够听到声音。
声波可以用 1 8 7 7年爱迪生的第一台电唱机上用来录制和播放背景音乐的锡箔圆桶表面上
的凸起和凹陷来模拟。直到出现 C D之前,这种录制技术也很少改变,虽然圆桶换成了盘片,
锡箔换成了塑性材料即塑料。早期的电唱机是全机械的,后来使用电子放大器来放大声音。
麦克风上的可变电阻把声音转换成电流,喇叭中的电磁铁把电流转换回声音。
代表声音的电流并非本书中所讲的 1 / 0数字信号。声波是连续变化的,而产生这种电流的
电压也是如此。电流是声波的模拟。一种称作模拟数字转换器(A D C)的器件 — 通常在一
个芯片上实现 — 把模拟电压转换成二进制数。 A D C的输出是若干位数字信号 — 通常为 8、
1 2或1 6位— 用来表明电压的相对级别。例如, 1 2位A D C把电压转换成0 0 0 h~F F F h之间的数,
从而区分4 0 9 6个不同的电压级别。
在脉冲编码调制这种技术里,代表声波的电压按照恒定的速率转换成数值。这些数以小
孔的形式刻在光盘表面,从而存储在 C D上。通过从 CD 表面反射的激光可以读出这些信息。
在播放的时候,这些数又通过数字/模拟转换器即D A C转换成电流。(D A C也用在彩色图形板
上,用来把像素值转换成模拟的彩色信号送到显示器。)
声波电压以恒定的速率转换成数字,该速率称为采样速率 。1 9 2 8年,贝尔实验室的 H a r r y
N y q u i s t证明了采样速率至少为需要记录和播放的信号的最大频率的两倍。通常认为人们能听
到的声音的频率范围为 2 0~20 000 赫兹。 C D所用的采样频率比最大频率的两倍还要大一些,
定义为每秒采样 44 100次。
每个样本所用的位数取决于 C D的动态范围,即记录和播放的声音的最高频率与最低频率
之差。这有些复杂:电流不断地变化来模拟声波,尖峰称为声波的振幅。我们所感受到的声
音强度是振幅的两倍。 1贝尔(b e l)表示强度的 1 0倍增强; 1分贝( d e c i b e l )是1贝尔的1 / 1 0,表
示人们所能感受的声音的几乎最小的强度变化。下载
第25章 图形化革命
271
每个样本用 1 6位表示,这样可以表示 9 6分贝的动态范围,差不多是从能听到的声音的阀
值(低于这一值则不能听见)到能忍受却不感到痛苦的声音的阀值的差。 C D盘中用1 6位表示
一个样本。
所以,C D盘中每秒声音有 44 100个采样样本,每个样本 2个字节。立体声则需要两倍的采
样信息即每秒总共 176 400字节,每分 10 584 000字节。(现在可以知道为什么在 2 0世纪8 0年代
之前声音的数字记录不是很普遍。)C D上7 4分钟的立体声需要 783 216 000字节。
数字化声音与模拟声音相比具有很多众所周知的优点。特别是,无论何时复制模拟声音
(例如从录音磁带生成电唱片)都会有一些失真。而数字化声音是数字信息,总可以如实地转
录和复制。过去常常是电话信号传输线路越长则声音越糟。现不再是这样了,因为现在许多
电话系统都是数字的,跨越一个国家的呼叫信号就像跨越一条街道一样清晰。
C D也可像存储声音一样来存储数据。用得最广泛的用来存放数据的
C D称作 C D - R O M
(C D只读存储器),通常C D - R O M最多可存储约 6 6 0 M B。今天,许多计算机中都装有 CD 驱动
器,许多应用程序和游戏都在 C D - R O M中。
大约1 0年前,声音、音乐、视频开始进入个人计算机中,这称为多媒体。现在多媒体已
经很普遍了,也不需要特别的名称。今天出售的许多家用计算机有声卡,内含一个 A D C用来
把从麦克风来的声音录制成数字,还有一个 D A C用来通过喇叭播放录制的声音。声音可以以
波形文件存放在磁盘中。
因为在家用计算机中录制和播放声音并不总是需要达到 C D 的质量,所以 M a c i n t o s h和
Wi n d o w s提供低的采样速率,如 22 050、11 025和8 0 0 0赫兹,以及较小的 8位样本信息和单频
度录制。声音以每秒 8 0 0 0字节来录制,即每分 480 000字节。
人们从科幻电影和电视中知道,未来的计算机可以用英语与用户交谈。一旦计算机有了
数字化录制和播放声音的硬件,则所有通向这一目标的其他工作就可用软件来完成。
使计算机能讲人们能识别的单词和句子的方法有两种。一种方法是让人们录制句子段落、
短语、单词及数字,然后存储在文件中,并且用不同的方法串在一起。这种方法通常用在通
过电话访问的信息系统中,它在只需播放有限的单词和数字组合的情况下能很好地工作。
一种常见的声音合成形式涉及到一个用来把 A S C I I码字符转换成波形数据的进程。例如,
由于英语拼写并不总是一致的,所以这样的软件系统用一个词典或复杂算法来确定单词的确
切发音。基本的音节(称作音素)组合成整个单词。通常软件需要做一些调整,例如,如果
一个句子后面跟着问号,则最后一个单词的声音频率必须增加。
声音识别 — 把波形数据转换成 A S C I I码字符 — 是一个更复杂的问题。的确,许多人在
理解口语的方言方面有一些问题。在个人计算中使用听写软件时,通常需要训练以便能合理
转录某个人所说的话。其中涉及的一个问题已超出了转换成 A S C I I码文本的范围,即编程使计
算机“理解”所说的话。这个问题是人工智能的研究领域。
今天,计算机中的声卡也提供小的电子音乐合成器,它能模仿 1 2 8种不同的音乐乐器和 4 7
种不同的打击乐器,称作 M I D I合成器。 M I D I即乐器数字接口,在 2 0世纪8 0年代早期由电子音
乐合成器制造者协会开发出来,用来把这些电子乐器互相连接起来并连到计算机中。
不同种类的 M I D I 合成器用不同的方法来合成乐器的声音,其中一些比另一些更逼真。
M I D I合成器的性质已远远超过了 M I D I定义的范畴。所要做的无非是通过演奏声音来响应短消
息— 通常长度为1、2或3字节。M I D I消息常常指明需要什么乐器、将要演奏哪个音符,或正272
编码的奥秘
下载
在演奏的音乐要停止演奏。
M I D I文件是加上时间信息的 M I D I消息的集合。通常,一个 M I D I文件包含有计算机上的
M I D I合成器所能演奏的所有音乐成分。要包含同样的音乐,M I D I文件通常比波形文件小得多。
按照相对大小来说,如果说一个波形文件像位图文件,则
M I D I文件就像矢量图形元文件。
M I D I文件的不足之处在于:以 M I D I文件编码的音乐可能在一个 M I D I合成器上演奏得很好,
但在另一个合成器上演奏出来却很糟。
多媒体的另一个特征是数字化电影。电影和电视图像的移动效果可以通过快速显示一系
列静止图像来达到。这些单个图像称为帧。电影以每秒 2 4帧的速率来播放,北美电视每秒为
3 0帧,世界上其他许多地方的电视每秒为 2 5帧。
计算机中的电影文件由一系列有声音的位图简单组成。但如果不经过压缩,一个电影文
件将包含大量的数据。例如,假设一个电影每一帧的大小是 6 4 0×4 8 0像素的计算机屏幕,有
2 4位彩色,则每帧有 921 600字节。按每秒 3 0帧,则每秒 27 648 000字节。一直乘下去,则每
分钟为1 658 880 000 字节,一个两小时的电影有 199 065 600 000字节,大约 2 0 0 G B。这就是
为什么许多在个人计算机上播放的电影又小又短又跳跃的原因。
J E P G压缩方法用来减少存放静止图像所需的数据量,而 M P E G压缩方法用于存放运动图
像。M P E G代表移动图像专家小组。移动图像压缩技术利用的是这一事实,即某一帧通常包
含从前一帧复制来的大量信息。
对不同的媒体来说,有不同的 M P E G标准。M P E G - 2用于高清晰度电视(H D T V)及数字
视盘(D V D),也叫数字万用盘。 D V D的大小与 C D一样,但可以两面记录且每一面有两层。
在D V D中,视频信息按照大约 5 0倍这样的因子进行压缩,所以,一个两小时的电影只需 4 G B,
且只需放在一面的一层。如果用两面和两层,则 D V D的容量可达到大约 1 6 G B,约是 C D容量
的2 5倍。可以预见, D V D最终将取代 C D - R O M来存储软件。
C D - R O M和D V D - R O M是不是Vannevar Bush的预言在今天的实现?他开始设想的 M e m e x
是用缩微胶片,但用 C D - R O M和D V D - R O M更适合。电子媒体比物理媒体具有优越性,因为
前者更容易检索。遗憾的是,很少有人同时访问多个 C D或D V D驱动器。我们所接触的 B u s h概
念中的文件柜并不涉及存储桌面上所需的所有信息,它涉及的是互连计算机使得它们共享信
息并更有效地利用存储空间。
公开从远程操作计算机的第一人是 G e o rge Stibitz ,正是他在1 9 3 0年设计了贝尔实验室的
继电器计算机。继电器计算机的远程操作于 1 9 4 0年在 D a r t m o u t h进行了演示。
电话系统是用来在线路上传输声音的,而不是位。电话线路上传输位需要将位转换成声
音然后再转换回位。一种频率和一种振幅的连续声波(称作 载波)并不能传送真实的信息。
但是,如果改变声波的一些东西 — 换句话说,在两种不同的状态之间调制声波 — 则可以表
示0和1。在位和声波之间的转换由称作调制解调器的设备来实现。调制解调器是串行接口的
一种形式,因为一个字节的位是一个接一个传输的,而不是同时传输的。(打印机通常通过并
行接口与计算机连接: 8根线同时传输一个字节。)
早先的调制解调器采用称作频移键控(F S K)的技术。以300bps 传输的调制解调器把 0调
制到1 0 7 0赫兹,把 1调制到1 2 7 0赫兹。每个字节以一个起始位开始,以一个停止位结束,所以
每个字节需要 1 0位。以 3 0 0 b p s的速率传输,每秒只传输 3 0个字节。许多现代调制解调器用更
高级的技术能达到超过 1 0 0倍的速率。下载
第25章 图形化革命
273
早期家用计算机爱好者可以用计算机和调制解调器建立公告牌系统( B B S),其他计算机
可以接入并下载文件,即从远程计算机传输文件到自己的计算机。这种概念扩展到了如
C o m p u S e r v e这样的大型信息服务。在大多数情形中,通信完全采用 A S C I I码字符形式。
I n t e r n e t则不同于这些早期的成就,因为它是分散的系统。 I n t e r n e t其实就是计算机之间相
互通信的协议集合,其中最主要也是最重要的是 T C P / I P,由传输控制协议( T C P)和网际协
议(I P)组成。与通过线路只传输 A S C I I码字符不同, T C P / I P的发送程序把大的数据块分割成
小的包,在传输线路(通常是电话线)上独立传输,在另一端重新装配。
I n t e r n e t上流行的图形部分是 World Wide We b,采用H T T P,即超文本传输协议。在 We b页
面上看到的数据由称作 H T M L即超文本标记语言的格式来定义。这些名词中超文本这个词用
来描述相关信息的链接,非常类似于 Vannevar Bush提到的M e m e x。一个H T M L文件可以包含
到其他We b页面的链接,从而容易地访问它们。
H T M L与前面讲到的富文本格式( RT F)很相似,都包含有带有格式信息的 A S C I I码文本。
H T M L也可包含G I F文件、P N G(portable network graphics)文件和J F I F(J P E G文件交换格式)
文件等格式的图形。许多 World Wide We b浏览器可以浏览 H T M L文件,这是文本格式的一个
优点。把 H T M L文件定义成文本文件的另一个优点是它更容易查找。不管它的名称如何,
H T M L并不是像我们在第 1 9章和第 2 4章讲到的那些真正的程序设计语言。 We b浏览器读取
H T M L文件并依照它来编排文本和图形格式。
当你在浏览某个 We b页面并在上面操作时执行一些特殊的程序代码是有用的,这些代码
可以在服务器(指那些存储初始 We b页面的计算机)或客户机上运行,客户机即自己的计算
机。在服务器端,通常所要做的全部工作(例如对客户端填写的在线表格的解释)可以通过
公共网关接口( C G I)脚本来处理。在客户端, H T M L文件可以包含简单的程序设计语言,如
Java Script。We b浏览器就像解释 H T M L文本一样来解释 Java Script语句。
为什么一个 We b站点不能简单地提供一个可以在你的计算机上执行的程序呢?这涉及到
一个问题,你的计算机是什么?如果是 M a c i n t o s h,则需要一个包含 P o w e r P C机器码的可执行
文件并使用 Mac OS API; PC兼容机需要一个包含 Intel Pentium机器码的可执行文件,并使用
Windows API 。但还有其他计算机及图形操作系统。而且,你也不想不加选择地下载可执行
文件,它们可能来自于不值得信赖的地方且带有某种恶意。
对这些问题的回答可由 S u n公司的 J a v a语言来提供(不要与 J a v a S c r i p t混淆)。J a v a是一个
完美的面向对象的程序设计语言,非常像 C + +。前面几章里已经解释了编译语言(产生包含
机器码的可执行文件)和解释语言(不产生可执行文件)之间的区别, J a v a介于两者之间。
J a v a程序要经过编译,但编译的结果不是机器码,而是 J a v a字节码。在结构上 J a v a字节码与机
器码很相似,但用在虚构的计算机即 J a v a虚拟机(J V M)上。执行编译后的 J a v a程序的计算机
模拟J V M解释J a v a字节码。J a v a程序可在不同机器上的不同图形操作系统上运行,所以是具有
平台独立性的程序。
虽然本书着重讲了用电信号在线路上传输信号和信息,但一种更有效的方式是通过光纤
— 由玻璃或聚合体制造的小管道,可从不同角度传输光信号 — 来传输光信号。通过光纤传
输光信号可以达到以吉赫计算的数据传输速率 — 即每秒几百万位。
所以,似乎是光子而不是电将要负责未来家庭和办公室的大量信息传输,它将比摩尔斯
电码的点划更快,也比那些我们曾用来午夜与好朋友通信而精心设计的闪灯更快。
作者: zzz19760225     时间: 2016-2-10 04:09
缺少开源硬件的自由及开源软件总不免让人遗憾,真正的开源是完全可编程及复制的。许多大公司均选择硬件闭源,从而形成的技术壁垒与专利版权,阻碍着小规模创新者的发展。而开源硬件,让创业者可以更轻松地将创意转化为现实。
OSHWA
OSHWA
那么,什么是开源硬件呢?开源硬件协会—OSHWA(Open Source Hardware Association)这样定义:
开源硬件是可以通过公开渠道获得的硬件设计,任何人可以对已有的设计进行学习,修改,发布,制作和销售。硬件设计的源代码的特定的格式可以为其他人获得,以方便对其进行修改。理想情况下,开源硬件使用随处可得的电子元件和材料,标准的过程,开放的基础架构,无限制的内容和开源的设计工具,以最大化个人利用硬件的便利性。开源硬件提供人们在控制他们的技术自由的同时共享知识并鼓励硬件设计开放交流贸易。
开源硬件(OSHWA)定义1.0是在软件开源定义基础上定义的。该定义是由Bruce Perens和Debian开发者作为Debian自由软件方针而创建的。
开源硬件(OSHW)是一个实体创造物的术语—机器,设备,或者其他的物理事物。它们的设计已经对公众发布。发布允许任何人制造,修改,分发或使用该硬件设计。此定义目的在于为开源硬件许可的开发和评估提供准则。
硬件与软件不同之处是实物资源应该始终致力于创造实物商品。因此,生产在开源硬件(OSHW)许可下的品目(“产品”)的人和公司有义务明确该产品没有在原设计者核准前被生成,销售和授权,并且没有使用任何原设计者拥有的商标。
树莓派(Raspberry Pi)
Raspberry Pi
树莓派最近可谓家喻户晓,Raspberry Pi 是一个信用卡大小的单板机电脑,可以插入一台电视机和一个键盘。 它是一个基于ARM芯片的电脑,可以使用很多电脑的应用功能,包括电子表格(spreadsheet),文字处理和游戏等. 它还可以播放高清视频 (HDMI)。它由英国的树莓派基金会所开发,目的是以低价硬件($25)及自由软件刺激在学校的基本的电脑科学教育。目前树莓派的生态已经愈发完善,拥有详细的学习资料,丰富的附加模块以及 Pidora (基于 Fedora), Raspbian (Debian), Openelec (XBMC), 和 RISC OS等一系列可供选择的定制系统。
不过树莓派本身并不是特别开放,你无法得到所有的设计电路并自由复制一块树莓派,树莓派所搭载的 ARM Broadcom 微处理器需要昂贵的自动化工具来构建,无法通过零售渠道获得,并且需要一系列的闭源二进制代码。不过这样的现状也许会在 Broadcom 开放显卡驱动后得到改变,并且树莓派项目的目标之一就是走向完全开放。
OLinuXino
OLinuXino项目与树莓派类似,但却是完全开源的。你能够找到所有设计 CAD 文件和代码并据此自己制作一块 OLinuXino 来出售或是根据需求随意定制和修改。
OLinuXino 板的设计目标是面向实际工作并且可以投入工业生产环境,他们支持彩色图形化界面, 网络, USB驱动, GPS, 无线射频识别 RFID,各种各样的传感器及音频设备。
Arduino
Arduino
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它适用于爱好者、艺术家、设计师和对于“互动”有兴趣的朋友们。
Arduino可以让你的计算机能够拥有感应、控制真实世界的能力,而不仅局限于键盘、鼠标、屏幕、扬声器等单一的标准I/O设备。它同时也能作为独立的核心,作为机器人、智能车、激光枪等电子设备的控制器,应用非常简单。
Arduino可用于开发交互式对象,采取各种开关或传感器输入,控制各种灯,电机和其他物理输出。Arduino的项目,可以独立,或者与计算机上运行的软件通信。
Arduino包括一个硬件平台——Arduino Board,和一个开发工具——Arduino IDE。两者都是开放的,既可以获得Arduino开发板的电路图,也可以获得Arduino IDE的源代码。除了购买Arduino电路板外,不需要支付额外的费用。Arduino Board基于简单的微控制器,如ATmega328,提供了基本的接口和USB转串口模块。使用者只需要用一个USB线就可以连接电脑和Arduino Board,完成编程和调试,而不需要专门的下载器。Arduino使用一种简单的专用编程语言,使用者不必掌握汇编语言和C语言等复杂技术就可以进行开发。IDE可免费下载,并开放源代码,跨平台,极为便利。
BeagleBoard
BeagleBoard也是一块单板电脑,在它之上可以运行Android,Ubuntu,以及 Debian,所以你能选用自己最喜欢的编程语言和编译工具。另外BeagleBoard的所有设计图,CAD 文件,源代码全部都是开放的。
RepRap 3D 打印机
RepRap 3d
RepRap是世界上首个多功能、能自我复制的机器,也是一种能够打印塑料实物的3D打印机。
因为RepRap本身许多部件都是由塑料制成,而且RepRap自己就可以打印和生产这些部件。所以任何人只要愿意花一些时间,收集足够的材料,就都能够通过复制和组装RepRap自身的部件来实现RepRap机器的自我复制。因此,RepRap从某种意义上说也是一台“技术免费”的3D打印机。
不仅如此,RepRap的开源特性(从软件到硬件各种资料都是免费和开源的,都在自由软件协议GNU通用公共许可证GPL之下发布)还意味着:任何人,出于任何目的,都能够自由的改进和制造RepRap。这也充分的体现了所有开源项目的核心精神:自由、分享、互惠。因此,凡是在最初的RepRap机型的基础上制作的、能实现自我复制、并愿意(技术层面)无偿的提供给大家使用的机型,大家就都习惯的称它们是“基于RepRap”的项目。
Open Prosthetics
Open Prosthetics
Open Prosthetics是一个开源义肢专项计划,希望能藉由志愿者们提供无偿的设计,最终能够制作出低造价的义肢,并且透过开源社区互动的方式能够及时的改良制作以更好的符合使用者的需求。
项目创始人Jonathan Kuniholm 2005年的时候还是一名驻伊拉克的士兵,但之后他却在战火中失去了右手臂,他一直在为生物学博士学位而奋斗。Kuniholm正在努力想办法为全球截肢者提供便宜有效的假肢和分享开源硬件设计而努力着。
如果你有能力为开源社区做出贡献,请考虑资助Open Prosthetics。

Arduino 编辑
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。[1]
外文名 Arduino 创始人 Massimo Banzi 分    类计算机技术->微型计算机 主控芯片 AVR单片机、ARM芯片 开发环境 Arduino IDE 编程语言 C/C++
目录
1 发展历程
2 平台特点
3 功能
4 硬件组成
▪ 主板
▪ 扩展板
5 版权与付费
发展历程编辑
Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。
随后Banzi、Cuartielles和Mellis把设计图放到了网上。版权法可以监管开源软件,却很难用在硬件上,为了保持设计的开放源码理念,他们决定采用Creative Commons(CC)的授权方式公开硬件设计图。在这样的授权下.任何人都可以生产电路板的复制品,甚至还能重新设计和销售原设计的复制品。人们不需要支付任何费用,甚至不用取得Arduino团队的许可。然而,如果重新发布了引用设计,就必须声明原始Arduino团队的贡献。如果修改了电路板,则最新设计必须使用相同或类似的Creative Commons(CC)的授权方式,以保证新版本的Arduino电路板也会一样是自由和开放的。唯一被保留的只有Arduino这个名字,它被注册成了商标,在没有官方授权的情况下不能使用它。
Arduino发展至今,已经有了多种型号及众多衍生控制器推出。[2]
平台特点编辑
跨平台
Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
简单清晰
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
发展迅速
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。[3]
功能编辑
可以快速使用Arduino与Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider等软件结合,作出互动作品。 Arduino可以使用现有的电子元件例如开关或者传感器或者其他控制器件、LED、步进马达或其他输出装置。 Arduino也可以独立运行,并与软件进行交互,例如: Macromedia Flash, Processing, Max/MSP, Pure Data, VVVV或其他互动软件…。 Arduino的IDE界面基于开放源代码,可以免费下载使用,开发出更多令人惊艳的互动作品。[4-5]
硬件组成编辑
主板

Arduino的型号有很多,如
Arduino Uno
Arduino Uno
Arduino Uno
Arduino Nano
Arduino Nano
Arduino Nano
Arduino LilyPad
Arduino Mega 2560
Arduino Ethernet
Arduino Due
Arduino Leonardo
ArduinoYún[6-7]
扩展板

Arduino的扩展板很多,如
Arduino GSM Shield
Arduino GSM Shield Front
Arduino GSM Shield Front
Arduino Ethernet Shield
Arduino Ethernet Shield
Arduino Ethernet Shield
Arduino WiFi Shield
Arduino Wireless SD Shield
Arduino USB Host Shield
Arduino Motor Shield
Arduino Wireless Proto Shield
Arduino Proto Shield
版权与付费编辑
为了保持设计的开放源码理念,因为版权法可以监管开源软件,却很难用在硬件上,Arduino决定采用Creative Commons许可。 Creative Commons(CC)是为保护开放版权行为而出现的类似GPL的一种许可(license)。在Creative Commons许可下,任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复制品。你不需要付版税,甚至不用取得Arduino团队的许可。然而,如果你重新发布了引用设计,你必须说明原始Arduino团队的贡献。如果你调整或改动了电路板,你的最新设计必须使用相同或类似的 Creative Commons许可,以保证新版本的Arduino电路板也会一样的自由和开放。唯一被保留的只有Arduino这个名字。它被注册成了商标。如果有人想用这个名字卖电路板,那他们可能必须付一点商标费用给Arduino的核心开发团队成员。[8-11]
作者: zzz19760225     时间: 2016-2-12 21:55
zhscript简介
3月19日,深圳源创会火热报名中,go>>>»  

zhscript是一种脚本语言,按照我的理解,脚本一般是用在增加灵活性、降低复杂度等场合,zhscript便是以此为目标并结合母语习惯来实现的一种脚本,下面我就以与c++相对比的方式来解释他的语法
首先也从hello,world开始
c++:
cout<<"你好,这个世界";
zhscript:
显示你好,这个世界。

逻辑判断上
c++:
if(1<2&&1<=3||1>0)
    cout<<"这就对了";
else
    cout<<"这不可能";
zhscript:
如果1小于2并且1小于等于3或者1大于0那么
    显示“这就对了”
否则
    显示这不可能。
(“这就对了”之所以加引号强调是文本是因为“了”是一个关键字,“不”也是关键字,但他不在此场合起作用)
zhscript还有一种右缺省值的设计,上面的语句也可写成
如果1小于2并且小于等于3或者大于0那么
    显示“这就对了”
否则
    显示这不可能。

三元运算符
c++:
cout<<"这"<<(1<2&&1<=3||1>0 ? "就对了" : "不可能");
zhscript:
显示这如果1小于2并且小于等于3或者大于0那么“就对了”否则不可能。
c++是严格的三元,也就是说后面的两元不能缺一,而zhscript只是一种“如果”的写法,允许写成
显示这如果1小于2并且小于等于3或者大于0那么“就对了”。

zzzzzzzzzzz
发帖于 6年前
30回/832阅


0
zzzzzz... 6年前
注释
c++:
/*代码是最好的注释*/
zhscript:
(代码是最好的注释)
zhscript没有类似c++的“//”样的行式注释

文本(字符串)
c++:
包含在引号内的为文本或者字符
zhscript:
包含在双引号(中文符号)内的为绝对文本,不是关键字的代码都视为文本,包括不在适用场合的关键字
zhscript不似c++具有各种数据类型,没有数据类型或者只有字符串这一种类型,只是在一些场合(如逻辑判断时)会先处理成某种类型(如数字)以切合实际


0
zzzzzz... 6年前
变量的赋值和求值
c++:
string s="值";
cout<<"s="<<s<<endl;
zhscript:
赋予s以值。
显示s=‘s’字符10。
从以上可以看出zhscript的求值写法跟php、sh等类似,是需要明确的求值符(一对单引号,中文符号)
zhscript对作为变量名的符号没有限制(c++是字母、数字、下划线),关键字加上引号也能作为变量名,下面的语句都被允许
定义*(^-^)*以“显示一定要快乐”。*(^-^)*。
赋予“显示”以参数是‘参数’。显示‘显示’。
如上所示,zhscript还有“参数”这样的系统变量,“参数”表示所有的命令行指定或“加载”时附带的参数,“参数1”指第1个参数,“参数-1”指参数数目
另外还有“窗口”、“保留字”、“参数栈”、“回调”等系统变量

变量指针
c++:
string s="值";
string* s1=&s;
string** s2=&s1;
cout<<"s="<<**s2<<endl;
zhscript:
赋予s以值。
赋予s1以s。
赋予s2以s1。
显示s=‘‘‘s2’’’字符10。

评论(0)| 引用此评论| 举报 (2010-07-11 17:12)

0
zzzzzz... 6年前
已经实现有以下几个小应用
人品测试机、补充工具箱、火狐本地图片浏览器等
请往 http://code.google.com/p/zhscript/downloads/list 下载测试
请注意操作系统,下载包未注明-w的均为在ubuntu下运行


0
零度C 6年前
这不是和易语言差不多么?

评论(0)| 引用此评论| 举报 (2010-07-12 09:22)


0
zzzzzz... 6年前
我想还是有很大差别,易语言看上去就是一种汉化的英文语言,而zhscript是中文习惯的语法,不需要空格分界(空格只是作为排版作用),允许按照文章的样式书写,关键字也可从中分开成两行,易语言应该是致力于成为一门有规模的高级语言,而zhscript只是想完全用中文写小应用

评论(0)| 引用此评论| 举报 (2010-07-12 11:21)

0
zzzzzz... 6年前
变量的作用域
c++:
面向对象,以类定义的层次形成作用域并能限定访问
zhscript:
不面向对象,以文件调用的层次形成作用域,所有上级文件的变量都可见乃至可写(只读变量除外),对于上级的访问使用注解符,用类似“【上】变量1”、“【上】【上】变量1”来访问上一级、上上一级的变量,用“【顶】变量1”访问顶级全局变量
不面向对象会出现一个用作库函数的变量名同名如何处理的问题

评论(0)| 引用此评论| 举报 (2010-07-12 11:25)


0
zzzzzz... 6年前
循环
c++:
string s="";
for(;;){
    if(s=="11111")break;
    cout<<s<<endl;
    s+="1";
}
zhscript:
赋予s以“”。
循环先
    如果‘s’等于11111那么跳出。
    显示‘s’字符10。
    赋予s以‘s’1。
了。
zhscript只支持单纯的循环,没有参数,也就是仅相当于c++的for(;;)或while(true),支持循环操作break(关键字“跳出”)、continue(关键字“再来”),个人见解觉得for、while、do-while复杂了,参数本与循环无关



0
zzzzzz... 6年前
语句体
c++:
{
    cout<<1;
    cout<<2;
}
zhscript:

    显示1。
    显示2。
了。
zhscript另外支持一种只用于逻辑判断后的语句体,用逗号分隔,类似“如果不‘假’那么显示那就是,显示真。”的写法,也明显这种语法不能嵌套

评论(0)| 引用此评论| 举报 (2010-07-13 15:16)


0
zzzzzz... 6年前
不面向对象会出现一个用作库函数的变量名同名如何处理的问题,请参看 http://code.google.com/p/zhscript/wiki/noo

评论(0)| 引用此评论| 举报 (2010-07-13 15:19)


0
zzzzzz... 6年前
关系运算符
c++:
==、!=、<=、<、>=、>、!、&&、||
zhscript:
等于、不等于、小于等于、小于、大于等于、大于、不、并且、或者

评论(0)| 引用此评论| 举报 (2010-07-13 15:24)


0
人人 6年前
这种语言会把人搞成机器

评论(0)| 引用此评论| 举报 (2010-07-13 15:39)

0
zzzzzz... 6年前
我觉得这样才是接近自然语言的语言,你是如何觉得会让人变成机器?

评论(0)| 引用此评论| 举报 (2010-07-13 15:48)

zzzzzz... 6年前
宏定义
c++:
#define out(arg) cout<<arg
out("明天有零星小雨");
zhscript:
定义out以“显示‘参数’。”。
out明天有零星小雨。
或者写成“out:明天有零星小雨。”,冒号是“被忽略”的关键字,只为分隔、清晰用
zhscript的定义也类似其他脚本的function的定义
由于定义的名字使用时也是如同关键字样不是依靠空格等分界、从语句中识别而非仅从头,所以,对很短的字母、数字、常用的单字进行定义是种很糟糕的做法,因为极有可能会导致运行大混乱
“显示”、“执行”这两个已有关键字允许被重定义,这样可以更灵活地利用已有的代码逻辑,在上一级重定义后输出便转向了
定义时除可以使用赋值的注解符外,另有“无参”用于没有参数的场合,例如“定义【顶】【锁】【无参】↙以“字符10”。”便是把“↙”定义成换行符,用在“显示明天↙有↙零星小雨↙。”,而如果不是“无参”那便达不到所期待的效果,有兴趣可以试验下

评论(0)| 引用此评论| 举报 (2010-07-15 10:47)

0
职通网 6年前
别扭啊。不可否认,英文字母确实是写程序的利器!

评论(0)| 引用此评论| 举报 (2010-07-15 11:11)

0
zzzzzz... 6年前
还是看问题的角度不同,英文字母之所以适合写程序,一则是目前已有的从低级到高级的开发语言都是基于字母,要把握最新的语言只有扎进英文,一则是因为使用键盘的原因输入英文能够快速,但不能排除还有不想学习英文、只想慢悠悠地打字享受编程的情形出现吧?

评论(0)| 引用此评论| 举报 (2010-07-15 11:28)

0
zzzzzz... 6年前
执行外部程序
c:
int ret=system("ls /");
zhscript:
赋予ret以执行“ls /”。

用于调用其他库的“调用”关键字
“调用”是用来调用系统库、第三方库、扩展库或定制shell的接口,他又由一系列类似于c写法的参数来组成
1、L用于装载库,如“赋予【顶】【锁】标准库以调用L、libstdc++.so.6.0.13、libstdc++.so.6、libstdc++-libc6.1-1.so.2。”就是去寻找装入stdc系统库,成功后句柄值将赋给变量“标准库”,后面的多个名字是为了处理库会有名字不同的情况
2、G用于获得库里函数的地址以及返回值、参数的情况,如“赋予【顶】【锁】【标准库】格输出函数以调用“G i”、‘【顶】标准库’、printf、c*、.。”就是获取函数printf的地址,然后与函数的返回类型、参数的类型和顺序结合起来,成功后“格输出函数”被赋予的值类似“i/6d5130/c*”这样保留了调用所需信息的格式串
接口的类型支持c(字符,对应char)、i(整数,对应int)、v(对应void)、u(无符号、对应unsigned)、l(长整、对应long)、*(指针)、&(地址)、.(可变参数)、p(pascal调用约定)等标准方式
也支持一类扩展专用类型,如Z(传递int argc,...)、S(传递char* buf,int siz)、B(传递char* buf)、E(传递int* err)、A(char** addr_ret)等,在gtkmmsh、zhscript_firefox_plugin等里使用的“隧道”便是使用此类
3、F用于卸载库,如“调用F、‘标准库’。”
4、函数调用,如“调用‘格输出函数’-c-i-lu-c*、%c字符9%d字符9%lu字符9%s字符10、c、21、2100000000、string。”

评论(0)| 引用此评论| 举报 (2010-07-20 18:37)


0
zzzzzz... 6年前
嵌套的赋值
c:
int i1,i2,i3;
i1=i2=i3=100;
zhscript:
赋予i1以赋予i2以赋予i3以100。
另外,“显示”关键字也支持这种嵌套,如“显示显示显示哈哈”将会显示6个哈

变量的其他
c++:
delete p;
zhscript:
删除p。
zhscript还有类似于php的isset、bash的-z等的判断变量是否存在的关键字“存在”

评论(0)| 引用此评论| 举报 (2010-07-23 13:03)



0
zzzzzz... 6年前
运行其他地方的代码
加载:运行文件里的代码,可附带参数
解释:运行变量里的代码,可附带参数。所用变量在赋值时一般得加“代码”注解符以免当时被解释

流程的直接终止
结束:整个结束
退出:当前级(区)结束

类似PHP的EOT定界符的“下原样”、“原样上”关键字
“下原样”/“原样上”成对出现,之间的所有字符将原样使用,包括换行、回车、制表符等被忽略字符

系统变量“回调”的含义,主要用于其他程序或库直接使用解释器
回调:解释语句接口函数地址
回调0:当前解释器地址
回调1:区地址
回调2:分配变量接口函数地址
回调3:得变量值接口函数地址
回调4:删除变量接口函数地址
回调5:遍历变量接口函数地址
以上其中每个接口函数的具体定义在 http://code.google.com/p/zhscrip ... trunk/new_gg/def1.h 这个头文件里

系统变量“参数栈”用于传递调用、加载等所需的整个参数栈再给下一级

解释器本身只是逻辑、变量、接口单元,具体功能依靠库、外壳
已有的接口:stdc、curl、base64
已有的扩展库:regexpr、xml、socket、redireconsoi、gjk、gjke、doscmd、file、curle、vartable
已有的外壳:gtkmmsh、zhscript_firefox_plugin

评论(0)| 引用此评论| 举报 (2010-07-23 13:03)




0
zzzzzz... 6年前
完,谢谢

评论(0)| 引用此评论| 举报 (2010-07-23 13:04)



xiaowe... 6年前
粗略的的阅读了下你的Google code里的代码,大体上有这样些想法:

1. 底层的库全是在c++的基础上实现的,是不是你的zhscript要先被编译器翻译成c++版本再由gcc去编译呢?

2. 一个语言,要想发展壮大,总归要有受众。但是,zhscript面向什么样的用户群呢?不熟悉英文的中文编程爱好者?但是,我担心一个人如果是接触这样一门语言起步,调动兴趣还可以,但是会不会在学习其他语言时有所阻碍呢?如果是普通程序员,我很怀疑是不是那么容易被接受。但从简洁易懂的角度来说, for line in lines 和 “遍历lines中的每一个line”都非常易于理解。 好的代码,阅读起来就像看书一样,自然而然就让人明白了。

但从语法上而言,我个人认为,英语也可以写出易懂的代码。虽然perl这样的语法有点像怪胎,但不代表英语的都是怪胎吧。

最后,假如作为脚本,中文在shell中的输入都会有些困难。

p.s. 我最不喜欢中文和英文掺杂在一起了,好繁琐....

很钦佩你的耐心和技术,可以做出这样的东西。以上几点纯属一家之言,单纯表述下个人的一点想法。

评论(0)| 引用此评论| 举报 (2010-07-23 14:19)

0
zzzzzz... 6年前
多谢你如此费心看我的项目,也一一回复
1、zhscript其实是个解释器,不是编译器,是把读入的代码逐句解释运行,解释器本身是gcc编译的c++写的
2、我觉得计算机越发展便应该是越使非专业人群能够充分使用,目前计算机及其延伸确实越来越易用,但能充分发挥其效用的无疑是计算机语言,各种高中低级语言都是非专业不能理解,而最贴近一般用户的就是脚本这种分类有点模糊的语言,我写zhscript的一个目的是让中文人群能充分地利用起计算机,能控制计算机去做自己想实现的事情是件很开心、有成就感的事,我想你也是有这样的感觉吧?让一般人也能有这样感觉,虽然我不一定能做到
虽然zhscript看上去没有语法,但他还是有语法的,这也许能让一般用户和期望走向编程的人能够比较容易地明白计算机语言是怎样的吧?
计算机总是在发展,并且是飞速发展,以后的编程语言就一定还是英文?以后的主力输入就一定还是键盘?
我也不喜欢那种中英混搭,尤其是这么说话的人,哈。话题另外,我觉得语言之中还是“物尽其用”、自然而然(跟现实一样),那种非要中文编程得“算术一加一。”就矫情了
如果你是程序员的话,欢迎参加进来,对,程序员本身不是那么容易接受这种语言,大概因为程序是用来谋生的吧

评论(0)| 引用此评论| 举报 (2010-07-23 16:45)



0
nant 6年前
浪费时间

评论(0)| 引用此评论| 举报 (2010-07-23 20:48)


xiaowe... 6年前
引用来自#23楼“nant”的帖子
浪费时间

其实也不能完全这么说。可能你觉得这么做毫无意义,但是如果你深入其中,或许会有新的体会。就好像国内的人们常说的“重造车轮”理论一样,每一个深入到这里面的人,肯定会有更多的收获。所以,时间上来说,未必是浪费了。你认为那是无用功,也许作者却因此对脚本的解释、语法的解析有了更深入的掌握,这是种自我的提升。所以,“浪费时间”,未必是这么必然的。

评论(0)| 引用此评论| 举报 (2010-07-24 18:26)


xiaowe... 6年前
引用来自#22楼“zzzzzzzzzzz”的帖子
多谢你如此费心看我的项目,也一一回复
1、zhscript其实是个解释器,不是编译器,是把读入的代码逐句解释运行,解释器本身是gcc编译的c++写的
2、我觉得计算机越发展便应该是越使非专业人群能够充分使用,目前计算机及其延伸确实越来越易用,但能充分发挥其效用的无疑是计算机语言,各种高中低级语言都是非专业不能理解,而最贴近一般用户的就是脚本这种分类有点模糊的语言,我写zhscript的一个目的是让中文人群能充分地利用起计算机,能控制计算机去做自己想实现的事情是件很开心、有成就感的事,我想你也是有这样的感觉吧?让一般人也能有这样感觉,虽然我不一定能做到
虽然zhscript看上去没有语法,但他还是有语法的,这也许能让一般用户和期望走向编程的人能够比较容易地明白计算机语言是怎样的吧?
计算机总是在发展,并且是飞速发展,以后的编程语言就一定还是英文?以后的主力输入就一定还是键盘?
我也不喜欢那种中英混搭,尤其是这么说话的人,哈。话题另外,我觉得语言之中还是“物尽其用”、自然而然(跟现实一样),那种非要中文编程得“算术一加一。”就矫情了
如果你是程序员的话,欢迎参加进来,对,程序员本身不是那么容易接受这种语言,大概因为程序是用来谋生的吧

诚然,让计算机按照我们的意愿工作,是一件令人兴奋的事,每一个不是为了谋生从事这个行业的人,都会有这样的体会。其实,我倒是认为,社会的进步的一个显著特征是,技术的日趋专业化。举例来说,原来的数学,现在要变成概率 统计 集合类的众多分支,而人们的研究日趋专业化。计算机当然要为人而用,也有越来越多的专业型的软件进入每个普通人的世界(Photoshop是很好的例子),所以,是软件让人们更多的去使用计算机,是无数的专业的程序员给普通的用户带来了这些。

嗯,有些乱哈。我的观点:作为引导性的语言未尝不可,起码可以给那些想接触而受限于英语的人带来了福音:)zhscript是有语法的,我在原来的帖子里并没有否认~  但是,如果没有更多的吸引人的特性,就很难发展起来。比如,我学习python,是因为它简洁的语法,优美的实现以及丰富的类库等。就是这样,有些东西,让你能够被吸引。

评论(0)| 引用此评论| 举报 (2010-07-24 18:35)


0
zzzzzz... 6年前
多谢替我解辨,其实与我来说,“冬虫不语夏草”

评论(0)| 引用此评论| 举报 (2010-07-26 21:55)



0
zzzzzz... 6年前
至于造轮子,现今早非大锅饭年代,那种一阵标榜而后烟消云散的事情已不复返了,我写zhscript是因为没有相类似的解释器,如若有,我会参与其中,再者zhscript只是提供一种接口,后面连接的是成熟的广泛应用的诸如libstdc、gtkmm、xml、socket等等,“全部推倒,用汉字重写”这种前人我可不会去当

评论(0)| 引用此评论| 举报 (2010-07-26 22:19)



0
zzzzzz... 6年前
技术的发展的确是不断细化,也不断会出现新领域,我想zhscript的定位是小应用语言,即不曾编程过的简单看看就能开始,也当然学会了便想再深一步了解计算机世界的弃他而投“明”亦不失一桩乐事,我想zhscript本身就是一个纯粹的不务他的解释内核,而通过调用外部库和专用外壳程序来构建应用,我目前在做的gtkmmsh就是一种紧密结合的通用的外壳,用这种外壳来再做个中间层把复杂问题简单化,比如“人品测试机”可以最小化到托盘,而实现此功能只是代码加入一句“隧道最小化到托盘。”而已

评论(0)| 引用此评论| 举报 (2010-07-26 22:41)


0
zzzzzz... 6年前
从对“格式”是否看重这点来讲,zhscript跟python真是正好相反,zhscript根本不在乎如何书写,以至于可以费力不讨好地写成python那种“样子”,而至于类库,面向对象对于专业人员参与大型软件项目是利器乃至基础,但对于小应用实乃牛刀,带名字空间、包名、类名的helloworld让我有点莫名的好笑,虽然“那只是个示范,那根本没错”

评论(0)| 引用此评论| 举报 (2010-07-26 23:10)


zzzzzz... 6年前
新关键字“数目”、“之”

参数、保留字这些系统变量都有个-1如“参数-1”、“保留字-1”来返回他们的数目,现加入“数目”关键字,便有“参数数目”、“保留字数目”相等价,另外一些扩展库会将运算结果分配成多个变量,形成数组,这个关键字也同样传给他们
“之”解释器本身并不使用,而是作为统一的数组“维”分隔符传给扩展库,这样也同时可以当解释器关键字变化(如繁体版、英文版)时不必修改扩展库
上两者使用时的一个例子:
新建数组“排”、3、
    11、12、13、
    21、22、23。
显示‘排数目’-‘排之1之1’-‘排之2之3’。
英文版:
new_array row,3,
    11,12,13,
    21,22,23;
echo $(row.length)-$(row.1.1)-$(row.2.3);


评论(0)| 引用此评论| 举报 (2010-08-11 12:13)


0
zzzzzz... 6年前
新关键字“分别”、“当”

分支判断
c++:
int i=0;
switch(i){
case 1:
    cout<<"壹";
    break;
case 2:
    cout<<"贰";
    break;
case 3:
    cout<<"叁";
    break;
default:
    cout<<"其他";
}
zhscript:
赋予i以0。
分别‘i’当先
等于1那么
    显示壹,
    跳出。
等于2那么
    显示贰,
    跳出。
等于3那么
    显示叁,
    跳出。
那么
    显示其他。
了。
其实实现上“分别”是“如果”又一种的写法,所以不似c++样限于整数、只能“等于”判断,允许写成
分别‘i’当

    等于壹或者等于贰或者等于叁那么显示1-3,跳出。
    大于等于1并且小于等于3那么
    先
        显示壹至叁。
        跳出。
    了。
了。

评论(0)| 引用此评论| 举报 (2010-08-11 12:14)

[ Last edited by zzz19760225 on 2016-2-12 at 22:02 ]
作者: zzz19760225     时间: 2016-2-13 07:42
三角编号法
王码春雨手机输入法
新酷音输入法
四角号码
汉码五笔画输入法
得意10键输入法
活码输入法
伪虾米输入法
中文之星掌上狂拼输入法
朱邦复
注音符号
笔划输入法

得意中文整句输入法
国笔输入系统
数字五笔中文输入系统
点讯梅花输入法
点讯输入法S60数字键
搜狗手机输入法
T9输入法
手机输入法
倚天中文系统
中文信息处理
汉语拼音输入法
输入法
Unicode
大五码
快意速成输入法
表形码
郑码输入法
汉字基因
仓颉系统
十易码输入法
九方输入法
六一输入法
海峰五笔
极点五笔输入法
二笔输入法
中文之星智能狂拼
部首输入法
黑马神拼
拼音加加
紫光华宇拼音输入法
智能ABC输入法
行列输入法
呒虾米输入法
大易输入法
五笔字型输入法
仓颉输入法
中文输入法
自然输入法
注音输入法
作者: zzz19760225     时间: 2016-2-13 12:36    标题: 中国DOS联盟论坛的下载资源搜集

中国DOS联盟论坛的下载资源搜集(20160213)<从论坛上传选项复制>

上传选项里的ALL
http://upload.cn-dos.net/upload.php?page=all      
按照网页后面的ALL改为第几页就转向那一页,随着上传数量变动,应该有10个左右的错位。
----------------------------------------------------------------------------------------------------------------------------------------------------102
102-1-15   
刪          檔名                用戶                    備註                    大小                                               日期                                                               原檔名      
15D        [015.rar]        Roy        WinNT 3.51繁體中文版 part 1        95.8MB        2008/02/17(Sun)11:58         WINNT351SVCHT.part1.rar
14D        [014.rar]        nc199        Qedit4        58.6KB        2008/02/16(Sat)17:16         Qedit.rar
13D        [013.rar]        frd        my for 2008.2.16        943.8KB        2008/02/16(Sat)16:11         help.rar
12D        [012.rar]        nc199        list enhanced 2.4破解版本 很强大的文件管理工具        25.5KB        2008/02/16(Sat)11:47         list.rar
11D        [011.rar]        maxim        类似DOS的DEBUG,但显示信息更丰富。        42.1KB        2008/02/15(Fri)22:53         AT90.RAR
10D        [010.rar]        maxim        中文阅读器,自动简繁体.        82.7KB        2008/02/15(Fri)22:41         CREAD.rar
9D        [009.jpg]        zerocn        示意图片        16.6KB        2008/02/15(Fri)20:24         未命名.JPG
8D        [008.jpg]        Sufone        电子继电器        12.6KB        2008/02/15(Fri)15:35         未命名.JPG
7D        [007.zip]          billa        16x16汉字库        261.3KB        2008/02/15(Fri)12:39         HZK16.zip
6D        [006.gif]                glfdos        win351        49.4KB        2008/02/14(Thu)15:59         1.gif
5D        [005.rar]        frankcandy        天汇汉字兼容系统3.2完整版        276.3KB        2008/02/13(Wed)20:30         TWAY.rar
4D        [004.zip]                 garyzyg        Super Worms 1.62        79.5KB        2008/02/12(Tue)12:56         sw.zip
3D        [003.zip]                garyzyg        Liero 1.33        373.0KB        2008/02/12(Tue)12:48         liero133.zip
2D        [002.png]        yksoft1        opera 9.2 on Win95        47.8KB        2008/02/11(Mon)17:44         opera95.png
1D        [001.zip]                Wengier        test        8.3KB        2008/02/11(Mon)17:14         xcp163.zip
-----------------------------------------------------------------------------------------------------------------------------------------------------101
101-16-35
刪        檔名                用戶        備註        大小        日期        原檔名
35D        [035.rar]        gmy        CMD方式下的BAT简易加密工具Bat2unic        880B        2008/02/20(Wed)11:28         Bat2unic.rar
34D        [034.jpg]        yoxu        dos        19.8KB        2008/02/20(Wed)01:19         TT截图未命名.jpg
33D        [033.zip]                maxim        内存测试软件        120.6KB        2008/02/19(Tue)14:06         DOCMEM.ZIP
32D        [032.rar]        xiaoqiangzx        dos练习机 --压箱奉献 新老高手的福音        386.5KB        2008/02/19(Tue)10:34         dos 练习.rar
31D        [031.rar]        maxim        解密工具MSCOPY        442.2KB        2008/02/19(Tue)08:26         MSCOPY96.rar
30D        [030.rar]        maxim        DOS下的一个焰火演示程序        12.9KB        2008/02/19(Tue)00:26         FIRE.rar
29D        [029.rar]                0道坏的软盘的新生        51.6KB        2008/02/19(Tue)00:10         NEWDISK.rar
28D        [028.rar]        19951001        2008.2.18 dsptw        41.9KB        2008/02/18(Mon)21:53         dsptw.rar
27D        [027.rar]        Roy        WinNT 4.0 繁體中文版 part 4        95.8MB        2008/02/18(Mon)13:38         winnt4svrcht.part4.rar
26D        [026.rar]        Roy        WinNT 4.0 繁體中文版 part 3        95.8MB        2008/02/18(Mon)13:38         winnt4svrcht.part3.rar
25D        [025.rar]        Roy        WinNT 4.0 繁體中文版 part 2        95.8MB        2008/02/18(Mon)13:37         winnt4svrcht.part2.rar
24D        [024.rar]        Roy        WinNT 4.0 繁體中文版 part 1        95.8MB        2008/02/18(Mon)13:37         winnt4svrcht.part1.rar
23D        [023.rar]        Roy        WinNT 4.0 繁體中文版 part 5        61.6MB        2008/02/18(Mon)13:22         winnt4svrcht.part5.rar
22D        [022.rar]        bjsh        CN-DOS批处理精华贴(2007-A)(IE7)        2.6MB        2008/02/18(Mon)10:43         CN-DOS批处理精华贴(2007-A)(IE7).rar
21D        [021.rar]        bjsh        CN-DOS批处理精华贴(2007-A)(IE6)        2.6MB        2008/02/18(Mon)10:40         CN-DOS批处理精华贴(2007-A)(IE6).rar
20D        [020.zip]                darkradx        很简单的启动盘, 受委托发布某软件        176.1KB        2008/02/18(Mon)05:45         BOOTCD.zip
19D        [019.rar]        Roy        WinNT 3.51繁體中文版 SP5 安裝包 part 1        95.8MB        2008/02/18(Mon)01:49         NT351SP5CHT.part1.rar
18D        [018.rar]        Roy        WinNT 3.51繁體中文版 part 2        95.8MB        2008/02/18(Mon)00:11         WINNT351SVCHT.part2.rar
17D        [017.rar]        Roy        WinNT 3.51繁體中文版 SP5 安裝包 part 2        19.1MB        2008/02/18(Mon)00:05         NT351SP5CHT.part2.rar
16D        [016.rar]        Roy        WinNT 3.51繁體中文版 part 3        54.2MB        2008/02/17(Sun)23:32         WINNT351SVCHT.part3.rar
------------------------------------------------------------------------------------------------------------------------------------------------------100
100-36-55
刪        檔名                用戶        備註        大小        日期        原檔名
55D        [056.gif]                hnfeng        效果图((1/2)        31.5KB        2008/03/01(Sat)17:28         1.gif
54D        [055.rar]        hnfeng        WBAT 前景/背景 颜色效果速查表(BAT)        1.7KB        2008/03/01(Sat)17:27         WBAT-YS.rar
53D        [054.rar]        kfckfl        dos win9x 串口调试助手源码        12.8KB        2008/03/01(Sat)11:57         dos串口调试助手源码.rar
52D        [053.rar]        pqshu        30K的绿色万能播放器        30.6KB        2008/02/29(Fri)23:44         30K的绿色万能播放器.rar
51D        [052.rar]        barton        tools for syslinux        428.1KB        2008/02/29(Fri)18:05         syslinux_tool.rar
50D        [051.rar]        gmy        一键GHOST v11.0 Build 080227 测试版 beta1        10.1MB        2008/02/28(Thu)20:06         1KG_080227_Beta1.rar
49D        [050.rar]        qq7199575        dos练习软件123456        383.2KB        2008/02/28(Thu)17:40         dos练习软件.rar
48D        [049.zip]                cnch        CC386 V3.74编译器(Win 32)        3.5MB        2008/02/28(Thu)15:22         cwdl374e.zip
47D        [048.zip]                cnch        CC386 V3.47编译器        2.1MB        2008/02/28(Thu)15:14         ccdl374e.zip
46D        [047.jpg]        firstsail        WinSail的打开/存贮文件框        21.0KB        2008/02/27(Wed)14:21         opendlg.jpg
45D        [045.rar]        hkfalcon        星外自动安装php        81.7KB        2008/02/26(Tue)22:57         setupiis.rar
44D        [044.jpg]        HAT        AAA        46.0KB        2008/02/26(Tue)15:39         11.JPG
43D        [043.rar]        jia332        整开机顺序的小程序,对于搞测试的朋友很有用        2.7KB        2008/02/26(Tue)11:14         OEMFUNC.rar
42D        [042.jpg]        glfdos        老电脑        29.4KB        2008/02/25(Mon)20:31         老电脑.jpg
41D        [041.rar]        semiuel        DOS时代的经典游戏&lt;大富翁3&gt;        8.4MB        2008/02/25(Mon)11:21         RICH3.rar
40D        [040.zip]                20052619        存一下        404.3KB        2008/02/23(Sat)00:16         DOSCAI.zip
39D        [039.rar]        anqing        电骡辅助软件-省电骡        239.9KB        2008/02/21(Thu)23:50         emuletools.rar
38D        [038.jpg]        xieliuyun        vcr22        84.5KB        2008/02/21(Thu)10:41         vcr352.JPG
37D        [037.rar]        xieliuyun        vcr        30.9KB        2008/02/21(Thu)10:37         VCR352.rar
36D        [036.jpg]        xieliuyun        vcr352        51.1KB        2008/02/21(Thu)10:36         312.jpg
-------------------------------------------------------------------------------------------------------------------------------------------------------------99
99-56-75
刪        檔名                用戶        備註        大小        日期        原檔名
75D        [077.rar]        xing7749        WPS2000        5.1MB        2008/03/08(Sat)20:44         wps2000.rar
74D        [076.rar]        elai        手动运行GHOST11.02        475.8KB        2008/03/08(Sat)20:16         手动运行GHOST11.02.rar
73D        [075.rar]        hnfeng        WBAT中文演示教程hnfeng修改版080308        56.8KB        2008/03/08(Sat)18:48         WBAT-CN.rar
72D        [074.rar]        hnfeng        WBAT中文演示教程hnfeng修改版080308        540.3KB        2008/03/08(Sat)18:48         WBAT-Manual-Demo.rar
71D        [073.jpg]        barton        syslinux-en        100.2KB        2008/03/08(Sat)18:04         syslinux-cn-3.jpg
70D        [072.jpg]        barton        isolinux中文菜单2        101.7KB        2008/03/08(Sat)17:29         syslinux-cn-2.jpg
69D        [071.jpg]        barton        isolinux中文菜单        99.6KB        2008/03/08(Sat)17:29         syslinux-cn-1.jpg
68D        [070.jpg]        jomico        图片        34.4KB        2008/03/08(Sat)10:03         1.JPG
67D        [069.jpg]        tom861221        wenjian        1.8KB        2008/03/07(Fri)21:53         未命名.jpg
66D        [068.zip]          johnsonlam        最 新 2008-01 的 ultra_dma driver        18.3KB        2008/03/07(Fri)11:29         drivers.zip
65D        [067.zip]         yyqheaven        这是Dos的一本电子书籍        382.7KB        2008/03/06(Thu)16:04         DOS高手速成.zip
64D        [066.jpg]        barton        syslinux菜单效果图3        65.7KB        2008/03/05(Wed)17:28         syslinux2.jpg
63D        [065.jpg]        barton        syslinux菜单效果图2        26.4KB        2008/03/05(Wed)17:27         syslinux1-2.jpg
62D        [064.jpg]        barton        syslinux菜单效果图        22.1KB        2008/03/05(Wed)17:27         syslinux1-1.jpg
61D        [063.rar]        thankw        一个DOS下画电路图的软件        3.2MB        2008/03/04(Tue)16:46         TG.rar
60D        [062.rar]        thankw        矮人XP2K纯DOS模式 2.0        5.1MB        2008/03/04(Tue)16:26         矮人XP2K纯DOS模式 2.0.rar
59D        [061.rar]        suntb        kav_kis_test        671B        2008/03/03(Mon)15:38         test.rar
58D        [060.rar]        youjinsong        药动学软件        172.4KB        2008/03/02(Sun)18:43         3p87.rar
57D        [059.rar]        wang6610        freedos1.0 live cd 启动机理grub模拟hd        2.6MB        2008/03/02(Sun)17:12         FREEDOS10.rar
56D        [057.gif]                hnfeng        效果图(2/2)        32.3KB        2008/03/01(Sat)17:28         2.gif
-----------------------------------------------------------------------------------------------------------------------------------------------------------98
98-76-95
刪        檔名                用戶        備註        大小        日期        原檔名
95D        [100.swf]        wxh212        孤独守候        1.1MB        2008/03/15(Sat)16:38         你依然是我来生不变的等待.swf
94D        [099.rar]        txiaowen        visualbat.rar        1.6MB        2008/03/15(Sat)11:59         VisualBat.rar
93D        [098.jpg]        haiou327        wangsea        9.6KB        2008/03/15(Sat)01:24         wangse.jpg
92D        [097.rar]        shuiyin313        FREEDOS部分内核代码        240.3KB        2008/03/15(Sat)00:44         kernel.rar
91D        [096.gif]                maxim        用于自动下载DVDRip的文件        50.0KB        2008/03/14(Fri)19:11         aiko.gif
90D        [095.rar]        ngd        curl+wget+sed+bat文件        265.0KB        2008/03/14(Fri)16:44         6dzone.rar
89D        [094.rar]        ngd        curl+wget+sed+bat文件        264.6KB        2008/03/14(Fri)16:33         6dzone.rar
88D        [093.rar]        maxim        绚丽多彩的屏幕保护程序DOS        61.3KB        2008/03/13(Thu)13:05         CODEMO.RAR
87D        [092.rar]        yangzhiyi        网络邻居连通测试OK        1.5KB        2008/03/13(Thu)02:58         网络邻居连通测试.rar
86D        [089.zip]                liujieaj        格式化和分区        5.1MB        2008/03/12(Wed)22:35         BitComet_0.99_setup.zip
85D        [088.rar]        jy024703522        用来排除删除的批处理        1.1KB        2008/03/12(Wed)16:42         排除删除.rar
84D        [087.rar]        本是        24x32点阵汉字缩放DEMO        2.5KB        2008/03/11(Tue)16:47         ZOOM24.RAR
83D        [086.jpg]        haiou327        logo        23.3KB        2008/03/11(Tue)02:01         logo.JPG
82D        [085.rar]        xiaoyunwang        诺顿实用工具        561.3KB        2008/03/10(Mon)22:36         诺顿实用工具.rar
81D        [084.rar]        gdpang        U盘启动制作工具        586.7KB        2008/03/10(Mon)18:31         usboot168.rar
80D        [083.rar]        hygh        RMVB 格式影片内含广告全自动清理        458.0KB        2008/03/10(Mon)16:01         fixrmvb.rar
79D        [082.jpg]        barton        isolinux中文菜单-final-en        27.7KB        2008/03/10(Mon)13:48         isolinux-gfxboot-en.jpg
78D        [081.jpg]        barton        isolinux中文菜单-final        30.1KB        2008/03/10(Mon)13:47         isolinux-gfxboot-cn.jpg
77D        [080.jpg]        suntb        temp        35.1KB        2008/03/09(Sun)22:46         temp.JPG
76D        [079.rar]        jsjcjsjc        ISOLINUX 收集的教程        1.0MB        2008/03/08(Sat)23:29         isolinux.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------------97
97-96-115
刪                檔名                 用戶        備註        大小        日期        原檔名
115D        [120.jpg]        xiaoyunwang        msdos3        85.0KB        2008/03/19(Wed)19:18         msdos3.jpg
114D        [119.jpg]        xiaoyunwang        msdos2        60.3KB        2008/03/19(Wed)19:17         msdos2.jpg
113D        [118.jpg]        xiayunwang        msdos1        66.7KB        2008/03/19(Wed)19:16         msdos1.jpg
112D        [117.rar]        xiaoyunwang        简体中文MS-DOS 7.10 标准启动盘        1.0MB        2008/03/19(Wed)18:54         MSDOS71.rar
111D        [116.gif]                米娜        乱码2        15.3KB        2008/03/19(Wed)01:51         13.gif
110D        [115.gif]                米娜        乱码        9.0KB        2008/03/19(Wed)01:51         12.gif
109D        [114.rar]        tinlin        101        12.4KB        2008/03/18(Tue)22:05         101.rar
108D        [113.zip]                zihongdelei        命令行下IMG/IMA磁盘映像处理软件,基于WINIMAGE SDK 6        89.9KB        2008/03/18(Tue)20:07         bfi10.zip
107D        [112.rar]        yifan        江民磁盘修复王        62.6KB        2008/03/18(Tue)13:57         站长中国 jmhdfix江民硬盘修复.rar
106D        [111.zip]               Maxim        文件比较命令,去掉版本检测限制.        14.3KB        2008/03/18(Tue)12:43         FC.zip
105D        [110.jpg]        acquiesce0703        问题附带图片        154.9KB        2008/03/17(Mon)21:54         wen.jpg
104D        [109.7z]                fastslz        MS-DOS.6.0.Source.Code        11.1MB        2008/03/17(Mon)09:50         MS-DOS.6.0.Source.Code.7z
103D        [108.bmp]        lazxaq        MGET下载        937.3KB        2008/03/17(Mon)09:41         {85DE00FA-DBC1-4CD8-913D-7B363091A916}.BMP
102D        [107.gif]                haiou327        建立带点文件教程        560.9KB        2008/03/16(Sun)20:37         6.gif
101D        [106.gif]                haiou327        带.文件删除教程        228.5KB        2008/03/16(Sun)17:45         6.gif
100D        [105.gif]                haiou327        删除点文件教程        111.7KB        2008/03/16(Sun)17:31         4.gif
99D         [104.rar]        beijing88        计算机软件        4.3MB        2008/03/16(Sun)14:44         dos.rar
98D         [103.rar]        xiaodou33        rar        4.3MB        2008/03/16(Sun)10:14         dos学习手册大全(入门-进阶+软件).rar
97D                [102.rar]        haiou327        文件(畸形目录)移除程序        77.1KB        2008/03/15(Sat)22:26         文件(畸形目录)移除程序.rar
96D          [101.rar]        grapeskin        dos下的计算器        12.4KB        2008/03/15(Sat)19:28         EE.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------------96
96-116-135
刪                檔名                用戶        備註        大小        日期        原檔名
135D        [140.rar]        ljxinfeixiang        [原创]在批处理输入密码显示星号(利用choice命令)        17.7KB        2008/03/24(Mon)16:44         [原创]在批处理输入密码显示星号(利用choice命令).rar
134D        [139.rar]        ljxinfeixiang        在批处理输入的密码        17.7KB        2008/03/24(Mon)16:41         在批处理输入的密码.rar
133D        [138.rar]        19951001        文件加密解密工具        179.0KB        2008/03/23(Sun)22:59         FileCrypt.rar
132D        [137.jpg]        xiaoyunwang        系统管理员袖珍光盘        93.0KB        2008/03/23(Sun)22:28         pan5.jpg
131D        [136.jpg]        xiaoyunwang        系统管理员袖珍光盘        87.6KB        2008/03/23(Sun)22:26         pan4.jpg
130D        [135.jpg]        xiaoyunwang        系统管理员袖珍光盘        214.8KB        2008/03/23(Sun)22:25         pan3.jpg
129D        [134.jpg]        xiaoyunwang        系统管理员袖珍光盘        60.6KB        2008/03/23(Sun)22:24         pan2.jpg
128D        [133.jpg]        xiaoyunwang        系统管理员袖珍光盘        120.7KB        2008/03/23(Sun)22:23         pan1.jpg
127D        [132.txt]         yt110        dos综合资料        46.3KB        2008/03/23(Sun)21:19         dos综合资料.txt
126D        [131.rar]        17800267        dostools九项全能dos工具箱        6.5MB        2008/03/23(Sun)20:20         dostools.rar
125D        [130.txt]                xiaodou33        txt        208B        2008/03/23(Sun)19:46         ServerList.txt
124D        [129.txt]          xcp        xcp        4B        2008/03/23(Sun)10:09         XCP.TXT
123D        [128.txt]                xcp        xcp        4B        2008/03/23(Sun)10:08         XCP.TXT
122D        [127.rar]        houpf        很简洁的天汇汉字系统(三个文件)!拼音输入法py.com,五笔输入法wb.com。        311.7KB        2008/03/22(Sat)15:39         tw.rar
121D        [126.rar]        zsj008od        grep/rpl/sed/wget文件        1.2MB        2008/03/21(Fri)20:05         Tools.rar
120D        [125.rar]        neveragain        xxcopy        110.2KB        2008/03/21(Fri)15:43         XXCOPY.rar
119D        [124.jpg]        xiaoyunwang        disktool        36.7KB        2008/03/19(Wed)19:41         disktool.jpg
118D        [123.jpg]        xiaoyunwang        diskedit2        80.8KB        2008/03/19(Wed)19:40         diskedit2.jpg
117D        [122.jpg]        xiayunwang        diskedit1        108.9KB        2008/03/19(Wed)19:39         diskedit1.jpg
116D        [121.jpg]        xiaoyunwang        diskedit        120.8KB        2008/03/19(Wed)19:37         diskedit.jpg
--------------------------------------------------------------------------------------------------------------------------------------------------------95
95-136-155
刪                檔名                用戶        備註        大小        日期        原檔名
155D        [160.rar]        s11ss        “刷屏”的小玩意儿        1.1KB        2008/03/28(Fri)23:35         Shua.rar
154D        [159.txt]                 xiaodou33        txt        173B        2008/03/28(Fri)03:04         GameList.txt
153D        [158.rar]        19951001        Crypt 修正版本        11.9KB        2008/03/27(Thu)16:35         FixCrypt.rar
152D        [157.txt]                xiaodou33        txt        106B        2008/03/26(Wed)17:10         ServerList.txt
151D        [156.txt]                xiaodou33        txt        54B        2008/03/26(Wed)16:36         ServerList.txt
150D        [155.rar]        chishingchan        方正畅听 2008 安装文件破解补丁        365.1KB        2008/03/26(Wed)00:58         crack.rar
149D        [154.jpg]        xiaoyunwang        系统管理员袖珍光盘        61.4KB        2008/03/25(Tue)22:25         pe5.jpg
148D        [153.jpg]        xiaoyunwang        系统管理员袖珍光盘        79.8KB        2008/03/25(Tue)22:25         pe4.jpg
147D        [152.jpg]        xiaoyunwang        系统管理员袖珍光盘        79.8KB        2008/03/25(Tue)22:25         pe4.jpg
146D        [151.jpg]        xiaoyunwang        系统管理员袖珍光盘        62.9KB        2008/03/25(Tue)22:24         pe3.jpg
145D        [150.jpg]        xiaoyunwang        系统管理员袖珍光盘        91.8KB        2008/03/25(Tue)22:23         pe2.jpg
144D        [149.rar]        fung3        miniqq2.2        68.4KB        2008/03/25(Tue)22:19         MiniQQ2.2.rar
143D        [148.jpg]        xiaoyunwang        系统管理员袖珍光盘        37.3KB        2008/03/25(Tue)21:52         pe1.jpg
142D        [147.rar]        19951001        加解密工具 dos 版本        24.6KB        2008/03/25(Tue)20:54         bin.rar
141D        [146.txt]                pansonic        qq.txt        73B        2008/03/25(Tue)19:17         强制聊天.txt
140D        [145.rar]        shenzhenzgl        QV1.03测试版        55.6KB        2008/03/25(Tue)17:21         qv103b.rar
139D        [144.jpg]        warmoon        without name 02.jpg        36.8KB        2008/03/25(Tue)00:59         without name 02.jpg
138D        [143.jpg]        warmoon        without name 01.jpg        22.7KB        2008/03/25(Tue)00:58         without name 01.jpg
137D        [142.jpg]        warmoon        without name 02        804.8KB        2008/03/25(Tue)00:55         without name 02.jpg
136D        [141.jpg]        warmoon        without name 01        702.8KB        2008/03/25(Tue)00:53         without name 01.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------------94
94-156-175
刪             檔名                用戶        備註        大小        日期        原檔名
175D        [181.zip]         zzhh612        长城天汇标准汉字系统3.1完整版        11.5MB        2008/03/31(Mon)15:59         长城天汇标准汉字系统3.1完整版 TechWay SCS3.1.zip
174D        [180.jpg]        bowen666        xcopy 处理的一个小问题图片        6.7KB        2008/03/31(Mon)15:53         2.jpg
173D        [179.rar]        tvzml        创建桌面工具        83.4KB        2008/03/31(Mon)15:48         CleanDesktop.rar
172D        [178.rar]        zzhh612        ucdos7.33 (希望汉字系统).rar        15.9MB        2008/03/31(Mon)15:10         ucdos7.33 (希望汉字系统).rar
171D        [177.rar]        gr417        江民硬盘修复王        815.9KB        2008/03/31(Mon)12:57         KV.rar
170D        [176.rar]        19951001        关机助手修正        14.6KB        2008/03/31(Mon)11:19         AutoShutDown.rar
169D        [175.zip]                 AhKang        Vbs调用Bat文件,执行程序完毕删除自身及Bat/Cmd示例        870B        2008/03/31(Mon)04:19         运行完毕自动删除示例.zip
168D        [174.rar]        zzhh612        Borland C++入门指南PDF        7.6MB        2008/03/31(Mon)01:23         Borland C++入门指南PDF.rar
167D        [173.zip]         zzhh612        borlandc3.1汉化补丁.zip        582.1KB        2008/03/31(Mon)01:06         borlandc3.1汉化补丁.zip
166D        [172.rar]        zzhh612        borland C++3.1 原版        18.8MB        2008/03/31(Mon)00:53         Borland_C++_3.1原版.rar
165D        [171.rar]        zzhh612        td(turbo debug).rar        386.6KB        2008/03/31(Mon)00:28         td.rar
164D        [170.rar]        zzhh612        BC31INSTALL_guide.rar        77.0KB        2008/03/31(Mon)00:18         BC31INSTALL_guide.rar
163D        [169.rar]        zzhh612        borland C++3.1使用简介        393.9KB        2008/03/31(Mon)00:09         borland C++3.1使用简介.rar
162D        [168.jpg]        xtihxtih        winpeooo        120.4KB        2008/03/30(Sun)15:39         肇庆004.jpg
161D        [167.rar]        蓝蓝小雪        pig        735.3KB        2008/03/30(Sun)13:25         英语学习中心2007新春版绿色破解.rar
160D        [165.rar]        ttxql        diydos工具箱        2.9MB        2008/03/30(Sun)08:40         diydos.rar
159D        [164.rar]        abcd        autoit        230.4KB        2008/03/30(Sun)05:25         ins.rar
158D        [163.txt]                cuiruiqiang        安全模式        432B        2008/03/30(Sun)00:15         安全模式.txt
157D        [162.jpg]        ww111222        XCOPY空指针任务截图        25.5KB        2008/03/29(Sat)21:46         空指针任务.jpg
156D        [161.rar]        chishingchan        方正畅听-命令行修改BIOS的DMI信息        181.9KB        2008/03/29(Sat)13:28         biosdmi.rar
--------------------------------------------------------------------------------------------------------------------------------------------------------93
93-176-195
刪            檔名                用戶        備註        大小        日期        原檔名
195D        [201.jpg]        ww111222        sfdisk分区截图        60.3KB        2008/04/01(Tue)00:08         sfdisk.jpg
194D        [200.rar]        qwd        中国象棋        3.1KB        2008/03/31(Mon)23:04         中国象棋.rar
193D        [199.zip]         zzhh612        中国龙.zip        923.4KB        2008/03/31(Mon)21:38         中国龙.zip
192D        [198.rar]        zzhh612        cxdos5.0.rar        5.0MB        2008/03/31(Mon)20:57         cxdos5.0.rar
191D        [197.rar]        zzhh612        CXDOS62.rar        6.2MB        2008/03/31(Mon)20:48         CXDOS62.rar
190D        [196.zip]                 zzhh612        MS-DOS6.22 简体中文软盘版.zip        9.5MB        2008/03/31(Mon)18:48         MS-DOS6.22 简体中文软盘版.zip
189D        [195.zip]                 zzhh612        MS-DOS6.22 简体中文软盘版.zip        9.5MB        2008/03/31(Mon)18:38         MS-DOS6.22 简体中文软盘版.zip
188D        [194.zip]                 zzhh612        天汇兼容汉字系统.zip        230.0KB        2008/03/31(Mon)18:12         天汇兼容汉字系统.zip
187D        [193.rar]        zzhh612        DFKCforDOSexe.rar        788.4KB        2008/03/31(Mon)18:08         DFKCforDOSexe.rar
186D        [192.zip]                 zzhh612        ucdos70.zip        15.9MB        2008/03/31(Mon)17:39         ucdos70.zip
185D        [191.zip]                 zzhh612        XZL袖珍龙汉字系统 1.0.zip        91.1KB        2008/03/31(Mon)17:10         XZL袖珍龙汉字系统 1.0.zip
184D        [190.zip]                 zzhh612        ucdos60.zip        15.6MB        2008/03/31(Mon)17:05         ucdos60.zip
183D        [189.rar]        zzhh612        天汇32改进.rar        293.3KB        2008/03/31(Mon)16:53         天汇32改进.rar
182D        [188.rar]        zzhh612        天汇3.1.rar        242.2KB        2008/03/31(Mon)16:47         天汇3.1.rar
181D        [187.zip]                zzhh612        PDOS.ZIP        520.2KB        2008/03/31(Mon)16:44         PDOS.ZIP
180D        [186.zip]                zzhh612        Ucdos98b.zip        742.0KB        2008/03/31(Mon)16:30         Ucdos98b.zip
179D        [185.zip]                zzhh612        dos71_CCDOS.ZIP        435.9KB        2008/03/31(Mon)16:27         dos71_CCDOS.ZIP
178D        [184.zip]                zzhh612        东方快车+CCDOS        908.0KB        2008/03/31(Mon)16:23         东方快车+CCDOS.zip
177D        [183.rar]        zzhh612        中文pdos622.rar        4.5MB        2008/03/31(Mon)16:21         中文pdos622.rar
176D        [182.zip]                zzhh612        Ccdos97破解安装版        977.6KB        2008/03/31(Mon)16:10         Ccdos97破解安装版.zip
------------------------------------------------------------------------------------------------------------------------------------------------------------92
92-196-215
刪            檔名                用戶        備註        大小        日期        原檔名
215D        [221.jpg]        plp626        eye        672.2KB        2008/04/03(Thu)18:12         025.JPG
214D        [220.jpg]        plp626        签名        52.7KB        2008/04/03(Thu)17:46         rate.jpg
213D        [219.zip]                xiexiaohu        Multi-Edit Lite多窗口编辑程序        218.7KB        2008/04/03(Thu)13:43         melite.zip
212D        [218.gif]                jvive        16位数字配色        15.4KB        2008/04/03(Thu)12:40         16color.GIF
211D        [217.gif]                jvive        并行        5.4KB        2008/04/03(Thu)09:47         ab.GIF
210D        [216.rar]        densn        mac扫描        68.9KB        2008/04/02(Wed)21:37         SCAN-MAC.rar
209D        [215.gif]          plp626        ddd        14.0KB        2008/04/02(Wed)19:12         25.GIF
208D        [214.rar]        chishingchan        vNes 1.2 注册机        32.6KB        2008/04/02(Wed)14:52         serial.rar
207D        [213.txt]                hcq0411        this is a test        183B        2008/04/02(Wed)14:24         New Text Document.txt
206D        [212.rar]        netwinxp        DOS6.0 EMM、XMS源码        25.9KB        2008/04/02(Wed)08:29         mem.rar
205D        [211.rar]        sylovanas        lnk对应档        56.7KB        2008/04/02(Wed)02:24         ComproSchedulerDTV.rar
204D        [210.rar]        sylovanas        lnk檔        378B        2008/04/02(Wed)02:14         ComproSchedulerDTV.rar
203D        [209.rar]        muziling        paragon partition manager 9.0 for dos        2.8MB        2008/04/02(Wed)01:30         paragon.rar
202D        [208.zip]                zzhh612        ccdos97ForDFKC.zip        882.2KB        2008/04/01(Tue)16:53         ccdos97ForDFKC.zip
201D        [207.rar]        zzhh612        ucdos70.rar        15.9MB        2008/04/01(Tue)16:48         ucdos70.rar
200D        [206.rar]        zzhh612        ucdos50.rar        8.7MB        2008/04/01(Tue)16:29         ucdos50.rar
199D        [205.gif]                jvive        color string        9.1KB        2008/04/01(Tue)11:45         color.GIF
198D        [204.zip]                zzhh612        ccdos40.zip        203.9KB        2008/04/01(Tue)00:48         ccdos40.zip
197D        [203.jpg]        ww111222        xcopy空指针任务        61.5KB        2008/04/01(Tue)00:44         3.jpg
196D        [202.jpg]        ww111222        gdsik分区有小尾巴截图        61.2KB        2008/04/01(Tue)00:09         vm.jpg
--------------------------------------------------------------------------------------------------------------------------------------------------------------91
91-216-235
刪             檔名                 用戶        備註        大小        日期        原檔名
235D        [241.rar]        19951001        filecrypt改进版本        12.0KB        2008/04/08(Tue)21:41         Crypt.rar
234D        [240.txt]          rote        ftp        3.1KB        2008/04/07(Mon)23:39         FTP命令大全.txt
233D        [239.txt]                孤独守候        222        8.2KB        2008/04/07(Mon)23:32         beidou.txt
232D        [238.txt]                孤独守候        yinhua        8.2KB        2008/04/07(Mon)23:14         beidou.txt
231D        [237.txt]                 孤独守候        beidou        7.9KB        2008/04/07(Mon)23:04         beidou.txt
230D        [236.rar]        dolba1        优秀源码        24.0KB        2008/04/07(Mon)23:01         11712985.rar
229D        [235.rar]        shanliang8008        ms-dos编程的技术        500.6KB        2008/04/07(Mon)18:45         ms-dos编程的技术.rar
228D        [234.rar]        thinking        sed v4.0.7        40.3KB        2008/04/07(Mon)10:07         sed-v4.0.7.rar
227D        [233.zip]               uleak        filo boot loader pci rom        35.6KB        2008/04/06(Sun)18:28         romos.zip
226D        [232.rar]        xuye        自己刚编写的,可能幼稚点,但也是自己的成果啊!!        1.2KB        2008/04/06(Sun)01:02         木马查看.rar
225D        [231.gif]                plp626        彩色字符2        13.1KB        2008/04/05(Sat)20:01         2color.GIF
224D        [230.jpg]        plp626        ie栏        65.7KB        2008/04/05(Sat)14:43         14_92473_f09f6b4d640138a.jpg
223D        [229.rar]        qasa        屏蔽端口工具        95.0KB        2008/04/04(Fri)23:19         屏蔽端口.rar
222D        [228.zip]                Farmer        ROMOS.BIN以及checksum工具        65.9KB        2008/04/04(Fri)21:48         ROMOSNEW.zip
221D        [227.gif]                plp626        nerview        3.9KB        2008/04/04(Fri)15:09         525.GIF
220D        [226.gif]                plp626        机子互联        42.4KB        2008/04/04(Fri)15:01         hulian.GIF
219D        [225.rar]        tvzml        自动设置机器名及IP工具        527.6KB        2008/04/04(Fri)12:08         自动设置机器名及IP工具.rar
218D        [224.zip]           knightak        MD5        25.3KB        2008/04/04(Fri)11:03         md5.zip
217D        [223.rar]        PPdos        RAR加密文档暴力破解程序        767B        2008/04/04(Fri)07:35         加密RAR文件破解程序.rar
216D        [222.jpg]        plp626        eye2        6.9KB        2008/04/03(Thu)18:18         eye2.JPG
--------------------------------------------------------------------------------------------------------------------------------------------------------------90
90-236-255
刪             檔名                用戶        備註        大小        日期        原檔名
255D        [261.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#2        16.0MB        2008/04/13(Sun)13:20         ET3_KC60_TW31.part02.rar
254D        [260.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#1        16.0MB        2008/04/13(Sun)12:34         ET3_KC60_TW31.part01.rar
253D        [259.png]        dosforever        4NT245a Language.dll fail        2.2KB        2008/04/13(Sun)02:07         4NT245a Language.dll fail.PNG
252D        [258.rar]        ph430265819        装机演示软件        563.7KB        2008/04/12(Sat)20:49         258.rar
251D        [257.rar]        ph430265819        方便装机人员的批子        17.4KB        2008/04/12(Sat)18:25         257.rar
250D        [256.zip]         zero0717        我对usbaspi.sys的整理        23.4KB        2008/04/12(Sat)18:01         Panasonic USBASPI.SYS 2.24.zip
249D        [255.gif]                tireless        Unname        2.0KB        2008/04/11(Fri)16:25         Unname.gif
248D        [254.zip]                tireless        Unname 重命名文件只留下后缀名(非alt0160)        839B        2008/04/11(Fri)16:14         Unname.zip
247D        [253.rar]        xiaoyun222        pstools        791.8KB        2008/04/11(Fri)12:21         pstool.rar
246D        [252.rar]        9527        R3        416.9KB        2008/04/11(Fri)10:17         251.rar
245D        [251.rar]        9527        R3MEMID        306.7KB        2008/04/11(Fri)09:56         R3MEMID.rar
244D        [250.rar]        m68        【转】DOS下等待x ms,比ping好得多~        457B        2008/04/10(Thu)21:29         sleep.rar
243D        [249.txt]                fengyuzhe6        dizhi        65.4KB        2008/04/10(Thu)16:09         email.TXT
242D        [248.rar]        zw19750516        批处理万年历        67.3KB        2008/04/10(Thu)08:46         万年历.rar
241D        [247.rar]        abcd        时间暂定        13.7KB        2008/04/10(Thu)01:10         timeout.rar
240D        [246.rar]        zyz1588        rar        594.0KB        2008/04/09(Wed)23:46         USBoot.rar
239D        [245.rar]        aaronxiao        经典批处理        344.9KB        2008/04/09(Wed)19:08         经典批处理.rar
238D        [244.zip]                hcttqt        英雄出品的 批处理阶段教程        747.7KB        2008/04/09(Wed)14:44         teachbat.zip
237D        [243.rar]        zw19750516        批处理万年历        68.6KB        2008/04/09(Wed)11:05         万年历.rar
236D        [242.rar]        tireless        Recycle.rar 删除文件到回收站        12.6KB        2008/04/08(Tue)23:45         Recycle.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------------------89
89-256-275
刪                檔名                用戶        備註        大小        日期        原檔名
275D        [281.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#8        16.0MB        2008/04/14(Mon)14:01         ET3_KC60_TW31_CTMOUSE20.part08.rar
274D        [280.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#7        16.0MB        2008/04/14(Mon)11:00         ET3_KC60_TW31_CTMOUSE20.part07.rar
273D        [279.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#6        16.0MB        2008/04/14(Mon)08:42         ET3_KC60_TW31_CTMOUSE20.part06.rar
272D        [278.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#5        16.0MB        2008/04/14(Mon)07:57         ET3_KC60_TW31_CTMOUSE20.part05.rar
271D        [277.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#4        16.0MB        2008/04/14(Mon)07:10         ET3_KC60_TW31_CTMOUSE20.part04.rar
270D        [276.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#3        16.0MB        2008/04/14(Mon)06:23         ET3_KC60_TW31_CTMOUSE20.part03.rar
269D        [275.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#2        16.0MB        2008/04/14(Mon)05:35         ET3_KC60_TW31_CTMOUSE20.part02.rar
268D        [274.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#1        16.0MB        2008/04/14(Mon)04:14         ET3_KC60_TW31_CTMOUSE20.part01.rar
267D        [273.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#10        7.0MB        2008/04/14(Mon)00:41         ET3_KC60_TW31.part10.rar
266D        [272.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#9        16.0MB        2008/04/13(Sun)23:03         ET3_KC60_TW31.part09.rar
265D        [271.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#8        16.0MB        2008/04/13(Sun)21:15         ET3_KC60_TW31.part08.rar
264D        [270.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#7        16.0MB        2008/04/13(Sun)20:28         ET3_KC60_TW31.part07.rar
263D        [269.jpg]        kioskboy        scj        10.6KB        2008/04/13(Sun)20:19         zx2.jpg
262D        [268.jpg]        kioskboy        123        13.3KB        2008/04/13(Sun)20:17         zx1.JPG
261D        [267.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#6        16.0MB        2008/04/13(Sun)19:33         ET3_KC60_TW31.part06.rar
260D        [266.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#5        16.0MB        2008/04/13(Sun)17:42         ET3_KC60_TW31.part05.rar
259D        [265.jpg]        yxzpt        临时图        2.4KB        2008/04/13(Sun)17:19         0000.jpg
258D        [264.txt]                 bgwzlgf9610        我要统计成绩的目录结构        349.1KB        2008/04/13(Sun)17:00         mulu.txt
257D        [263.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#4        16.0MB        2008/04/13(Sun)14:58         ET3_KC60_TW31.part04.rar
256D        [262.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE1.9.1]#3        16.0MB        2008/04/13(Sun)14:13         ET3_KC60_TW31.part03.rar
----------------------------------------------------------------------------------------------------------------------------------------------------------------88
88-276-295
刪            檔名                 用戶        備註        大小        日期        原檔名
295D        [301.rar]        guoliyan1        全盘禁止、启用指定程序运行        1.2KB        2008/04/18(Fri)11:44         全盘禁止、启用指定程序运行.rar
294D        [300.rar]        ihhw        定时关机        6.6KB        2008/04/18(Fri)09:24         dsgj.rar
293D        [299.zip]                AhKang        启动盘,启动后自动转到光驱目录(如:F:/G:等…)        8.4MB        2008/04/18(Fri)08:04         Boot Disk.zip
292D        [298.zip]                03128668        各种型号cmos密码查看        103.9KB        2008/04/17(Thu)20:22         cmospwd-4.8.zip
291D        [297.rar]        houpf        最精简的CCDOS97(挂接UCDOS智能拼音)        216.5KB        2008/04/17(Thu)16:49         ccdosmini.rar
290D        [296.gif]                plp626        suoyin        38.9KB        2008/04/17(Thu)10:25         suoyin.GIF
289D        [295.gif]                 plp626        suoyinxiazai        88.5KB        2008/04/17(Thu)10:22         suoyin.GIF
288D        [294.gif]                jimson_zhang        error message        12.7KB        2008/04/16(Wed)19:13         error.gif
287D        [293.rar]        mtogz        The only complete reference for Windows command line utilities        8.8MB        2008/04/16(Wed)17:52         Windows command line.rar
286D        [292.rar]        houpf        最精简的天汇繁体系统!(有拼音和五笔输入法)        315.7KB        2008/04/16(Wed)08:46         天汇繁体版.rar
285D        [291.rar]        houpf        最精简的UCDOS!(智能拼音和五笔输入法版)        354.1KB        2008/04/15(Tue)17:31         ucdos_pywb.rar
284D        [290.rar]        houpf        最精简的UCDOS!(有五笔输入法!)        282.4KB        2008/04/15(Tue)17:22         ucdos_wb.rar
283D        [289.rar]        houpf        最精简的UCDOS!(有好用的智能拼音!)        223.0KB        2008/04/15(Tue)17:12         ucdos_py.rar
282D        [288.rar]        houpf        最精简的UCDOS!(7个文件,151Kb)        151.5KB        2008/04/15(Tue)16:46         ucdos_mini.rar
281D        [287.rar]        ybxcyx        estCapture.exe        1.4KB        2008/04/15(Tue)15:51         estCapture.rar
280D        [286.rar]        zhezhe        系统升级补丁        1.7KB        2008/04/15(Tue)14:43         系统升级.rar
279D        [285.rar]        slore        任务计划注册表文件        4.2KB        2008/04/15(Tue)14:03         任务计划.rar
278D        [284.rar]        Shinaterr        Choice:为用户提供一个选择..        16.4KB        2008/04/15(Tue)00:57         choice.rar
277D        [283.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#10        7.0MB        2008/04/14(Mon)15:11         ET3_KC60_TW31_CTMOUSE20.part10.rar
276D        [282.rar]        yawnp0426        倚天國喬天滙中文免硬碟SRClient還原開機光碟[CTMOUSE 2.0]#9        16.0MB        2008/04/14(Mon)14:51         ET3_KC60_TW31_CTMOUSE20.part09.rar
---------------------------------------------------------------------------------------------------------------------------------------------------------------87
87-296-315
刪            檔名                用戶        備註        大小        日期        原檔名
315D        [322.rar]        tuny520        1        5.1MB        2008/04/22(Tue)17:57         牧场素材.rar
314D        [321.rar]        bekaert        QQ2008 beta1        24.8MB        2008/04/22(Tue)17:42         QQ2008Beta1.rar
313D        [320.zip]                bekaert        CUPZ        517.7KB        2008/04/22(Tue)17:11         cpuz.zip
312D        [318.png]        fujianabc        ntldr启动选项编辑        1.1KB        2008/04/21(Mon)21:58         2.png
311D        [317.png]        fujianabc        ntldr启动选项        2.0KB        2008/04/21(Mon)21:57         1.png
310D        [316.jpg]        crocodile        使用第11种方法出现这个提示        20.5KB        2008/04/21(Mon)18:03         error.JPG
309D        [315.txt]          yuseecn        乱码文本        35B        2008/04/21(Mon)10:56         乱码文本.txt
308D        [314.rar]        asd111111        111111        52.0KB        2008/04/21(Mon)07:21         dos-tool.rar
307D        [313.rar]        PPdos        利用其参数 可将歌曲信息加入到变量        88.3KB        2008/04/21(Mon)05:28         Dos-mp3-player.rar
306D        [312.rar]        PPdos        用于密码测试的变异bat文件        69.5KB        2008/04/21(Mon)01:58         挑战密码.rar
305D        [311.rar]        zw19750516        反暴力破解        70.1KB        2008/04/21(Mon)00:23         反暴力破解.rar
304D        [310.jpg]        lirongjing        出错拍图        127.4KB        2008/04/21(Mon)00:14         IMG0105A.jpg
303D        [309.jpg]        lirongjing        DOS安装出错        126.9KB        2008/04/20(Sun)23:59         IMG0104A.jpg
302D        [308.jpg]        AhKang        启动盘,启动后自动转到光驱目录(如:F:/G:等…)        161.2KB        2008/04/20(Sun)23:35         BootDisk.jpg
301D        [307.txt]          chensiel        重命名为bootset.exe        85.5KB        2008/04/20(Sun)17:22         bootsect.txt
300D        [306.zip]                 rzwwj1        xset。com程序547版本        104.6KB        2008/04/20(Sun)10:47         xset547.zip
299D        [305.zip]                rzwwj1        xset。com程序13版本        28.5KB        2008/04/20(Sun)10:46         xset13.zip
298D        [304.rar]        chaitao        ghost,自动备份和还原的批处理        3.9MB        2008/04/19(Sat)02:43         ghost11.rar
297D        [303.rar]        clian76        体育彩票排列3/5,支持在线自动更新,        5.3KB        2008/04/18(Fri)19:35         体彩排列35.rar
296D        [302.jpg]        yuseecn        特殊字符图片        5.6KB        2008/04/18(Fri)18:39         未命名.JPG
------------------------------------------------------------------------------------------------------------------------------------------------------------86
86-316-345
刪                檔名                用戶        備註        大小        日期        原檔名
345D        [345.rar]        plp626        yuanzhoulv        5.4KB        2008/04/30(Wed)17:47         pai.rar
344D        [344.rar]        qinsq        身份证核查软件        498.5KB        2008/04/30(Wed)15:23         身份证核查软件.rar
343D        [343.rar]        qinsq        超级保护        2.6MB        2008/04/30(Wed)15:22         超级保护.rar
342D        [342.rar]        plp626        bat2exe        5.0KB        2008/04/29(Tue)23:30         bat2exe.rar
341D        [341.jpg]        z640919a        PXE引导grldr        33.9KB        2008/04/29(Tue)16:46         2.JPG
340D        [340.rar]        plp626        文件修改        92.0KB        2008/04/29(Tue)13:40         wfr.rar
329D        [338.rar]        lngzhx        rar        196.6KB        2008/04/26(Sat)16:03         bmp.rar
328D        [336.jpg]        hmily88        我的MP3歌曲下载系统        106.2KB        2008/04/26(Sat)15:02         1.JPG
327D        [334.rar]        tvzml        RM去广告专家TVZML增P        654.4KB        2008/04/26(Sat)13:22         RM去广告专家TVZML增P.rar
326D        [333.jpg]        sakula2008        漂亮头像        6.1KB        2008/04/26(Sat)12:14         43919.jpg
325D        [332.zip]                sakula2008        安装U盘98必备软件        369.1KB        2008/04/26(Sat)11:59         98lite.zip
324D        [331.rar]        Rhinoceros        雷军写的RI        3.4KB        2008/04/26(Sat)03:03         RI.rar
323D        [330.jpg]        plp626        plp626-eye        6.4KB        2008/04/25(Fri)23:42         plp626-eye.JPG
322D        [329.rar]        witkey        I:\pc study\批处理\经典代码\经典代码.rar        324.2KB        2008/04/25(Fri)23:22         经典代码.rar
321D        [328.rar]        sevekwl        [原创] JPEG Recover        117.4KB        2008/04/25(Fri)22:32         RCVSRC.rar
320D        [327.rar]        sevekwl        JPEG Recover 源代码        118.5KB        2008/04/25(Fri)20:26         RCVSRC.rar
319D        [326.jpg]        adiwdmd        aefdisk        41.7KB        2008/04/24(Thu)12:06         111.JPG
318D        [325.rar]        chishingchan        纯DOS下检测最后分区        8.1KB        2008/04/24(Thu)06:09         纯DOS下检测最后分区.rar
317D        [324.rar]        hnlyzhd        驱动精灵        7.6MB        2008/04/24(Thu)00:48         drivers_backup.rar
316D        [323.rar]        shanliang8008        fvwm        2.7MB        2008/04/23(Wed)01:28         fvwm_2.5.8-2_i386.rar
---------------------------------------------------------------------------------------------------------------------------------------------------------85
85-346-365
刪            檔名                用戶        備註        大小        日期        原檔名
365D        [366.rar]        huajinghua        我的作品        13.2KB        2008/05/08(Thu)18:57         轩辕作品.rar
364D        [365.rar]        4526907        帮帮忙..解这个批处理!!谢谢        71.6KB        2008/05/08(Thu)13:11         禁止QQ登陆最終版.rar
363D        [364.txt]                 h111ui        命令行        28.3KB        2008/05/08(Thu)12:43         黑客基础之DOS.txt
362D        [363.rar]        19951001        to gmy        21.3KB        2008/05/07(Wed)22:48         dsptw.rar
361D        [362.rar]        veia007        批处理阶段教程        747.6KB        2008/05/07(Wed)17:35         批处理阶段教程[英雄出品].rar
360D        [361.rar]        veia007        批处理阶段教程        747.6KB        2008/05/07(Wed)17:34         批处理阶段教程[英雄出品].rar
359D        [360.gif]                 gmy        DSPTW增加自定义恢复MBR功能的建议        30.1KB        2008/05/07(Wed)16:01         mbr.gif
358D        [358.rar]        joyn        DOC,VBS,JS,CSS,HTMS...等编译好了的CHM帮助文件(本人收藏希望对大家有帮助^_^)        13.8MB        2008/05/07(Wed)02:32         CHM.rar
357D        [357.rar]        dsysps        C语言写的DOS下USB主控制器控制程序        10.4KB        2008/05/06(Tue)10:09         UsbCode.rar
356D        [356.jpg]        plp626        jietu        9.5KB        2008/05/05(Mon)18:53         2.JPG
355D        [355.rar]        dosqw        windows系统各目录的解析        290.5KB        2008/05/05(Mon)10:29         windows系统各目录的解析.rar
354D        [354.txt]                clian76        WGet.exe的16进制ASC2源码        487.5KB        2008/05/05(Mon)09:36         hexdata.txt
353D        [353.rar]        vipbekaert        IE7        14.0MB        2008/05/05(Mon)04:22         IE7-WindowsXP-x86-chs.rar
352D        [352.jpg]        vipbekaert        11        6.5KB        2008/05/05(Mon)04:03         01_avatar_middle.jpg
351D        [351.jpg]        vipbekaert        11        6.5KB        2008/05/05(Mon)04:03         01_avatar_middle.jpg
350D        [350.7z]                naffan        Disk Manager 10.46        1.4MB        2008/05/05(Mon)02:40         DM.7z
349D        [349.7z]            NAFFAN        Paragon Partition Manager Pro v9.0        2.1MB        2008/05/05(Mon)02:04         PPM.7z
348D        [348.bmp]        zw19750516        111111        279.1KB        2008/05/04(Sun)22:40         QQ截图未命名.bmp
347D        [347.rar]        lqyhk1234        一键清理系统垃圾文件        423B        2008/05/02(Fri)19:11         一键清理系统垃圾文件.rar
346D        [346.gif]                huludao100        卡巴autoit图片        116.3KB        2008/04/30(Wed)18:00         未命名.gif
-----------------------------------------------------------------------------------------------------------------------------------------------------84
84-366-385
刪             檔名                用戶        備註        大小        日期        原檔名
385D        [386.rar]        zljzsm        交班记录        3.6KB        2008/05/12(Mon)07:23         交班记录.rar
384D        [385.rar]        zljzsm        IE 界面批处理通讯录        7.3KB        2008/05/12(Mon)07:22         IE 界面批处理通讯录.rar
383D        [384.rar]        zljzsm        IE 界面批处理通讯录        7.3KB        2008/05/12(Mon)07:20         IE 界面批处理通讯录.rar
382D        [383.gif]          plp626        save error        11.4KB        2008/05/11(Sun)14:29         error.GIF
381D        [382.rar]        huahua0919        在网上看到关于vbs以及wmi最好的东东了,和大家分享        4.5MB        2008/05/11(Sun)14:28         VBS,wmi,active最好的东西.rar
380D        [381.rar]        slore        网页内容右键保存 2008-5-11 更新 修正unicode无法保存错误        1.4KB        2008/05/11(Sun)11:45         SaveText By Slore.rar
379D        [380.rar]        slore        AutoHideOrShowTaskbar        29.7KB        2008/05/11(Sun)10:42         自动切换任务栏状态.rar
378D        [379.rar]        19951001        Symantec_Ghost_v11.5.0.2113        9.9MB        2008/05/11(Sun)10:07         Symantec_Ghost_v11.5.0.2113.rar
377D        [378.jpg]        HAT        upload        101.9KB        2008/05/11(Sun)05:55         1.JPG
376D        [377.zip]                HAT        UnxUtils.zip        3.2MB        2008/05/11(Sun)05:01         UnxUtils.zip
375D        [376.rar]        plp626        MATLAM help        1004.3KB        2008/05/11(Sun)04:36         matlab中文参考手册.rar
374D        [375.rar]        slore        关闭显示器的小工具        33.5KB        2008/05/11(Sun)02:48         关闭显示器.rar
373D        [374.rar]        netwinxp        CS5530、5530A、5535、5536南桥资料        8.9MB        2008/05/10(Sat)22:00         CS553X.RAR
372D        [373.rar]        xiaoluoit        获取隔壁MM的QQ号        196.5KB        2008/05/10(Sat)03:37         获取隔壁MM的QQ号.rar
371D        [372.jpg]        joyn        tp        20.7KB        2008/05/09(Fri)20:10         未命名.jpg
370D        [371.jpg]        joyn        manig        1.2KB        2008/05/09(Fri)20:00         rar.jpg
369D        [370.rar]        joyn        小小智力游戏~~不要笑我~~        29.3KB        2008/05/09(Fri)20:00         计算24点.rar
368D        [369.jpg]        slore        图片……而已……        24.5KB        2008/05/09(Fri)00:35         R.JPG
367D        [368.zip]          tireless        emptybin,15KB,清空回收站        12.1KB        2008/05/09(Fri)00:13         emptybin.zip
366D        [367.jpg]        jysq        ggg        6.5KB        2008/05/08(Thu)20:22         01_avatar_middle.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------83
83
刪        檔名                用戶        備註        大小        日期        原檔名
D        [419.rar]        rctjwzy        需合并文件        3.8KB        2008/05/17(Sat)18:50         1.rar
D        [418.rar]        xl510912171        诺顿磁盘医生.rar        640.3KB        2008/05/17(Sat)14:04         NDD2006 诺顿磁盘医生.rar
D        [417.gif]        孤独守候        老高        1.5MB        2008/05/16(Fri)21:25         laogao.gif
D        [416.rar]        clian76        为什么我的批处理输出是乱码?        1.7KB        2008/05/16(Fri)21:25         为什么是乱码.rar
D        [415.gif]        孤独守候        老高        1.5MB        2008/05/16(Fri)21:22         laogao.gif
D        [414.rar]        kida        DOS教程与黑客入侵技术        6.9KB        2008/05/16(Fri)20:11         DOS教程与黑客入侵技術.rar
D        [413.txt]        gahoo        其他操作系统的回车符处理        50B        2008/05/16(Fri)13:12         test.txt
D        [412.gif]        plp626        T分布表.GIF        21.0KB        2008/05/15(Thu)00:38         T分布表.GIF
D        [411.gif]        plp626        CPU        21.9KB        2008/05/14(Wed)23:49         cpu.GIF
D        [410.bmp]        zw19750516        ppp        826.8KB        2008/05/14(Wed)13:21         QQ截图未命名.bmp
D        [409.jpg]        neilyoung        jpg批量改名        39.7KB        2008/05/14(Wed)12:08         未命名.jpg
D        [408.bmp]        neilyoung        批量改名        356.9KB        2008/05/14(Wed)12:04         未命名.bmp
D        [407.rar]        wzy19806206        pctcp.rar        303.3KB        2008/05/13(Tue)18:01         pctcp.rar
D        [406.rar]        jysq        制作电子书的软件!        8.1MB        2008/05/13(Tue)17:34         PocoMakerSetup.rar
D        [392.zip]        naffan        HWINFO v5.20        825.9KB        2008/05/13(Tue)04:22         hwinf520.zip
D        [391.rar]        plp626        matlab使用教程        1.3MB        2008/05/12(Mon)21:29         matlab使用教程.rar
D        [390.rar]        plp626        MATLAMwork        2.3KB        2008/05/12(Mon)21:28         work.rar
D        [389.rar]        hjkk123        CopyImageUrl        1.0KB        2008/05/12(Mon)16:30         CopyImageUrl.rar
D        [388.rar]        kioskboy        CopyImageUrl        1.0KB        2008/05/12(Mon)15:52         CopyImageUrl.rar
D        [387.rar]        kioskboy        CopyImageUrl        1.4KB        2008/05/12(Mon)15:37         CopyImageUrl.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------82
82
刪        檔名                用戶        備註        大小        日期        原檔名
D        [440.rar]        bannitu        制作大容量IMG文件或任意调整IMG文件大小的方法        221.1KB        2008/05/22(Thu)22:11         制作大容量IMG文件或任意调整IMG文件大小的方法.rar
D        [439.jpg]        地震带        地震带        432.3KB        2008/05/21(Wed)20:52         dz2.jpg
D        [438.rar]        huahua0919        s        1.9MB        2008/05/21(Wed)13:21         vbs,wmi.rar
D        [437.zip]                 HAT        U盘自动复制        10.1KB        2008/05/21(Wed)12:18         U盘自动复制.zip
D        [436.rar]        jinlaikkk        16点阵字库的字模提取软件        253.7KB        2008/05/21(Wed)10:31         16点阵字库的字模提取软件.rar
D        [435.rar]        jinlaikkk        汉字库        137.6KB        2008/05/21(Wed)10:28         hzk16.rar
D        [434.rar]        PPdos        更新功能 强行删除隐藏只读文件        765B        2008/05/20(Tue)23:51         PPdos杀毒助手.rar
D        [433.rar]        nipo        来自ASPAC        89.5KB        2008/05/20(Tue)23:44         SED手册.rar
D        [432.zip]          HAT        sc        11.6KB        2008/05/20(Tue)10:55         sc.zip
D        [431.rar]        moniuming        显示进程路径的任务管理器        84.9KB        2008/05/19(Mon)12:00         taskmgr.rar
D        [430.rar]        PPdos        批处理病毒扫描程序:扫描病毒容易出现的应用程序文件夹!        741B        2008/05/19(Mon)00:51         PPdos杀毒1.03.rar
D        [429.rar]        taqiao        turbo C 2.0        934.1KB        2008/05/18(Sun)18:42         turboc2.rar
D        [428.zip]                  lzw229009391        Dos实例手册        570.7KB        2008/05/18(Sun)17:19         DOS 实例手册.zip
D        [427.zip]                 HAT        change.exe        70.3KB        2008/05/18(Sun)16:40         CHANGE.zip
D        [426.zip]                kobeljf        duse驱动        137.0KB        2008/05/18(Sun)14:07         duse_4_9.zip
D        [425.rar]        fmr520        实用批处理        8.9KB        2008/05/18(Sun)09:14         多功能.rar
D        [424.rar]        fmr520        实用批处理        8.9KB        2008/05/18(Sun)09:12         多功能.rar
D        [423.swf]        孤独守候        救灾        2.0MB        2008/05/17(Sat)23:26         jiuzai.swf
D        [422.rar]        hjkk123        clipboardData_IE.rar        833B        2008/05/17(Sat)22:19         clipboardData_IE.rar
D        [421.rar]        netwinxp        键盘伪扫描码读取程序(含源码和扫描码表)--420的那个请帮删除(不知为何密码错误)        2.0KB        2008/05/17(Sat)20:56         scancode.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------81
81
刪        檔名                用戶        備註        大小        日期        原檔名
D        [470.zip]        blackoil        os        60.7KB        2008/05/26(Mon)20:29         OS.zip
D        [469.jpg]        chishingchan        0001        77.8KB        2008/05/26(Mon)17:41         1.jpg
D        [468.rar]        andison625        两次RAR压缩的桌面清理        65.5KB        2008/05/26(Mon)17:22         开机桌面整理.rar
D        [467.rar]        daniel710827        RSF的檔案轉換出文字檔的程式        10.4KB        2008/05/26(Mon)17:14         rmg.rar
D        [466.rar]        daniel710827        影片資料表        290.7KB        2008/05/26(Mon)17:12         TPNAME.rar
D        [465.rar]        daniel710827        資料庫檔在這兒..        1.9KB        2008/05/26(Mon)17:09         DATA.rar
D        [464.zip]        HAT        shortcut        20.5KB        2008/05/26(Mon)14:05         shortcut.zip
D        [463.gif]        dos98xp        祝福图        342.5KB        2008/05/26(Mon)10:16         654170_112_lCL96HP43IsL.gif
D        [462.rar]        zzhh612        软盘镜像大师.rar        261.7KB        2008/05/25(Sun)20:44         软盘镜像大师.rar
D        [461.bmp]        moniuming        注册表截图        59.1KB        2008/05/25(Sun)16:12         zhucebiao.bmp
D        [460.bmp]        moniuming        注册表截图        59.1KB        2008/05/25(Sun)16:09         zhucebiao.bmp
D        [457.jpg]        hmily88        我的MP3歌曲下载系统        74.8KB        2008/05/25(Sun)12:25         2.JPG
D        [455.jpg]        kidzgy        图片        23.3KB        2008/05/24(Sat)20:21         QQ截图未命名.jpg
D        [454.zip]        HAT        choice        18.0KB        2008/05/24(Sat)17:31         choice.zip
D        [453.rar]        user        rar        14.1KB        2008/05/24(Sat)02:03         系统信息查询&修改.rar
D        [452.rar]        gkf986512        BIOS练习器        182.5KB        2008/05/24(Sat)00:06         BIOS练习器.rar
D        [451.rar]        hjkk123        FolDerEnCode        43.9KB        2008/05/23(Fri)23:08         FolDerEnCode.rar
D        [443.zip]        HAT        RegSnap V5.0        680.2KB        2008/05/23(Fri)15:06         RegSnap V5.0.zip
D        [442.rar]        bannitu        制作大容量IMG文件        221.1KB        2008/05/22(Thu)22:45         制作大容量IMG文件或任意调整IMG文件大小的方法.rar
D        [441.rar]        bannitu        制作大容量IMG文件和调整IMG文件大小的方法        221.1KB        2008/05/22(Thu)22:14         制作大容量IMG文件或任意调整IMG文件大小的方法.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------80
80
刪        檔名                用戶        備註        大小        日期        原檔名
D        [491.jpg]        plp626        d        53.5KB        2008/05/29(Thu)19:14         2.jpg
D        [490.jpg]        plp626        c        48.7KB        2008/05/29(Thu)19:12         1-100.jpg
D        [489.jpg]        plp626        b        35.2KB        2008/05/29(Thu)19:11         1-10.jpg
D        [488.jpg]        plp626        a        33.6KB        2008/05/29(Thu)19:10         0.1-10.jpg
D        [487.rar]        loveid        三毛的文章        488.8KB        2008/05/29(Thu)16:35         新建文件夹 (4).rar
D        [486.rar]        daniel710827        rmg_data.exe        27.6KB        2008/05/29(Thu)00:01         RMG_DATA.rar
D        [485.zip]                quya        寻找CD-ROM的小程序        3.2KB        2008/05/28(Wed)23:57         findcd.zip
D        [484.rar]        qinbuer        Batch Edit        1.9MB        2008/05/28(Wed)17:47         Batch Edit.rar
D        [483.rar]        hmily88        批处理代码编辑器        609.4KB        2008/05/28(Wed)16:04         Notepad.rar
D        [481.jpg]        hmily88        我的歌曲下载系统        199.1KB        2008/05/28(Wed)15:37         普通版.jpg
D        [480.rar]        clian76        壁纸自动更换批处理版        197.6KB        2008/05/28(Wed)13:47         壁纸自动换.rar
D        [479.rar]        qinbuer        Batch Edit        2.0MB        2008/05/28(Wed)12:59         Batch Edit.rar
D        [478.jpg]        qinbuer        Batch edit        99.2KB        2008/05/28(Wed)12:55         未命名.jpg
D        [477.bmp]        zzhh612        图片        23.8KB        2008/05/28(Wed)12:04         zzw.bmp
D        [476.rar]        hulongzhuo        WBAT        9.3KB        2008/05/28(Wed)11:12         WBAT.rar
D        [475.png]        tireless        path变量的问题        7.9KB        2008/05/28(Wed)11:08         path.png
D        [474.png]        tireless        path变量的问题        7.9KB        2008/05/28(Wed)10:58         path.png
D        [473.jpg]        qinbuer        batch edit        104.3KB        2008/05/28(Wed)09:53         未命名.jpg
D        [472.jpg]        radem        err_pic        13.4KB        2008/05/27(Tue)22:15         627.jpg
D        [471.rar]        gahoo        jpg转bmp的工具        179.1KB        2008/05/27(Tue)00:45         jpg2bmp.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------79
79
刪        檔名                用戶        備註        大小        日期        原檔名
D        [511.jpg]        plp626        errorlevel        41.2KB        2008/06/02(Mon)08:32         err.jpg
D        [510.rar]        qqq        qqq        3.9MB        2008/06/01(Sun)23:25         浩方.rar
D        [509.zip]                 HAT        222        115B        2008/06/01(Sun)11:54         test.zip
D        [508.jpg]        HAT        screenshot        26.4KB        2008/06/01(Sun)11:53         screenshot.jpg
D        [507.jpg]        HAT        screenshot        22.9KB        2008/06/01(Sun)11:44         screenshot.jpg
D        [506.zip]                 HAT        aaa        115B        2008/06/01(Sun)11:36         test.zip
D        [505.rar]        ppdos        类似半条命的全场景游戏        99.3KB        2008/06/01(Sun)11:02         90k汇编游戏.rar
D        [504.rar]        zhangqing1123        bat -exe        834.0KB        2008/06/01(Sun)10:53         bat TO exe.rar
D        [503.rar]        chinaname        批处理潜行者2.0最新版        401.9KB        2008/05/31(Sat)18:23         批处理潜行者2.0.rar
D        [502.rar]        lxsyqy        NTFS for Win98 and Dos 正式版        873.1KB        2008/05/31(Sat)14:31         NTFS for Win98 and Dos 正式版.rar
D        [501.rar]        woxzms        ImageEdit汉化版        233.3KB        2008/05/31(Sat)13:42         ImageEdit.rar
D        [500.gif]                   woyigui        ss        1.8KB        2008/05/31(Sat)12:15         2239185.gif
D        [499.rar]        wangzguo        winrar的通用注册方法        11.1KB        2008/05/31(Sat)06:45         winrarkey.rar
D        [498.rar]        plp626        sed文档        660.5KB        2008/05/31(Sat)04:59         sed.rar
D        [497.txt]          54740108        IBM一键恢复系统        563B        2008/05/30(Fri)18:18         IBM一键恢复系统.TXT
D        [496.zip]         HAT        devcon        16.1KB        2008/05/29(Thu)23:26         devcon.zip
D        [495.rar]        lhgq        BAT编译成EXE工具        30.2KB        2008/05/29(Thu)22:33         bat编译成exe工具.rar
D        [494.rar]        lhgq        BAT编译成EXE工具        30.2KB        2008/05/29(Thu)22:32         bat编译成exe工具.rar
D        [493.jpg]        plp626        f        16.8KB        2008/05/29(Thu)19:15         denggao.jpg
D        [492.jpg]        plp626        e        38.1KB        2008/05/29(Thu)19:15         3.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------78
78
刪        檔名                用戶        備註        大小        日期        原檔名
D        [534.rar]        PPdos        13首音乐+ 播放器=64k =1个多小时        60.8KB        2008/06/23(Mon)11:01         2220298-64kMusics.rar
D        [533.rar]        siang2340        AutoRunVaccine创造点的autorun文件        13.6KB        2008/06/22(Sun)20:53         AutoRunVaccine.rar
D        [532.rar]        driver1998        自创小时钟        273B        2008/06/22(Sun)12:57         clock.rar
D        [529.jpg]        minbad        errors        24.7KB        2008/06/21(Sat)21:13         l.jpg
D        [528.jpg]        hmily88        MusicDownload        230.3KB        2008/06/21(Sat)20:56         MusicDownload.jpg
D        [526.rar]        PPdos        查询端口对应的程序        556B        2008/06/20(Fri)22:58         端口查询程序测试版.rar
D        [525.zip]                 HAT        paste.exe        10.0KB        2008/06/20(Fri)08:46         paste.zip
D        [524.rar]        yqadsq1314        网络转载        479.7KB        2008/06/19(Thu)07:13         dos批处理高级教程精选合编.rar
D        [523.rar]        gmy        指定时间发出2声BEEP报警的必须文件        71B        2008/06/19(Thu)02:17         beep.rar
D        [522.rar]        gmy        Unicode的TXT文件写入内容不显示乱码        236B        2008/06/19(Thu)01:48         unicode.rar
D        [521.jpg]        sonicandy        多线程网页下载脚本界面预览        17.7KB        2008/06/18(Wed)22:11         pagegetter.JPG
D        [520.rar]        PPdos        论坛不能上 写篇杀毒日记 介以消遣        2.1KB        2008/06/13(Fri)03:37         杀毒小说.rar
D        [519.rar]        PPdos        PPdos搜集之汇编入门资料        2.3MB        2008/06/09(Mon)05:32         汇编入门资料.rar
D        [518.jpg]        hbby        02.jpg        46.1KB        2008/06/05(Thu)00:56         02.JPG
D        [517.jpg]        hbby        01.jpg        6.5KB        2008/06/05(Thu)00:56         01.JPG
D        [516.rar]        hbby        命令行短信工具        357.0KB        2008/06/05(Thu)00:53         命令行短信.rar
D        [515.rar]        hhwwll        全自动系统备份恢复img文件        2.5MB        2008/06/04(Wed)00:02         GhostZY.rar
D        [514.rar]        joyn        正则表达式帮肋文档(CHM文档)        63.4KB        2008/06/03(Tue)18:35         正则表达式.rar
D        [513.rar]        limitover        dos6.22帮助手册        609.5KB        2008/06/02(Mon)09:21         dos6.22帮助手册.rar
D        [512.jpg]        plp626        err        47.3KB        2008/06/02(Mon)08:49         err.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------77
77
刪        檔名                用戶        備註        大小        日期        原檔名
D        [554.rar]        plp626        收藏夹文件        74.3KB        2008/06/28(Sat)10:51         收藏家.rar
D        [553.jpg]        HAT        screenshot.jpg        47.1KB        2008/06/27(Fri)20:51         screenshot.jpg
D        [552.jpg]        HAT        screenshot.jpg        51.8KB        2008/06/27(Fri)18:26         screenshot.jpg
D        [551.rar]        hmily88        百度歌曲下载        268.8KB        2008/06/27(Fri)16:29         wget.rar
D        [550.jpg]        bwskyer        HDD        14.8KB        2008/06/27(Fri)13:14         HDD.JPG
D        [549.zip]          itu        ASCII 字符 FOR WIN 字体 (BY ITU)        16.3KB        2008/06/26(Thu)15:23         ASCII.zip
D        [548.zip]                 HAT        gawk.exe        88.8KB        2008/06/25(Wed)23:14         gawk.zip
D        [547.7z]                delinking        原谅你犯下的错        21B        2008/06/25(Wed)22:06         info.php.7z
D        [546.jpg]        wxcute        也来玩把加密新思路|2        44.9KB        2008/06/24(Tue)23:34         第一步简化.JPG
D        [545.jpg]        wxcute        也来玩把加密新思路|1        36.4KB        2008/06/24(Tue)23:33         对应.JPG
D        [544.jpg]        dalong        winrar的2.0在Dos的压缩文件        45.2KB        2008/06/24(Tue)22:07         winrar的2.0在Dos的压缩文件.jpg
D        [543.jpg]        dalong        winrar的2.0在Dos的压缩文件        45.2KB        2008/06/24(Tue)22:04         未标题-1 拷贝.jpg
D        [542.gif]                zghk        tree        39.6KB        2008/06/24(Tue)16:25         2008-06-24_153817.gif
D        [541.jpg]        plp626        kx        58.9KB        2008/06/24(Tue)15:19         kx.JPG
D        [540.rar]        plp626        文本整理器 v3.0        436.6KB        2008/06/24(Tue)15:16         文本整理器 v3.0.rar
D        [539.png]        lxmxn        cmd.cls.vim        12.0KB        2008/06/24(Tue)01:53         2008-06-24_010529.png
D        [538.rar]        PPdos        汇编作品集 自己搜集的 大家下吧!        3.9MB        2008/06/24(Tue)01:46         汇编作品.rar
D        [537.rar]        PPdos        ollydbg.exe汇编反汇编调试工具 使用教程        793.5KB        2008/06/24(Tue)00:58         ollydbg入门教程_caocong.rar
D        [536.zip]          pusofalse        反汇编视频教程        29.2MB        2008/06/23(Mon)22:33         反汇编视频教程.zip
D        [535.jpg]        chishingchan        BeTwinDD        238.2KB        2008/06/23(Mon)22:16         1.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------76
76
刪        檔名                用戶        備註        大小        日期        原檔名
D        [577.rar]        skyblue        批处理病毒        518.8KB        2008/07/07(Mon)11:43         system32批处理病毒.rar
D        [576.rar]        light        ghost file made by myself        8.2MB        2008/07/06(Sun)23:28         ghost.rar
D        [575.zip]          HAT        wget.exe        82.4KB        2008/07/06(Sun)20:23         wget.zip
D        [574.zip]         HAT        Windows脚本技术.chm        1.3MB        2008/07/06(Sun)20:22         Windows脚本技术.zip
D        [573.zip]                 HAT        curl.exe        164.7KB        2008/07/06(Sun)20:21         curl.zip
D        [572.bmp]        BC        pic        676.6KB        2008/07/06(Sun)14:23         123.bmp
D        [571.jpg]        admiral        中天硬盘DOS系统2.0        24.2KB        2008/07/06(Sun)10:35         20080630_d45e66260c7c8662e395US223TIbTAgE.jpg
D        [570.txt]               thf85        从U盘直接启动PE并安装系统        3.0KB        2008/07/06(Sun)07:59         从U盘直接启动PE并安装系统.txt
D        [569.rar]        emuge        FPE 2000 DOS Version        84.8KB        2008/07/06(Sun)02:08         FPE2000D.RAR
D        [568.rar]        qingfushuan        exe2txt        2.7MB        2008/07/05(Sat)13:01         EXE2TXT.rar
D        [565.gif]                netwinxp        GRUB LOGO方案1(简陋)        534B        2008/07/02(Wed)14:16         grub.gif
D        [564.rar]        qq765903209        rar        3.0MB        2008/07/02(Wed)11:32         经典批处理.rar
D        [563.rar]        plp626        singlist        211.0KB        2008/06/30(Mon)23:47         singlist.rar
D        [562.rar]        hmily88        yahoo歌曲批量下载        291.3KB        2008/06/30(Mon)17:46         YahooMusic.rar
D        [561.zip]                 HAT        sed.exe        23.2KB        2008/06/30(Mon)14:53         sed.zip
D        [560.rar]        setup        setup        19.7KB        2008/06/29(Sun)15:40         SETUP.rar
D        [559.jpg]        qinbuer        Batch Edit        363.5KB        2008/06/29(Sun)12:42         BE.JPG
D        [557.jpg]        xypcmac        dir        62.6KB        2008/06/29(Sun)00:11         d.JPG
D        [556.jpg]        xypcmac        U盘        45.5KB        2008/06/28(Sat)21:29         U.JPG
D        [555.jpg]        HAT        screenshot.jpg        53.0KB        2008/06/28(Sat)17:01         screenshot.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------75
75
刪        檔名                用戶        備註        大小        日期        原檔名
D        [597.rar]        ptk        日文DOS6.2完全版,能輸入假名和漢字        6.6MB        2008/07/17(Thu)23:09         jmsdos62.rar
D        [596.rar]        gmy        老葛WINPE v1.0 硬盘维护专用        35.6MB        2008/07/17(Thu)22:43         LaoGe_PE.rar
D        [595.zip]                 070        用speaker模拟声卡的驱动源代码        131.8KB        2008/07/17(Thu)14:23         src.zip
D        [594.zip]                 HAT        批处理基础教程        46.0KB        2008/07/17(Thu)14:22         批处理基础教程.zip
D        [593.rar]        wxcute        极品五笔6.6绿色.rar        450.0KB        2008/07/12(Sat)19:16         极品五笔6.6绿色.rar
D        [592.rar]        driver1998        自己编的批处理小工具        5.2KB        2008/07/12(Sat)16:58         自己编的批处理小工具.rar
D        [591.rar]        joyoustar        setacl设置文件夹共享权限        171.0KB        2008/07/11(Fri)17:57         测试用setacl设置共享权限.rar
D        [590.zip]                 HAT        rm.exe        30.4KB        2008/07/11(Fri)14:54         rm.zip
D        [589.7z]                uleak        plop manager into a pci rom        42.0KB        2008/07/11(Fri)12:04         romos.7z
D        [588.7z]                uleak        plop manager img shrink into 63k ima        41.2KB        2008/07/10(Thu)21:48         plop_r12.7z
D        [587.rar]        dos9527        我爱BAT        383.0KB        2008/07/10(Thu)19:44         loveBAT.rar
D        [586.rar]        chen3        SVGA for DOS C/C++开发库        162.7KB        2008/07/10(Thu)17:36         SVGA225.rar
D        [585.rar]        xms源代码        XMS FOR DOS C++源代码        5.1KB        2008/07/10(Thu)17:33         XMS.rar
D        [584.rar]        AB21CN        deltree的代替        7.6KB        2008/07/09(Wed)15:35         KDIR.rar
D        [583.rar]        ab21cn        BAT转COM        23.1KB        2008/07/09(Wed)15:31         BAT2COM.rar
D        [582.rar]        netwinxp        用喇叭模拟声卡的古董驱动,支持WIN3X和9X        21.4KB        2008/07/08(Tue)17:32         SPKAUDIO.rar
D        [581.jpg]        HAT        screenshot.jpg        35.8KB        2008/07/08(Tue)09:29         screenshot.jpg
D        [580.zip]         HAT        printf.exe        5.7KB        2008/07/08(Tue)02:43         printf.zip
D        [579.rar]        qinbuer        Batch Edit        2.2MB        2008/07/07(Mon)13:41         Batch Edit.rar
D        [578.rar]        jy02141405        发个移动硬盘或U盘加密的工具给大家        334.3KB        2008/07/07(Mon)11:58         移动加密解密.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------74
74
刪        檔名                用戶        備註        大小        日期        原檔名
D        [617.jpg]        xiaoyun        gdisk中文分区        82.4KB        2008/07/23(Wed)21:33         c6.jpg
D        [616.jpg]        xiaoyun        gdisk中文分区        61.7KB        2008/07/23(Wed)21:31         c4.jpg
D        [615.jpg]        xiaoyun        gdisk中文分区        96.7KB        2008/07/23(Wed)21:31         c3.jpg
D        [614.jpg]        xiaoyun        gdisk中文分区        74.4KB        2008/07/23(Wed)21:29         c2.jpg
D        [613.jpg]        xiaoyun        gdisk中文分区        94.5KB        2008/07/23(Wed)21:29         c1.jpg
D        [612.jpg]        xiaoyunwang        gdisk中文分区        57.5KB        2008/07/23(Wed)21:28         c0.jpg
D        [611.zip]                   garyzyg        FPE 2000 的 DOS 專用版本,需有原版光碟。        121.8KB        2008/07/23(Wed)17:51         fpe2000dos.zip
D        [610.jpg]        hmily88        提取字符串        366B        2008/07/23(Wed)16:00         空格符.jpg
D        [609.jpg]        hmily88        提取字符串        573B        2008/07/23(Wed)15:54         CR符.jpg
D        [608.jpg]        hmily88        提取字符串        769B        2008/07/23(Wed)15:53         回车符.jpg
D        [607.jpg]        hmily88        提取字符串        102.3KB        2008/07/23(Wed)15:52         非记事本.jpg
D        [606.rar]        hansom        sse加密解密        159.5KB        2008/07/23(Wed)15:51         sse加密解密.rar
D        [605.jpg]        hmily88        提取字符串        62.9KB        2008/07/23(Wed)15:50         记事本.jpg
D        [604.txt]                  hmily88        提取字符串        1.5KB        2008/07/23(Wed)15:46         info2.txt
D        [603.gif]                   clian76        loading gif        2.0KB        2008/07/22(Tue)14:39         loading.gif
D        [602.rar]        zdmisqqxp        个人作品(半成品)        6.2KB        2008/07/20(Sun)21:56         index.rar
D        [601.rar]        zdmisqqxp        收集的        9.4KB        2008/07/20(Sun)21:54         ls.rar
D        [600.rar]        dfhqgd        eRTOS重新上传,还包含几个开发文档        2.4MB        2008/07/18(Fri)17:14         eRTOS.rar
D        [599.zip]                    dfhqgd        dos下的实时操作系统ertos支持多线程,很好的东西,我在网上找了好久的        2.2MB        2008/07/18(Fri)17:12         eRTOS.zip
D        [598.zip]                    driver1998        关闭按钮和你捉迷藏        261B        2008/07/18(Fri)13:09         clomc.zip
-----------------------------------------------------------------------------------------------------------------------------------------------------73
73
刪        檔名                用戶        備註        大小        日期        原檔名
D        [637.jpg]        xiaoyun        gdisk中文分区        34.0KB        2008/07/23(Wed)21:39         g11.jpg
D        [636.jpg]        xiaoyun        gdisk中文分区        63.0KB        2008/07/23(Wed)21:39         g10.jpg
D        [635.jpg]        xiaoyun        gdisk中文分区        24.6KB        2008/07/23(Wed)21:39         g9.jpg
D        [634.jpg]        xiaoyun        gdisk中文分区        93.7KB        2008/07/23(Wed)21:38         g8.jpg
D        [633.jpg]        xiaoyun        gdisk中文分区        64.7KB        2008/07/23(Wed)21:38         g7.jpg
D        [632.jpg]        xiaoyun        gdisk中文分区        105.0KB        2008/07/23(Wed)21:38         g6.jpg
D        [631.jpg]        xiaoyun        gdisk中文分区        67.4KB        2008/07/23(Wed)21:38         g5.jpg
D        [630.jpg]        xiaoyun        gdisk中文分区        94.1KB        2008/07/23(Wed)21:37         g4.jpg
D        [629.jpg]        xiaoyun        gdisk中文分区        68.7KB        2008/07/23(Wed)21:37         g3.jpg
D        [628.jpg]        xiaoyun        gdisk中文分区        97.2KB        2008/07/23(Wed)21:37         g2.jpg
D        [627.jpg]        xiaoyun        gdisk中文分区        81.5KB        2008/07/23(Wed)21:37         g1.jpg
D        [626.jpg]        xiaoyun        gdisk中文分区        70.1KB        2008/07/23(Wed)21:36         c15.jpg
D        [625.jpg]        xiaoyun        gdisk中文分区        87.1KB        2008/07/23(Wed)21:36         c14.jpg
D        [624.jpg]        xiaoyun        gdisk中文分区        57.3KB        2008/07/23(Wed)21:35         c13.jpg
D        [623.jpg]        xiaoyun        gdisk中文分区        84.3KB        2008/07/23(Wed)21:35         c12.jpg
D        [622.jpg]        xiaoyun        gdisk中文分区        62.2KB        2008/07/23(Wed)21:35         c11.jpg
D        [621.jpg]        xiaoyun        gdisk中文分区        84.3KB        2008/07/23(Wed)21:35         c10.jpg
D        [620.jpg]        xiaoyun        gdisk中文分区        78.5KB        2008/07/23(Wed)21:34         c9.jpg
D        [619.jpg]        xiaoyun        gdisk中文分区        78.7KB        2008/07/23(Wed)21:34         c8.jpg
D        [618.jpg]        xiaoyun        gdisk中文分区        50.3KB        2008/07/23(Wed)21:34         c7.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------72
72
刪        檔名                用戶        備註        大小        日期        原檔名
D        [657.txt]          softlibo        垃圾处理bat        538B        2008/08/02(Sat)00:12         垃圾处理bat.txt
D        [656.txt]                softlibo        垃圾处理bat        538B        2008/08/02(Sat)00:10         垃圾处理bat.txt
D        [655.jpg]        dslz666        输出日期问题        21.5KB        2008/07/31(Thu)15:54         输出日期.jpg
D        [654.rar]        yoonix        网络工程知识        1.8MB        2008/07/31(Thu)11:48         资料.rar
D        [653.zip]                yoonix        打印驱动        168.7KB        2008/07/31(Thu)11:45         LJ6012MFP_WINXP.zip
D        [652.zip]                 HAT        wc.exe        13.9KB        2008/07/31(Thu)00:28         wc.zip
D        [651.txt]          hmily88        提取特定文本中的字符串        962.2KB        2008/07/30(Wed)19:32         txt.txt
D        [650.7z]                wang365        XCDROM.SYS 驱动        3.2KB        2008/07/29(Tue)18:52         xcdrom.7z
D        [649.rar]        kidzgy        右键菜单 显示隐藏扩展名及文件        1.2KB        2008/07/29(Tue)09:38         右键菜单 显示隐藏扩展名及文件.rar
D        [648.jpg]        kidzgy        右键菜单 显示隐藏扩展名及文件        36.4KB        2008/07/29(Tue)09:38         2.jpg
D        [647.jpg]        kidzgy        右键菜单 显示隐藏扩展名及文件        32.4KB        2008/07/29(Tue)09:37         1.jpg
D        [646.jpg]        kidzgy        右键菜单 显示隐藏扩展名及文件        19.3KB        2008/07/29(Tue)09:37         安装界面.jpg
D        [645.rar]        qinbuer        Batch Edit BetaV1.0.5 (批处理文件编辑器)        2.2MB        2008/07/28(Mon)20:37         Batch Edit BetaV1.0.5 (批处理文件编辑器) .rar
D        [644.png]        dosforever        DOS彩色界面        7.3KB        2008/07/26(Sat)18:11         DOS Interface.png
D        [643.jpg]        john027        photo        95.5KB        2008/07/26(Sat)15:36         DSC_7205.jpg
D        [642.zip]                 HAT        ipconfig_Win2003.zip        23.7KB        2008/07/26(Sat)15:25         ipconfig_Win2003.zip
D        [641.rar]        LUOHUANHAI        Excel转EXE        145.8KB        2008/07/25(Fri)08:23         Excel转EXE绿色更新版(含注册机).rar
D        [640.rar]        xiaoyun        gdisk中文分区光盘版        1.9MB        2008/07/23(Wed)21:46         GGDISK光盘.rar
D        [639.rar]        xiaoyun        gdisk中文分区软盘镜像        1.3MB        2008/07/23(Wed)21:44         GGDISK.rar
D        [638.rar]        xiaoyun        功能增强程序中文版        35.3KB        2008/07/23(Wed)21:40         function.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------71
71
刪        檔名                用戶        備註        大小        日期        原檔名
D        [677.rar]        图片        运行结果        34.9KB        2008/08/19(Tue)10:53         图片.rar
D        [676.rar]        zzhh612        BC补丁        11.9KB        2008/08/18(Mon)19:33         blx11.rar
D        [675.rar]        zzhh612        BC31补丁程序3        8.0KB        2008/08/18(Mon)19:31         bc31p3.rar
D        [674.rar]        zz hh612        BC31补丁程序2        46.0KB        2008/08/18(Mon)19:30         bc31p2.rar
D        [673.rar]        zzhh612        BC31补丁程序        10.0KB        2008/08/18(Mon)19:28         bc31p1.rar
D        [672.txt]                   karman        比较文件的不同之处的输出结果,_to_learn.txt        4.1KB        2008/08/17(Sun)09:02         _to_learn.txt
D        [671.txt]          karman        比较文件的不同之处用的文件,_to_check.txt        5.0KB        2008/08/17(Sun)08:57         _to_check.txt
D        [670.txt]                   karman        比较文件的不同之处用的文件,已经学习的单词        2.4KB        2008/08/17(Sun)08:56         _learned.txt
D        [669.jpg]        dslz666        SaveText By Slore 的BUG        16.0KB        2008/08/11(Mon)14:59         SaveText By Slore.jpg
D        [668.jpg]        dslz666        SaveText By Slore 的BUG        16.0KB        2008/08/11(Mon)13:45         SaveText By Slore.jpg
D        [667.zip]                   blackoil        原创操作系统        675.4KB        2008/08/08(Fri)18:35         os.zip
D        [666.rar]        hnlyzhd        CCTV奥运高清直播        1.3MB        2008/08/08(Fri)15:07         cctv奥运高清晰版.rar
D        [665.rar]        zzhh612        音乐        561.4KB        2008/08/06(Wed)21:53         不知名.rar
D        [664.rar]        vcmasm2008        中文显示程序        260.1KB        2008/08/06(Wed)19:00         chs_text.rar
D        [663.rar]        wwwb0        批处理转EXE        883.1KB        2008/08/06(Wed)02:25         批处理潜行者3.0.rar
D        [662.txt]                zaqxsw        zzzzz        289B        2008/08/04(Mon)21:56         ServerList.txt
D        [661.zip]                proof        待调试的玛丽游戏        593.4KB        2008/08/02(Sat)16:44         mary.zip
D        [660.jpg]        核反应堆        核反应堆        18.9KB        2008/08/02(Sat)01:36         核反应堆.jpg
D        [659.rar]        softlibo        CPU-Z.        941.9KB        2008/08/02(Sat)00:15         CPU-Z.x.rar
D        [658.rar]        softlibo        G:\PL+SQL培训教程        100.5KB        2008/08/02(Sat)00:14         PL+SQL培训教程.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------70
70
刪        檔名                用戶        備註        大小        日期        原檔名
D        [697.rar]        xiaoyunwang        MSDOS71中文加强        1.5MB        2008/09/02(Tue)19:20         MSDOS71G.rar
D        [696.rar]        xiaoyunwang        MSDOS71中文加强        1.2MB        2008/09/02(Tue)19:18         MSDOS71X.rar
D        [695.rar]        xiaoyunwang        MSDOS71中文加强        1.5MB        2008/09/02(Tue)19:16         MSDOS71T.rar
D        [694.rar]        pusofalse        cmdow 窗口相关        13.2KB        2008/09/02(Tue)16:09         cmdow.rar
D        [693.rar]        xiaoyunwang        简体中文MSDOS启动盘加强版修正        1.5MB        2008/09/02(Tue)15:41         MSDOS71T.rar
D        [692.jpg]        radem        01        8.5KB        2008/08/29(Fri)22:26         01.JPG
D        [691.rar]        maxim        DOS小工具,可以配合NTFS4DOS删除任意文件        9.8KB        2008/08/29(Fri)12:34         LCC.rar
D        [690.rar]        intel_95.exe        WIN95 主板驱动        575.0KB        2008/08/29(Fri)11:11         INTEL_95.rar
D        [689.rar]        羽逸        萬用啟動盤        707.5KB        2008/08/29(Fri)03:01         boot.rar
D        [688.rar]        xiaoyunwang        简体中文 MS-DOS 7.10 标准启动盘加强版(XZL汉字系统,带GRUB)        1.6MB        2008/08/28(Thu)13:55         MSDOS71G.rar
D        [687.rar]        xiaoyunwang        简体中文 MS-DOS 7.10 标准启动盘加强版(XZL汉字系统,不带GRUB)        1.3MB        2008/08/28(Thu)12:59         MSDOS71X.rar
D        [686.rar]        xiaoyunwang        简体中文 MS-DOS 7.10 标准启动盘加强版(TW汉字系统,不带GRUB)        1.5MB        2008/08/28(Thu)12:51         MSDOS71T.rar
D        [685.rar]        luyong1005        DOS下的USB驱动        247.1KB        2008/08/24(Sun)14:20         DOS下的USB驱动.rar
D        [684.rar]        Slore        数独 By Slore        1.9KB        2008/08/22(Fri)17:05         数独-Slore.rar
D        [683.png]        dosforever        IE Security Information        3.6KB        2008/08/19(Tue)17:29         Security Info.png
D        [682.jpg]        sziang        3        45.3KB        2008/08/19(Tue)16:12         3.JPG
D        [681.jpg]        sziang        2        34.6KB        2008/08/19(Tue)16:11         2.JPG
D        [680.bmp]        sziang        1        520.2KB        2008/08/19(Tue)16:06         1.bmp
D        [679.jpg]        qwertl        winrar的选项功能rar对应开关是什么?        32.1KB        2008/08/19(Tue)12:04         r.JPG
D        [678.rar]        sziang        运行结果        34.9KB        2008/08/19(Tue)10:55         图片.rar
-----------------------------------------------------------------------------------------------------------------------------------------------------69
69
刪        檔名                用戶        備註        大小        日期        原檔名
D        [717.jpg]        xiaoyunwang        msdos安装截图        50.8KB        2008/09/02(Tue)19:54         Snap9.jpg
D        [716.jpg]        xiaoyunwang        msdos安装截图        29.9KB        2008/09/02(Tue)19:53         Snap8.jpg
D        [715.jpg]        xiaoyunwang        msdos安装截图        46.7KB        2008/09/02(Tue)19:53         Snap7.jpg
D        [714.jpg]        xiaoyunwang        msdos安装截图        65.7KB        2008/09/02(Tue)19:53         Snap6.jpg
D        [713.jpg]        xiaoyunwang        msdos安装截图        55.8KB        2008/09/02(Tue)19:52         Snap5.jpg
D        [712.jpg]        xiaoyunwang        msdos安装截图        40.7KB        2008/09/02(Tue)19:52         Snap4.jpg
D        [711.jpg]        xiaoyunwang        msdos安装截图        36.3KB        2008/09/02(Tue)19:51         Snap3.jpg
D        [710.jpg]        xiaoyunwang        msdos安装截图        66.1KB        2008/09/02(Tue)19:51         Snap2.jpg
D        [709.jpg]        xiaoyunwang        msdos安装截图        92.7KB        2008/09/02(Tue)19:51         Snap1.jpg
D        [708.jpg]        xiaoyunwang        msdos截图        116.2KB        2008/09/02(Tue)19:36         dos721.jpg
D        [707.jpg]        xiaoyunwang        msdos截图        69.7KB        2008/09/02(Tue)19:36         dos720.jpg
D        [706.jpg]        xiaoyunwang        msdos截图        64.5KB        2008/09/02(Tue)19:36         dos719.jpg
D        [705.jpg]        xiaoyunwang        msdos截图        81.3KB        2008/09/02(Tue)19:35         dos718.jpg
D        [704.jpg]        xiaoyunwang        msdos截图        83.8KB        2008/09/02(Tue)19:35         dos717.jpg
D        [703.jpg]        xiaoyunwang        msdos截图        45.8KB        2008/09/02(Tue)19:35         dos716.jpg
D        [702.jpg]        xiaoyunwang        msdos截图        20.6KB        2008/09/02(Tue)19:34         dos715.jpg
D        [701.jpg]        xiaoyunwang        msdos截图        37.5KB        2008/09/02(Tue)19:34         dos714.jpg
D        [700.jpg]        xiaoyunwang        msdos截图        14.4KB        2008/09/02(Tue)19:34         dos713.jpg
D        [699.jpg]        xiaoyunwang        msdos截图        39.2KB        2008/09/02(Tue)19:33         dos712.jpg
D        [698.jpg]        xiaoyunwang        msdos截图        86.7KB        2008/09/02(Tue)19:33         dos711.jpg
-----------------------------------------------------------------------------------------------------------------------------------------------------68
68
刪        檔名                用戶        備註        大小        日期        原檔名
D        [737.jpg]        xiaoyunwang        分区恢复        78.8KB        2008/09/11(Thu)00:35         pr.jpg
D        [736.rar]        xiaoyunwang        数据恢复        344.2KB        2008/09/11(Thu)00:34         uneraser.rar
D        [735.rar]        xiaoyunwang        windwos 密码破解        29.9KB        2008/09/11(Thu)00:34         DOSPASS.rar
D        [734.rar]        xiaoyunwang        windwos 密码破解        49.8KB        2008/09/11(Thu)00:33         PR.rar
D        [733.rar]        BC        star war        222B        2008/09/07(Sun)16:53         BAT.rar
D        [732.rar]        19951001        计算机关机助手        31.6KB        2008/09/07(Sun)12:58         Release.rar
D        [731.rar]        xiaoyunwang        Turbo C2.0简体中文版        1.2MB        2008/09/07(Sun)10:11         turboC2.0简体中文版.rar
D        [730.rar]        obsolete        url编码工具,尝试写一个        16.5KB        2008/09/07(Sun)02:39         urlenc.rar
D        [729.rar]        ycmaji        QEDIT V2.1        30.1KB        2008/09/06(Sat)21:02         QE.rar
D        [728.rar]        dengke227        Paragon Partition Manager 7.0服务器汉化PE版        1.1MB        2008/09/06(Sat)16:20         WinPM.rar
D        [727.rar]        286959750        MS-DOS编程的技术        498.1KB        2008/09/06(Sat)12:13         MS-DOS编程的技术.rar
D        [726.rar]        jinzihao        试试我自编的批处理,绝对好用,用时会有帮助的        178B        2008/09/05(Fri)22:08         试一试!.rar
D        [725.rar]        yh6201        自动断网        1.7KB        2008/09/05(Fri)21:59         net.rar
D        [724.rar]        kemyliu        XMSDSK.虚拟磁盘工具        11.7KB        2008/09/04(Thu)22:36         XMSDSK.rar
D        [723.jpg]        qwertl        modem命令按钮的批处理        50.5KB        2008/09/04(Thu)22:26         modem.jpg
D        [722.rar]        dddyjq1        32        105.6KB        2008/09/03(Wed)23:29         32.rar
D        [721.rar]        dddyjq1        32        105.6KB        2008/09/03(Wed)23:28         32.rar
D        [720.rar]        32        32        105.6KB        2008/09/03(Wed)23:26         32.rar
D        [719.jpg]        xiaoyunwang        msdos安装截图        45.5KB        2008/09/02(Tue)19:54         Snaps2.jpg
D        [718.jpg]        xiaoyunwang        msdos安装截图        41.6KB        2008/09/02(Tue)19:54         Snaps1.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------67
67
刪        檔名                  用戶        備註        大小        日期        原檔名
D        [758.zip]        yq7654        用WinImage制作GRUB能识别的软盘格式.xls        2.8KB        2008/09/18(Thu)05:57         用WinImage制作GRUB能识别的软盘格式.zip
D        [757.rar]        driver1998        Windows XP SP2部署工具        1.7MB        2008/09/17(Wed)22:21         WindowsXP-KB838080-SP2-DeployTools-CHS.rar
D        [756.bmp]        ZJHJ        彩色象棋棋盘        1.2MB        2008/09/17(Wed)18:39         Image0080.BMP
D        [755.bmp]        ZJHJ        彩色棋盘        1.2MB        2008/09/17(Wed)18:34         Image0080.BMP
D        [754.gif]                 powerlsh        魔兽        4.6KB        2008/09/15(Mon)22:09         1152559336123.gif
D        [753.zip]                 HAT        bat2com2exe        11.8KB        2008/09/15(Mon)03:05         bat2com2exe.zip
D        [752.rar]        FTP007        免杀BAT转EXE        876.0KB        2008/09/14(Sun)20:29         批处理潜行者V5.0.rar
D        [751.jpg]        moniuming        用户注册信息        576.1KB        2008/09/14(Sun)20:15         用户.jpg
D        [750.jpg]        moniuming        call延迟        576.1KB        2008/09/13(Sat)22:08         call延迟.jpg
D        [748.jpg]        moniuming        解锁注册表脚本报错信息        576.1KB        2008/09/13(Sat)19:45         vb.jpg
D        [747.rar]        xiaoyunwang        MSDOS71T修正        1.5MB        2008/09/13(Sat)10:59         MSDOS71T.rar
D        [746.rar]        tireless        reg2cmd (12.07更新)        491.8KB        2008/09/12(Fri)23:11         reg2cmd.rar
D        [745.rar]        xiaoyunwang        NU2002磁盘编辑器        627.7KB        2008/09/12(Fri)20:56         NU2002.rar
D        [744.jpg]        xiaoyunwang        NU2002磁盘编辑器        93.8KB        2008/09/12(Fri)20:48         nu2002.jpg
D        [743.rar]        code3        Ghost 2008 DVDRW + Sata        451.0KB        2008/09/12(Fri)08:34         Ghost 2008.rar
D        [742.rar]        xiaoyunwang        中文pcdos        411.4KB        2008/09/11(Thu)05:48         PCDOSCN.rar
D        [741.jpg]        xiaoyunwang        中文pcdos        57.8KB        2008/09/11(Thu)05:44         pc2.jpg
D        [740.jpg]        xiaoyunwang        中文pcdos        38.8KB        2008/09/11(Thu)05:42         pc1.jpg
D        [739.rar]        tireless        方案2 - 加载另一个目录的 explorer.exe,更改注册表 shell 值指向于此。        363.1KB        2008/09/11(Thu)02:09         modify startbutton text_2_shell.rar
D        [738.rar]        tireless        快速修改「开始」按钮文字 方案1 - 替换 %windir%explorer.exe        363.2KB        2008/09/11(Thu)01:40         modify startbutton text_1_replace.rar
----------------------------------------------------------------------------------------------------------------------------------------------------66
66
刪        檔名                用戶        備註        大小        日期        原檔名
D        [778.rar]        xugq        dos批处理高级教程精选合编        477.0KB        2008/09/22(Mon)05:22         dos批处理高级教程精选合编.rar
D        [777.png]        tireless        查看由批处理潜行者V5.0编译的exe的资源        2.3KB        2008/09/22(Mon)00:18         批处理潜行者V5.0.png
D        [776.png]        tireless        查看由ExeScript编译的exe的资源        1.6KB        2008/09/22(Mon)00:17         ExeScript.png
D        [775.rar]        0772allen        解锁注册表        293B        2008/09/21(Sun)22:00         解锁注册表.rar
D        [774.rar]        0772allen        服务进程优化        8.4KB        2008/09/21(Sun)21:35         服务进程优化.rar
D        [773.rar]        0772allen        让exe等在C盘下无法运行的批处理        30.6KB        2008/09/21(Sun)21:27         让exe等在C盘下无法运行的批处理.rar
D        [772.zip]         HAT        find.exe        29.1KB        2008/09/21(Sun)11:10         find.zip
D        [771.rar]        FTP007        测试        171.8KB        2008/09/21(Sun)03:08         CS.rar
D        [770.zip]               tireless        Bat_To_Exe_Converter(支持命令行)        421.8KB        2008/09/20(Sat)19:01         Bat_To_Exe_Converter.zip
D        [769.png]        tireless         Windows 进程管理器        17.0KB        2008/09/20(Sat)17:21         PrcMgr.png
D        [768.jpg]        qwertl        自动修改IE首页问题        98.3KB        2008/09/20(Sat)12:05         proc.JPG
D        [767.png]        dosforever        唵嘛呢叭咪吽        2.8KB        2008/09/20(Sat)10:47         唵嘛呢叭咪吽.png
D        [766.zip]              CrispH        TSACI v090        5.0KB        2008/09/20(Sat)07:32         TSACI_v090.zip
D        [765.png]        CrispH        TSACI PI        65.1KB        2008/09/20(Sat)07:28         TSACI_PI.PNG
D        [764.png]        tireless        添加“还原 IE 首页”按钮        2.2KB        2008/09/20(Sat)00:51         rsp.png
D        [763.png]        dosforever        Firefox 显示“唵嘛呢叭咪吽”        2.1KB        2008/09/19(Fri)11:30         唵嘛呢叭咪吽 FF.png
D        [762.png]        dosforever        Navigator 显示“唵嘛呢叭咪吽”.        2.0KB        2008/09/19(Fri)11:26         唵嘛呢叭咪吽 NN.png
D        [761.png]        dosforever        IE 显示“唵嘛呢叭咪吽”.png        2.2KB        2008/09/19(Fri)11:23         唵嘛呢叭咪吽 IE.png
D        [760.jpg]        nul        Error2        20.1KB        2008/09/19(Fri)01:33         Error2.jpg
D        [759.jpg]        nul        Error        51.7KB        2008/09/19(Fri)01:32         Error.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------65
65
刪        檔名                用戶        備註        大小        日期        原檔名
D        [799.rar]        matlan        demo.rar        62.1KB        2008/09/29(Mon)11:07         Rofation64K.rar
D        [798.rar]        19951001        DISKRW Win32 版本更新        7.9KB        2008/09/27(Sat)19:47         diskrw.rar
D        [797.rar]        zqz0012005        mshta.exe的压缩包        20.1KB        2008/09/27(Sat)08:08         mshta.rar
D        [796.rar]        halmy        qq临时会话        457B        2008/09/26(Fri)06:39         临时会话.rar
D        [795.zip]                tireless        一些命令行工具        481.4KB        2008/09/25(Thu)22:49         batch_tools.zip
D        [794.rar]        tireless        iskeydown 判断按键是否被按下,返回 errorlevel 值        12.0KB        2008/09/25(Thu)22:46         iskeydown.rar
D        [793.zip]              nfyanger        fastcopy源码        144.4KB        2008/09/25(Thu)05:53         fastcopy163src.zip
D        [792.rar]        tireless        Usage:HideExec Program [Arguments]        688B        2008/09/25(Thu)02:00         HideExec.rar
D        [791.rar]        tireless        hides console window of started program &amp; waits (opt.) for its termination        848B        2008/09/25(Thu)01:58         hidec.rar
D        [790.jpg]        Batcher        screenshot        14.7KB        2008/09/25(Thu)01:26         1.JPG
D        [788.zip]         uleak        ROMOS embedded plop R14 usb boot manager for USB2.0 high speed        25.4KB        2008/09/24(Wed)06:03         romos.zip
D        [787.zip]               uleak        ROMOS embedded plop R14 usb boot manager for USB2.0 high speed        25.4KB        2008/09/24(Wed)06:03         romos.zip
D        [786.gif]              minitank        我用WPS2000做的平面图        28.6KB        2008/09/24(Wed)00:47         wps2000.gif
D        [785.rar]        apuo        addlist        902B        2008/09/23(Tue)23:45         addlist.rar
D        [784.rar]        apuo        生成JS        670B        2008/09/23(Tue)20:37         Guest.rar
D        [783.rar]        apuo        原本JS        3.2KB        2008/09/23(Tue)20:36         原本JS.rar
D        [782.rar]        tireless        用 NirCmd 临时修改开始按钮文字        41.4KB        2008/09/23(Tue)07:39         set_StartButton_text.rar
D        [781.rar]        tireless        修改开始按钮文字_方案二_加载另一explorer,修改注册表中的 shell 值指向于此        361.9KB        2008/09/23(Tue)00:35         Modify Start Button Text_shell.rar
D        [780.rar]        tireless        修改开始按钮文字_替换explorer.exe        361.9KB        2008/09/23(Tue)00:09         Modify Start Button Text.rar
D        [779.png]        tireless        开始按钮        5.7KB        2008/09/22(Mon)22:59         开始按钮.png
----------------------------------------------------------------------------------------------------------------------------------------------------64
64
刪        檔名                用戶        備註        大小        日期        原檔名
D        [821.jpg]        xiaoyunwang        终结者一键ghost        27.8KB        2008/10/04(Sat)05:22         Snap13.jpg
D        [820.jpg]        xiaoyunwang        终结者一键ghost        33.6KB        2008/10/04(Sat)05:22         Snap12.jpg
D        [819.jpg]        xiaoyunwang        终结者一键ghost        19.5KB        2008/10/04(Sat)05:21         Snap11.jpg
D        [818.jpg]        xiaoyunwang        终结者一键ghost        19.0KB        2008/10/04(Sat)05:20         Snap10.jpg
D        [817.jpg]        xiaoyunwang        终结者一键ghost        33.5KB        2008/10/04(Sat)05:20         Snap9.jpg
D        [816.jpg]        xiaoyunwang        终结者一键ghost        32.0KB        2008/10/04(Sat)05:19         Snap8.jpg
D        [815.jpg]        xiaoyunwang        终结者一键ghost        28.0KB        2008/10/04(Sat)05:19         Snap7.jpg
D        [814.jpg]        xiaoyunwang        终结者一键ghost        33.5KB        2008/10/04(Sat)05:19         Snap6.jpg
D        [813.jpg]        xiaoyunwang        终结者一键ghost        24.9KB        2008/10/04(Sat)05:18         Snap5.jpg
D        [812.jpg]        xiaoyunwang        终结者一键ghost        23.2KB        2008/10/04(Sat)05:18         Snap4.jpg
D        [811.jpg]        xiaoyunwang        终结者一键ghost        64.5KB        2008/10/04(Sat)05:17         Snap3.jpg
D        [810.jpg]        xiaoyunwang        终结者一键ghost        63.6KB        2008/10/04(Sat)05:16         Snap2.jpg
D        [809.jpg]        xiaoyunwang        终结者一键ghost        78.6KB        2008/10/04(Sat)05:15         Snap1.jpg
D        [808.rar]        xiaoyunwang        中文管理        356.3KB        2008/10/02(Thu)16:38         index.rar
D        [807.rar]        tireless        SIREN.com 鸣叫警报声        1.9KB        2008/10/02(Thu)00:40         SIREN.rar
D        [806.rar]        tireless        RING.com 鸣叫铃声        1.9KB        2008/10/02(Thu)00:40         RING.rar
D        [805.rar]        tireless        CHIME.com 鸣叫一段旋律        1.9KB        2008/10/02(Thu)00:39         CHIME.rar
D        [804.rar]        nfyanger        nnm安装手册        264.3KB        2008/10/01(Wed)19:24         Installation_WIN.rar
D        [803.jpg]        zhouzc88        命令提示符问题        66.2KB        2008/10/01(Wed)07:03         未命名123.JPG
D        [802.jpg]        xiaoyunwang        vtmagic 问题        28.5KB        2008/09/30(Tue)18:06         vtm.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------63
63
刪        檔名                用戶        備註        大小        日期        原檔名
D        [841.jpg]        xiaoyunwang        终结者一键ghost        66.1KB        2008/10/04(Sat)05:34         Snap31.jpg
D        [840.jpg]        xiaoyunwang        终结者一键ghost        87.7KB        2008/10/04(Sat)05:33         Snap30.jpg
D        [839.jpg]        xiaoyunwang        终结者一键ghost        77.7KB        2008/10/04(Sat)05:33         Snap29.jpg
D        [838.jpg]        xiaoyunwang        终结者一键ghost        52.5KB        2008/10/04(Sat)05:33         Snap28.jpg
D        [837.jpg]        xiaoyunwang        终结者一键ghost        57.5KB        2008/10/04(Sat)05:32         Snap27.jpg
D        [836.jpg]        xiaoyunwang        终结者一键ghost        59.0KB        2008/10/04(Sat)05:32         Snap26.jpg
D        [835.jpg]        xiaoyunwang        终结者一键ghost        54.1KB        2008/10/04(Sat)05:31         Snap25.jpg
D        [834.jpg]        xiaoyunwang        终结者一键ghost        62.3KB        2008/10/04(Sat)05:31         Snap24.jpg
D        [833.jpg]        xiaoyunwang        终结者一键ghost        27.1KB        2008/10/04(Sat)05:30         Snap23.jpg
D        [832.jpg]        xiaoyunwang        终结者一键ghost        68.1KB        2008/10/04(Sat)05:29         Snap22.jpg
D        [831.jpg]        xiaoyunwang        终结者一键ghost        25.5KB        2008/10/04(Sat)05:28         Snap21.jpg
D        [830.jpg]        xiaoyunwang        终结者一键ghost        57.5KB        2008/10/04(Sat)05:26         Snap27.jpg
D        [829.jpg]        xiaoyunwang        终结者一键ghost        59.0KB        2008/10/04(Sat)05:25         Snap26.jpg
D        [828.jpg]        xiaoyunwang        终结者一键ghost        37.5KB        2008/10/04(Sat)05:25         Snap20.jpg
D        [827.jpg]        xiaoyunwang        终结者一键ghost        52.0KB        2008/10/04(Sat)05:24         Snap19.jpg
D        [826.jpg]        xiaoyunwang        终结者一键ghost        26.6KB        2008/10/04(Sat)05:23         Snap18.jpg
D        [825.jpg]        xiaoyunwang        终结者一键ghost        25.2KB        2008/10/04(Sat)05:23         Snap17.jpg
D        [824.jpg]        xiaoyunwang        终结者一键ghost        33.7KB        2008/10/04(Sat)05:23         Snap16.jpg
D        [823.jpg]        xiaoyunwang        终结者一键ghost        28.4KB        2008/10/04(Sat)05:22         Snap15.jpg
D        [822.jpg]        xiaoyunwang        终结者一键ghost        21.6KB        2008/10/04(Sat)05:22         Snap14.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------62
62
刪        檔名        用戶        備註        大小        日期        原檔名
D        [861.rar]        donesong        DOS下的模拟游戏        598.7KB        2008/10/06(Mon)10:26         fc.rar
D        [860.rar]        donesong        DOS下的五笔练习        370.5KB        2008/10/06(Mon)10:23         WT.rar
D        [859.rar]        donesong        DOS下的看图软件        731.9KB        2008/10/06(Mon)10:23         SEA.rar
D        [858.zip]        xcfpeng        css table        1.4MB        2008/10/06(Mon)07:56         css_tab.zip
D        [857.rar]        lufly        批处理星系大战.rar        69.3KB        2008/10/06(Mon)05:34         批处理星系大战.rar
D        [856.jpg]        xiaoyunwang        终结者一键网克        66.6KB        2008/10/06(Mon)05:14         Snap9.jpg
D        [855.jpg]        xiaoyunwang        终结者一键网克        61.2KB        2008/10/06(Mon)05:13         Snap8.jpg
D        [854.jpg]        xiaoyunwang        终结者一键网克        63.6KB        2008/10/06(Mon)05:13         Snap7.jpg
D        [853.jpg]        xiaoyunwang        终结者一键网克        62.8KB        2008/10/06(Mon)05:12         Snap6.jpg
D        [852.jpg]        xiaoyunwang        终结者一键网克        58.4KB        2008/10/06(Mon)05:12         Snap5.jpg
D        [851.jpg]        xiaoyunwang        终结者一键网克        62.6KB        2008/10/06(Mon)05:12         Snap4.jpg
D        [850.jpg]        xiaoyunwang        终结者一键网克        71.0KB        2008/10/06(Mon)05:12         Snap3.jpg
D        [849.jpg]        xiaoyunwang        终结者一键网克        55.7KB        2008/10/06(Mon)05:11         Snap2.jpg
D        [848.jpg]        xiaoyunwang        终结者一键网克        58.4KB        2008/10/06(Mon)05:11         Snap1.jpg
D        [847.png]        fujianabc        pc-dos 1.00        2.3KB        2008/10/05(Sun)19:48         dos100_2.png
D        [846.png]        fujianabc        pc-dos 1.00启动        1.7KB        2008/10/05(Sun)19:47         dos100_1.png
D        [845.7z]        腾云追月        注册表文件        23.3KB        2008/10/05(Sun)08:45         wmp.7z
D        [844.rar]        driver1998        CLIENT        1.0MB        2008/10/04(Sat)19:41         DISKS.rar
D        [843.rar]        tireless        ShowVer.exe command-line VERSIONINFO display program        28.7KB        2008/10/04(Sat)06:36         ShowVer.rar
D        [842.jpg]        yptd        文件属性        27.4KB        2008/10/04(Sat)06:01         ss.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------61
61
刪        檔名        用戶        備註        大小        日期        原檔名
D        [882.jpg]        xiaoyunwang        软件汉化        71.0KB        2008/10/09(Thu)19:53         e2c.jpg
D        [881.jpg]        xiaoyunwang        软件汉化        31.1KB        2008/10/09(Thu)19:36         cup.jpg
D        [880.jpg]        xiaoyunwang        软件汉化        32.4KB        2008/10/09(Thu)19:27         upxerr.jpg
D        [879.jpg]        xiaoyunwang        软件汉化        16.1KB        2008/10/09(Thu)19:00         erdll.jpg
D        [878.rar]        xiaoyunwang        软件汉化        99.6KB        2008/10/09(Thu)18:57         RAR2.50注册版.rar
D        [876.zip]        goeasy2005        dosntfsc        1.3MB        2008/10/09(Thu)03:14         DOSNTFSC.zip
D        [875.zip]        HAT        CN-DOS        36.3KB        2008/10/08(Wed)12:48         CN-DOS.zip
D        [874.jpg]        HAT        3        108.6KB        2008/10/08(Wed)12:46         3.JPG
D        [873.jpg]        HAT        2        142.6KB        2008/10/08(Wed)12:46         2.JPG
D        [872.jpg]        HAT        1        111.1KB        2008/10/08(Wed)12:46         1.JPG
D        [871.jpg]        HAT        3        113.7KB        2008/10/08(Wed)11:41         3.JPG
D        [870.jpg]        HAT        2        137.8KB        2008/10/08(Wed)11:40         2.JPG
D        [869.jpg]        HAT        1        111.8KB        2008/10/08(Wed)11:40         1.JPG
D        [868.zip]        HAT        reg.exe        18.0KB        2008/10/08(Wed)05:43         reg.zip
D        [867.zip]        HAT        reg.exe        20.3KB        2008/10/08(Wed)05:42         reg.zip
D        [866.jpg]        HAT        screenshot        6.2KB        2008/10/08(Wed)04:49         screenshot.jpg
D        [865.png]        tireless        win+pause        5.9KB        2008/10/08(Wed)04:13         screenshot1.png
D        [864.zip]        falylee        dos下usb驱动(faly)        35.7KB        2008/10/07(Tue)06:48         DOS-USB-Faly.zip
D        [863.rar]        liuxing671        封装批处理        96.3KB        2008/10/06(Mon)23:06         封装批处理.rar
D        [862.rar]        donesong        DOS下启动USB        33.7KB        2008/10/06(Mon)10:29         USB.rar
----------------------------------------------------------------------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2016-2-13 at 16:22 ]
作者: zzz19760225     时间: 2016-2-13 14:56
---------------------------------------------------------------------------------------------------------------------------------------------------60
60
刪        檔名        用戶        備註        大小        日期        原檔名
D        [902.png]        tireless        命令提示符 启用选取色彩效果        1.6KB        2008/10/10(Fri)04:09         EnableColorSelection.png
D        [901.rar]        xiaoyunwang        软件汉化        86.7KB        2008/10/10(Fri)04:08         RAR.rar
D        [900.jpg]        xiaoyunwang        软件汉化        26.9KB        2008/10/10(Fri)04:02         e2c.jpg
D        [899.jpg]        xiaoyunwang        软件汉化        11.6KB        2008/10/10(Fri)03:32         e2c.jpg
D        [898.jpg]        xiaoyunwang        软件汉化        61.5KB        2008/10/10(Fri)03:18         e2c.jpg
D        [897.jpg]        xiaoyunwang        软件汉化        139.1KB        2008/10/10(Fri)03:05         e2c.jpg
D        [896.jpg]        xiaoyunwang        软件汉化        61.3KB        2008/10/10(Fri)02:33         e2c.jpg
D        [895.rar]        xiaoyunwang        软件汉化        7.3KB        2008/10/10(Fri)02:26         rar.rar
D        [894.jpg]        xiaoyunwang        软件汉化        72.7KB        2008/10/10(Fri)02:21         e2c.jpg
D        [893.rar]        ycmaji        DOS版立体象棋        943.5KB        2008/10/09(Thu)23:15         立体象棋.rar
D        [892.rar]        ycmaji        kv300        245.2KB        2008/10/09(Thu)22:43         KV300.RAR
D        [891.jpg]        xiaoyunwang        软件汉化        72.2KB        2008/10/09(Thu)22:42         e2c.jpg
D        [890.jpg]        xiaoyunwang        软件汉化        52.8KB        2008/10/09(Thu)22:27         e2c.jpg
D        [889.rar]        ycmaji        CCED3.3        226.6KB        2008/10/09(Thu)22:23         CCED33.rar
D        [888.rar]        ycmaji        CCED3.0        201.9KB        2008/10/09(Thu)22:22         CCED30.rar
D        [887.lzh]        ycmaji        CCED2.0        100.3KB        2008/10/09(Thu)22:22         CCED20.LZH
D        [886.jpg]        xiaoyunwang        软件汉化        64.2KB        2008/10/09(Thu)22:17         e2c.jpg
D        [885.jpg]        xiaoyunwang        软件汉化        65.8KB        2008/10/09(Thu)21:07         e2c.jpg
D        [884.jpg]        xiaoyunwang        软件汉化        66.7KB        2008/10/09(Thu)20:49         1.JPG
D        [883.jpg]        xiaoyunwang        软件汉化        68.1KB        2008/10/09(Thu)19:55         e2c.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------59
59
刪        檔名        用戶        備註        大小        日期        原檔名
D        [922.zip]        HAT        RenamePlus.exe        39.2KB        2008/10/12(Sun)09:10         RenamePlus.zip
D        [921.zip]        HAT        math.exe        32.4KB        2008/10/12(Sun)07:41         math2.34.zip
D        [920.zip]        HAT        MakeCAB.exe        77.6KB        2008/10/12(Sun)07:15         MakeCAB.zip
D        [919.zip]        winson4829        AC97 DOS .WAV/.MP3 Player        215.2KB        2008/10/11(Sat)23:45         WSPlayer.zip
D        [918.rar]        19951001        to gmy 的补丁程序        10.3KB        2008/10/11(Sat)16:41         To_GMY.rar
D        [917.zip]        yq7654        vfdwin V2.1 沙尘暴汉化版        140.4KB        2008/10/11(Sat)06:26         vfdwin V2.1 沙尘暴汉化版.zip
D        [916.rar]        wxcute        贪吃蛇        18.1KB        2008/10/11(Sat)05:30         贪吃蛇.rar
D        [915.rar]        xiaoyunwang        DM957中文版        967.6KB        2008/10/11(Sat)04:01         DM957.rar
D        [914.jpg]        xiaoyunwang        DM957中文版        125.9KB        2008/10/11(Sat)04:00         Snap1.jpg
D        [913.rar]        tireless        minibrowser        296.3KB        2008/10/10(Fri)20:16         minibrowser.rar
D        [912.png]        tireless        minibrowser        4.3KB        2008/10/10(Fri)20:15         minibrowser.png
D        [911.jpg]        源代码终端图片        转给hackate用户        29.2KB        2008/10/10(Fri)18:26         未命名是.JPG
D        [910.zip]        HAT        ListDLLs.exe        45.6KB        2008/10/10(Fri)16:54         ListDLLs.zip
D        [909.zip]        HAT        curl.exe        167.1KB        2008/10/10(Fri)16:38         curl.zip
D        [908.zip]        HAT        mtee.exe        5.1KB        2008/10/10(Fri)15:47         mtee.zip
D        [907.zip]        HAT        shortcut.exe        20.5KB        2008/10/10(Fri)15:00         shortcut.zip
D        [906.rar]        llfllfllf        pcdos11系统文件        87.0KB        2008/10/10(Fri)06:52         IBMdos11.rar
D        [905.rar]        DD        DD        273.9KB        2008/10/10(Fri)04:54         新建文件夹.rar
D        [904.png]        tireless        Tweak UI        11.6KB        2008/10/10(Fri)04:20         Tweak UI.png
D        [903.rar]        xiaoyunwang        软件汉化        120.9KB        2008/10/10(Fri)04:15         zk.rar
----------------------------------------------------------------------------------------------------------------------------------------------------58
58
刪        檔名        用戶        備註        大小        日期        原檔名
D        [942.rar]        516526966        批处理工具包个人版 V3.80        534.2KB        2008/10/16(Thu)00:16         批处理工具包个人版 V3.80.rar
D        [941.jpg]        516526966        批处理图解        203.8KB        2008/10/16(Thu)00:03         2008-10-15_150004.jpg
D        [940.jpg]        xiaoyunwang        Grub 启动问题        42.1KB        2008/10/15(Wed)21:11         Snap1.jpg
D        [939.rar]        goeasy2005        支持ntfs和ntfs分区中的中文长文件名启动盘        1.2MB        2008/10/15(Wed)17:49         dosntfsc.rar
D        [938.rar]        连森        报告另一个时空讯息种子        66.5KB        2008/10/15(Wed)02:10         报告另一个时空讯息.rar
D        [937.zip]        HAT        sed.exe        114.2KB        2008/10/14(Tue)19:46         sed_4.1.4.zip
D        [936.jpg]        leon0918        插上是这个样子        4.2KB        2008/10/14(Tue)09:52         111.jpg
D        [935.png]        tireless        TreeSize        14.4KB        2008/10/14(Tue)04:12         TreeSize-Free.png
D        [934.zip]        HAT        exe2bat.exe        14.6KB        2008/10/13(Mon)23:42         exe2bat.zip
D        [933.jpg]        huahua0919                10.1KB        2008/10/13(Mon)23:25         R46482BAQ20IO7LF80{7MIO.jpg
D        [932.jpg]        HAT        1        47.6KB        2008/10/13(Mon)18:44         1.jpg
D        [931.rar]        caozhoubei        pdg阅读器        590.9KB        2008/10/13(Mon)03:55         BooX Viewer.rar
D        [930.rar]        tireless        x.exe (和 926.zip 一样的文件,只是修改了文件的图标)        196.9KB        2008/10/13(Mon)01:44         x.rar
D        [929.rar]        whlengbo        lynx上网浏览器        755.9KB        2008/10/13(Mon)00:52         lynx.rar
D        [928.zip]        HAT        base64.exe        15.0KB        2008/10/12(Sun)23:24         Base64.zip
D        [927.zip]        HAT        xxcopy.exe        123.9KB        2008/10/12(Sun)10:09         xxcopy.zip
D        [926.zip]        HAT        x.exe        196.7KB        2008/10/12(Sun)10:03         x.zip
D        [925.zip]        HAT        tee.exe        17.6KB        2008/10/12(Sun)09:55         tee.zip
D        [924.zip]        HAT        strings.exe        39.8KB        2008/10/12(Sun)09:44         strings.zip
D        [923.zip]        HAT        SetACL.exe        113.8KB        2008/10/12(Sun)09:24         SetACL.zip
----------------------------------------------------------------------------------------------------------------------------------------------------57
57
刪        檔名        用戶        備註        大小        日期        原檔名
D        [964.rar]        ko20010214        UIDE和XMGR驱动及说明文档        18.1KB        2008/10/20(Mon)02:46         UIDE.rar
D        [962.rar]        youkaib        kaba8.0        508.9KB        2008/10/20(Mon)02:07         KEY080907.rar
D        [961.rar]        youkaib        kaba8.0        508.9KB        2008/10/20(Mon)02:07         KEY080907.rar
D        [960.rar]        youkaib        x.bat        1.2KB        2008/10/20(Mon)02:02         打包.rar
D        [959.jpg]        terlutor        456.jpg        11.9KB        2008/10/19(Sun)13:04         456.JPG
D        [958.jpg]        terlutor        123.jpg        12.5KB        2008/10/19(Sun)12:31         123.JPG
D        [957.jpg]        1073        VC++目录        20.5KB        2008/10/19(Sun)03:18         未命名.jpg
D        [956.rar]        s11ss        屏蔽alt键的程序        7.4KB        2008/10/18(Sat)07:36         Alt.rar
D        [955.rar]        chengshu1989        将bat格式转为exe和com        918.0KB        2008/10/18(Sat)05:50         quickBFC(bat转exe工具绿色版) 2.1.5.0.rar
D        [953.rar]        a794685135        一个加密的BAT        8.8KB        2008/10/17(Fri)07:52         MSDOS.rar
D        [952.rar]        whlengbo        虚拟一个“真实”的A盘        116.1KB        2008/10/17(Fri)07:24         virtual floppy drive.rar
D        [951.rar]        weiyepin        经典批处理合集        134.3KB        2008/10/17(Fri)03:48         痞子系统V1.1.rar
D        [950.rar]        sssdfghj        我的        927.2KB        2008/10/16(Thu)20:15         通過微軟XP的WGA驗證工具最新版.rar
D        [949.rar]        songlei0719        破解xp正版验证        753.1KB        2008/10/16(Thu)08:39         windows-xp正版验证.rar
D        [948.png]        HAT        1        19.0KB        2008/10/16(Thu)05:57         1.PNG
D        [947.zip]        HAT        exe2bat        14.6KB        2008/10/16(Thu)04:58         exe2bat.zip
D        [946.zip]        HAT        bat2com.exe        5.4KB        2008/10/16(Thu)04:53         bat2com.zip
D        [945.rar]        ZJHJ        批处理工具包个人版 V3.80.ExE        469.7KB        2008/10/16(Thu)04:48         源码.rar
D        [944.rar]        MBRWORK        mbrwork        15.1KB        2008/10/16(Thu)02:26         MBRWORK.rar
D        [943.jpg]        516526966        窗口与字体的区别        31.5KB        2008/10/16(Thu)00:24         2008-10-15_152051.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------56
56
刪        檔名        用戶        備註        大小        日期        原檔名
D        [984.txt]        hgx126        截止字符串的问题        935B        2008/10/20(Mon)23:40         hu.txt
D        [983.rar]        xiaoyunwang        虚拟启动        1.3MB        2008/10/20(Mon)10:00         QBOOT.rar
D        [982.jpg]        xiaoyunwang        虚拟启动        30.4KB        2008/10/20(Mon)09:58         Snap17.jpg
D        [981.jpg]        xiaoyunwang        虚拟启动        36.2KB        2008/10/20(Mon)09:58         Snap16.jpg
D        [980.jpg]        xiaoyunwang        虚拟启动        17.0KB        2008/10/20(Mon)09:58         Snap15.jpg
D        [979.jpg]        xiaoyunwang        虚拟启动        26.4KB        2008/10/20(Mon)09:58         Snap14.jpg
D        [978.jpg]        xiaoyunwang        虚拟启动        29.5KB        2008/10/20(Mon)09:57         Snap13.jpg
D        [977.jpg]        xiaoyunwang        虚拟启动        40.3KB        2008/10/20(Mon)09:57         Snap12.jpg
D        [976.jpg]        xiaoyunwang        虚拟启动        31.5KB        2008/10/20(Mon)09:57         Snap11.jpg
D        [975.jpg]        xiaoyunwang        虚拟启动        40.0KB        2008/10/20(Mon)09:57         Snap10.jpg
D        [974.jpg]        xiaoyunwang        虚拟启动        34.9KB        2008/10/20(Mon)09:56         Snap9.jpg
D        [973.jpg]        xiaoyunwang        虚拟启动        41.4KB        2008/10/20(Mon)09:56         Snap8.jpg
D        [972.jpg]        xiaoyunwang        虚拟启动        33.2KB        2008/10/20(Mon)09:56         Snap6.jpg
D        [971.jpg]        xiaoyunwang        虚拟启动        32.9KB        2008/10/20(Mon)09:56         Snap5.jpg
D        [970.jpg]        xiaoyunwang        虚拟启动        22.9KB        2008/10/20(Mon)09:55         Snap4.jpg
D        [969.jpg]        xiaoyunwang        虚拟启动        36.7KB        2008/10/20(Mon)09:55         Snap3.jpg
D        [968.jpg]        xiaoyunwang        虚拟启动        42.7KB        2008/10/20(Mon)09:55         Snap2.jpg
D        [967.jpg]        xiaoyunwang        虚拟启动        28.5KB        2008/10/20(Mon)08:53         Snap1.jpg
D        [966.rar]        xiaoyunwang        PM server 中文        1.5MB        2008/10/20(Mon)08:48         PQMAGIC.rar
D        [965.jpg]        xiaoyunwang        PM server 中文        72.3KB        2008/10/20(Mon)08:46         pq.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------55
55
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1009.jpg]        xiaoyunwang        终结者DOS工具箱        85.2KB        2008/10/28(Tue)01:05         Snap1.jpg
D        [1008.zip]        HAT        Quick Batch File Compiler.exe(3.1.5)        666.3KB        2008/10/28(Tue)00:15         Quick Batch File Compiler 3.1.5.zip
D        [1007.zip]        HAT        CheckISO.exe        2.3KB        2008/10/27(Mon)23:45         CheckISO.zip
D        [1006.jpg]        xiaoyunwang        GRUB启动        4.0KB        2008/10/27(Mon)11:50         Snap1.jpg
D        [1004.rar]        youkaib        df        24.2KB        2008/10/26(Sun)01:41         d.rar
D        [1003.rar]        tireless        AkelPad_Hotkey plugin_add Exec script        321B        2008/10/26(Sun)00:45         AkelPad_Hotkey plugin_add Exec script.reg.rar
D        [1002.png]        tireless        AkelPad_ContextMenu Plugin_CopyLink.png        1.3KB        2008/10/25(Sat)23:45         AkelPad_ContextMenu Plugin_CopyLink.png
D        [1001.png]        tireless        AkelPad_Hotkey plugin_2.png        3.1KB        2008/10/25(Sat)23:44         AkelPad_Hotkey plugin_2.png
D        [1000.png]        tireless        AkelPad_Hotkey plugin_1.png        3.3KB        2008/10/25(Sat)23:44         AkelPad_Hotkey plugin_1.png
D        [999.png]        tireless        AkelPad.png        5.8KB        2008/10/25(Sat)23:44         AkelPad.png
D        [998.7z]        yq7654        DOS下解压WIM文件        1.0MB        2008/10/25(Sat)18:40         DOS下解压WIM文件.7z
D        [997.png]        tireless        太粗的字体.png        2.3KB        2008/10/23(Thu)05:36         太粗的字体.png
D        [996.png]        tireless        太粗的字体.png        2.3KB        2008/10/23(Thu)05:25         太粗的字体.png
D        [991.jpg]        xiaoyunwang        GRUB启动        47.5KB        2008/10/23(Thu)00:54         Snap1.jpg
D        [990.jpg]        qwertl        什么病毒进程        61.8KB        2008/10/22(Wed)18:59         pro.JPG
D        [989.rar]        tireless        pathman 修改环境变量        3.0KB        2008/10/22(Wed)18:33         pathman.rar
D        [988.png]        tireless        路飞        7.5KB        2008/10/22(Wed)08:38         路飞.png
D        [987.bmp]        hlnliyou        config        1.6MB        2008/10/22(Wed)01:33         未命名2.bmp
D        [986.bmp]        hlnliyou        autoexec.bat        1.6MB        2008/10/22(Wed)01:32         未命名1.bmp
D        [985.jpg]        terlutor        333.jpg        35.6KB        2008/10/21(Tue)07:35         333.JPG
----------------------------------------------------------------------------------------------------------------------------------------------------54
54
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1029.rar]        tireless        Adds a command to the Windows &quot;shortcut menu&quot; (right mouse button) for a particular file extension or type        25.0KB        2008/10/31(Fri)03:39         associate.rar
D        [1028.rar]        xiao080808        神宙星        290.3KB        2008/10/30(Thu)23:41         szx.rar
D        [1027.bmp]        newsuper        ntsd结束进程测试画面        858.9KB        2008/10/30(Thu)04:20         test1.bmp
D        [1026.zip]        mistysun        在网上搜到的change.exe。用来进行文件内容的替换        92.0KB        2008/10/29(Wed)22:33         CHAN0208.ZIP
D        [1025.jpg]        chishingchan        7        38.6KB        2008/10/29(Wed)09:03         sshot-3.jpg
D        [1024.jpg]        chishingchan        6        40.2KB        2008/10/29(Wed)09:02         sshot-2.jpg
D        [1023.jpg]        chishingchan        5        49.3KB        2008/10/29(Wed)09:02         sshot-1.jpg
D        [1022.rar]        tireless        clip22 by Dave Navarro, Jr.        13.1KB        2008/10/29(Wed)08:09         clip22 by Dave Navarro, Jr..rar
D        [1021.rar]        wsfyoo8        点阵字体        133.5KB        2008/10/29(Wed)00:30         chs16.rar
D        [1020.rar]        rzkmssj        看了好多批处理,自己整合一个!        24.1KB        2008/10/28(Tue)21:59         系统优化增强版.rar
D        [1019.jpg]        chishingchan        4        28.4KB        2008/10/28(Tue)19:02         sshot-4.jpg
D        [1018.jpg]        chishingchan        3        30.0KB        2008/10/28(Tue)19:02         sshot-3.jpg
D        [1017.jpg]        chishingchan        2        41.2KB        2008/10/28(Tue)19:02         sshot-2.jpg
D        [1016.jpg]        chishingchan        1        28.2KB        2008/10/28(Tue)19:01         sshot-1.jpg
D        [1015.rar]        tireless        getlnk.exe 读取 lnk 文件的目标和参数        15.4KB        2008/10/28(Tue)14:14         getlnk.rar
D        [1014.rar]        tireless        exelist.exe - 显示可执行文件的文件信息        4.9KB        2008/10/28(Tue)14:09         exelist.rar
D        [1013.jpg]        HAT        screenshot.jpg        74.1KB        2008/10/28(Tue)08:07         screenshot.jpg
D        [1012.jpg]        xiaoyunwang        终结者DOS工具箱        34.5KB        2008/10/28(Tue)01:05         Snap4.jpg
D        [1011.jpg]        xiaoyunwang        终结者DOS工具箱        43.7KB        2008/10/28(Tue)01:05         Snap3.jpg
D        [1010.jpg]        xiaoyunwang        终结者DOS工具箱        33.8KB        2008/10/28(Tue)01:05         Snap2.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------53
53
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1050.jpg]        lzmyst        打印命令        26.1KB        2008/11/04(Tue)06:15         未命名.jpg
D        [1049.rar]        rose4cat        我的网克服务端文件        3.8KB        2008/11/04(Tue)05:10         bodos.rar
D        [1048.rar]        victor888        调整盘符错乱批处理        1.5KB        2008/11/03(Mon)19:50         orderdrv4.rar
D        [1047.rar]        hulinnet        互联网专有名词缩略语汇编        1.7KB        2008/11/03(Mon)05:25         互联网专有名词缩略语汇编.rar
D        [1046.zip]        flysky        dos游戏        579.8KB        2008/11/03(Mon)05:14         skyroads.zip
D        [1045.rar]        hobddg        123        336.0KB        2008/11/02(Sun)23:41         msdos7.1(精简版)(2).rar
D        [1044.rar]        dudubird        GHOST硬盘快速分区V1.1硬盘版        1.7MB        2008/11/02(Sun)09:49         GHOST硬盘快速分区 V1.1 (硬盘版).rar
D        [1043.jpg]        dudubird        GHOST硬盘快速分区V1.1_7        37.3KB        2008/11/02(Sun)09:37         预览7.JPG
D        [1042.jpg]        dudubird        GHOST硬盘快速分区V1.1_6        36.4KB        2008/11/02(Sun)09:37         预览6.JPG
D        [1041.jpg]        dudubird        GHOST硬盘快速分区V1.1_5        59.8KB        2008/11/02(Sun)09:37         预览5.JPG
D        [1040.jpg]        dudubird        GHOST硬盘快速分区V1.1_4        38.4KB        2008/11/02(Sun)09:36         预览4.JPG
D        [1039.jpg]        dudubird        GHOST硬盘快速分区V1.1_3        44.4KB        2008/11/02(Sun)09:36         预览3.JPG
D        [1038.jpg]        dudubird        GHOST硬盘快速分区V1.1_2        35.6KB        2008/11/02(Sun)09:36         预览2.JPG
D        [1037.jpg]        dudubird        GHOST硬盘快速分区V1.1_1        34.4KB        2008/11/02(Sun)09:35         预览.JPG
D        [1035.jpg]        xiaoyunwang        网络        15.9KB        2008/10/31(Fri)20:09         Snap1.jpg
D        [1034.rar]        qinchun36        BAT加密器VBS版        717B        2008/10/31(Fri)12:26         BAT加密器.rar
D        [1033.jpg]        xiaoyunwang        grub        58.4KB        2008/10/31(Fri)07:50         Snap1.jpg
D        [1032.zip]        HAT        System Administration Scripting Guide.chm        200.4KB        2008/10/31(Fri)04:54         System Administration Scripting Guide.zip
D        [1031.rar]        tireless        PngOptimizer:png体积优化        53.9KB        2008/10/31(Fri)04:23         PngOptimizerCL.rar
D        [1030.rar]        tireless        tickcount.exe:显示系统已运行时间 (4k)        1.5KB        2008/10/31(Fri)04:08         tickcount.rar
----------------------------------------------------------------------------------------------------------------------------------------------------52
52
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1072.zip]        Climbing        Disk Dupe 3.22 for DOS, Open .DDI files        82.5KB        2008/11/12(Wed)09:09         ddupe322.zip
D        [1071.rar]        tireless        ThumbsExtract.exe:提取 Thumbs.db 中的缩略图        12.7KB        2008/11/11(Tue)22:31         ThumbsExtract.rar
D        [1069.gif]        huanbei        tasklist 问题        11.9KB        2008/11/11(Tue)18:36         Snap2.gif
D        [1068.gif]        huanbei        tasklist 问题        6.1KB        2008/11/11(Tue)18:36         Snap1.gif
D        [1066.zip]        HAT        中国杀毒社区VBS教程.zip        394.6KB        2008/11/10(Mon)00:38         中国杀毒社区VBS教程.zip
D        [1065.zip]        HAT        The Portable Script Center Version 3.0.zip        1.5MB        2008/11/10(Mon)00:38         The Portable Script Center Version 3.0.zip
D        [1064.rar]        tireless        播放 .wav 文件        760B        2008/11/09(Sun)19:22         PlayWav.rar
D        [1063.rar]        zjw1111        qq强制聊天工具        521B        2008/11/08(Sat)20:30         qq强制聊天工具.rar
D        [1062.jpg]        379184514        畸形目录cmd下截图        2.3KB        2008/11/07(Fri)19:59         saf.jpg
D        [1061.jpg]        379184514        畸形目录截图        2.0KB        2008/11/07(Fri)19:58         af.jpg
D        [1060.gif]        huanbei        批处理日历        2.8KB        2008/11/07(Fri)06:32         Snap1.gif
D        [1059.rar]        zwxjrr        截图        872.9KB        2008/11/06(Thu)19:05         Snap Iogo gui run.rar
D        [1058.rar]        zwxjrr        截图        872.9KB        2008/11/06(Thu)19:02         Snap Iogo gui run.rar
D        [1057.rar]        wwwb0        批处理转EXE,EXE转批处理        899.1KB        2008/11/06(Thu)08:25         批处理潜行者V6.0.rar
D        [1056.rar]        marce76        USBASPI.SYS 2.24        119.3KB        2008/11/06(Thu)08:22         F2h.rar
D        [1055.zip]        YISHANJU        Comandiux:功能繁多且强大的命令行工具(cax),包含所有常用外部工具功能.版本1.7.26.210        73.5KB        2008/11/06(Thu)07:31         Cax.zip
D        [1054.jpg]        qintaiying        图片        22.1KB        2008/11/06(Thu)06:28         e301461937ad626bdbb4bd7c.jpg
D        [1053.rar]        icesword28        东拼西凑批处理工具箱        12.0KB        2008/11/05(Wed)23:33         东拼西凑批处理工具箱.rar
D        [1052.jpg]        HAT        screenshot.jpg        70.2KB        2008/11/05(Wed)05:43         screenshot.jpg
D        [1051.zip]        HAT        wfr.exe        84.2KB        2008/11/05(Wed)02:18         wfr_2.3.1.zip
----------------------------------------------------------------------------------------------------------------------------------------------------51
51
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1093.png]        HAT        2        401.2KB        2008/11/17(Mon)22:41         2.png
D        [1092.png]        HAT        1        143.7KB        2008/11/17(Mon)22:39         1.png
D        [1091.jpg]        wwwyangxm        上传预图        74.8KB        2008/11/17(Mon)20:49         test.JPG
D        [1090.jpg]        wwwyangxm        上传的结果文件        15.2KB        2008/11/17(Mon)20:31         22.jpg
D        [1089.jpg]        wwwyangxm        上传的结果文件        17.3KB        2008/11/17(Mon)20:30         11.jpg
D        [1088.rar]        sdygzhang        logo_1.exe预防        1.7KB        2008/11/17(Mon)19:40         Logo1_kill.rar
D        [1087.rar]        think        DOS 万能光驱驱动        8.7KB        2008/11/17(Mon)18:04         Tricd.rar
D        [1086.rar]        FreeSir        dos7.1的图形界面        174.5KB        2008/11/17(Mon)04:41         dosshell.rar
D        [1085.rar]        flower00016        silveregg的xcp1.63        7.8KB        2008/11/16(Sun)01:40         xcp1.63.rar
D        [1084.rar]        youkaib        的        116.4KB        2008/11/15(Sat)10:27         v.rar
D        [1083.zip]        HAT        批处理室经典帖子合集初步整理结果2008A        12.9KB        2008/11/15(Sat)09:10         批处理室经典帖子合集初步整理结果2008A.zip
D        [1081.png]        tireless        File2Icon.bat 制作软件的文件夹图标        3.7KB        2008/11/14(Fri)07:07         File2Icon.png
D        [1080.png]        tireless        Opera2.png        3.6KB        2008/11/14(Fri)07:00         Folder2.png
D        [1079.png]        tireless        File2Icon.bat 制作软件的文件夹图标        3.7KB        2008/11/14(Fri)06:45         File2Icon.png
D        [1078.zip]        tar gzip        tar gzip 程序        74.7KB        2008/11/14(Fri)00:39         u.zip
D        [1077.jpg]        172108810        我tracert 122.200.104.2出现以下况        81.4KB        2008/11/13(Thu)19:56         a.jpg
D        [1076.rar]        guaguacard        bat to com文件还原        74.5KB        2008/11/13(Thu)15:17         a.rar
D        [1075.txt]        wanzheng520        DOS常用命令        24.0KB        2008/11/13(Thu)06:17         常用命令.txt
D        [1074.rar]        gpfengineer        在我电脑上面无法使用        263.3KB        2008/11/13(Thu)02:18         DISKDUPE.rar
D        [1073.rar]        wsl1985        rar        976.6KB        2008/11/12(Wed)22:27         两个文件.part1.rar
----------------------------------------------------------------------------------------------------------------------------------------------------50
50
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1113.jpg]        snrt2008        BIN144MI        31.3KB        2008/11/21(Fri)01:51         1M.jpg
D        [1112.jpg]        snrt2008        IMG144MI        32.1KB        2008/11/21(Fri)01:50         IMG1M.JPG
D        [1111.jpg]        xiaoyunwang        pc3000        52.3KB        2008/11/20(Thu)21:09         pc3000.jpg
D        [1110.jpg]        jethroso        proxy视图        50.1KB        2008/11/20(Thu)20:59         QQ_proxy.jpg
D        [1109.rar]        wmt333        一个字符串工具        25.1KB        2008/11/20(Thu)07:17         SETINFO.rar
D        [1108.rar]        wmt333        字符串工具        25.1KB        2008/11/20(Thu)07:03         SETINFO.rar
D        [1107.jpg]        sany217        jpg        2.6KB        2008/11/19(Wed)07:50         QQ截图未命名.jpg
D        [1106.zip]        tireless        chgcase.exe 改变文件的大小写        17.3KB        2008/11/19(Wed)01:20         chgcase-0.5.zip
D        [1105.png]        tireless        dhfile.exe.png        6.8KB        2008/11/18(Tue)19:05         dhfile.exe.png
D        [1104.rar]        alias        3        1.4MB        2008/11/18(Tue)06:47         BSE-IN-NX_110806.part3.rar
D        [1103.rar]        alias        2        1.4MB        2008/11/18(Tue)06:46         BSE-IN-NX_110806.part2.rar
D        [1102.rar]        alias        xiw        1.4MB        2008/11/18(Tue)06:43         BSE-IN-NX_110806.part1.rar
D        [1101.rar]        alias        xiexie        579.5KB        2008/11/18(Tue)06:41         BSE-IN-NX_110806.part4.rar
D        [1100.png]        tireless        7_small.png        47.2KB        2008/11/17(Mon)23:54         7_small.png
D        [1099.rar]        xiaoyunwang        分区数据密码恢复        896.0KB        2008/11/17(Mon)23:29         active.rar
D        [1098.png]        HAT        7        282.9KB        2008/11/17(Mon)22:50         7.png
D        [1097.png]        HAT        6        233.9KB        2008/11/17(Mon)22:49         6.png
D        [1096.png]        HAT        5        293.7KB        2008/11/17(Mon)22:44         5.png
D        [1095.png]        HAT        4        252.3KB        2008/11/17(Mon)22:43         4.png
D        [1094.jpg]        HAT        3        90.6KB        2008/11/17(Mon)22:42         3.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------49
49
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1133.bmp]        beyuetao        图4        406.9KB        2008/11/25(Tue)17:53         4.bmp
D        [1132.bmp]        beyuetao        图3        541.2KB        2008/11/25(Tue)17:52         3.bmp
D        [1131.bmp]        beyuetao        图2        109.3KB        2008/11/25(Tue)17:51         2.bmp
D        [1130.bmp]        beyuetao        DIR显示        811.9KB        2008/11/25(Tue)17:51         1.bmp
D        [1129.rar]        sxsxx        用DEBUG把 WGet.exe 程序输出        401.3KB        2008/11/24(Mon)20:18         wget.rar
D        [1128.txt]        dongbaoyuan        debug详解        25.2KB        2008/11/24(Mon)18:17         debug.txt
D        [1127.rar]        wanxibing        windows xp下倒计时的选择.rar        16.9KB        2008/11/24(Mon)10:00         windows xp下倒计时的选择.rar
D        [1126.jpg]        xiaoyunwang        bcdw        48.6KB        2008/11/24(Mon)02:02         Snap1.jpg
D        [1125.rar]        xiaoyunwang        bcdw引导.gz        637.1KB        2008/11/23(Sun)23:28         BCDW引导IMG镜像.rar
D        [1124.zip]        HAT        Windows Script Encoder 1.0        27.7KB        2008/11/23(Sun)11:48         screnc.zip
D        [1123.zip]        HAT        decovbe.vbs        1.6KB        2008/11/23(Sun)11:27         decovbe.zip
D        [1122.rar]        tireless        包含在 HTML Help Workshop 中的工具        20.8KB        2008/11/23(Sun)06:40         hhc.rar
D        [1121.rar]        hjkk123        批处理工具包个人版 V3.80        534.2KB        2008/11/22(Sat)18:08         gjb.rar
D        [1120.zip]        HAT        NConvert.exe(5.02)        724.5KB        2008/11/22(Sat)12:04         nconvert.zip
D        [1119.rar]        sanchuan        Config中文菜单驱动Confect.sys        2.2KB        2008/11/22(Sat)05:55         CONFECT.rar
D        [1118.rar]        VBS        需要解密的VBS        2.1KB        2008/11/22(Sat)00:14         a.rar
D        [1117.rar]        xiaoyunwang        72MB可引导镜像        102.7KB        2008/11/21(Fri)22:54         72mbgrldr.rar
D        [1116.rar]        xiaoyunwang        72MB可引导镜像        111.3KB        2008/11/21(Fri)22:53         72mbdos.rar
D        [1115.rar]        sanchuan        Config中文菜单驱动Confect.sys        2.2KB        2008/11/21(Fri)22:31         CONFECT.rar
D        [1114.png]        tireless        LinkChanger.png        11.2KB        2008/11/21(Fri)21:39         LinkChanger.png
----------------------------------------------------------------------------------------------------------------------------------------------------48
48
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1156.jpg]        xiaoyunwang        终结者软体光盘        80.6KB        2008/12/04(Thu)12:11         Snap7.jpg
D        [1155.jpg]        xiaoyunwang        终结者软体光盘        106.7KB        2008/12/04(Thu)12:10         Snap6.jpg
D        [1154.jpg]        xiaoyunwang        终结者软体光盘        102.5KB        2008/12/04(Thu)12:08         Snap4.jpg
D        [1153.jpg]        xiaoyunwang        终结者软体光盘        100.9KB        2008/12/04(Thu)12:07         Snap3.jpg
D        [1152.jpg]        xiaoyunwang        终结者软体光盘        22.0KB        2008/12/04(Thu)12:06         Snap2.jpg
D        [1151.jpg]        xiaoyunwang        终结者软体光盘        83.0KB        2008/12/04(Thu)12:04         Snap1.jpg
D        [1150.jpg]        qwertl        sql client        38.3KB        2008/12/03(Wed)00:08         sql client.JPG
D        [1148.zip]        HAT        批处理室经典帖子合集初步整理结果2008A.zip        12.9KB        2008/12/02(Tue)18:27         批处理室经典帖子合集初步整理结果2008A.zip
D        [1145.rar]        23        23        86.9KB        2008/12/02(Tue)07:57         test.rar
D        [1144.bmp]        luxipeng        set的例子        302.2KB        2008/12/02(Tue)06:00         set.bmp
D        [1143.zip]        byby        sata光驱驱动        99.4KB        2008/12/01(Mon)06:06         gcdrom24.zip
D        [1142.jpg]        fishingcat        补充图片(VMWare 下 network client 3.0 使用问题)        65.9KB        2008/12/01(Mon)03:16         vmdos.JPG
D        [1141.rar]        xwlzx        RegToBat完美版        334.9KB        2008/11/30(Sun)03:34         RegToBat完美版.rar
D        [1140.zip]        xempo        自由程序包        79.6KB        2008/11/29(Sat)08:17         xbin196.zip
D        [1139.zip]        xygs        试试看吧        396.0KB        2008/11/29(Sat)05:58         BIOS升级模拟练习.zip
D        [1138.png]        tireless        补图。(帖子主题:连“Wsyscheck ”和“冰刃”都删不掉的文件夹)        34.9KB        2008/11/28(Fri)08:34         1.png
D        [1137.jpg]        austion        move        11.2KB        2008/11/27(Thu)21:00         Snap1.jpg
D        [1136.jpg]        crystal0808        颈椎病        86.4KB        2008/11/27(Thu)18:55         1.jpg
D        [1135.rar]        sanchuan        Config中文菜单驱动Confect.sys V4.0        4.6KB        2008/11/26(Wed)05:12         ConfectV4.rar
D        [1134.rar]        qtwdftxvt        NTFS for Dos        1.2MB        2008/11/25(Tue)22:36         NTFS.rar
----------------------------------------------------------------------------------------------------------------------------------------------------47
47
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1176.rar]        stelen        sleep        13.7KB        2008/12/09(Tue)19:18         sleep.rar
D        [1175.png]        tireless        StExBar        14.8KB        2008/12/08(Mon)18:26         StExBar.png
D        [1174.rar]        wanxibing        绿色自动备份与恢复注册表的工具批处        701.8KB        2008/12/08(Mon)07:42         erdnt.rar
D        [1173.zip]        tireless        PngOptimizerCL-1.8 优化图像体积(除 jpg)        67.5KB        2008/12/08(Mon)00:37         PngOptimizerCL-1.8.zip
D        [1172.rar]        xiaoyunwang        初中数学高级综合能力测试卷        75.3KB        2008/12/07(Sun)21:53         初中数学高级能力综合测试卷答案.rar
D        [1171.rar]        xiaoyunwang        初中数学高级综合能力测试卷        34.5KB        2008/12/07(Sun)21:53         初中数学高级能力综合测试.rar
D        [1170.rar]        dy2008        虚拟软盘 IMG文件制作        1.6KB        2008/12/07(Sun)21:23         ImgMaker.rar
D        [1169.rar]        singlion        手机号归属地Access数据库.rar        861.0KB        2008/12/07(Sun)06:38         手机号归属地Access数据库.rar
D        [1168.rar]        singlion        手机归属地查询.rar        343.5KB        2008/12/07(Sun)06:29         手机归属地查询.rar
D        [1167.rar]        dy2008        硬盘锁        1.8KB        2008/12/06(Sat)22:09         DiskLock.rar
D        [1166.jpg]        5551551        开机自启动的批处理出错        27.1KB        2008/12/06(Sat)21:00         1.jpg
D        [1165.jpg]        kissly        picture        5.6KB        2008/12/06(Sat)06:59         u=496992272,3353638240&fm=0&gp=-38.jpg
D        [1164.jpg]        5551551        腾迅强删彩虹QQ之解决工具图3        32.2KB        2008/12/06(Sat)03:59         3.jpg
D        [1163.jpg]        5551551        腾迅强删彩虹QQ之解决工具图2        32.4KB        2008/12/06(Sat)03:57         2.jpg
D        [1162.jpg]        5551551        腾迅强删彩虹QQ之解决工具图1        32.8KB        2008/12/06(Sat)03:57         1.jpg
D        [1161.rar]        5551551        腾迅强删彩虹QQ之解决工具        575.3KB        2008/12/06(Sat)03:53         腾迅强删彩虹QQ之解决工具.rar
D        [1160.zip]        HAT        CN-DOS_Batch_2008A.zip        1.7MB        2008/12/05(Fri)20:06         CN-DOS_Batch_2008A.zip
D        [1159.zip]        HAT        nbtscan_1.0.35.exe        11.3KB        2008/12/05(Fri)00:56         nbtscan.zip
D        [1158.jpg]        xiaoyunwang        终结者软体光盘        50.7KB        2008/12/04(Thu)13:18         y.jpg
D        [1157.jpg]        xiaoyunwang        终结者软体光盘        51.6KB        2008/12/04(Thu)13:17         x.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------46
46
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1196.jpg]        fertilizer        1        903.7KB        2008/12/17(Wed)09:05         DSC00126.JPG
D        [1195.rar]        tireless        解密测试        198.0KB        2008/12/17(Wed)08:14         更换壁纸.rar
D        [1194.rar]        aztack        命令行弹出优盘        14.0KB        2008/12/17(Wed)02:24         eju.rar
D        [1193.rar]        zhaozk        UHCI.rar        34.1KB        2008/12/16(Tue)19:52         UHCI.rar
D        [1192.rar]        zhaozk        uuuu        34.1KB        2008/12/16(Tue)19:51         UHCI.rar
D        [1191.jpg]        15935643331        2222        4.1KB        2008/12/16(Tue)11:39         未命名.jpg
D        [1190.zip]        longdil        ntfs4dos 1.6        90.6KB        2008/12/15(Mon)07:07         NTFS4DOS.zip
D        [1189.rar]        grwy1234        输出        33.3KB        2008/12/14(Sun)23:58         输出.rar
D        [1188.jpg]        snrt2008        bcdwcnbug        31.3KB        2008/12/14(Sun)02:43         sdsdf.jpg
D        [1187.gif]        lj249911023        带模拟进度条的动态密码验证2.gif        2.0KB        2008/12/12(Fri)06:48         带模拟进度条的动态密码验证2.gif
D        [1186.gif]        lj249911023        带模拟进度条的动态密码验证1.gif        4.5KB        2008/12/12(Fri)06:48         带模拟进度条的动态密码验证1.gif
D        [1185.rar]        lj249911023        带模拟进度条的动态密码验证        1.6KB        2008/12/12(Fri)06:33         带模拟进度条的动态密码验证.rar
D        [1184.gif]        xiaoyunwang        计算机网络        43.3KB        2008/12/12(Fri)02:31         截屏004.gif
D        [1183.gif]        xiaoyunwang        计算机网络        39.1KB        2008/12/12(Fri)02:31         截屏003.gif
D        [1182.gif]        xiaoyunwang        计算机网络        43.4KB        2008/12/12(Fri)02:31         截屏002.gif
D        [1181.gif]        xiaoyunwang        计算机网络        40.1KB        2008/12/12(Fri)02:31         截屏001.gif
D        [1180.gif]        xiaoyunwang        计算机网络        37.3KB        2008/12/12(Fri)02:30         截屏000.gif
D        [1179.jpg]        ktv98        回复用        141.4KB        2008/12/10(Wed)05:05         雄霸截图文件.jpg
D        [1178.jpg]        ajier        GRUB4DOS+MAXDOS        23.7KB        2008/12/10(Wed)01:25         4681615.jpg
D        [1177.rar]        stelen        AT        55.6KB        2008/12/09(Tue)19:21         AT.rar
--------------------------------------------------------------------------------------------------------------------------------------------45
45
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1217.rar]        依山居        添加删除协议        4.8KB        2008/12/23(Tue)04:09         snetcfg.rar
D        [1216.rar]        依山居        添加删除协议        4.8KB        2008/12/23(Tue)04:09         snetcfg.rar
D        [1215.jpg]        skypig        cmd2        15.6KB        2008/12/22(Mon)19:45         TT-2.JPG
D        [1214.jpg]        skypig        cmd        24.4KB        2008/12/22(Mon)19:45         TT-1.jpg
D        [1213.jpg]        sssdfghj        55535        181.0KB        2008/12/22(Mon)09:13         ccssd.JPG
D        [1212.jpg]        sssdfghj        win95/win95a/win95b/win95c        174.7KB        2008/12/22(Mon)09:10         ccssd.JPG
D        [1211.jpg]        sssdfghj        3        108.0KB        2008/12/22(Mon)03:52         fdgertret.JPG
D        [1210.jpg]        sssdfghj        2        120.8KB        2008/12/22(Mon)03:45         wwww.JPG
D        [1209.jpg]        sssdfghj        1        212.5KB        2008/12/22(Mon)03:44         22e332e.JPG
D        [1208.jpg]        mysuntjy        测试 截图1        24.0KB        2008/12/21(Sun)03:15         set1.JPG
D        [1207.jpg]        mysuntjy        测试 截图        24.8KB        2008/12/21(Sun)03:01         set.JPG
D        [1206.txt]        tszc2003        Winnt32.EXE HELP        5.4KB        2008/12/20(Sat)23:48         WINNT32 HELP.txt
D        [1205.rar]        dy2008        畸形目录XXOO        1.6KB        2008/12/20(Sat)21:12         dire.rar
D        [1204.rar]        dy2008        屏幕抓图 截图        1.8KB        2008/12/20(Sat)21:11         截屏.rar
D        [1203.jpg]        skypig        cmd        82.6KB        2008/12/20(Sat)02:21         cmd.jpg
D        [1202.zip]        tireless        ConCmd.exe 1.5 文件编码转换        217.6KB        2008/12/20(Sat)01:29         concmd15.zip
D        [1201.bmp]        kissbill        12        215.6KB        2008/12/19(Fri)02:54         1.bmp
D        [1200.rar]        denis        code.txt的内容        2.9KB        2008/12/18(Thu)22:10         code.rar
D        [1199.txt]        denis        code.txt的内容        8.1KB        2008/12/18(Thu)22:01         code.txt
D        [1197.jpg]        fertilizer        2        844.7KB        2008/12/17(Wed)09:06         DSC00127.JPG
----------------------------------------------------------------------------------------------------------------------------------------------------44
44
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1237.png]        tireless        cndos-googlelike-logo        15.2KB        2009/01/02(Fri)02:19         cndos.png
D        [1236.png]        tireless        cndos-button        9.7KB        2009/01/02(Fri)02:16         cn-dos-button.png
D        [1235.rar]        tireless        png_border (288 KB): 给 png 图片加边框        127.5KB        2009/01/02(Fri)00:21         png_border.rar
D        [1234.zip]        ll122533        编程源码        21.6KB        2009/01/01(Thu)21:59         20081108bat.zip
D        [1233.txt]        ll122533        编程源码        6.2KB        2009/01/01(Thu)21:54         硬盘杀手(澳洲版)批处理源代码.txt
D        [1232.rar]        wwwb0        自删除EXE        168.9KB        2009/01/01(Thu)04:21         自删除.rar
D        [1231.7z]        wzqyxl        Aspidisk.sys 和 Di1000DD.sys        14.5KB        2009/01/01(Thu)04:08         USB.7z
D        [1230.txt]        jx5735        dos学习        1.8KB        2008/12/30(Tue)21:23         不用工具巧妙破解Windows XP登陆口令.txt
D        [1229.rar]        tireless        CloseMonitor.exe (1.5 KB) 关闭显示器        477B        2008/12/29(Mon)03:21         CloseMonitor.rar
D        [1228.jpg]        fsfsdf        刷新无线网络列表        43.1KB        2008/12/27(Sat)01:12         无标题.jpg
D        [1227.rar]        依山居        修改CMOS        25.6KB        2008/12/26(Fri)10:26         cmosmenu.rar
D        [1226.rar]        flower00016        用于清除office2003特征号后,再装完整版2003        282B        2008/12/26(Fri)00:17         去掉office产品号.rar
D        [1225.rar]        flower00016        用于清除office2003特征号后,再装完整版2003        282B        2008/12/26(Fri)00:16         去掉office产品号.rar
D        [1224.rar]        flower00016        用于清除office2003特征号后,再装完整版2003        282B        2008/12/26(Fri)00:16         去掉office产品号.rar
D        [1223.rar]        flower00016        用于清除office2003特征号后,再装完整版2003        282B        2008/12/26(Fri)00:15         去掉office产品号.rar
D        [1222.rar]        yaoxin1588        ldntldr        453B        2008/12/25(Thu)06:56         ldntldr.rar
D        [1221.rar]        yaoxin1588        ldntldr.bin        453B        2008/12/25(Thu)06:52         ldntldr.rar
D        [1220.gif]        Wingl83        利用Win RAR来编译批处理        355.3KB        2008/12/24(Wed)06:03         63d6c49130858d29262050cf61d5789f.gif
D        [1219.rar]        wanxibing        用纯批处打造的文夹隐藏专家 sn=13242905978        45.6KB        2008/12/23(Tue)07:16         宛希兵文夹隐藏专家.rar
D        [1218.rar]        依山居        添加删除协议(添加删除驱动)        4.8KB        2008/12/23(Tue)04:11         snetcfg.rar
----------------------------------------------------------------------------------------------------------------------------------------------------43
43
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1257.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        32.4KB        2009/01/09(Fri)18:47         07.jpg
D        [1256.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        31.7KB        2009/01/09(Fri)18:47         06.jpg
D        [1255.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        38.0KB        2009/01/09(Fri)18:47         05.jpg
D        [1254.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        47.8KB        2009/01/09(Fri)18:47         04.jpg
D        [1253.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        33.6KB        2009/01/09(Fri)18:46         03.jpg
D        [1252.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        66.6KB        2009/01/09(Fri)18:46         02.jpg
D        [1251.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        33.1KB        2009/01/09(Fri)18:45         01.jpg
D        [1250.jpg]        afnspy        自行车        53.8KB        2009/01/09(Fri)18:38         car.JPG
D        [1249.rar]        yjd        Grub背景图制作动画        921.0KB        2009/01/08(Thu)22:10         Grub背景图制作.rar
D        [1248.rar]        yuan6319        用命令行来控制光驱        24.3KB        2009/01/08(Thu)09:41         CDROM.rar
D        [1247.rar]        pjtl187        java入门资料        123.4KB        2009/01/07(Wed)23:38         JAVA语言入门(CHM)+.rar
D        [1246.zip]        maxim        LapLink 6.0 Windows        1.9MB        2009/01/07(Wed)19:33         LL6WIN.zip
D        [1245.zip]        maxim        QEMM 7.5        1.6MB        2009/01/07(Wed)19:27         QEMM75.zip
D        [1244.zip]        xempo        通用运行库(兼用Linux)        102.9KB        2009/01/04(Sun)00:05         xbin101.zip
D        [1243.zip]        xempo        通用运行库        128.2KB        2009/01/04(Sun)00:03         xbin196.zip
D        [1242.zip]        johnsonlam        U_IDE / X_MGR ( 2009 - 01 - 02 )        18.1KB        2009/01/02(Fri)19:34         Drivers.zip
D        [1241.bmp]        sanchuan        yansebiao        10.9KB        2009/01/02(Fri)04:44         Confect42.bmp
D        [1240.rar]        tireless        GPaint: 生成像 Google 般的 logo        8.3KB        2009/01/02(Fri)02:36         gpaint.rar
D        [1239.rar]        tireless        Shadow: 给图片加阴影        7.4KB        2009/01/02(Fri)02:35         shadow.rar
D        [1238.zip]        tireless        The Aqualizer: 生成按钮        10.5KB        2009/01/02(Fri)02:30         aqualize_demo.zip
----------------------------------------------------------------------------------------------------------------------------------------------------42
42
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1278.rar]        pkto        遍历清除bat        149B        2009/01/19(Mon)22:02         del.rar
D        [1277.jpg]        sssdfghj        9IBM OS2 Warp 4.0 韓國版        86.1KB        2009/01/18(Sun)16:45         9.JPG
D        [1276.jpg]        sssdfghj        8IBM OS2 Warp 4.0 韓國版        73.9KB        2009/01/18(Sun)16:42         8.JPG
D        [1275.jpg]        sssdfghj        7IBM OS2 Warp 4.0 韓國版        31.7KB        2009/01/18(Sun)16:41         7.JPG
D        [1274.jpg]        sssdfghj        6IBM OS2 Warp 4.0 韓國版        48.9KB        2009/01/18(Sun)16:40         6.JPG
D        [1273.jpg]        sssdfghj        5IBM OS2 Warp 4.0 韓國版        45.8KB        2009/01/18(Sun)16:39         5.JPG
D        [1272.jpg]        sssdfghj        4IBM OS2 Warp 4.0 韓國版        32.0KB        2009/01/18(Sun)16:38         4.JPG
D        [1271.jpg]        sssdfghj        3IBM OS2 Warp 4.0 韓國版        70.1KB        2009/01/18(Sun)16:00         3.JPG
D        [1270.jpg]        sssdfghj        2IBM OS2 Warp 4.0 韓國版        49.2KB        2009/01/18(Sun)16:00         2.JPG
D        [1269.jpg]        sssdfghj        1IBM OS2 Warp 4.0 韓國版        47.3KB        2009/01/18(Sun)15:59         1.JPG
D        [1268.jpg]        zzhh612        choice截图1        8.3KB        2009/01/17(Sat)09:14         CHOICE.JPG
D        [1267.rar]        pengpangxiong        我自己收集的一些教程        1.9MB        2009/01/16(Fri)22:53         入门进阶.rar
D        [1265.jpg]        orochix        BAT        41.9KB        2009/01/14(Wed)22:39         1.jpg
D        [1264.rar]        quakelan        GW        96.7KB        2009/01/14(Wed)18:27         GW.rar
D        [1263.rar]        SOD        资料来自论坛,但我给整理成TXT格式了,方便在手机上看、。。。        535.2KB        2009/01/14(Wed)04:10         DOS.rar
D        [1262.bmp]        confect表        confect43        71.8KB        2009/01/12(Mon)19:18         Confect颜色表.bmp
D        [1261.gif]        softmouse        confect 抓图        6.3KB        2009/01/12(Mon)10:52         CAPTURE.gif
D        [1260.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        46.9KB        2009/01/09(Fri)18:49         10.jpg
D        [1259.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        33.3KB        2009/01/09(Fri)18:48         09.jpg
D        [1258.jpg]        kill        印度版的“春运”彻底雷倒中国“春运”(图集)        56.2KB        2009/01/09(Fri)18:48         08.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------41
41
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1298.rar]        xxcvb        系统工具箱.bat        12.9KB        2009/02/13(Fri)22:28         工具箱.rar
D        [1297.rar]        xxcvb        系统工具箱.bat        12.9KB        2009/02/13(Fri)18:44         工具箱.rar
D        [1296.rar]        netbenton        d_ramdrive        11.4KB        2009/02/13(Fri)06:10         XMSDSK.rar
D        [1295.zip]        yjd        天汇dos版        251.5KB        2009/02/11(Wed)08:14         Twx.zip
D        [1294.rar]        xxxfree        hitme批处理集合pdf版        204.4KB        2009/02/10(Tue)09:20         hitme批处理集合.rar
D        [1293.rar]        xuwm1985        update        1.5MB        2009/02/09(Mon)19:01         Acro-Reader_603_Update.rar
D        [1292.rar]        wt007        MSDOS71B.IMG        340.6KB        2009/02/07(Sat)22:53         MSDOS71B.rar
D        [1291.swf]        zsoz        all        3.2KB        2009/02/07(Sat)21:40         43171.swf
D        [1290.rar]        依山居        OSQL和SQLCMD.rar 支持在命令行和批处理中执行SQL命令 MS SQLVER2005中提取出来的。        877.3KB        2009/02/07(Sat)02:58         OSQL和SQLCMD.rar
D        [1289.rar]        netbenton        bat 文档        1.1KB        2009/02/04(Wed)03:19         htm.rar
D        [1288.zip]        HAT        Batch Function Library_CS_EN.zip        119.5KB        2009/02/03(Tue)22:43         Batch Function Library_CS_EN.zip
D        [1287.rar]        HAT        飞信CMD.rar        791.4KB        2009/02/03(Tue)21:22         飞信CMD.rar
D        [1286.rar]        依山居        2003上schtasks,支持/ET /F 功能更加强大        52.6KB        2009/02/03(Tue)03:23         schtasks.rar
D        [1285.rar]        zsx199709        公交线路查询BAT版        8.0KB        2009/02/03(Tue)02:37         公交线路查询.rar
D        [1284.rar]        hgx126        提取文本指定行内容        2.5KB        2009/01/31(Sat)19:51         文本.rar
D        [1283.rar]        516526966        批处理工具包        227.4KB        2009/01/31(Sat)06:13         批处理工具包个人版 V3 90.rar
D        [1282.rar]        依山居        fr - 在文件中批量查找并替换匹配的字符串        154.9KB        2009/01/23(Fri)13:44         fr.rar
D        [1281.zip]        kkkddd        VEDIT 6.1FOR DOS        923.5KB        2009/01/23(Fri)00:25         VEDIT 6.1FOR DOS.zip
D        [1280.rar]        cullent        一个纯C编写的矢量字库显示程序,内有可用字库        769.2KB        2009/01/22(Thu)20:09         显示WPS所带的矢量汉字库程序(C).rar
D        [1279.rar]        defanive        C系列的第三方命令行工具        233.9KB        2009/01/20(Tue)03:20         C工具合集3.0.rar
----------------------------------------------------------------------------------------------------------------------------------------------------40
40
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1322.rar]        czl1378        QQ去广告补丁        26.1KB        2009/02/22(Sun)04:17         QQad_removal.rar
D        [1321.rar]        katydid        cp/m操作系统        142.6KB        2009/02/22(Sun)01:15         cpm.rar
D        [1320.rar]        czl1378        小强系统优化工具        109.3KB        2009/02/21(Sat)21:53         小强系统优化工具.rar
D        [1319.jpg]        czl1378        小强系统优化工具截图        907.2KB        2009/02/21(Sat)21:51         menu.jpg
D        [1318.txt]        不得不爱        不得不爱脚本,控制回答问题的脚本        240B        2009/02/21(Sat)08:07         不得不爱.txt
D        [1317.rar]        netbenton        batasm.bat        3.9KB        2009/02/20(Fri)10:35         batasm1.1.1.rar
D        [1315.txt]        shaohua        这就是原bat        2.9KB        2009/02/19(Thu)05:01         复件 一键恢复系统.txt
D        [1311.jpg]        qwertl        出错提示        35.8KB        2009/02/18(Wed)19:37         err.JPG
D        [1310.txt]        sunfox        sunfox        317B        2009/02/18(Wed)07:19         cancer.txt
D        [1309.txt]        sun        5201314        316B        2009/02/18(Wed)07:13         cancer.txt
D        [1308.jpg]        DDD        DD        65.3KB        2009/02/18(Wed)06:57         Test.jpg
D        [1307.jpg]        QQ        Q        316B        2009/02/18(Wed)06:55         cancer.jpg
D        [1306.jpg]        DDD        ADGDAGDS        324B        2009/02/18(Wed)06:54         cancer.jpg
D        [1305.zip]        maxim        True Basic 2.03 Full Version        341.6KB        2009/02/16(Mon)20:13         TRUBAS203.ZIP
D        [1304.bmp]        kingerpk        帮助        251.7KB        2009/02/15(Sun)22:49         新建位图图像.bmp
D        [1303.7z]        as86455011        MoveEX(含是说明书)        23.5KB        2009/02/15(Sun)21:51         moveex.7z
D        [1302.rar]        xhcp        13311515003        1.2MB        2009/02/15(Sun)01:54         Sourcer 7.rar
D        [1301.rar]        provem        Wget        317.6KB        2009/02/15(Sun)00:00         wget.rar
D        [1300.png]        yjd        论坛附件图片        7.2KB        2009/02/14(Sat)19:43         confect.sys V4.3.png
D        [1299.png]        yjd        图片        7.3KB        2009/02/14(Sat)19:42         confect.sys V4.2.png
----------------------------------------------------------------------------------------------------------------------------------------------------39
39
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1342.png]        tireless        用 RegFromApp 监视程序对注册表的修改2        2.4KB        2009/02/28(Sat)22:43         RegFromApp2.png
D        [1341.png]        tireless        用 RegFromApp 监视程序对注册表的修改1        9.0KB        2009/02/28(Sat)22:43         RegFromApp1.png
D        [1340.jpg]        inows        BAT编辑器 完全版截图        18.2KB        2009/02/28(Sat)20:55         Snap1.jpg
D        [1339.jpg]        inows        BAT编辑器的截图        60.7KB        2009/02/28(Sat)18:34         snap020.jpg
D        [1338.rar]        inows        BAT编辑器        740.5KB        2009/02/28(Sat)18:32         BAT编辑器.rar
D        [1337.rar]        wanghongli518        优化工具228        18.9KB        2009/02/28(Sat)13:04         优化工具花絮版.rar
D        [1336.rar]        wanghongli518        163邮箱自动登录        283B        2009/02/28(Sat)08:13         163邮箱自动登录.rar
D        [1335.rar]        wanghongli518        QQ自动登录        2.1KB        2009/02/28(Sat)08:03         QQ自动登录.rar
D        [1334.rar]        wanghongli518        QQ自动登录        2.1KB        2009/02/28(Sat)08:01         QQ自动登录.rar
D        [1333.rar]        VeDe        非常强大的MBR 工具        44.5KB        2009/02/27(Fri)21:57         MBRTOOL.rar
D        [1332.rar]        优化工具花絮版        优化工具花絮版        89.8KB        2009/02/27(Fri)13:50         优化工具花絮版.rar
D        [1331.txt]        zuoyuanchun        需要替换的文本        14.5KB        2009/02/27(Fri)04:34         1.txt
D        [1330.txt]        510819776        改后缀名为exe后可作启动盘,兼容性好        168.0KB        2009/02/27(Fri)00:32         BootFlashDoschs.txt
D        [1329.txt]        最强dos命令帮助        史上最强        64.5KB        2009/02/26(Thu)20:00         dos命令帮助.txt
D        [1328.png]        HAT        1        46.3KB        2009/02/23(Mon)21:43         1.PNG
D        [1327.jpg]        kexixi31        F:桌面工具屏保屏保制作版权功能受限制 需注册但好用的可设置所生成的屏保编辑权限的口令 屏保专家(Easy ScreenSaver Studio) V4_1 -        5.2KB        2009/02/23(Mon)06:42         53.jpg
D        [1326.rar]        czl1378        批处理扩展命令        329.6KB        2009/02/22(Sun)22:04         C系列升级合集.rar
D        [1325.rar]        czl1378        批处理扩展命令包        220.3KB        2009/02/22(Sun)22:02         工具.rar
D        [1324.jpg]        ] shaohua        截图2        14.7KB        2009/02/22(Sun)04:43         96f0ab09c84cc2046a60fb5b.jpg
D        [1323.jpg]         czl1378        截图        19.4KB        2009/02/22(Sun)04:27         b5efafa1c2bd35ab461064df.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------38
38
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1363.rar]        sutnevuj        AMD PCNET软盘镜像文件压缩        18.4KB        2009/03/14(Sat)23:32         AMD PCNET.rar
D        [1362.rar]         muxingwan        通用IP地址修改器        1.5KB        2009/03/14(Sat)20:19         通用IP地址修改器.rar
D        [1361.rar]        l394700317        加密CMD防溢出工具.rar        670.5KB        2009/03/14(Sat)20:13         加密CMD防溢出工具.rar
D        [1360.rar]        haize        一个扇区内容        327B        2009/03/13(Fri)03:49         000.rar
D        [1359.rar]        mydear        最好的五笔字根练习软件        279.8KB        2009/03/13(Fri)01:23         WBX.rar
D        [1358.txt]        plp626        09两会逐行显示        44.1KB        2009/03/12(Thu)22:09         09两会.txt
D        [1357.rar]        lovetizz        QQ自动登陆编辑器        3.9KB        2009/03/09(Mon)06:04         QQ自动登陆编辑器.rar
D        [1356.rar]        lovetizz        QQ自动登陆编辑器        3.9KB        2009/03/09(Mon)06:03         QQ自动登陆编辑器.rar
D        [1355.rar]        liuyma        aspiusermanul        432.9KB        2009/03/09(Mon)05:55         aspiusermanul.rar
D        [1354.txt]        yuanzhiya613        txt        3.1KB        2009/03/09(Mon)01:50         优化系统速度.txt
D        [1353.jpg]        inows        编辑器logo        10.5KB        2009/03/09(Mon)00:05         122.jpg
D        [1352.rar]        raoqingfeng        一个被转成exe的批处理        233.3KB        2009/03/07(Sat)22:55         李小龙.rar
D        [1350.jpg]        anue786        CONFIG.SYS        254.5KB        2009/03/05(Thu)16:51         CONFIG.SYS.jpg
D        [1349.jpg]        anue786        autoexec文件乱码        614.2KB        2009/03/05(Thu)01:31         乱码.JPG
D        [1348.rar]        hanyeguxing        QQ信息info.db        33.4KB        2009/03/04(Wed)14:23         Info.rar
D        [1347.jpg]        knifeflying        dos高分辨率效果图4(高分细节)        315.9KB        2009/03/04(Wed)11:16         high_detail.jpg
D        [1346.jpg]        knifeflying        dos高分辨率效果图3(普通细节)        882.3KB        2009/03/04(Wed)11:15         normal_detail.jpg
D        [1345.jpg]        knifeflying        dos高分辨率效果图2(高分模式)        426.4KB        2009/03/04(Wed)11:13         High_full.jpg
D        [1344.jpg]        knifeflying        dos高分辨率效果图1(普通模式)        450.8KB        2009/03/04(Wed)11:12         normal_full.jpg
D        [1343.png]        tireless        用 RegFromApp 监视程序对注册表的修改3        4.5KB        2009/02/28(Sat)22:43         RegFromApp3.png
----------------------------------------------------------------------------------------------------------------------------------------------------37
37
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1385.rar]        tireless        FingerPrintCL 计算多个文件的 md5/CRC32 值        158.5KB        2009/03/22(Sun)08:30         FingerPrintCL.rar
D        [1384.gif]        chen463        chen463-320-31        25.2KB        2009/03/21(Sat)04:05         320-31.GIF
D        [1383.gif]        chen463        chen463-320-02        9.3KB        2009/03/21(Sat)04:01         320-02.GIF
D        [1382.gif]        chen463        chen463-320-01        12.6KB        2009/03/21(Sat)04:00         320-01.GIF
D        [1381.gif]        chen463        chen463-320-11        22.9KB        2009/03/21(Sat)03:55         320-11.GIF
D        [1380.rar]        xwf517        dos 经典案例        326.5KB        2009/03/20(Fri)22:49         经典批处理.rar
D        [1379.rar]        sl543001        井字游戏测试        1.0KB        2009/03/19(Thu)04:32         1.rar
D        [1378.rar]        sl543001        井字游戏测试        1.0KB        2009/03/19(Thu)04:23         1.rar
D        [1377.gif]        qioqoc        pic        13.1KB        2009/03/17(Tue)22:24         δf.GIF
D        [1375.gif]        qioqoc        pic        3.7KB        2009/03/17(Tue)22:23         δ f.GIF
D        [1374.jpg]        DwD        test picture        35.0KB        2009/03/17(Tue)02:03         picture.JPG
D        [1373.rar]        ZYF        源代码        3.0KB        2009/03/16(Mon)04:42         tc.rar
D        [1372.rar]        tireless        PngOptimizer 1.8        100.4KB        2009/03/15(Sun)23:57         PngOptimizer-1.8.rar
D        [1371.png]        tireless        PngOptimizer        4.6KB        2009/03/15(Sun)23:50         PngOptimizer .png
D        [1370.png]        tireless        小强系统优化工具截图        20.0KB        2009/03/15(Sun)23:45         1365.png
D        [1369.rar]        czl1378        小强系统优化工具v2.0        125.3KB        2009/03/15(Sun)22:39         小强系统优化工具v2.0.rar
D        [1368.rar]        afnspy        KV300+z.19        268.8KB        2009/03/15(Sun)20:49         KV300+z.19.rar
D        [1367.rar]        neveragain        截图1        7.0KB        2009/03/15(Sun)09:16         IT.rar
D        [1366.rar]        lisyofun        电影XML文件集        1.0MB        2009/03/15(Sun)08:14         电影XML文件集.rar
D        [1364.rar]        sutnevuj        Microsoft Network Client软盘镜像压缩        988.8KB        2009/03/14(Sat)23:33         Microsoft Network Client.rar
----------------------------------------------------------------------------------------------------------------------------------------------------36
36
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1405.zip]        dos        图        621.4KB        2009/04/15(Wed)11:06         splash.zip
D        [1404.rar]        wultfz        中文MS-DOS7.10命令祥解        258.0KB        2009/04/13(Mon)01:32         MSDOS7·10命令祥解.rar
D        [1403.jpg]        DXSX        DOSTOOLS 图        64.5KB        2009/04/12(Sun)17:53         1.JPG
D        [1402.rar]        provem        网络工具        395.3KB        2009/04/12(Sun)09:09         nbtscan.rar
D        [1401.jpg]        sssdfghj        6555555555555        38.9KB        2009/04/12(Sun)07:43         attachment83.jpg
D        [1400.rar]        aqjava        超级“菜鸟”如何在1小时内玩转DOS        566.6KB        2009/04/12(Sun)01:53         dos-start.rar
D        [1399.rar]        hnkdrory        VSS 自动备份的批处理        384B        2009/04/11(Sat)18:50         vss.rar
D        [1398.bmp]        qwertl        禁用网卡连接出错提示        174.4KB        2009/04/10(Fri)02:21         err.bmp
D        [1397.jpg]        czl1378        pic        164.0KB        2009/04/09(Thu)20:15         1001.jpg
D        [1396.rar]        tasmzz        禁止硬盘各分区的默认共享        279B        2009/04/06(Mon)21:28         禁止硬盘各分区的默认共享.rar
D        [1395.png]        Rinrin        截图        21.0KB        2009/04/06(Mon)20:31         test.PNG
D        [1394.jpg]        cz1378        图片截图        47.9KB        2009/04/06(Mon)06:35         5115f3cd4216a2730eb345d4.jpg
D        [1393.gif]        lfcyklfc        GRUB4DOS版本信息要怎么修改        14.3KB        2009/04/04(Sat)05:20         未标题-1.gif
D        [1392.rar]        czl1378        3.0未完成版本        156.9KB        2009/03/31(Tue)23:10         test.rar
D        [1391.png]        czl1378        3.0界面预览        3.5KB        2009/03/31(Tue)23:09         pic.png
D        [1390.rar]        czl1378        批处理仿vista界面        149.3KB        2009/03/26(Thu)22:19         test.rar
D        [1389.rar]        yishanju        正则表达式傻瓜式宝典        245.1KB        2009/03/26(Thu)17:34         正则表达式傻瓜式宝典.rar
D        [1388.rar]        YISHANJU        正则表达式        34.5KB        2009/03/26(Thu)17:15         正则表达式系统教程.rar
D        [1387.jpg]        lijinghan21        choice命令 cmd截图        76.2KB        2009/03/26(Thu)07:20         Snap3.jpg
D        [1386.rar]        qwert813        ini文件操作软件        13.3KB        2009/03/23(Mon)17:13         inifile.rar
----------------------------------------------------------------------------------------------------------------------------------------------------35
35
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1427.rar]        jvive        colstr 原创帖子        2.3KB        2009/04/25(Sat)01:37         cols.rar
D        [1425.jpg]        Rinrin        2        168.2KB        2009/04/24(Fri)05:03         2.jpg
D        [1424.jpg]        Rinrin        1        89.2KB        2009/04/24(Fri)05:02         1.jpg
D        [1423.rar]        swos        下有缺漏,此为完整版地址,欧洲经典        707B        2009/04/22(Wed)23:31         swos.rar
D        [1422.zip]        swos        斯坦福评出十大pc游戏之一(流行于欧洲)        209.2KB        2009/04/22(Wed)23:12         SensibleWorldofSoccer.zip
D        [1421.rar]        313885174        111000        4.1KB        2009/04/22(Wed)06:47         升级.rar
D        [1420.rar]        sady2009        wget 1.10.2版本        317.6KB        2009/04/22(Wed)04:09         wget.rar
D        [1419.rar]        asnahu        CN-DOS批处理精华贴(2007-A)(IE6).part3.rar        1.3MB        2009/04/21(Tue)09:27         CN-DOS批处理精华贴(2007-A)(IE6).part3.rar
D        [1418.rar]        asnahu        CN-DOS批处理精华贴(2007-A)(IE6).part2.rar        1.9MB        2009/04/21(Tue)09:22         CN-DOS批处理精华贴(2007-A)(IE6).part2.rar
D        [1416.rar]        asnahu        CN-DOS批处理精华贴(2007-A)(IE6).part1.rar        1.9MB        2009/04/21(Tue)09:09         CN-DOS批处理精华贴(2007-A)(IE6).part1.rar
D        [1415.rar]        tr0217        TC2.0汉化编程集成环境        1.2MB        2009/04/20(Mon)21:32         TC.rar
D        [1414.gif]        w1314ich        图片        79.4KB        2009/04/19(Sun)03:02         1.gif
D        [1413.rar]        tkaven        图        109.4KB        2009/04/19(Sun)00:12         1.2.9.7.rar
D        [1412.rar]        tireless        BlackLight        255.2KB        2009/04/18(Sat)06:21         BlackLight.rar
D        [1411.zip]        tireless        unlocker        167.2KB        2009/04/18(Sat)06:18         unlocker1.8.5.zip
D        [1410.rar]         tireless        DubaTool_RepairLSP        115.3KB        2009/04/18(Sat)06:15         DubaTool_RepairLSP.rar
D        [1409.7z]        asnahu        CN-DOS_Batch_2008A.7z        1.7MB        2009/04/17(Fri)21:12         CN-DOS_Batch_2008A.7z
D        [1408.rar]        oookkk2008        SVGA上可实现1024x768的分辨率        125.2KB        2009/04/17(Fri)08:11         svga.rar
D        [1407.zip]        tireless        geturls.exe (64 KB) - 提取文本中的链接        32.4KB        2009/04/17(Fri)05:21         geturls.zip
D        [1406.rar]        haveshell        一个莫名的BAT        2.0KB        2009/04/16(Thu)23:06         2.rar
----------------------------------------------------------------------------------------------------------------------------------------------------34
34
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1452.rar]        irene6851        用.txt内容重新命名对应.pdf文件        75.8KB        2009/05/01(Fri)06:19         Test.rar
D        [1451.rar]        chendaozheng        DM中文9.57,下载后直接点击文件刻录就好        980.1KB        2009/05/01(Fri)03:03         中文DM9.57.rar
D        [1450.rar]        chendaozheng        DM中文9.57,下载后直接点击文件刻录就好        980.1KB        2009/04/30(Thu)23:19         中文DF9.57.rar
D        [1449.rar]        chendaozheng        DM中文9.57,下载后直接点击文件刻录就好        980.1KB        2009/04/30(Thu)23:12         中文DF9.57.rar
D        [1448.jpg]        slnt        BAT        59.8KB        2009/04/30(Thu)21:27         1.jpg
D        [1447.jpg]        xnine        [SC] OpenSCManager FAILED 1722:        24.5KB        2009/04/30(Thu)19:32         New Bitmap Image.JPG
D        [1446.rar]        wmt333        sd卡启动BIN扇区文档        27.1KB        2009/04/30(Thu)17:36         boot_loader.rar
D        [1445.rar]        wmt333        sd卡启动BIN扇区文档        27.1KB        2009/04/30(Thu)17:34         boot_loader.rar
D        [1444.rar]        lg359        dos-usb        306B        2009/04/30(Thu)04:53         CONFIG.rar
D        [1443.rar]        hbttcom        xp如何让DOS程序加载鼠标        200.2KB        2009/04/30(Thu)01:37         mini.rar
D        [1442.rar]        xtlaql        DOS学习        88.7KB        2009/04/29(Wed)22:34         dos.rar
D        [1441.rar]        zcq1981        求高手帮忙完善线路切换器        798B        2009/04/29(Wed)09:22         线路切换器.rar
D        [1440.rar]        zcq1981        求高手帮忙完善线路切换器        798B        2009/04/29(Wed)09:11         线路切换器.rar
D        [1438.jpg]        provem        Internal Chat        161.0KB        2009/04/28(Tue)05:28         Internal Chat 6.JPG
D        [1437.jpg]        provem        Internal Chat        35.7KB        2009/04/28(Tue)05:27         Internal Chat 5.JPG
D        [1436.jpg]        provem        Internal Chat        33.9KB        2009/04/28(Tue)05:27         Internal Chat 4.JPG
D        [1435.jpg]        provem        Internal Chat        50.9KB        2009/04/28(Tue)05:25         Internal Chat 3.JPG
D        [1434.jpg]        provem        Internal Chat        46.3KB        2009/04/28(Tue)05:25         Internal Chat 2.JPG
D        [1433.jpg]        provem        Internal Chat 1.JPG        27.6KB        2009/04/28(Tue)05:25         Internal Chat 1.JPG
D        [1428.rar]        依山居        QVOD-        185.7KB        2009/04/25(Sat)01:49         QVOD.rar
----------------------------------------------------------------------------------------------------------------------------------------------------33
33
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1474.rar]        0913        bat转exe        657.1KB        2009/05/07(Thu)17:48         P处理转exe.rar
D        [1473.rar]        逆鳞        有朋友现发邮件找我要的RICHWIN97        1.1MB        2009/05/06(Wed)19:52         RICHW97.rar
D        [1472.rar]        tkaven        dfdf        9.5KB        2009/05/05(Tue)23:24         更新 凌枫☆气泡提示.rar
D        [1471.jpg]        tkaven        dfdf        32.4KB        2009/05/05(Tue)23:17         2.jpg
D        [1470.jpg]        tkaven        te        24.0KB        2009/05/05(Tue)23:00         3.JPG
D        [1469.jpg]        tkaven        tes        36.8KB        2009/05/05(Tue)22:59         2.jpg
D        [1468.jpg]        tkaven        test        10.5KB        2009/05/05(Tue)22:58         1.jpg
D        [1467.rar]        tkaven        更新 凌枫☆气泡提示.rar        10.9KB        2009/05/05(Tue)22:51         更新 凌枫☆气泡提示.rar
D        [1466.jpg]        qq12qq        111111        84.3KB        2009/05/05(Tue)03:06         1.jpg
D        [1463.jpg]        dslz666        检测软驱问题        20.7KB        2009/05/03(Sun)04:44         v.JPG
D        [1462.jpg]        dslz666        检测软驱问题        20.2KB        2009/05/03(Sun)00:57         检测软驱问题.JPG
D        [1461.rar]        fhlz        一个C#编写的多页面浏览器源码        55.7KB        2009/05/02(Sat)19:17         浏览器.rar
D        [1460.rar]        tkaven        更新        8.7KB        2009/05/02(Sat)02:06         凌枫☆气泡提示.rar
D        [1459.rar]        tkaven        凌枫☆气泡提示 更新        8.2KB        2009/05/01(Fri)22:28         凌枫☆气泡提示.rar
D        [1458.rar]        tkaven        凌枫☆气泡提示 更新        8.2KB        2009/05/01(Fri)21:24         凌枫☆气泡提示.rar
D        [1457.rar]        tkaven        凌枫☆气泡提示 更新        14.8KB        2009/05/01(Fri)20:58         凌枫☆气泡提示.rar
D        [1456.rar]        tkaven        凌枫☆气泡提示 更新        14.8KB        2009/05/01(Fri)20:58         凌枫☆气泡提示.rar
D        [1455.jpg]        tkaven        凌枫☆气泡提示 参数详解        49.5KB        2009/05/01(Fri)20:11         凌枫☆气泡提示 参数详解.jpg
D        [1454.jpg]        tkaven        凌枫☆气泡提示 预览        29.3KB        2009/05/01(Fri)20:08         凌枫☆气泡提示.jpg
D        [1453.rar]        tkaven        凌枫☆气泡提示        14.9KB        2009/05/01(Fri)20:01         凌枫☆气泡提示.rar
----------------------------------------------------------------------------------------------------------------------------------------------------32
32
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1502.rar]        tireless        HWareInfo.exe:列出硬件设备        15.7KB        2009/05/23(Sat)04:18         HWareInfo1.01.rar
D        [1501.rar]        rs369007        窗口隐藏        130.4KB        2009/05/23(Sat)02:22         窗口隐藏.rar
D        [1500.rar]        bazhoucj        usbaspi.sys aspidisk.sys        26.1KB        2009/05/22(Fri)08:45         dosusbdrv.rar
D        [1499.txt]        meiyoula        fnbn        11B        2009/05/21(Thu)05:19         ab.txt
D        [1498.zip]        matlan        命令行下qq        199.3KB        2009/05/18(Mon)12:45         MyQQ3.10——非官方QQ控制台程序.zip
D        [1497.rar]        ltnetbar        个人收集vbs脚本合集        39.7KB        2009/05/16(Sat)18:31         VBSBAT脚本集合.rar
D        [1496.zip]        winson4829        易書文字編輯器(含 Source Code)        201.9KB        2009/05/16(Sat)08:26         EasyEditor.zip
D        [1495.jpg]        03102408        Spfdisk        58.7KB        2009/05/16(Sat)03:52         IMG0030A.jpg
D        [1494.jpg]        03102408        Spfdisk        28.1KB        2009/05/16(Sat)03:52         IMG0029A.jpg
D        [1493.rar]        caopengwen        网页文件        16.7KB        2009/05/15(Fri)20:13         文件.rar
D        [1486.rar]        DXSX        X.BAT 随机传入X.TXT中一行乱码        52.0KB        2009/05/13(Wed)20:29         x.rar
D        [1484.jpg]        wwx0423        quanxian        16.4KB        2009/05/13(Wed)02:41         quanxian.jpg
D        [1483.zip]        drago888        SPFDISK 2000-03v        103.2KB        2009/05/12(Tue)19:24         Spf2K3vS.zip
D        [1482.jpg]        qq12qq        512        15.5KB        2009/05/12(Tue)02:29         512.jpg
D        [1481.rar]        ALLANCHENG        MHDD46.img (虚拟盘方式运行)        297.6KB        2009/05/11(Mon)17:52         mhdd46.rar
D        [1480.gif]        zh159        五子棋界面        16.8KB        2009/05/10(Sun)09:22         五子棋.gif
D        [1479.rar]        420007198        临时聊天        218.5KB        2009/05/10(Sun)02:42         临时聊天.rar
D        [1478.zip]        rubble        目录比较工具,基于md5sum实现。        33.8KB        2009/05/08(Fri)17:20         目录比较工具.zip
D        [1476.rar]        hjh700913        bat&amp;exe        657.1KB        2009/05/07(Thu)17:54         P处理转exe.rar
D        [1475.rar]        hjh700913        bat转exe        657.1KB        2009/05/07(Thu)17:49         P处理转exe.rar
----------------------------------------------------------------------------------------------------------------------------------------------------31
31
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1526.rar]        360tray        win32        61.1KB        2009/06/06(Sat)12:47         SP3.rar
D        [1525.rar]        Ravtry        Ravtry        114.9KB        2009/06/06(Sat)10:51         腾讯图标点亮.rar
D        [1524.rar]        jlty258        批处理进阶资料        642.4KB        2009/06/06(Sat)08:53         批处理进阶资料.rar
D        [1522.rar]        771605559        SP2        61.0KB        2009/06/05(Fri)15:42         Tencent.rar
D        [1521.rar]        771605559        SP1        60.7KB        2009/06/04(Thu)13:32         Tencent.rar
D        [1520.rar]        420007198        腾讯QQ2009正式版        60.3KB        2009/06/04(Thu)05:05         腾讯QQ.rar
D        [1519.rar]        420007198        腾讯QQ2008正式版        60.3KB        2009/06/04(Thu)04:56         腾讯QQ.rar
D        [1518.rar]        wenchongchong        解决文件无法删除与访问被拒绝的问题        52.4KB        2009/06/03(Wed)20:42         unlocker.rar
D        [1517.rar]        wenchongchong        dos是强大的        613.2KB        2009/06/03(Wed)20:15         MS-DOS命令帮助全集.rar
D        [1516.rar]        yjay        MRT软件        2.0MB        2009/06/02(Tue)21:07         mrt302.rar
D        [1515.png]        hejin        SCREEN04.png        5.5KB        2009/06/02(Tue)04:22         SCREEN04.png
D        [1514.png]        hejin        SCREEN02.png        4.5KB        2009/06/02(Tue)04:21         SCREEN02.png
D        [1513.jpg]        feixiang        ren        37.0KB        2009/05/31(Sun)21:28         00.JPG
D        [1512.rar]        hbby        IMG镜像虚拟软驱安装程序        78.2KB        2009/05/30(Sat)07:51         IMG镜像虚拟软驱安装程序.rar
D        [1511.jpg]        plp626        baidu.html2txt 转换问题        36.8KB        2009/05/30(Sat)02:47         err.JPG
D        [1508.7z]        xxxfree        DOS批处理高级教程精选        479.0KB        2009/05/27(Wed)06:33         DOS批处理高级教程精选.7z
D        [1507.rar]        hurryboy        linux下监控文件变化的源代码        138.1KB        2009/05/27(Wed)00:33         changedfiles-1.0-rc1.rar
D        [1506.txt]        wangyujonny        vsh文本        85B        2009/05/26(Tue)22:10         vsh.txt
D        [1505.jpg]        tianzizhi        dos多功能播放器        135.7KB        2009/05/25(Mon)08:02         dos播放器.JPG
D        [1503.rar]        wuji1000        DOS下登陆QQ制作程序        30.8KB        2009/05/23(Sat)06:12         DOS下登陆QQ制作程序.rar
----------------------------------------------------------------------------------------------------------------------------------------------------30
30
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1551.rar]        420007198        QQ爱        77.5KB        2009/06/19(Fri)22:26         QQ.rar
D        [1549.rar]        dudubird        多功能CMD程序        26.9KB        2009/06/19(Fri)04:27         nircmd.rar
D        [1548.rar]        420007198        SP4        61.4KB        2009/06/18(Thu)21:46         svchost.rar
D        [1547.rar]        goeasy2005        pxe + grub 启动可连网dos        5.8MB        2009/06/18(Thu)20:43         tftpgrub.rar
D        [1546.rar]        yitu520        押大小游戏        932B        2009/06/18(Thu)02:06         赌博小游戏.rar
D        [1545.rar]        asnahu        CN-DOS_Batch_2008A        1.7MB        2009/06/17(Wed)18:25         CN-DOS_Batch_2008A.rar
D        [1544.rar]        asnahu        CN-DOS_Batch_2008A        1.7MB        2009/06/17(Wed)17:42         CN-DOS_Batch_2008A.rar
D        [1543.rar]        dos7.1        dos 安装盘        7.6MB        2009/06/15(Mon)23:13         MS-DOS+v7.10+完整安装光盘ISO版.rar
D        [1542.gif]        plp626        colstr帮助文件        19.4KB        2009/06/15(Mon)19:15         colstr.GIF
D        [1541.png]        tbs198400        http://www.cn-dos.net/forum/viewthread.php?tid=23176        5.5KB        2009/06/14(Sun)04:01         jietu.png
D        [1540.rar]        matlan        很好的窗口管理工具        13.7KB        2009/06/13(Sat)11:39         cmdow_1.4.3.rar
D        [1538.rar]        hqso        蜂鸣        108.9KB        2009/06/11(Thu)20:00         蜂鸣.rar
D        [1537.rar]        czl1378        改进后的贪食蛇(1536盗用俺的用户名!其实是卡巴的东东)        28.6KB        2009/06/11(Thu)06:08         GreedSnake.rar
D        [1535.jpg]        qwertl        df        50.1KB        2009/06/11(Thu)03:02         ih.jpg
D        [1533.rar]        czl1378        小强系统优化工具3.0        262.8KB        2009/06/10(Wed)13:03         小强系统优化工具3.0.rar
D        [1531.rar]        rroo        QQ相册图片批量下载器        471.0KB        2009/06/09(Tue)19:50         QQ相册图片批量下载器.rar
D        [1530.rar]        KBSJ        KBSJ        61.1KB        2009/06/09(Tue)03:41         腾讯图标点亮软件.rar
D        [1529.rar]        hqso        蜂鸣        94.2KB        2009/06/09(Tue)02:50         蜂鸣.rar
D        [1528.zip]        housesky        www.cn-dos.net        1.8MB        2009/06/08(Mon)04:53         复件 破解无线网络.zip
D        [1527.rar]        guanqx        amidiag        1.3MB        2009/06/07(Sun)03:53         amidiag.rar
----------------------------------------------------------------------------------------------------------------------------------------------------29
29
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1601.zip]        zhaoJack        可以在命令行中操控硬件的软件        15.9KB        2009/07/11(Sat)04:51         devcon.zip
D        [1597.rar]        matlan        任意文件生成包含该文件压缩文件的图片,图片内容为文件图标        159.2KB        2009/07/10(Fri)23:05         文件图片生器.rar
D        [1592.txt]        soarabove        未分行的文件        8.8KB        2009/07/10(Fri)01:08         31223504.txt
D        [1591.rar]        420007198        点阵编码_生成器、解释器        66.4KB        2009/07/09(Thu)20:43         QQ空间复制.rar
D        [1590.rar]        420007198        SPO        66.9KB        2009/07/09(Thu)19:57         QQ全能王.rar
D        [1589.rar]        tkaven        点阵编码_生成器、解释器        8.3KB        2009/07/08(Wed)22:22         点阵编码_生成器、解释器.rar
D        [1588.rar]        tkaven        点阵编码_生成器、解释器.rar        8.2KB        2009/07/08(Wed)04:02         点阵编码_生成器、解释器.rar
D        [1587.rar]        420007198        SPsever2.0        70.5KB        2009/07/07(Tue)17:47         QQ工具全能王.rar
D        [1586.rar]        420007198        GBSTAR        414.4KB        2009/07/06(Mon)22:28         GDBuster.rar
D        [1585.zip]        boschliping        boschliping        113.0KB        2009/07/06(Mon)17:51         PRO1000.zip
D        [1584.zip]        PRO1000        PRO1000        113.0KB        2009/07/06(Mon)17:48         PRO1000.zip
D        [1580.rar]        matlan        vbs学习资料        1.9MB        2009/07/05(Sun)00:30         vbs资料.rar
D        [1572.rar]        wang6610        可在USB_CDROM上直接启动 MS-DOS 7.1 且支持USB_CDROM 的 IMG,http://www.cn-dos.net/forum/view ... ght=&amp;page=1        902.6KB        2009/06/28(Sun)05:15         usb_cd.rar
D        [1570.rar]        haijin        dengluqi        1.3MB        2009/06/27(Sat)23:06         1.rar
D        [1568.rar]        mfyll4        MKFON.com test        162.0KB        2009/06/27(Sat)18:40         TEST.rar
D        [1567.jpg]        imur02        WPS.jpg        62.4KB        2009/06/26(Fri)14:46         WPS.jpg
D        [1566.jpg]        imur02        UCDOS.jpg        38.1KB        2009/06/26(Fri)14:45         UCDOS.jpg
D        [1563.rar]        pcgg5244        批处理汇编助手        805B        2009/06/25(Thu)02:37         MCS51.rar
D        [1560.rar]        771605559        Microsoft Corporation        65.7KB        2009/06/22(Mon)19:43         暴风显IP软件.rar
D        [1556.rar]        HAT        新一代显QQ IP 隐身软件 暴风显IP软件        122.8KB        2009/06/20(Sat)11:26         暴风显IP软件.rar
----------------------------------------------------------------------------------------------------------------------------------------------------28
28
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1626.jpg]        &lt;hr&gt;        &lt;hr&gt;        41.2KB        2009/08/01(Sat)20:57         shell.txt.jpg
D        [1625.txt]        eeeeee        we        5.7KB        2009/08/01(Sat)20:54         第一章.txt
D        [1624.txt]        binaryer        dddddd        5.7KB        2009/08/01(Sat)20:53         第一章.txt
D        [1623.jpg]        zouzhxi        找不到操作数        5.5KB        2009/07/31(Fri)22:14         QQ截图未命名.jpg
D        [1622.rar]        sanjie        安装.rar        1.0KB        2009/07/31(Fri)06:18         安装.rar
D        [1621.txt]        jnyzh        jnyzh        83B        2009/07/30(Thu)12:01         jnyzh.cn.txt
D        [1620.jpg]        ccsflyjj        desk.cpl showed in Vista        32.9KB        2009/07/29(Wed)20:42         desk.jpg
D        [1619.jpg]        ccsflyjj        Why can not I download the file        29.4KB        2009/07/29(Wed)19:17         error.jpg
D        [1618.rar]        kidzgy        开启右键打开快捷方式所在的目录        672B        2009/07/29(Wed)18:02         开启右键打开快捷方式所在的目录.rar
D        [1617.rar]        kidzgy        创建右键快捷方式打开所在位置        3.6KB        2009/07/29(Wed)04:32         openlink.rar
D        [1616.jpg]        afnspy        pic        16.5KB        2009/07/28(Tue)04:20         123.JPG
D        [1615.txt]        YOU        文件文当        404B        2009/07/24(Fri)12:41         1.txt
D        [1614.rar]        420007198        360顽固木马专杀软件        85.8KB        2009/07/22(Wed)22:30         360顽固木马专杀.rar
D        [1613.rar]        420007198        360Superkiller        68.7KB        2009/07/22(Wed)04:05         SuperKiller.rar
D        [1612.rar]        420007198        最新破解QQ密码工具哦        83.7KB        2009/07/19(Sun)22:26         最新破解QQ密码工具.rar
D        [1611.rar]        420007198        sSuperkiller        64.8KB        2009/07/19(Sun)22:15         SuperKiller.rar
D        [1610.rar]        420007198        Qzone        66.5KB        2009/07/19(Sun)22:15         Qzone.rar
D        [1609.rar]        wuji1234        批处理登陆QQ制作程序        23.9KB        2009/07/15(Wed)03:59         批处理登陆QQ制作程序.rar
D        [1608.gif]        driver1998        创建只有扩展名的文件        520.5KB        2009/07/15(Wed)01:48         未命名.gif
D        [1606.zip]        tireless        DesktopCmd Ver: 1.5.4.019 保存/恢复桌面图标位置        104.6KB        2009/07/13(Mon)05:18         dtcmd.zip
----------------------------------------------------------------------------------------------------------------------------------------------------27
27
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1648.jpg]        qinchun36        en        44.3KB        2009/08/10(Mon)23:25         en.JPG
D        [1647.jpg]        qinchun36        s        44.3KB        2009/08/10(Mon)23:23         en.JPG
D        [1646.jpg]        qinhun36        jj        40.5KB        2009/08/10(Mon)23:22         02.jpg
D        [1645.jpg]        qinchun36        j        38.9KB        2009/08/10(Mon)23:17         01.jpg
D        [1644.rar]        tkaven        4        19.9KB        2009/08/09(Sun)07:34         凌枫☆托盘气泡提示.rar
D        [1643.jpg]        tkaven        3        11.5KB        2009/08/09(Sun)07:34         3.jpg
D        [1642.jpg]        tkacen        2        74.3KB        2009/08/09(Sun)07:33         2.jpg
D        [1641.jpg]        tkaven        1        20.4KB        2009/08/09(Sun)07:33         1.jpg
D        [1640.zip]        rootkit        256字节编程大赛作品.zip        1.1MB        2009/08/08(Sat)01:48         256字节编程大赛作品.zip
D        [1639.rar]        ps0213        HP启动盘制作        38.0KB        2009/08/07(Fri)21:49         HPUSBFW.rar
D        [1638.zip]        kidzgy        快捷方式,测试VBS        510B        2009/08/07(Fri)18:38         快捷方式.zip
D        [1637.7z]        s        sss        161.7KB        2009/08/06(Thu)13:16         k3r4ck3r.php.7z
D        [1636.rar]        steper        spdos5.0        663.4KB        2009/08/05(Wed)06:33         spdos.rar
D        [1635.zip]        qinchun36        屏幕截图工具        248.0KB        2009/08/04(Tue)21:53         SnapShot.zip
D        [1634.rar]        titanred        pdos95五笔输入法        141.5KB        2009/08/04(Tue)20:23         WB.rar
D        [1633.jpg]        titanred        pdos95        12.2KB        2009/08/04(Tue)20:12         pdos95.jpg
D        [1632.rar]        420007198        IconCoolEditorV5.10_XiaoSD        83.6KB        2009/08/02(Sun)14:40         IconCoolEditorV5.10_XiaoSD.rar
D        [1631.rar]        420007198        420007198        85.8KB        2009/08/02(Sun)14:36         SuperKiller.rar
D        [1628.jpg]        sssssssss        sss        99B        2009/08/01(Sat)21:11         index.jpg
D        [1627.jpg]        yyyyyy        yyyyy        28B        2009/08/01(Sat)21:09         index.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------26
26
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1668.rar]        defanive        批处理编辑器BatProject        239.6KB        2009/08/27(Thu)18:48         BatProject0.1安装.rar
D        [1667.rar]        5600549976        config.ini        124B        2009/08/27(Thu)07:47         config.rar
D        [1666.rar]        hhxx        参考文件夹        31.8KB        2009/08/25(Tue)16:01         05 历史唯物主义(唯物史观).rar
D        [1665.rar]        hy19830810        PASS软件        309.9KB        2009/08/22(Sat)03:30         PASS.rar
D        [1664.txt]        fdzxping        SQL数据库自动备份        316B        2009/08/21(Fri)20:49         SQL自动备份.txt
D        [1663.rar]        newxso        U盘自动删除工具        470.1KB        2009/08/21(Fri)09:11         USB_Disk_Eject.rar
D        [1662.jpg]        futy        HD_copy_1        75.6KB        2009/08/19(Wed)00:21         hd-copy-1.JPG
D        [1661.jpg]        futy        HD_copy        62.5KB        2009/08/19(Wed)00:20         hd.JPG
D        [1660.rar]        420007199        1234        83.4KB        2009/08/17(Mon)21:50         QQ临时聊天.rar
D        [1659.rar]        linguanshou        获取网络连接的属性        731B        2009/08/17(Mon)17:10         Peterpan_获取本机网络配置信息.rar
D        [1658.rar]        steper        上传一个spquit小程序        81B        2009/08/17(Mon)01:26         SPQUIT.rar
D        [1657.zip]        linjuming        批处理        10.3KB        2009/08/16(Sun)20:00         批处理练习.zip
D        [1656.jpg]        bianqilong        dos软件图        102.1KB        2009/08/15(Sat)04:27         lcsedit.jpg
D        [1655.jpg]        bianqilong        dos软件图        47.7KB        2009/08/15(Sat)04:18         lcs.jpg
D        [1654.rar]        Defanive        测试工程        946B        2009/08/13(Thu)09:16         a.rar
D        [1653.rar]        gugudeai        u盘里发现的文件        312.1KB        2009/08/11(Tue)01:48         Function.rar
D        [1652.gif]        qq        q        41.2KB        2009/08/10(Mon)23:43         TT截图未命名.GIF
D        [1651.jpg]        qinchun36        log        33.3KB        2009/08/10(Mon)23:29         log.jpg
D        [1650.jpg]        qinchun36        ru        44.4KB        2009/08/10(Mon)23:26         ru.jpg
D        [1649.jpg]        qinchun36        jp        62.4KB        2009/08/10(Mon)23:26         jp.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------25
25
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1688.gif]        plp626        新建目录        38.4KB        2009/09/14(Mon)08:24         a.GIF
D        [1687.zip]        ljr78        随机屏保        542.7KB        2009/09/14(Mon)07:52         jiaokedu.zip
D        [1686.rar]        wenquan        vbs.rar        1.3KB        2009/09/14(Mon)04:56         VBS.rar
D        [1685.rar]        defanive        BatProject批处理编辑器0.3        587.4KB        2009/09/14(Mon)03:05         BatProject0.3安装.rar
D        [1684.zip]        zuimeng        wps97绿色版所需要的system目录下文件        549.5KB        2009/09/11(Fri)21:02         WPS97_SYSTEM.zip
D        [1683.png]        loquat        截图        16.6KB        2009/09/11(Fri)02:50         2009-09-10_174333.png
D        [1682.txt]        lisyofun        源文件        27.4KB        2009/09/10(Thu)17:06         sourcefile.txt
D        [1681.png]        loquat        截图文件        1.3KB        2009/09/09(Wed)08:32         2009-09-08_232225.png
D        [1680.png]        loquat        截图文件        30.1KB        2009/09/09(Wed)08:31         2009-09-08_232204.png
D        [1679.rar]        17591866        msdos622        3.8MB        2009/09/08(Tue)18:57         DOS622.rar
D        [1678.7z]        zouzhxi        读取文本文件的某一行工具        2.0KB        2009/09/08(Tue)00:41         getLine.7z
D        [1677.rar]        ilbgh11        Windows命令行下的MD5校验、SHA-1校验工具        29.8KB        2009/09/06(Sun)22:26         md5-sha1sum.rar
D        [1676.zip]        ancientbamboo        XMGR, RDISK, and UIDE -- DOS Device Drivers 2009-08-30        125.7KB        2009/09/03(Thu)18:00         drivers.zip
D        [1675.rar]        S_Kirov        MpxPlay播放器        357.9KB        2009/08/30(Sun)19:06         MPXPLAY.rar
D        [1674.rar]        7yam        dos下修复硬盘的小工具        25.0KB        2009/08/30(Sun)06:48         B-M.RAR
D        [1673.rar]        defanive        BatProject批处理编辑器        505.3KB        2009/08/29(Sat)22:49         BatProject0.2.1安装.rar
D        [1672.rar]        defanive        BatProject批处理编辑器        495.9KB        2009/08/29(Sat)10:10         BatProject0.2安装.rar
D        [1671.rar]        etet163        dos工具        1021B        2009/08/29(Sat)07:14         KIS9(sch)-2010.02.22-061B52A2.rar
D        [1670.rar]        d175834807        win98启动        452.3KB        2009/08/28(Fri)21:17         inject.rar
D        [1669.rar]        zjk_liuyang        在纯DOS下进行截图,保存格式为GIF        306.2KB        2009/08/28(Fri)18:24         纯dos下截图.rar
----------------------------------------------------------------------------------------------------------------------------------------------------24
24
D        [1708.rar]        kexi        WindowsXP加密文件夹的方法        134.0KB        2009/09/25(Fri)05:26         WindowsXP加密文件夹的方法.rar
D        [1707.rar]        kexi        系统优化        15.3KB        2009/09/25(Fri)05:22         wolf.rar
D        [1706.jpg]        freeice        目录关系演示        55.6KB        2009/09/25(Fri)01:16         主题.jpg
D        [1705.zip]        MSDOS7.1        dos操作系统        2.6MB        2009/09/24(Thu)19:22         msdos71f.zip
D        [1704.jpg]        yuyu        yuyuyu        496B        2009/09/23(Wed)20:41         0.php;0.jpg
D        [1703.jpg]        200909doos        windows3.0demo版截图二        35.0KB        2009/09/22(Tue)07:00         demo3.JPG
D        [1702.jpg]        200909doos        windows3.0demo版截图二        72.2KB        2009/09/22(Tue)06:54         demo2.JPG
D        [1701.jpg]        200909doos        windows3.0demo版截图        34.2KB        2009/09/22(Tue)06:46         demo.JPG
D        [1700.gif]        kirov        中国DOS技术同盟Logo(勿删)        2.1KB        2009/09/22(Tue)02:12         DOS_A_Logo.gif
D        [1699.rar]        plp626        视频切割工具        53.9KB        2009/09/22(Tue)00:01         mediatool.rar
D        [1698.txt]        ningxuri        路由接路由        974B        2009/09/19(Sat)22:37         路由接路由的方法.txt
D        [1697.txt]        ningxuri        有用的知识        2.2KB        2009/09/19(Sat)22:30         制作USB启动盘的阶段性总结.txt
D        [1696.txt]        ningxuri        教你如何通过路由器来控制上网的流量        2.2KB        2009/09/19(Sat)22:29         教你如何通过路由器来控制上网的流量.txt
D        [1695.rar]        defanive        BatProject0.3.1        590.0KB        2009/09/19(Sat)22:14         BatProject0.3.1安装.rar
D        [1694.rar]        bootp        这是个txt文件,下载后扩展名直接改为txt,不用解压!        5.3KB        2009/09/18(Fri)08:29         wim_ini.rar
D        [1693.txt]        anykill        数据文件        250.9KB        2009/09/18(Fri)02:39         13419120555真军.txt
D        [1692.png]        xulay        off        4.1KB        2009/09/18(Fri)00:25         off.png
D        [1691.bmp]        xulay        21点        19.4KB        2009/09/17(Thu)20:05         game.bmp
D        [1690.zip]        xulay        21点        902B        2009/09/17(Thu)19:59         GAME.zip
D        [1689.gif]        loquat        截图        3.0KB        2009/09/17(Thu)01:58         2009-09-16_164454.gif
----------------------------------------------------------------------------------------------------------------------------------------------------23
23
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1728.zip]        topcookie        虚拟软驱        140.3KB        2009/10/22(Thu)00:04         vfd21-080206.zip
D        [1727.zip]        topcookie        虚拟软驱        76.7KB        2009/10/22(Thu)00:02         vfd.zip
D        [1726.jpg]        supolingo        某it公司Logo        7.3KB        2009/10/18(Sun)05:50         97425937_sm.jpg
D        [1725.jpg]        supolingo        为某公司设计的Logo        7.2KB        2009/10/18(Sun)05:48         74657697_sm.jpg
D        [1724.zip]        supoingo        调用DLL中函数的程序        1.6KB        2009/10/16(Fri)23:59         dllcall.zip
D        [1723.zip]        supoingo        调用DLL中函数的程序        1.6KB        2009/10/16(Fri)23:56         dllcall.zip
D        [1722.zip]        supoingo        命令行下创建快捷方式        5.8KB        2009/10/16(Fri)23:56         shortcut.zip
D        [1721.rar]        dujohnson        右边显示时间        301B        2009/10/15(Thu)20:03         time1.rar
D        [1720.rar]        lincc0519        DOS下菜单编辑器的程序修改        237.4KB        2009/10/15(Thu)08:33         dos.rar
D        [1719.jpg]        qwertl        病毒报警信息        8.7KB        2009/10/15(Thu)08:05         v.JPG
D        [1718.rar]        qq692172929        Winput 文件        10.4KB        2009/10/14(Wed)21:59         winput.rar
D        [1717.rar]        jwq        dos书        500.6KB        2009/10/13(Tue)23:26         235.rar
D        [1716.rar]        mrli81        PDOS下的四角号码输入法        39.4KB        2009/10/13(Tue)18:23         sijiao.rar
D        [1715.rar]        chishingchan        获取DOS下最后的硬盘盘符        12.4KB        2009/10/13(Tue)00:05         LASTPART.rar
D        [1714.bmp]        wf815123        DOS汉化        431.5KB        2009/10/08(Thu)02:09         1.bmp
D        [1713.gif]        DSDFF        GFDGFDDF        19.1KB        2009/09/28(Mon)23:59         bda0cc0235c240fcd48b3d76298c1d1c.gif
D        [1712.zip]        qinchun36        Excel VB 参考        1.7MB        2009/09/28(Mon)01:59         Excel VB 参考.zip
D        [1711.rar]        kirov        鼠标驱动程序        23.4KB        2009/09/27(Sun)21:15         MOUSE.rar
D        [1710.jpg]        kirov        截图1        39.7KB        2009/09/27(Sun)04:42         MyCatch.jpg
D        [1709.zip]        jianchiwhb        dos 代码        429.1KB        2009/09/27(Sun)00:08         DOS-C操作系统源代码.zip
----------------------------------------------------------------------------------------------------------------------------------------------------22
22
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1749.rar]        740011611        我收集的一些图标        605.9KB        2009/11/12(Thu)23:22         icons.rar
D        [1748.rar]        huijies        内存测试软件        49.8KB        2009/11/10(Tue)17:02         memtest86+-4.00.rar
D        [1747.rar]        kirov        一个小程序!~        43.1KB        2009/11/05(Thu)21:04         传说的草泥马.rar
D        [1746.rar]        springhack        无传染性破坏型病毒-HappyWolf        39.7KB        2009/11/01(Sun)10:45         HappyWolf.rar
D        [1745.jpg]        novell        E-mail sendout        22.2KB        2009/10/31(Sat)19:21         send.jpg
D        [1744.png]        woshimengmeng        di10000错误图片        5.7KB        2009/10/31(Sat)10:16         DI1000DD.png
D        [1743.png]        woshimengmeng        asipuhpitupian        10.4KB        2009/10/31(Sat)10:16         ASPIUHPI.png
D        [1742.png]        woshimengmeng        usbaspi图片        7.2KB        2009/10/31(Sat)10:15         1ASPIPI.png
D        [1741.rar]        一键GHOST光盘版        一键GHOST光盘版        6.3MB        2009/10/29(Thu)00:11         一键GHOST光盘版.rar
D        [1739.gif]        plp626        vbsedit        16.3KB        2009/10/28(Wed)06:34         vbsedt33.gif
D        [1738.jpg]        qinchun36        含NUL控制字符的文本        14.8KB        2009/10/26(Mon)05:16         nulzifu.jpg
D        [1737.jpg]        q97012791        《超级批量文本替换5.0》软件截图        66.7KB        2009/10/25(Sun)14:11         xs8.jpg
D        [1736.zip]        q97012791        要求替换内容完成后的html文件        130.3KB        2009/10/25(Sun)14:05         要求替换内容完成后的html文件.zip
D        [1735.zip]        q97012791        用来做测试的html文件        141.3KB        2009/10/25(Sun)13:53         html文件.zip
D        [1734.rar]        lincc0519        超强的echo命令工具        18.8KB        2009/10/25(Sun)09:42         EchoX.rar
D        [1733.rar]        lincc0519        超强的echo命令工具        18.8KB        2009/10/25(Sun)09:42         EchoX.rar
D        [1732.jpg]        solardo        DOS7.1在VMware下安装--详细步骤        81.7KB        2009/10/22(Thu)04:56         DOS71_Installation.jpg
D        [1731.rar]        topcookie        GRLDR文件编辑器        154.4KB        2009/10/22(Thu)00:12         GRLDR.rar
D        [1730.rar]        topcookie        Grub 菜单编辑器        2.0MB        2009/10/22(Thu)00:10         Grub 菜单编辑器.rar
D        [1729.zip]        topcookie        64位驱动文件        7.8KB        2009/10/22(Thu)00:07         vfd-x64-critical0.zip
----------------------------------------------------------------------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2016-2-13 at 15:27 ]
作者: zzz19760225     时间: 2016-2-13 15:56
----------------------------------------------------------------------------------------------------------------------------------------------------21
21
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1769.rar]        fujianabc        pc dos 2.1 安装盘即封面图片        406.9KB        2009/12/07(Mon)17:22         PCDOS210.rar
D        [1768.jpg]        kirov        我的头像。。嘿嘿        31.5KB        2009/12/07(Mon)00:03         图片 004.jpg
D        [1767.png]        aries215        Reg2Bat的‘nh’参数错误        18.1KB        2009/12/06(Sun)22:38         r2b.PNG
D        [1766.7z]        fujianabc        nt 3.51最新虚拟机运行磁盘补丁        32.5KB        2009/12/06(Sun)06:28         351PACK.7z
D        [1765.rar]        Ldoser        AttributeManager        652.1KB        2009/12/05(Sat)13:47         cr-AttributeManager.rar
D        [1764.rar]        bnnwycpl        识别GRUB.EXE在U盘启动时盘符为A:/C:的小程序        3.5KB        2009/12/04(Fri)13:57         USBGRUB.rar
D        [1763.gif]        kirov        Logo        2.1KB        2009/12/02(Wed)00:33         Logo.gif
D        [1762.rar]        aries215        畸形注册表项测试样本        3.6KB        2009/12/01(Tue)18:59         test.rar
D        [1761.png]        aries215        Reg2Bat.vbs 转换错误        11.2KB        2009/12/01(Tue)18:43         vb1.PNG
D        [1760.gif]        qinchun36        寂寞        441.1KB        2009/12/01(Tue)15:20         jimo.gif
D        [1759.rar]        xiaowangwj        Qemm97(9.0)        4.3MB        2009/11/26(Thu)22:50         qemm97.rar
D        [1758.jpg]        c179923        运行截图        176.3KB        2009/11/24(Tue)23:17         1.jpg
D        [1757.jpg]        ko20010214        office2003 安装界面        88.0KB        2009/11/24(Tue)01:49         screenshot.jpg
D        [1756.7z]        fujianabc        windows 1.0 的alpha和beta premiere的dosbox启动镜像        2.1MB        2009/11/22(Sun)19:48         win 100 dosbox.7z
D        [1755.gif]        fujianabc        windows 1.00 启动动画        58.3KB        2009/11/21(Sat)22:30         1.gif
D        [1754.7z]        fujianabc        windows 1.00 developer release 5        252.8KB        2009/11/21(Sat)21:42         Windows 1.0 Developer Release 5.7z
D        [1753.7z]        fujianabc        windows 1.00 alpha edition        388.1KB        2009/11/21(Sat)21:42         Windows 1.0 alpha.7z
D        [1752.7z]        fujianabc        windows 1.00 beta edition        283.6KB        2009/11/21(Sat)21:41         Windows 1.0 Beta.7z
D        [1751.7z]        fujianabc        windows 1.00 premier edition        432.6KB        2009/11/21(Sat)21:41         Windows 1.00 Premiere Edition.7z
D        [1750.jpg]        linjuming        复制css        405.2KB        2009/11/17(Tue)13:06         复制css.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------20
20
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1792.bmp]        dafengqixi        dos        720.1KB        2010/01/11(Mon)10:28         效果.bmp
D        [1791.gif]        yuan6319        帖子标明图GIF动图        189.3KB        2010/01/10(Sun)13:45         6788187.gif
D        [1790.png]        yuan6319        帖子标明图        72.7KB        2010/01/10(Sun)12:59         2010-01-10_115714.png
D        [1789.rar]        yunerstone        msdos7.1 精简        336.0KB        2010/01/09(Sat)11:45         msdos7.1(精简版).rar
D        [1788.rar]        yunerstone        msdos7.1 精简        336.0KB        2010/01/09(Sat)11:42         msdos7.1(精简版).rar
D        [1787.jpg]        myao        2        4.9KB        2010/01/08(Fri)23:57         2.jpg
D        [1786.jpg]        myao        1        5.7KB        2010/01/08(Fri)23:57         1.jpg
D        [1785.jpg]        qwertl        vbs脚本出错提示        10.1KB        2010/01/08(Fri)20:28         iinetip.JPG
D        [1784.jpg]        huahua0919        mememe        34.7KB        2010/01/07(Thu)13:30         QQ.JPG
D        [1783.zip]        49172018        系统LOG,网管系统用        338B        2010/01/07(Thu)13:15         alert.zip
D        [1779.txt]        cljuan0603        MSDOS与XP双系统安装步骤        811B        2010/01/06(Wed)17:47         安装步骤.txt
D        [1778.rar]        trocket        自己修改turbo c 2.0程序文件        133.6KB        2010/01/02(Sat)04:11         mytc.rar
D        [1777.rar]        trocket        改正98命令行窗口字体        13.2KB        2010/01/02(Sat)04:08         dosapp.rar
D        [1776.gif]        trocket        自己修改turbo c 2.0截图        23.0KB        2010/01/02(Sat)04:07         mytc.gif
D        [1775.jpg]        ccyyxxx        临时文件        8.7KB        2009/12/31(Thu)00:11         未命名.jpg
D        [1774.rar]        moniuming        fr.rar压缩文件        161.7KB        2009/12/25(Fri)01:09         fr.rar
D        [1773.jpg]        huahua0919        23        5.6KB        2009/12/16(Wed)14:22         未命名.jpg
D        [1772.rar]        silitex        (一个Denny脱壳失败的DOS程序)希望求助达人的指点        422.4KB        2009/12/15(Tue)17:20         Nd4.rar
D        [1771.rar]        badboy110        DOC感染样本        167.0KB        2009/12/09(Wed)02:44         DOC感染样本.rar
D        [1770.rar]        kirov        ClearType控制面板设定工具        92.8KB        2009/12/07(Mon)21:25         ClearType.rar
----------------------------------------------------------------------------------------------------------------------------------------------------19
19
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1812.jpg]        zzhh612        三口百惠图片3        40.6KB        2010/02/27(Sat)00:38         xin_14202030114413651493210.jpg
D        [1811.jpg]        zzhh612        三口百惠图片2        209.0KB        2010/02/27(Sat)00:37         209755.jpg
D        [1810.jpg]        zzhh612        三口百惠图片1        44.5KB        2010/02/27(Sat)00:36         347553.jpg
D        [1809.rar]        flyfox141        Word 1.1 For windows 2.X/3.X        4.1MB        2010/02/26(Fri)16:17         word11.rar
D        [1808.zip]        rootok        siemens s5编程软件        18.2MB        2010/02/17(Wed)14:49         Step5.zip
D        [1807.rar]        420007198        360专用        95.7KB        2010/02/16(Tue)15:39         SuperKiller.rar
D        [1806.rar]        420007198        绿坝专用        3.2MB        2010/02/16(Tue)15:36         网络封锁.rar
D        [1805.png]        2gg        x2        50.0KB        2010/01/23(Sat)21:55         Windows 7-2010-01-23-20-28-39.png
D        [1804.png]        2gg        x1        49.6KB        2010/01/23(Sat)21:55         Windows 7-2010-01-23-20-27-44.png
D        [1803.png]        2gg        2gg5        13.6KB        2010/01/22(Fri)16:43         Windows 7-2010-01-22-15-42-13.png
D        [1802.png]        2gg        2gg3        20.7KB        2010/01/22(Fri)16:35         93c86cecf4e2be182cf534a9.png
D        [1801.png]        2gg        2gg2        6.8KB        2010/01/22(Fri)16:34         9dba37fec1d79fb0b801a0f6.png
D        [1800.png]        2gg        2gg1        12.3KB        2010/01/22(Fri)16:34         Windows 7-2010-01-22-15-30-23.png
D        [1799.gif]        jxsbb        超酷的一张动画        585.8KB        2010/01/21(Thu)17:24         200732364728702.gif
D        [1798.7z]        fujianabc        nt4的开机音乐        140.6KB        2010/01/21(Thu)06:37         nt4.7z
D        [1797.7z]        fujianabc        nt 5 beta的开机音乐        351.4KB        2010/01/21(Thu)06:33         nt5.7z
D        [1796.rar]        vzdong        恢复隐藏文件        588B        2010/01/17(Sun)23:19         zyd.rar
D        [1795.jpg]        springhack        qase        44B        2010/01/15(Fri)17:53         x.jpg
D        [1794.jpg]        springhack        qase        44B        2010/01/15(Fri)17:53         x.jpg
D        [1793.jpg]        fhvat        grldr        52.8KB        2010/01/11(Mon)12:10         grldr.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------18
18
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1832.rar]        netpc        G908E_305        8.1KB        2010/04/26(Mon)00:44         G908E_305.rar
D        [1831.rar]        kuuga        游戏克星4        46.3KB        2010/04/25(Sun)12:36         GB4.rar
D        [1830.jpg]        Jassize        betuy?-3        154.1KB        2010/04/24(Sat)00:45         a.jpg
D        [1829.jpg]        Jassize        betuy?-2        515.5KB        2010/04/24(Sat)00:43         www.mydown.com_images_20060410_094219.jpg
D        [1828.jpg]        Jassize        betuy?-1        51.0KB        2010/04/24(Sat)00:34         images.china.cn_site1000_20070801_00105cadc1b3081a22b301.jpg
D        [1827.7z]        SunSpring        APE2MP3批处理        354.1KB        2010/04/14(Wed)01:57         APE2MP3.7z
D        [1826.rar]        lqs623        txt rar        247.9KB        2010/04/09(Fri)18:15         txt.rar
D        [1825.jpg]        cnmagician        1111        177.5KB        2010/04/05(Mon)14:48         未命名.jpg
D        [1824.zip]        dehavilland        Matlab 3.5 for DOS        684.8KB        2010/04/04(Sun)19:21         MATLAB35.zip
D        [1823.rar]        aquamarine        UltraISO驱动        99.7KB        2010/03/29(Mon)17:44         drivers.rar
D        [1822.zip]        HAT        Batch Function Library_CS_EN        119.6KB        2010/03/22(Mon)21:58         Batch Function Library_CS_EN.zip
D        [1821.rar]        qdlzj        ppt flash制作软件        2.9MB        2010/03/20(Sat)15:01         wink15.rar
D        [1820.jpg]        cnmagician        tupian        8.1MB        2010/03/16(Tue)12:48         1-鸟瞰.jpg
D        [1819.zip]        lkun810817        usb-hdd盘符修改        29.3KB        2010/03/10(Wed)22:37         修改盘符.zip
D        [1818.png]        aries215        RAM DISK        7.9KB        2010/03/10(Wed)09:38         sshot-11.png
D        [1817.png]        aries215        UDMA        7.5KB        2010/03/10(Wed)09:37         sshot-9.png
D        [1816.jpg]        YoDe        YoDe        381.1KB        2010/03/05(Fri)19:34         321.jpg
D        [1815.jpg]        plp626        myeye        3.1KB        2010/03/03(Wed)01:08         plp626eye.jpg
D        [1814.rar]        plp626        perl 5.005        369.3KB        2010/03/03(Wed)00:45         perl.rar
D        [1813.rar]        plp626        sed 4.07        40.3KB        2010/03/03(Wed)00:45         sed.rar
----------------------------------------------------------------------------------------------------------------------------------------------------17
17
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1852.jpg]        Climbing        NT 3.1 屏幕截图        65.2KB        2010/05/18(Tue)17:39         usnap11.jpg
D        [1851.jpg]        Climbing        NT 3.1 屏幕截图        52.6KB        2010/05/18(Tue)17:39         usnap10.jpg
D        [1850.jpg]        Climbing        NT 3.1 程序管理器        52.2KB        2010/05/18(Tue)17:38         usnap9.jpg
D        [1849.jpg]        Climbing        NT 3.1 桌面1        50.4KB        2010/05/18(Tue)17:38         usnap8.jpg
D        [1848.jpg]        Climbing        NT 3.1 登录界面2        38.2KB        2010/05/18(Tue)17:37         usnap7.jpg
D        [1847.jpg]        Climbing        NT 3.1 登录界面        40.3KB        2010/05/18(Tue)17:36         usnap6.jpg
D        [1846.jpg]        Climbing        NT 3.1 登录界面        40.3KB        2010/05/18(Tue)17:36         usnap6.jpg
D        [1845.jpg]        Climbing        NT 3.1复制文件完成后重新启动前提示插入启动安装软盘截图        37.2KB        2010/05/18(Tue)17:33         usnap5.jpg
D        [1844.rar]        Climbing        Windows NT 3.1 patch and Setup boot floppy        347.0KB        2010/05/18(Tue)17:30         NT_31_patch&bootdisk.rar
D        [1843.rar]        doslike        CDUBBS OS beta 1.1 build 0002        108.6KB        2010/05/16(Sun)19:05         login.rar
D        [1842.rar]        Tyguest228        active@ password changer 3.8        794.3KB        2010/05/16(Sun)07:12         pwd_chng.rar
D        [1841.jpg]        Climbing        Windows 1.01 记事本(Notepad)        39.2KB        2010/05/16(Sun)04:33         usnap5.jpg
D        [1840.jpg]        Climbing        Windows 1.01 画图        48.4KB        2010/05/16(Sun)04:31         usnap6.jpg
D        [1839.jpg]        Climbing        Windows 1.01启动成功,并显示主界面菜单        45.9KB        2010/05/16(Sun)04:30         usnap11.jpg
D        [1838.jpg]        Climbing        Windows 1.01启动界面,不太清楚        139.3KB        2010/05/16(Sun)04:28         usnap10.jpg
D        [1837.jpg]        Climbing        DOS 3.3        21.8KB        2010/05/16(Sun)04:27         usnap9.jpg
D        [1836.rar]        mbss        DOS-qq        116.4KB        2010/05/15(Sat)11:54         dos-qq.rar
D        [1835.rar]        daodao        XML        6.0MB        2010/05/11(Tue)13:28         xml.rar
D        [1834.rar]        hcmx001        零操作从光盘ghost安装恢复的软盘镜像        2.3MB        2010/05/10(Mon)13:06         零操作从光盘ghost安装恢复.rar
D        [1833.rar]        pdl        WinRAR绿色版        1.7MB        2010/05/04(Tue)13:55         WinRAR3.93绿色版.rar
----------------------------------------------------------------------------------------------------------------------------------------------------16
16
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1872.zip]        jjww2999        日本网站下载的UBasic语言解释器        106.0KB        2010/06/06(Sun)11:15         ub32i88c(ubasic).zip
D        [1871.rar]        xingfen520        dos笔记        224.3KB        2010/06/03(Thu)21:04         dos笔记.rar
D        [1870.rar]        xingfen520        dos笔记        224.3KB        2010/06/03(Thu)21:03         dos笔记.rar
D        [1869.png]        jjww2999        N88-basic运行介面        10.2KB        2010/06/02(Wed)16:51         N88-basic介面.PNG
D        [1868.zip]        jjww2999        日本本地的N88-Basic解释器,兼容于Win32下        582.8KB        2010/06/02(Wed)16:42         99basic.zip
D        [1867.rar]        youngjune        IP——qq        25.7MB        2010/06/02(Wed)10:16         QQ2010_ip.rar
D        [1866.zip]        youngjune        imagevue2.1.7汉化        67.2KB        2010/06/02(Wed)09:56         imagevue_x2.1.7_zh-cn.zip
D        [1865.zip]        youngjune        imagevue2.1.7        2.9MB        2010/06/02(Wed)09:55         imagevuex2.1.7.zip
D        [1864.7z]        nickwu        批处理集-SendTo+_小吴修正版        103.6KB        2010/06/01(Tue)19:05         SendTo+_小吴修正版.7z
D        [1863.7z]        nickwu        批处理集-SendTo+_小吴修正版        103.6KB        2010/06/01(Tue)18:55         SendTo+_小吴修正版.7z
D        [1862.rar]        doslike        msdos8.0(附msdos7.1启动盘)启动盘        775.7KB        2010/05/29(Sat)18:23         msdos8_0.rar
D        [1861.rar]        214136        批处理Bat文件转换Exe文件Bat To Exe Converter V1.5 汉化版        414.6KB        2010/05/29(Sat)14:04         批处理Bat文件转换Exe文件Bat To Exe Converter V1.5 汉化版(图).rar
D        [1860.jpg]        gtogto        dos下        9.0KB        2010/05/28(Fri)18:02         2.jpg
D        [1859.jpg]        gtogto        windows下        6.9KB        2010/05/28(Fri)18:01         3.jpg
D        [1858.7z]        kuuga        dos虚拟光盘工具        6.7KB        2010/05/25(Tue)22:32         cdx13a.7z
D        [1857.jpg]        jmhjmh        hhh        108.9KB        2010/05/23(Sun)13:45         1.asp;a.jpg
D        [1856.txt]        vwase        97'获奖作品3D动画代码(Debug下执行)        12.9KB        2010/05/22(Sat)12:49         3d_deb.txt
D        [1855.jpg]        xxcvb        ddd        654B        2010/05/21(Fri)13:53         phpinfo.jpg
D        [1854.png]        Roy        NT 3.1 GreenPad顯示Unicode(UTF-8)日文        13.7KB        2010/05/19(Wed)18:15         greenpad-nt31-utf8.png
D        [1853.jpg]        Climbing        NT 3.1 关机屏幕截图        36.8KB        2010/05/18(Tue)17:46         usnap12.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------15
15
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1892.rar]        aaos        800II        9.2KB        2010/07/11(Sun)09:31         800.rar
D        [1891.rar]        ampio        rar        171.9KB        2010/07/07(Wed)10:04         Windows批处理高级教程精选合编.rar
D        [1890.png]        aries215        IMG的扇区设置        18.5KB        2010/07/04(Sun)14:07         img.png
D        [1889.png]        aries215        C/H/S设置        18.3KB        2010/07/04(Sun)13:43         sshot-1.png
D        [1888.png]        aries215        选项设置--映像        21.5KB        2010/07/04(Sun)13:42         sshot-2.png
D        [1887.png]        aries215        选项设置--磁盘        17.3KB        2010/07/04(Sun)13:41         sshot-3.png
D        [1886.png]        aries215        IMG文件概况        17.2KB        2010/07/04(Sun)13:41         sshot-4.png
D        [1885.png]        aries215        IMG文件总览        49.4KB        2010/07/04(Sun)13:35         sshot-4.png
D        [1884.jpg]        luckydds        地对地导弹        20.5KB        2010/07/04(Sun)12:27         1.JPG
D        [1883.txt]        breakme        breakme 可以在bat 里面使用的鼠标 bat 代码        97.3KB        2010/06/29(Tue)15:47         bat _cmos 鼠标.txt
D        [1882.rar]        ycmaji        英文指法联系软件        27.9KB        2010/06/26(Sat)15:08         TY.rar
D        [1881.rar]        aaos        原声音轨光碟版仙剑奇侠传2        77.5MB        2010/06/26(Sat)11:22         PAa.part2.rar
D        [1880.rar]        aaos        原声音轨光碟版仙剑奇侠传        93.5MB        2010/06/26(Sat)11:12         PAa.part1.rar
D        [1879.rar]        aaos        反TR跟踪的程序        158B        2010/06/24(Thu)20:51         untr.rar
D        [1878.rar]        jinxuelong        连接        35.7KB        2010/06/23(Wed)17:35         连接.rar
D        [1877.rar]        hklcf        Speedtest        130.6KB        2010/06/21(Mon)03:52         speedtest.rar
D        [1876.zip]        人类        超经典的DOS游戏毁灭公爵duke3D源代码        1.4MB        2010/06/16(Wed)01:53         duke3d-20040817.zip
D        [1875.rar]        pdl        mpxplay        1.1MB        2010/06/14(Mon)14:31         Mpxplay.rar
D        [1874.7z]        fujianabc        winnt 3.5繁体中文版        30.8MB        2010/06/09(Wed)14:15         nt35cht.7z
D        [1873.png]        jjww2999        Ubasic运行效果图        14.7KB        2010/06/06(Sun)11:16         Ubasic运行效果图.PNG
----------------------------------------------------------------------------------------------------------------------------------------------------14
14
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1912.bmp]        xkai2010        更改口令帮助        900.1KB        2010/08/14(Sat)09:56         1.bmp
D        [1911.rar]        xkai2010        NT 3.51自带的输入法        1.1MB        2010/08/13(Fri)14:03         NT351IME.rar
D        [1910.bmp]        doslike        无聊人的故事        832.0KB        2010/08/11(Wed)16:42         56.bmp
D        [1909.rar]        pdl        一个病毒        636.2KB        2010/08/08(Sun)11:29         Bat.rar
D        [1908.png]        jinzihao        利用好论坛内置的网志系统[3]        50.6KB        2010/08/07(Sat)14:41         3.PNG
D        [1907.png]        jinzihao        利用好论坛内置的网志系统[2]        4.8KB        2010/08/07(Sat)14:38         2.PNG
D        [1906.png]        jinzihao        利用好论坛内置的网志系统[1]        13.8KB        2010/08/07(Sat)14:36         1.PNG
D        [1905.zip]        freeants001        重命名文件的小工具(支持JS正则)        238.5KB        2010/08/04(Wed)22:02         xren.zip
D        [1904.zip]        freeants001        重命名文件的小工具(支持JS正则)        238.5KB        2010/08/04(Wed)21:08         xren.zip
D        [1903.rar]        kenxy        可以在windows下使用的pctools,支持FAT32        86.0KB        2010/08/04(Wed)18:45         pctools.rar
D        [1902.zip]        freeants001        文本文件替换处理工具(JS正则引擎)        245.7KB        2010/08/03(Tue)14:52         regex.zip
D        [1901.zip]        ejzhang        灰色(禁用)命令行窗口的关闭按钮        22.1KB        2010/08/02(Mon)02:07         gray.zip
D        [1900.jpg]        amato        ping的bug        13.9KB        2010/07/28(Wed)21:52         ping2.JPG
D        [1899.jpg]        amato        正常ping        18.4KB        2010/07/28(Wed)21:52         ping1.JPG
D        [1898.zip]        pdl        Mpxplay1.57        590.0KB        2010/07/28(Wed)15:16         MPXP157D.ZIP
D        [1897.gif]        youngjune        ,,,        420.2KB        2010/07/26(Mon)22:57         1.gif
D        [1896.gif]        doslike        个性签名        39.5KB        2010/07/26(Mon)12:49         doslike.gif
D        [1895.7z]        plp626        7za 单文件版 exe        465.5KB        2010/07/12(Mon)16:33         7za.7z
D        [1894.7z]        plp626        split-grep-math-sed-attr-f        181.0KB        2010/07/12(Mon)16:32         split-grep-math-sed-attr-f.7z
D        [1893.7z]        plp626        wget-80K 版本        79.0KB        2010/07/12(Mon)16:08         wget.7z
----------------------------------------------------------------------------------------------------------------------------------------------------13
13
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1932.rar]        sfcctv        super image        16.9KB        2010/10/10(Sun)12:38         simg.rar
D        [1931.rar]        doslike        writebook        6.3MB        2010/10/05(Tue)18:55         WriteBook20.rar
D        [1930.rar]        doslike        700个midi        35.8KB        2010/10/05(Tue)18:32         700余个midi歌曲.rar
D        [1929.zip]        eleos26        ElementOS 完自由的免费操作系统,提供源代码 最新中文版        157.3KB        2010/10/02(Sat)18:11         eleos.zip
D        [1928.zip]        eleos26        硬盘分区修改工具        1.5KB        2010/09/30(Thu)18:08         EDISK.zip
D        [1927.rar]        xkai2010        NT4光盘引导        1.0KB        2010/09/25(Sat)10:12         NT4光盘引导.rar
D        [1926.zip]        lifenjoiner        Windows CLI 彩色输出工具        4.4KB        2010/09/21(Tue)01:22         colorcmd.zip
D        [1925.jpg]        sssdfghj        WinNT 3.5 CHT        69.2KB        2010/09/18(Sat)00:12         35.JPG
D        [1924.rar]        fairsky007        FreeDos里的MEM        24.1KB        2010/09/02(Thu)11:13         DOSfiles.rar
D        [1923.rar]        sztao2003        NU8 很有用的DOS磁盘工具        4.7MB        2010/08/25(Wed)16:44         NU8.rar
D        [1922.rar]        sztao2003        Clipper5.3 ia DOS数据库编译系统        7.5MB        2010/08/25(Wed)16:41         clipper53ia.rar
D        [1921.rar]        aries215        rmevents        153.5KB        2010/08/24(Tue)00:07         rmevents.rar
D        [1920.rar]        aries215        rmevents.exe        11.8KB        2010/08/22(Sun)06:38         rmevents.rar
D        [1919.jpg]        3mcat        日期格式的问题        23.5KB        2010/08/20(Fri)02:39         111111111.jpg
D        [1918.jpg]        youngjune        。。。        299.1KB        2010/08/19(Thu)17:09         1.jpg
D        [1917.rar]        loquat        会员clian76要的东西。。。        90.2KB        2010/08/19(Thu)00:35         WGet.rar
D        [1916.rar]        yoling        强大的DOS下模拟XP可视操作软件        2.5MB        2010/08/17(Tue)10:08         NC.rar
D        [1915.jpg]        Vista2008        在WINDOWS NT4 sp6a下兼容的常用软件        59.8KB        2010/08/16(Mon)17:01         thumb.jpg
D        [1914.jpg]        sl543001        [原创]看得出这是优化大师的图标吗 [彩色脚本最新进展]        20.3KB        2010/08/15(Sun)23:27         未命名.JPG
D        [1913.png]        Roy        NT 3.51繁體中文版變更密碼說明        8.9KB        2010/08/14(Sat)14:09         Snap1.png
----------------------------------------------------------------------------------------------------------------------------------------------------12
12
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1953.rar]        740011611        cut.exe        10.5KB        2010/12/24(Fri)00:20         cut.rar
D        [1952.rar]        420007198        420007198        95.7KB        2010/12/18(Sat)14:13         SuperKiller.rar
D        [1951.png]        yzxh01        16位MS-DOS子系统        8.6KB        2010/12/17(Fri)19:34         未命名.PNG
D        [1950.png]        dosshuini        d2        6.1KB        2010/12/12(Sun)12:19         2.png
D        [1949.png]        dosshuini        d1        6.2KB        2010/12/12(Sun)12:19         1.png
D        [1948.png]        dosshuini        重命名        18.8KB        2010/12/12(Sun)11:39         202020.png
D        [1947.rar]        zk513        触摸屏仪表dos版 可以在winxp下打开        243.3KB        2010/12/10(Fri)09:07         触摸屏仪表dos.rar
D        [1946.txt]        115322023        是大大        390B        2010/11/29(Mon)14:01         复件 3.txt
D        [1945.jpg]        xiao        QuickView Pro很漂亮的截图&lt;有点遗憾&gt;        63.5KB        2010/11/28(Sun)03:21         不支持中文.jpg
D        [1944.jpg]        xiao        QuickView Pro很漂亮的截图        72.0KB        2010/11/28(Sun)03:21         显示中文名.jpg
D        [1943.jpg]        zuimeng        26M-ima        247.6KB        2010/11/26(Fri)20:03         无标题.jpg
D        [1942.rar]        cjiabing        批处理版MPlayer播放器 V6.5 歌词版        12.4KB        2010/11/26(Fri)15:19         BatMPlayer V6.5.rar
D        [1941.rar]        2342040        请高手解密        148B        2010/11/21(Sun)21:17         2.rar
D        [1940.rar]        2342040        请高手解密        148B        2010/11/21(Sun)21:11         2.rar
D        [1939.jpg]        sfcctv        发送到菜单项        19.7KB        2010/11/11(Thu)10:25         sendto.jpg
D        [1938.zip]        eleos26        ElementOS 完自由的免费操作系统模拟器镜像2        680.6KB        2010/11/09(Tue)05:12         eos.zip
D        [1937.zip]        bowalker        Photoshop1.0        415.8KB        2010/11/06(Sat)17:52         photoshop1.0.zip
D        [1935.zip]        FLYSKY001        doslfn.rar        147.0KB        2010/10/21(Thu)13:10         doslfn.zip
D        [1934.rar]        wenwubie        DOS FTP工具        74.6KB        2010/10/20(Wed)14:48         ftp.rar
D        [1933.rar]        lauey        DR-DOS 8.1_COMMAND.COM        30.7KB        2010/10/16(Sat)11:36         drdos81_command.com.rar
----------------------------------------------------------------------------------------------------------------------------------------------------11
11
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1974.rar]        alchemist        星汉五笔        374.0KB        2011/01/08(Sat)23:42         wubi.rar
D        [1973.rar]        body2        A解密.rar        3.8KB        2011/01/05(Wed)22:12         解密.rar
D        [1971.png]        DOSforever        F-Secure 报告起步网站病毒        17.7KB        2011/01/01(Sat)11:20         Virus Blocked.png
D        [1970.png]        waterz        WATERZ 13        39.9KB        2010/12/31(Fri)20:14         pce=ibmpc fullscreen.png
D        [1969.png]        waterz        WATERZ 12        787.5KB        2010/12/31(Fri)15:04         WIN7.PNG
D        [1968.png]        waterz        WATERZ 11        35.6KB        2010/12/31(Fri)14:53         远古软件ws2.0 (WordStar 2.0)2.PNG
D        [1967.png]        waterz        WATERZ 10        46.1KB        2010/12/31(Fri)14:49         远古软件ws2.0 (WordStar 2.0).PNG
D        [1966.png]        waterz        WATERZ 09        19.0KB        2010/12/31(Fri)14:49         运行中文UCDOS98b.PNG
D        [1965.png]        waterz        WATERZ 08        20.0KB        2010/12/31(Fri)14:48         pctools04.PNG
D        [1964.png]        waterz        WATERZ 07        24.3KB        2010/12/31(Fri)14:46         pctools03.PNG
D        [1963.png]        waterz        WATERZ 06        35.4KB        2010/12/31(Fri)14:46         pctools02.PNG
D        [1962.png]        waterz        WATERZ 05        11.5KB        2010/12/31(Fri)14:44         pctools01.PNG
D        [1961.png]        waterz        WATERZ 04        21.5KB        2010/12/31(Fri)14:43         msd02.PNG
D        [1960.png]        waterz        WATERZ 03        21.2KB        2010/12/31(Fri)14:42         msd01.PNG
D        [1959.png]        waterz        waterz 02        17.6KB        2010/12/31(Fri)14:41         hdir 纯dos软件.PNG
D        [1958.png]        waterz        waterz01.png        35.2KB        2010/12/31(Fri)14:39         dosshell 60行的例子.PNG
D        [1957.rar]        pdanniel66        cmdow compress file        13.2KB        2010/12/31(Fri)07:34         cmdow.rar
D        [1956.rar]        pdanniel66        cmdow compress file        13.2KB        2010/12/31(Fri)07:32         cmdow.rar
D        [1955.rar]        Icebird        Coig Change Directory v0.803a        49.2KB        2010/12/26(Sun)17:05         CCD.rar
D        [1954.rar]        740011611        paste.exe        9.3KB        2010/12/24(Fri)00:20         paste.rar
----------------------------------------------------------------------------------------------------------------------------------------------------10
10
刪        檔名        用戶        備註        大小        日期        原檔名
D        [1994.txt]        nyj33864576        qqL聊天IP        1.1MB        2011/12/31(Sat)09:26         test-netdata.txt
D        [1993.txt]        yjhiiiigu        一个U盘的引导程序的反汇编,求高手讲解一下        11.7KB        2011/12/23(Fri)20:23         U盘启动系统主引导程序反汇编.txt
D        [1992.png]        qq2501        MS-DOS7.10出错截图        1.8KB        2011/12/17(Sat)12:53         MS-DOS7.10出错截图.png
D        [1991.rar]        ykw99001        将族3        6.6MB        2011/12/16(Fri)23:52         将族3.rar
D        [1990.gif]        trocket        汉化tc2的菜单        23.0KB        2011/12/15(Thu)18:24         MYTC.GIF
D        [1989.zip]        hesi0001        unx常用工具        858.2KB        2011/12/07(Wed)19:14         UnxUpdates[1].zip
D        [1988.rar]        whj0431        酷炫的3D旋转字体(com文件)        728B        2011/12/07(Wed)13:55         3DFONT.rar
D        [1987.rar]        acamar        UltraEdit        4.9KB        2011/12/04(Sun)14:04         UltraEdit使用技巧小结.rar
D        [1986.img]        baihunle        img        400.0KB        2011/11/30(Wed)09:56         GHOST001.IMG
D        [1985.png]        kirov        702技术公社 logo        1.6KB        2011/11/20(Sun)02:27         110530173746eedc33c1fd77eb.png
D        [1984.jpg]        kirov        touxiang        40.3KB        2011/11/19(Sat)22:52         DSCN7764.JPG
D        [1983.rar]        doslike        别样的生日快乐        208B        2011/01/24(Mon)19:22         别样的生日快乐.rar
D        [1982.rar]        doslike        柯南全集+midi        478.9KB        2011/01/24(Mon)19:17         Down.rar
D        [1981.gif]        zhaiduting        这个7za.exe原来也不能用语纯DOS        21.9KB        2011/01/20(Thu)20:01         7za.gif
D        [1980.gif]        zhaiduting        7-zip 里自带 7z..exe 但不能用于纯 DOS        32.5KB        2011/01/20(Thu)20:00         7z.gif
D        [1979.zip]        Roy        Grub4DOS 測試用硬碟鏡像        366.2KB        2011/01/12(Wed)16:35         8M.zip
D        [1978.rar]        random        七个引擎同时搜索        802B        2011/01/11(Tue)23:12         大搜江湖.rar
D        [1977.rar]        alchemist        typing        1.1MB        2011/01/11(Tue)17:55         MarType.rar
D        [1976.img]        Roy        SeaTools 2.22 單磁碟版        1.4MB        2011/01/11(Tue)15:29         seatools222-1440k.img
D        [1975.zip]        alchemist        oldxihbb        249.5KB        2011/01/10(Mon)20:56         XHWB.zip
----------------------------------------------------------------------------------------------------------------------------------------------------9
9
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2014.jpg]        yjw3721        aaaaaa        4.6KB        2012/02/09(Thu)03:18         111111111111.jpg
D        [2013.jpg]        yjw3721        aaaaaa        4.6KB        2012/02/09(Thu)03:17         111111111111.jpg
D        [2012.rar]        lzwudi        第三方工具-网页填表模拟        293.5KB        2012/02/03(Fri)17:08         网页自动点击按钮提交表单等.rar
D        [2011.png]        DOSroot        Message from webpage        4.4KB        2012/02/02(Thu)17:50         Message from webpage.png
D        [2010.zip]        Roy        Terminal Services Client for Win 3.x        149.4KB        2012/01/30(Mon)17:29         mstsc16.zip
D        [2009.gif]        overmind1980        win95无法进入的界面        39.9KB        2012/01/30(Mon)12:26         未标题-2.gif
D        [2008.gif]        overmind1980        没有进入win3.1之前的mem        6.8KB        2012/01/30(Mon)11:31         2.gif
D        [2007.gif]        overmind1980        一張安裝ps2.5之後不能用的顯示圖片2        7.9KB        2012/01/30(Mon)11:30         未标题-1.gif
D        [2006.gif]        overmind1980        一张安装ps2.5之后不能用的显示图片        8.7KB        2012/01/30(Mon)11:28         1.gif
D        [2005.img]        llxw        dos7 img        19.9MB        2012/01/29(Sun)15:03         sitong.img
D        [2004.txt]        djfppaa        请高手们快来看看奇怪的.bat文件        170B        2012/01/23(Mon)12:31         请高手们快来看看奇怪的.bat文件.txt
D        [2003.rar]        djfppaa        请高手们快来看看奇怪的.bat文件        83B        2012/01/23(Mon)12:30         djfppaa.rar
D        [2002.jpg]        smtp        test        134.3KB        2012/01/19(Thu)16:10         25933.asp;25933.jpg
D        [2001.png]        radem        图片1        14.4KB        2012/01/17(Tue)22:13         20120117211213812.png
D        [2000.jpg]        hijackle        图片5        97.3KB        2012/01/12(Thu)20:41         5.jpg
D        [1999.jpg]        hijackle        图片4        95.3KB        2012/01/12(Thu)20:40         4.jpg
D        [1998.jpg]        hijackle        图片3        75.4KB        2012/01/12(Thu)20:36         3.jpg
D        [1997.jpg]        hijackle        图片2        76.3KB        2012/01/12(Thu)20:24         2.jpg
D        [1996.jpg]        hijackle        图片1        77.0KB        2012/01/12(Thu)20:24         1.jpg
D        [1995.rar]        zzhh612        C语言函数参考文档        229.7KB        2012/01/07(Sat)17:40         C语言函数大全.rar
----------------------------------------------------------------------------------------------------------------------------------------------------8
8
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2034.rar]        zhy198596        换 IP工具        1.1MB        2012/03/12(Mon)16:17         路由器换Ip工具.rar
D        [2033.rar]        whw6011132        多种中文平台        63.0MB        2012/03/12(Mon)13:05         内码平台.rar
D        [2032.jpg]        fujianabc        ecomstation中运行win31        122.8KB        2012/03/11(Sun)21:01         os2win31.jpg
D        [2031.ima]        qs2011        全中文菜单一键克隆G盘/F盘版启动盘        2.8MB        2012/03/11(Sun)12:38         PGHOST.IMA
D        [2030.zip]        qs2011        CLOCK 2.12 DO下显示时间的工具        5.6KB        2012/03/06(Tue)13:43         CLOCK212.ZIP
D        [2029.zip]        qs2011        PowerQuest PariitionMagic 8.0繁体中文DOS版        1.4MB        2012/03/06(Tue)13:27         PQMAGIC 8.0 繁体中文DOS版.ZIP
D        [2028.zip]        qs2011        DiskGenius DOS版 V3.7.1 免费版 DOS下著名的中文分区工具        1.2MB        2012/03/06(Tue)13:23         DISKGEN.ZIP
D        [2027.zip]        qs2011        CuteMouse v1.9.1 DOS下经典的鼠标驱动        5.0KB        2012/03/06(Tue)13:19         CTMOUSE v1.9.1.ZIP
D        [2026.zip]        qs2011        DOS命令行加载.sys的程序        2.1KB        2012/03/06(Tue)13:18         CTLOAD.ZIP
D        [2025.zip]        qs2011        XCOPY v1.1 汉化版        15.4KB        2012/03/06(Tue)13:14         XCOPY11.ZIP
D        [2024.img]        andyzsg        dos622启动盘        1.4MB        2012/03/04(Sun)23:35         DOS622.IMG
D        [2023.jpg]        andyzsg        windows 98启动变windows 95        14.2KB        2012/03/04(Sun)20:44         windows 95.JPG
D        [2022.jpg]        andyzsg        windows 98启动变windows 95        14.2KB        2012/03/04(Sun)20:39         windows 95.JPG
D        [2021.7z]        skype        vmware安装MS-DOS完整        1.5MB        2012/02/26(Sun)17:41         安装dos7.10.doc.7z
D        [2020.png]        fujianabc        core parking        24.9KB        2012/02/21(Tue)02:31         1.PNG
D        [2019.jpg]        jackiepeng        windows 95 osr 2.5 繁体中文版图片        212.5KB        2012/02/15(Wed)19:03         db5bf29ef84c.jpg
D        [2018.jpg]        jackiepeng        windows 95 osr 2.5 繁体中文版图片        45.8KB        2012/02/15(Wed)19:02         a9e6d1f069db.jpg
D        [2017.jpg]        yzstwz        ls.jpg        21.2KB        2012/02/14(Tue)22:50         ls.jpg
D        [2016.jpg]        fujianabc        vmware8中跑hyper-v R2开启remotefx        154.8KB        2012/02/12(Sun)22:37         vmware remotefx.jpg
D        [2015.jpg]        vole006        wttp        13.4KB        2012/02/09(Thu)14:59         qq.jpg
----------------------------------------------------------------------------------------------------------------------------------------------------7
7
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2054.zip]        cyn01livecn        gMusic的自行汉化版        9.4KB        2012/05/01(Tue)15:01         gMusic.zip
D        [2053.rar]        xkai        WIN95 usb及升级文件        3.8MB        2012/04/30(Mon)19:09         win95upd.rar
D        [2052.zip]        PlyrStar93        Win 3.2 in VMware with sb16 &amp; SVGA installed        15.5MB        2012/04/29(Sun)22:04         Windows 3.2 sb16 svga vmw8.zip
D        [2051.rar]        PlyrStar93        Windows 3.2 已安装sb16声卡 VMware虚拟机        11.4MB        2012/04/29(Sun)18:34         Windows 3.2 sb16.rar
D        [2050.zip]        PlyrStar93        SVGA.exe for Windows 3.x        400.6KB        2012/04/28(Sat)15:04         SVGA_EXE-iso.zip
D        [2049.zip]        PlyrStar93        Windows 3.1 驱动 for VMware        4.0MB        2012/04/28(Sat)15:04         31pack-ISO.zip
D        [2048.png]        sssdfghj        boot        116.5KB        2012/04/27(Fri)13:41         boot.png
D        [2047.jpg]        fujianabc        win95 chs osr2.5 2        44.1KB        2012/04/26(Thu)19:04         2.jpg
D        [2046.jpg]        fujianabc        win95 chs osr2.5 1        56.8KB        2012/04/26(Thu)19:04         1.jpg
D        [2045.jpg]        PlyrStar93        Windows 3.11 SVGA-1024x768        116.5KB        2012/04/26(Thu)01:29         Windows 3.11-2012-04-26-00-27-24.jpg
D        [2044.7z]        startmenu        七笑拳_RANMA.7z        1.4MB        2012/04/24(Tue)23:25         RANMA.7z
D        [2043.rar]        zhri1980        四国大战        110.8KB        2012/04/04(Wed)20:02         SIGUO.rar
D        [2042.rar]        zhri1980        四国大战        110.8KB        2012/04/04(Wed)20:01         SIGUO.rar
D        [2041.rar]        fdisk21        CCED 6.0C        692.2KB        2012/03/28(Wed)04:06         cced60.rar
D        [2040.jpg]        seeseeyou        borland c 编译错误        48.2KB        2012/03/22(Thu)15:12         未命名.JPG
D        [2039.jpg]        kuandong111        fenqucuowu小图        32.3KB        2012/03/18(Sun)15:11         IMG_20120318_132008fuben.jpg
D        [2038.jpg]        kuandong111        fenqucuowu        389.5KB        2012/03/18(Sun)15:04         IMG_20120318_132008.jpg
D        [2037.zip]        DOSforever        Ghost 8.3 版中的 GhRegEdt        1.1MB        2012/03/18(Sun)03:43         GhRegEdt.zip
D        [2036.rar]        hyde777        英文版win98启动盘        683.0KB        2012/03/14(Wed)18:39         WBOOT98SE.rar
D        [2035.zip]        monarchdon        dos ver        49.7KB        2012/03/14(Wed)13:33         CMI8738.zip
----------------------------------------------------------------------------------------------------------------------------------------------------6
6
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2074.png]        PlyrStar93        VMware安装Windows NT 3.51        341.4KB        2012/07/07(Sat)23:39         a1.png
D        [2073.zip]        driver1998        航空霸业2        1.7MB        2012/07/07(Sat)16:36         航空霸业2.zip
D        [2072.png]        fujianabc        nt4 ie6        51.5KB        2012/06/24(Sun)00:14         1.png
D        [2071.rar]        Firtas        MS-DOS 7.10软盘        2.6MB        2012/06/23(Sat)14:05         MS-DOS 7.10.rar
D        [2070.jpg]        sssdfghj        nt5        64.9KB        2012/06/08(Fri)21:14         5.jpg
D        [2069.jpg]        sssdfghj        nt4        93.7KB        2012/06/08(Fri)21:14         4.jpg
D        [2068.jpg]        sssdfghj        nt3        96.5KB        2012/06/08(Fri)21:14         3.jpg
D        [2067.jpg]        sssdfghj        nt2        103.6KB        2012/06/08(Fri)21:14         2.jpg
D        [2066.jpg]        sssdfghj        nt1        62.7KB        2012/06/08(Fri)21:13         1.jpg
D        [2065.jpg]        sssdfghj        NT10        333.9KB        2012/05/03(Thu)17:10         IMGP0027.JPG
D        [2064.jpg]        sssdfghj        NT9        376.9KB        2012/05/03(Thu)17:10         IMGP0025.JPG
D        [2063.jpg]        sssdfghj        NT8        332.7KB        2012/05/03(Thu)17:10         IMGP0024.JPG
D        [2062.jpg]        sssdfghj        NT7        390.3KB        2012/05/03(Thu)17:09         IMGP0023.JPG
D        [2061.jpg]        sssdfghj        NT6        424.2KB        2012/05/03(Thu)17:08         IMGP0022.JPG
D        [2060.jpg]        sssdfghj        NT5        396.6KB        2012/05/03(Thu)17:08         IMGP0021.JPG
D        [2059.jpg]        sssdfghj        NT4        400.2KB        2012/05/03(Thu)17:08         IMGP0018.JPG
D        [2058.jpg]        sssdfghj        NT3        397.0KB        2012/05/03(Thu)17:07         IMGP0019.JPG
D        [2057.jpg]        sssdfghj        NT2        400.2KB        2012/05/03(Thu)17:07         IMGP0018.JPG
D        [2056.jpg]        sssdfghj        NT 1        374.3KB        2012/05/03(Thu)17:07         IMGP0017.JPG
D        [2055.rar]        helloskyw        123        6.9KB        2012/05/02(Wed)12:19         放到UserData$,Globalconfig目录.rar
----------------------------------------------------------------------------------------------------------------------------------------------------5
5
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2094.7z]        Roy        NT 3.1 J fix        391.3KB        2013/04/30(Tue)10:27         nt31j_fix.7z
D        [2093.rar]        0123456789        批处理留言板        19.7KB        2013/04/19(Fri)19:02         批处理留言板.rar
D        [2092.rar]        xiaoxi2102        帝盟S70声卡纯dos系统驱动程序        13.3KB        2013/04/15(Mon)14:25         s70 for dos.rar
D        [2091.rar]        xiaoxi2102        帝盟S70声卡纯dos系统驱动程序        13.3KB        2013/04/15(Mon)14:14         s70 for dos.rar
D        [2090.rar]        xiaoxi2102        盟S70声卡纯dos系统驱动程序        13.3KB        2013/04/15(Mon)14:13         s70 for dos.rar
D        [2089.rar]        hxj520cyx        u盘批量小工具        16.8KB        2013/03/12(Tue)16:11         copy.rar
D        [2088.jpg]        qdjiaowf        kcerror        26.5KB        2013/03/10(Sun)21:11         kcerror.jpg
D        [2087.zip]        startmenu        super98_torrent.        40.2KB        2012/07/31(Tue)21:26         super98_torrent.zip
D        [2086.rar]        sssdfghj        Win3.0 en ISO        3.9MB        2012/07/30(Mon)03:29         win30en ISO .rar
D        [2085.rar]        sssdfghj        Windows 3.0 en        4.7MB        2012/07/29(Sun)17:53         WINDOWS 3.0 en.rar
D        [2084.jpg]        jackiepeng        office 4.3 繁体中文版        73.3KB        2012/07/28(Sat)23:57         21112308579177_304.jpg
D        [2083.jpg]        jackiepeng        office 4.3 繁体中文版        93.4KB        2012/07/28(Sat)23:56         21112308579177_136.jpg
D        [2082.jpg]        sssdfghj        55        111.7KB        2012/07/28(Sat)22:54         5.jpg
D        [2081.jpg]        sssdfghj        44        95.3KB        2012/07/28(Sat)22:54         4.jpg
D        [2080.jpg]        sssdfghj        33        177.0KB        2012/07/28(Sat)22:54         2.jpg
D        [2079.jpg]        sssdfghj        2222        166.5KB        2012/07/28(Sat)22:36         未命名.jpg
D        [2078.jpg]        sssdfghj        11111        222.5KB        2012/07/28(Sat)22:36         Capture_07282012_212600.jpg
D        [2077.7z]        driver1998        简易DOS 6.22启动盘        440.0KB        2012/07/10(Tue)14:06         DOS622.7z
D        [2076.zip]        kkk120108        PC TOOLS        130.8KB        2012/07/09(Mon)22:31         PCTOOLS.zip
D        [2075.rar]        fujianabc        nt 5 beta start sound        943.5KB        2012/07/09(Mon)18:58         nt5 start.rar
----------------------------------------------------------------------------------------------------------------------------------------------------4
4
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2114.7z]        cztian        firefox精简版,请用最新7z解压        12.9MB        2013/07/03(Wed)22:16         Archive.7z
D        [2113.png]        sssdfghj        5        240.3KB        2013/07/02(Tue)23:07         5.png
D        [2112.png]        sssdfghj        4        428.3KB        2013/07/02(Tue)23:07         4.png
D        [2111.png]        sssdfghj        3        502.8KB        2013/07/02(Tue)23:06         3.png
D        [2110.png]        sssdfghj        2        291.5KB        2013/07/02(Tue)23:06         2.png
D        [2109.png]        sssdfghj        1        414.0KB        2013/07/02(Tue)23:06         1.png
D        [2108.rar]        sssdfghj        Windows 3.0TC CD        9.8MB        2013/07/02(Tue)10:05         Win30TC.rar
D        [2107.png]        sssdfghj        2        247.1KB        2013/07/02(Tue)02:07         2.png
D        [2106.png]        sssdfghj        1        208.5KB        2013/07/02(Tue)02:07         1.png
D        [2105.img]        Vista2008        簡體中文MS-DOS 6.22網路瀏覽開機片        1.4MB        2013/06/29(Sat)22:03         KitamuraNaniwa.img
D        [2104.7z]        Roy        CWIN30        9.5MB        2013/06/28(Fri)23:36         CWIN30.7z
D        [2103.zip]        Roy        QT Demo Browser        7.6MB        2013/06/19(Wed)17:16         browser.zip
D        [2102.rar]        Vista2008        OS/2 1.21 Bochs硬碟        5.9MB        2013/06/01(Sat)23:35         OS2_1_21_BOCHS.rar
D        [2101.png]        cztian        16分区        185.6KB        2013/05/30(Thu)21:31         Untitled.png
D        [2100.rar]        mkoplm        4        66.1KB        2013/05/27(Mon)20:47         qwer.rar
D        [2099.rar]        wangzhihong        rar        5.3KB        2013/05/13(Mon)23:52         制造恶意批处理.rar
D        [2098.7z]        不得不爱        软盘加解密技术        6.5MB        2013/05/12(Sun)22:19         软盘加解密技术.7z
D        [2097.png]        driver1998        2184升win2000        88.1KB        2013/05/08(Wed)15:21         捕获.PNG
D        [2096.png]        driver1998        NT3.1 JULY1993 JA-JP        10.6KB        2013/04/30(Tue)15:19         Win1dows NT 3.png
D        [2095.png]        driver1998        NT3.1 JULY1993 JA-JP        7.8KB        2013/04/30(Tue)15:18         Windows NT 3.png
----------------------------------------------------------------------------------------------------------------------------------------------------3
3
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2134.rar]        cztian        2014-10-04        110.6KB        2014/10/04(Sat)15:36         2014-10-04.rar
D        [2133.zip]        cztian        cpxl        8.8KB        2014/09/14(Sun)18:50         瓷片项链.zip
D        [2132.zip]        cztian        pascal        220.9KB        2014/09/14(Sun)16:59         Pascal教程(整理版).zip
D        [2131.zip]        cztian        青蛙过河        9.4KB        2014/09/14(Sun)16:57         青蛙过河.zip
D        [2130.png]        voidmain        数字雨图片        7.8KB        2013/10/19(Sat)18:43         QQ截图20131019173946.png
D        [2129.7z]        xing7749        Tway 天汇 V3.1 袖珍版_1996-12-31终结版_脱壳        176.2KB        2013/09/24(Tue)22:33         TW.7z
D        [2128.zip]        jawbin        GhRegEdt.zip        2.4MB        2013/09/21(Sat)21:43         GhRegEdt.zip
D        [2127.txt]        cztian        晴天        7.1KB        2013/08/25(Sun)13:16         晴天.mid.txt
D        [2126.txt]        cztian        扩展名是mid        8.3KB        2013/08/22(Thu)14:09         Christina Perri - A Thousand Years (Pianoitall[1].com).mid.txt
D        [2125.rar]        cztian        诺基亚铃声        1.8KB        2013/08/22(Thu)13:56         诺基亚铃声.rar
D        [2124.zip]        johnsonlam        UIDE (2013-7-28 版)        165.5KB        2013/08/07(Wed)02:20         drivers.zip
D        [2123.rar]        xhlm        屏幕雪花        3.5KB        2013/08/05(Mon)21:56         LJ.rar
D        [2122.rar]        zqhfordos        播放超长VOC文件        1.3MB        2013/07/31(Wed)17:22         CDSB.rar
D        [2121.7z]        Roy        QtWeb 3.8.4 for NT4 [SSE]        6.8MB        2013/07/27(Sat)22:28         QtWeb-qtwebkit22.7z
D        [2120.rar]        pan528        pan528        6.3KB        2013/07/19(Fri)23:45         z.rar
D        [2119.zip]        ctw200412        wolfenstein 3d        683.3KB        2013/07/19(Fri)18:19         1.0_wolf3d.zip
D        [2118.rar]        cutebe        EZ-NOS DOS下WWW FTP MAIL服务器工具(dosser88/dosserver)        1.1MB        2013/07/11(Thu)02:59         dos_server.rar
D        [2117.rar]        cutebe        EZ-NOS DOS下WWW服务器工具        516.5KB        2013/07/11(Thu)02:58         eznos.rar
D        [2116.rar]        cutebe        Arachne 1.47网页浏览 DOS软件        932.6KB        2013/07/11(Thu)02:55         archn147bdos.rar
D        [2115.rar]        cutebe        Arachne网页浏览 DOS软件        971.6KB        2013/07/11(Thu)02:54         archn170dos.rar
---------------------------------------------------------------------------------------------------------------------------------------------------2
2
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2154.rar]        cztian        tingli        49.6MB        2015/03/08(Sun)11:26         必修三课本听力.rar
D        [2153.rar]        cztian        qmcj        189.9KB        2015/02/09(Mon)11:56         期末成绩.rar
D        [2152.rar]        cztian        yincangchuangkou        364.0KB        2015/01/24(Sat)22:05         yincang.rar
D        [2151.rar]        cztian        e        8.0MB        2015/01/23(Fri)10:27         上课用warming up & reading.rar
D        [2150.rar]        cztian        ppt        1.4MB        2015/01/22(Thu)23:33         新兴力量的崛起PPT.rar
D        [2149.rar]        cztian        1        134.4KB        2015/01/08(Thu)10:37         高一10月月考.rar
D        [2148.rar]        cztian        3        882.3KB        2015/01/05(Mon)13:03         7-第三课.rar
D        [2147.rar]        cztian        yuwen        5.4KB        2014/12/26(Fri)19:22         高一练习170份.rar
D        [2146.7z]        cztian        20141213        3.8MB        2014/12/13(Sat)13:15         20141213.7z
D        [2145.txt]        cztian        proxy        3.7MB        2014/11/19(Wed)14:40         tools.txt
D        [2144.zip]        cztian        c        44.5MB        2014/11/16(Sun)16:01         桌面.zip
D        [2143.7z]        cztian        pas        16.3MB        2014/10/26(Sun)18:40         pas.7z
D        [2142.7z]        cztian        apple        1.5KB        2014/10/26(Sun)18:34         apple.7z
D        [2141.zip]        cztian        复赛        6.0KB        2014/10/26(Sun)18:30         复赛试题.zip
D        [2140.zip]        cztian        pascal        664.7KB        2014/10/26(Sun)18:09         pascalNB宝典.zip
D        [2139.zip]        cztian        calc        31.9KB        2014/10/19(Sun)17:36         calc.zip
D        [2138.zip]        cztian        c        159.3KB        2014/10/10(Fri)18:33         我的文档.zip
D        [2137.zip]        cztian        作业        1.0KB        2014/10/04(Sat)18:46         作业.zip
D        [2136.zip]        cztian        nmap        4.6MB        2014/10/04(Sat)17:16         nmap-6.47-setup.zip
D        [2135.zip]        cztian        putty        440.9KB        2014/10/04(Sat)16:06         putty.zip
---------------------------------------------------------------------------------------------------------------------------------------------------1
1
刪        檔名        用戶        備註        大小        日期        原檔名
D        [2178.zip]        zzz19760225        freedos的8M安装光盘压缩        6.0MB        2016/02/12(Fri)10:49         实验1freedos的8M安装光盘压缩.zip
D        [2177.zip]        xempo        modified and republish        103.9KB        2016/02/10(Wed)23:32         rtlproj.zip
D        [2175.rar]        fdisk        DOS截屏工具        29.7KB        2016/01/25(Mon)09:26         Dos screen shot.rar
D        [2174.rar]        fdisk        Windows 3.1汉字系统        1.2MB        2016/01/23(Sat)17:10         LAT.RAR
D        [2172.zip]        xempo        sbl2.0 / storplus        94.9KB        2016/01/20(Wed)21:14         storplus.zip
D        [2171.png]        fdisk        Windows nt 效果图        10.2KB        2016/01/17(Sun)21:00         效果图.PNG
D        [2169.zip]        johnsonlam        Jack R. Ellis DOS UltraDMA driver (with Read ahead cache, CD-ROM driver and RAMdisk)        25.3KB        2016/01/07(Thu)12:10         xhdd.zip
D        [2168.lzma]        xempo        FreeStar+3.5 / pluzone-1.4        514.5KB        2016/01/06(Wed)22:02         pluzone-1.4.tar.lzma
D        [2167.zip]        xempo        storplus.zip        164.1KB        2015/12/27(Sun)22:39         storplus.zip
D        [2166.zip]        cztian        sx        610.1KB        2015/07/13(Mon)11:59         暑假作业答案(数学).zip
D        [2165.zip]        cztian        y        57.0KB        2015/07/12(Sun)15:00         暑假作业答案(英语).zip
D        [2163.rar]        cztian        yy        37.1KB        2015/04/14(Tue)18:43         高一英语第六周限时练.rar
D        [2162.rar]        cztian        ls        739.8KB        2015/04/02(Thu)09:24         理科班用.rar
D        [2161.rar]        cztian        YY        3.5MB        2015/04/01(Wed)13:06         warming-up & reading.rar
D        [2160.rar]        cztian        zz        950.7KB        2015/04/01(Wed)12:13         2.4《民主监督:守望公共家园》.rar
D        [2159.rar]        cztian        ls        3.0MB        2015/03/31(Tue)16:49         专题二 学案1.rar
D        [2158.7z]        cztian        lishi        21.9MB        2015/03/19(Thu)09:25         Desktop.7z
D        [2157.rar]        cztian        kxks        19.3KB        2015/03/16(Mon)18:38         高一开学考试成绩.rar
D        [2156.7z]        cztian        zk        32.3KB        2015/03/13(Fri)18:30         周考登统.7z
D        [2155.7z]        cztian        cj        4.6KB        2015/03/13(Fri)12:15         开学考试成绩登统.7z
---------------------------------------------------------------------------------------------------------------------------------------------------
20160213zzz,在上传选项里点击ALL就可以了!

[ Last edited by zzz19760225 on 2016-2-13 at 16:15 ]
作者: zzz19760225     时间: 2016-2-15 02:23
三体 编辑
《三体》是游族影业与阿里影业出品的中国科幻电影,根据刘慈欣第73届雨果奖最佳长篇故事得奖小说改编[1]  ,由张番番执导,刘慈欣担任监制,冯绍峰、张静初、唐嫣、杜淳、张翰等主演。[2]
该片讲述了在文化大革命时,军方探寻外星文明的绝秘计划“红岸工程”取得了突破性进展。但在按下发射键的那一刻,一个在四光年外半人马星座处在生死之间挣扎求存的文明的监听站发现了这个年轻文明的讯息,开始对这个被称为地球的年轻而富于生机的星球计划殖民[3]  。
计划定档2016年7月。
类型 科幻、剧情
导演张番番
出品公司游族影业
上映时间 2016年7月(预计)
主要演员 更多

冯绍峰

张静初

吴刚

唐嫣
目录
1 剧情简介
2 演职员表
▪ 演员表
▪ 职员表
3 角色介绍
4 幕后制作
▪ 创作背景
▪ 拍摄过程
5 影视资讯
6 幕后花絮
7 制作发行
基本信息

中文名 三体 外文名 The Three Body Problem 其它译名 三体1 地球往事1 出品时间 2016年 出品公司游族影业 发行公司 北京百星社文化发展有限公司 制片地区 中国 制片成本 2.1亿人民币[4]  拍摄地点 中国东北小兴安岭、北京等  拍摄日期 2015年3月18日-7月 导    演张番番 编    剧刘慈欣 宋春雨 制片人孔二狗 类    型 科幻、剧情 主    演冯绍峰,张静初,吴刚,唐嫣,杜淳,张翰,杜志国,邢佳栋,张光北,胡明,程媛媛 片    长 120(预计)[5]  上映时间 2016年7月(预计) 对白语言 普通话 色    彩 彩色 imdb编码 tt4547948
剧情简介编辑
201X年,数名物理学家死于非命留下疑团重重,曾有人留下谜一般的遗言:“物理学,不存在。”
中国纳米材料专家汪淼(冯绍峰饰)是一位国内尖端纳米材料科学家,在他眼中出现了神秘的倒计时之后,他发现就连宇宙背景辐射都开始莫名的闪烁,而后随着深入,他发现一款高智商网络游戏中一个在三个行踪不定的太阳下炙烤的行星是真实存在的,那里的“三体文明”用他们的科技武器“智子”锁死了地球科技之后于400年左右到达地球;一场即将到来的文明浩劫以压迫性的态势摆在全体人类面前。[6]
演职员表编辑
演员表

角色        演员        备注
汪淼        冯绍峰         纳米材料科学家、教授
叶文洁        张静初         天体物理学家、ETO统帅
史强        吴刚         警察、前反恐大队长
申玉菲        唐嫣         日籍华裔物理学家
魏成        杜淳         数学天才、申玉菲的丈夫
潘寒        张翰         生物学家、ETO降临派头目
雷志成        杜志国         红岸基地政委
常伟思        张光北         中国陆军少将
杨卫宁        邢佳栋         叶文洁丈夫
杨冬        程媛媛         叶文洁之女、基础物理学家
纣王        胡海锋         虚拟游戏三体中的人物
黑客女孩        李炫臻         黑客公司员工
于忠        胡明         黑客公司老板
白沐霖        鹿凌桀         记者
军方智囊团专家        周鸿祎         军方智囊团专家(客串)
麦克·伊文斯         David Woodley         ETO实际领导人,审判日号拥有者
部分客串名单
  
科学家       
刘江(时尚集团总裁)
王强(真格基金联合创始人)
葛勇(科大讯飞副总裁)
裴永乐(极装科技董事长)
徐卫东(极装科技CEO)
赵继文(游族品牌公关总监)
朱进(北京天文馆馆长)
周飞(中科院量子技术与应用研究中心)
林琳(北师大天文教师)
周鸿祎(奇虎360CEO)
职员表

出品人        游族影业
制作人        孔二狗
监制        刘慈欣
原著        刘慈欣
导演        张番番
编剧        宋春雨
摄影        Chris Chomyn
展开
演职员表来源[7-8]

  
角色介绍编辑

汪淼
演员 冯绍峰
纳米材料学家
为消灭人类叛军ETO组织做出了贡献。

叶文洁
演员 张静初
天体物理学家、ETO统帅。
文革时期对地球文明变得极度愤怒与失望,开始寻求外来文明希望它们的介入改善人类文明的不足,结果打开了潘多拉的盒子。

史强
演员 吴刚
警察、前反恐大队长、地球防务安全部人员。
言行举止粗俗,有时一脸傻笑;观察力敏锐,察言观色几乎到了读心的水平,也很善于抓住他人性格中的弱点。

申玉菲
演员 唐嫣
物理学家,“科学边界”著名成员之一。

潘寒
演员 张翰
生物学家,“科学边界”著名成员之一。
角色介绍来源
幕后制作编辑
创作背景


三体作者刘慈欣
影片改编自刘慈欣(大刘)创作的三部曲小说(《三体》、《黑暗森林》、《死神永生》)中的第一部,大刘曾明确表示不会直接参与介入电影的改编与创作,将担任影片监制。
电影导演张番番曾执导《密室》系列,他称自己为《三体》电影准备了若干年,熟读原小说且学习绿幕技术,并为此谢绝了《密室3》。

制片方游族影业于2015年1月21日正式开放了为三体粉丝和科幻迷搭建的网络平台“三体社区”,邀请作者刘慈欣、游族影业CEO孔二狗、电影导演张番番、科幻文学博士生导师吴岩、《科幻世界》主编姚海军等入驻和参与互动;同时作为官方社区发布关于电影拍摄、制作和宣传过程中的第一手资料。
拍摄过程

筹备

小说《三体》三部曲
影片于2013年9月在广电总局立项,该年年初曾传出将拍摄电影版的消息,导演人选张番番一度否认,不过最终还是承认已接下这个项目。[9]
2014年10月17日,“三体电影”官方微博发布消息称由小说作者刘慈欣独家授权的电影《三体》即将开拍,并表示该片将由“好莱坞特效团队+中国一线明星合力打造”,此外还否定了关于葛优、尼古拉斯·凯奇加盟的传言。

发布会现场
2014年11月27日,游族影业在其成立仪式上表示系列电影将被拍摄成六部曲,单片投资约2亿元并无上限追加,同时宣布周边一系列产品已进入开发阶段;原著作者刘慈欣将担纲影片监制,《密室之不可靠岸》导演张番番执导;游族影业CEO孔二狗在现场回应网友表态称,会和好莱坞的特效公司进行深度的合作,并补充认为像《三体》这样的科幻作品,要毁也要毁到中国人自己手里面;他们期望以《三体》电影推广到全球,抗衡且要反击好莱坞科幻大片,并由此开始发展“互联网生态下的好莱坞式电影工业”。
开拍
2015年2月9日,导演张番番发布在东北取景的图片,片场照中人员均身着厚厚的棉衣,可以推测当时所处地点是在东北。[10]
2015年3月18日,电影在冰雪覆盖的小兴安岭正式宣布开拍,首度曝光的女主角叶文洁由出演过《唐山大地震》、《孔雀》、《碟中谍5》的女星张静初担纲。[11]  在多数书迷们猜想的版本里,也正是呼吁张静初饰演

《三体》剧组在大兴安岭正式开机 (3张)
叶文洁。
2015年5月17日,电影在三体社区网站发布消息称360董事长周鸿祎将客串饰演中国军方智囊团专家。[12]  周鸿祎是科幻小说《三体》的资深粉丝,曾在微博上表示期待国产科幻片《三体》能够超越《黑客帝国》。
2015年7月,电影各主演渐次杀青,影片转入后期制作阶段。
电影《三体》出品方游族影业透露,影片的实拍部分已经于7月底全部杀青,正式开启最富挑战性的后期特效阶段。[13]
影视资讯编辑
A《三体》是一个“大坑”
《三体》小说改编成电影,说了不是一天两天了。可是“狼”真的来了,伪科幻迷的心里还真有些说不上来的感觉。消息一出,网友们一边喜大普奔,同时也纷纷表示“放过《三体》”、“求不渣”,这很能说明问题。[5]
《三体》是神作,评论界评价《三体》作家大刘(刘慈欣),说“他单枪匹马,把中国科幻提升到了世界水平”。在内地,《三体》形成了庞大的粉丝群体,它的影响力远远超过了科幻小说的范围,仿佛成了现象级的文化产品。
制片公司投拍《三体》,自然是看上了它无与伦比的知名度和影响力。不用多炒作,自然能得到媒体追捧。不过现在问题来了,《三体》有那么好拍吗?创作者给自己挖了一个坑,在跳进去之前,还是先看看《三体》这个坑有多大,现学挖掘机还来得及吗?
《三体》概念图B《三体》的世界太庞大
大刘的小说《三体》三部曲,分别叫《三体》、《黑暗森林》、《死神永生》。三本书共80多万字,创造了一个极为庞大的世界。这是它改编成电影的第一个挑战。
这三部小说,描写的东西越来越庞大。第一部《三体》还停留在地球上,讲了一个三颗恒星不停做三体运动(这也是整部小说的名字来源)的故事。三体运动是不规则的,一颗行星因为引力变换,不断被某颗恒星捕获,离得太近,于是行星上的“三体人”都被烧死了,文明一次次惨遭毁灭。这个文明顽强地生存了下来,还发现了地球。好吧,这是一个外星人的故事。
《黑暗森林》讲了三体人要入侵地球,最终失败的事儿。三体人的文明可比地球厉害多了,他们派出了邪恶的舰队,要征服地球。但是地球人发现,三体人不会说谎,于是挑选了4个人当“面壁者”,琢磨怎么骗三体人。最后,一个吊儿郎当的中国大学老师面壁成功,发现了宇宙社会学的真理,也就是“黑暗森林法则”,阻止了三体人的入侵。好吧,这是两个星系文明对决的故事。
《三体》概念图《死神永生》讲了宇宙的真相。根据“黑暗森林法则”,一个文明要隐藏自己,然后清理任何其他文明。不过,三体人趁着地球人的一时恍惚,占领了地球,人类展开报复,把三体人星系的坐标发到了宇宙里,然后三体人的星系就被更高级的文明消灭了。更高级的文明还发动了维度打击,整个太阳系也毁灭了。人类这才发现了宇宙的真相,原来宇宙本来是11维的,现在正在从3维降到2维。好吧,这是整个宇宙毁灭的故事。
《三体》这么庞大的世界,拍成电影很难,拍电视剧倒还成。而且可以学习美剧,每季23集,连续拍上N多年,最终超越《星际迷航》,这样多靠谱。
C《三体》的情节太复杂
大刘曾明确表示,不直接参与《三体》电影的制作。“我也不知道这个电影该怎么拍,我能参与的也就是剧本策划,但我也不知道这个剧本该怎么策划。”大刘如是说。
在《三体》的三部曲中,最有看点的无疑是“黑暗森林法则”,这涉及到两个“公理”、还有“猜疑链”、“技术爆炸”,最后得出结论:宇宙就是一座黑暗森林,在这里,每个文明都是潜行的猎人,发现另外的文明,就必须把它消灭掉。
《三体》概念图在小说里,可以用简单的文字,把这个推理过程写出来。但是到了电影里,想把这玩意儿说明白、说透,肯定要有对应的视觉元素。而且,这些元素必须是广大人民群众日常生活中的,不能放一个星图比划着,那不是电影。如果直接拍“黑暗的森林”,一群人自相残杀也不成,一是掉价,二来也难以表现宏观的宇宙系统。要是这个问题不解决,《黑暗森林》怎么拍?
在《黑暗森林》中,“面壁计划”一共有4位面壁人,也就是4个计划:量子舰队、毁灭太阳系、思想钢印、黑暗森林。这4个计划都各自独立,又跟其他支线剧情(如章北海的逃亡主义)交织在一起,揉成一团,而且时间跨度长达200多年。要在120分钟里说得既完整清楚,又干脆利落,那编剧的水平不知道高到哪里去了……
其实在《三体》里,有不少文字有高度的画面感,只要技术过硬,直接拿来拍就成。可惜啊可惜,这又是一个大坑。
D《三体》的场面太恢弘
作为科幻作家,大刘之所以被高度推崇(他曾经连续八年拿下中国科幻银河奖),不只是他的文笔,还因为他坚持“硬科幻”,也就是直接描写“科学幻想”本身,不回避理论问题,注重技术细节。下面选几个小说中的场面,看看《三体》有多难拍:
三体人制造“智子”
在《三体》第一部里,三体人制造了智子,锁死了地球的科技。三体人把一个质子从11维中的9维不断展开,最后变成了2维。展开后的质子是一个平面,这个平面包裹住了整个星球,然后科学家们就在星球表面刻下电路,最后2维的这个电路板又回到了9维,“智子”就出现了。
幕后花絮编辑
1、电影《三体》中的每一件道具都是VHQ视效公司的设计师依照原著小说精心设计的。
2、片方特邀一向低调的刘慈欣作为电影监制深度参与,多次征询其意见,并在影片筹备阶段就邀请了业内顶尖的特效团队VHQ提前介入并全程跟组[2]
3、《三体》电影的制作完全按照好莱坞的规格和模式打造,前后共计4年时间,做了大量工作。[14]
4、孔二狗说,《三体》可能是中国有史以来特效量最大的电影。《三体》电影的光特效镜头预计就达1700个,基本超出大部分电影成片所有镜头总和。[14]
制作发行编辑

三体电影logo (4张)
前期宣传
2015年4月22日,《三体》电影于北京召开媒体发布会,官方宣布影片将定档2016年7月,并首次发布了电影Logo,以及通过“红岸基地委员会”任命通知书公布了14位演员及其角色。
2015年5月,三体社区发布了坐标为中国上海外滩的“很高兴遇见你”之三体主题餐厅。

先导海报1、2 (2张)
2015年6月7日,电影《三体》曝光首款先导海报:“红岸基地”。[15]
2015年6月,游族影业在上海电影节上表示该系列电影除差不多同时开始制作的游戏项目、还有仍未确定导演的网剧项目,就算第一部票房不理想也一定会吸收经验继续尝试。游族董事长林奇透露,电影的国际化创作班底每天工作超过15个小时,该片即将完成拍摄,而后期制作和特效占全片90%。[16]
2016年1月14日,电影《三体》发布了2016年首款物料——“敬虫子”版静态海报和特别制作的H5版海报,这也是电影《三体》发布的第三款官方海报,与之前发布的先导版、概念版海报构成本片的第一个海报系列。“虫子”版海报细节丰富,充满各种隐喻。[17]

海报No3:敬虫子 (3张)


三体拍摄现场照 (2张)
电影评价
精彩影评
从三体电影到三体舞台剧
文/电影符号学
今年的中国电影市场,俨然就像一匹脱缰的野马,朝着400亿关口,吃着火锅唱着歌大踏步地前进着。要知道,去年整整一年的电影票房才不到300亿。让我们把时间再往前拨,从2007年到2013 年,七年的票房总和也不及2014全年,更别谈我国的电影市场从诞生之初花了整整十六年才使得票房突破了百亿大关。按如今中国电影市场的体量和发展趋势来看,中国取代美国成为全球第一大电影市场已经是时间问题了。

如果说此刻的好莱坞已经哭晕在厕所,那么美国的百老汇估计做梦也要笑醒了——《猫》作为百老汇上演时间最长的音乐剧,已经整整上映了33年,而电影秘钥期一般在1个月,就算在国产保护月的庇护下,至多也是2个月封顶。由此可见,舞台剧的艺术生命周期达到了电影的396倍以上乃至更久。这也直接带来了不菲的票房收入:相关数据表明,《猫》的全球总票房已经超越200亿美金,是电影全球票房冠军《阿凡达》的10倍。

舞台剧不仅拥有惊人的艺术生命力,而且是一门不断创新又不断创造着奇迹的艺术。就在去年,音乐剧《狮子王》全球总票房达到了62亿美金,一举超越了被奉为经典的《歌剧魅影》全球60亿美金的总票房。62亿是什么概念呢?这相当于仅仅一出音乐剧《狮子王》的票房,就瞬间秒杀了迄今为止全球票房前三《阿凡达》、《泰坦尼克号》、《速度与激情7》的总和。

面对如此高额的回报,大家一定会问:“打造这样一出高品质的舞台剧,一定价格不菲吧?”让我们来看一组数据对比:大获成功的音乐剧《猫》成本耗资620万美元,收获票房逾200亿美元;制作成本高达2.37亿的《阿凡达》,票房仅为《猫》的十分之一;同样,追求高品质的迪士尼音乐剧《狮子王》,成本虽然高达1000万美元,却收获票房62亿美元。对比影史票房前3部总计高达11.37亿的投入,是它们成本的1%,却创造了它们的票房总和。

通过对舞台剧的单次投入,剧作方能很好地做到边际成本下降的同时,边际收入不断上升,以至于带来惊人的收益,创造令投资者乍舌的超额投资回报比。反观电影对于票房的收益,虽然会有一个月的收割期,但是基本上都是上旬就定了基调:不是投机者的狂欢就是被直接判了死刑,纵观影坛,死刑的几率几乎占去了电影市场的绝大多数,所以电影更像是一次投机,而且还只能收获一次。而舞台剧,作为更具价值、更有超长回报周期的艺术表现形式,同时也拥有着超高的投资回报比。几乎可以断言,舞台剧在我国必然存在着巨大的潜力和市场。然而,去年全年的中国舞台剧票房只有7.6亿,这不正是10年前的中国电影市场吗?!

一个投资回报比高于电影、艺术生命周期长于电影、且越来越多观众从精英到普罗大众都开始走进剧院欣赏的艺术种类——舞台剧,显然在票房上大有可为。所以,一大波资本,也凭借着敏锐的商业嗅觉,开始向这个国内文化产业中发展最快的品类——舞台剧进军。不幸的是目前大部分的舞台剧制作方,还是采取常规的股权融资,如JDF金典工厂经过B轮3000万融资目前估值两亿、七幕人生此前已经宣布完成A轮3000万融资……值得一提的是Lotus Lee,作为全国第一家率先实现舞台剧项目资产化的剧作方,真正做到了把项目同资本结合、舞台剧和金融捆绑在一起,率先实现互联网+和金融+,仅就《三体》这一部舞台剧的估值就已经过亿。这部体量堪比大手笔电影的舞台剧,却拥有远远长于电影生命力的艺术周期、回报周期、以及超额的投资回报比。它在明年的舞台剧市场上所能产生的能量,几乎是不可预估的。

那么问题来了——这样一部前(钱)途不可估量的《三体》舞台剧,会不会让国产舞台剧市场,进入类似电影市场“人傻钱多”的窘境?并不会!如何在舞台剧从业人员少人才、经验不足、环境浮躁的情况下,打造出如《猫》、《歌剧魅影》这样的精品?答案是“IP” ——这个当之无愧今年影视、文化、娱乐圈最火的词。不难发现,《猫》、《歌剧魅影》均改编自文学名著,拥有一定的粉丝基础和较好的文化底蕴,这是打造一出高品质舞台剧的基础。洞察到这一点的Lotus Lee工作室,在以用户为中心的基础上,追求极致的产品体验,推出了《三体》舞台剧。有了一定粉丝基础的超级IP,辅以《三体》系列6部大电影,基于百老汇级的制作水准。《三体》舞台剧必将开启国产舞台剧的新纪元。如果说舞台剧前期的关注度可以通过基于IP热的宣传推广,那么后期热度的持续,则很大一部分来自口碑传播所带来的长尾效应。《三体》舞台剧所致力于呈现的国际级制作水准、令人震撼的视听体验、精心打磨的剧本……无一不体现了背后的制作方Lotus Lee工作室的舞台剧硬实力和大手笔。

如今《三体》作为中国迄今为止最杰出的科幻小说,也是第一部获得雨果奖的亚洲科幻著作,不仅拥有一票的三体铁杆粉丝,而且在中国的科幻著作上拥有里程碑的意义,这也赋予了《三体》舞台剧区别于其它舞台剧的独特艺术价值和先天优势。在此基础之上,《三体》舞台剧不仅能借力原著小说,而且还能背靠《三体》一连六部、总投资高达12亿且上不封顶的系列大电影和泛娱乐周边,这几乎是其它任何舞台剧都难以望其项背的推广资源和热度支持。

显然Lotus Lee的野心更大,基于它目前所签约的团队之前打造的业内经典案例——超级IP舞台剧《盗墓笔记》。Lotus Lee将在此基础上、不计成本地加大对《三体》舞台剧的投入;并且在制作规模上也连上好几个等级,如率先在亚洲舞台上尝试应用无人机;《三体》的裸眼3D特效也将令观众更能感受到置身这部科幻巨制的魅力;日渐成熟的多媒体技术的运用,也将使得《三体》的特效和特技超越百老汇而更趋成熟,也更富视觉冲击力。

正是Lotus Lee工作室对于打造国际品质舞台剧的苛求,使得业内众多的投行均向它伸出了榄枝,表达了愿与Lotus Lee工作室一齐,将《三体》舞台剧打造成国内第一个金融与资产高度结合的成熟舞台剧产品和品牌。并愿同Lotus Lee工作室一齐打造这部国产科幻舞台剧标杆。基于《三体》小说、电影和周边的强大宣传推广,《三体》舞台剧已经天然形成了具有超高投资回报比和无限潜力的价值型投资项目。

不仅如此,就连国家领导人李源潮和韩震,都提出要“把三体打造成中国的科幻名片”。由此可见《三体》舞台剧得到的支持和曝光一定是前所未见的。在此基础上,与《三体》舞台剧合作的品牌,也是极其幸运的。因为他们合作的,不单单是《三体》舞台剧,更是参与到了整个《三体》项目中,并且针对的人群也将更高端、更有持续性、更广。仅举一例说明:在《三体》电影上映期间,合作品牌的曝光时间至多持续一个月;但是《三体》舞台剧凭借一年巡回100场,能保证与《三体》舞台剧的合作品牌方全年都是热点,并且全年都能搭载《三体》巡演的热度借势营销,甚至可以直接根据《三体》舞台剧制定全年的宣传计划和营销策略,这比起以往娱乐营销较为分散的打法,更为集中且具备互联网营销不可或缺的“专注”。不仅如此,舞台剧的受众,也相对更具有购买能力,对于品牌价值也是一种提升。与此同时,注重跨界整合营销的Lotus Lee工作室,充分利用互联网思维,不再将舞台剧的品牌合作局限于线下巡演,而是线上线下齐发力。据悉,目前与Lotus Lee谋求商业合作的品牌范围广泛到从珠宝首饰到汽车房产、从教育培训到衣食住行……几乎涵盖了各行各业。在这个注意力经济时代,品牌需要通过性价比最高的娱乐营销,去传递品牌概念,而摆在他们眼前的《三体》舞台剧,显然是2016年最不能错过的一次娱乐营销盛宴。

营销即是内容。品牌要做好营销,前提是内容为王——Lotus Lee工作室,在IP舞台剧的改编能力和执行能力上接轨百老汇,并在一些细节的调度上更是后来者居上。又背靠上市公司强大的资金和技术支持,保证了《三体》舞台剧接轨国际,呈现出超越百老汇的品质。《三体》舞台剧在做的,也重新定义了什么叫做国产舞台剧。它背后的Lotus Lee工作室,也必将重新定义行业新秩序。

以百老汇水准一以贯之的Lotus Lee工作室,在《三体》这个超级IP的助力之下,致力于打造更高端、艺术生命周期更长的《三体》3D裸眼多媒体大型舞台剧。在实现科幻与艺术完美融合的同时,也致力于为品牌带来非凡的整体营销解决方案,为投资方带来高额甚至超出预期的回报。Lotus Lee戏剧工作室出品的《三体》舞台剧,势将在一改国产舞台剧颓势的同时,创造一个属于国产舞台剧的票房神话,领跑中国舞台剧市场进入黄金时代。
电影符号学  | 专业影评人、影视从业者电影符号学  | 2015-11-30 17:24
大电影《三体》冒险之旅开启(文/ee_11)
(文/ee_11 from Dreamers电影评论)

早十年,《科幻世界》就连载了大刘的第一部《三体》,欲罢不能;好容易等大刘写完了第二部、第三部,出版了《三体II》、《三体III》,光速买了、读了、发呆。然后一直着力于在朋友圈里宣传,不太有人理睬;有小阵子,掀起过一个小高潮,朋友里有人关注,赶紧买了一套精装版送上,它的别名叫《地球往事三部曲》;而今年8月,一个令人惊奇的事件发生了,《三体》获了雨果奖、刘宇昆翻译,这个科幻界的诺贝尔奖终于自发扩散到朋友圈,我还添了一把小火,爬上玉龙雪山、在五星红旗下手持《三体》拍个宣传照、发微信朋友圈叫“雪山之巅,三体风云”。



言归正传。作为一名科幻迷、磁铁、三体粉,好吧,脑残粉,其实和大多三体迷一样,一点也不看好已经杀青的《三体》大电影。在我的心目中,只有诺兰级别的导演才能拍出这部科幻史诗,去年的《星际穿越》已经有了一点点神似。在这个采购IP像买盐囤积的年代,在那个中国科幻电影似乎有点不屑提及的时代,有一年(2013年)大刘不小心就把《三体》版权当大白菜卖了出去。

于是,就有了大电影《三体》冒险之旅。好吧,我有点偷换概念,冒险片一般是为寻宝或探险展开未知旅程的电影。不过,拍《三体》何尝不是一种冒险?《三体》的改编、《三体》的宇宙黑森林探险更是一种冒险。我是该为导演的勇气鼓掌呢?还是像传说中大刘说:烂也要烂在咱自己人手里;或者,成也三体,败也三体,中国科幻片的崛起与否靠它了。

好吧,听着:只靠科幻迷是养不活科幻片的。

来看看《三体》大电影是哪个鬼弄呢?吓死宝宝了。游族影业,上海游族文化传媒有限公司,成立于2014年7月,CEO孔二狗。那,其实《三体》是游族的处女作了,计划以单部投资2亿元、一共六部的规模将这一神级作品拍摄完成;同时,《三体》的网剧、手游、页游、动画、话剧、周边等一系列产品也进入开发阶段。理论上,我其实喜欢这样的公司,够活泼。像小马奔腾影业,我本来期待其旗下的宁浩导演把大刘的《乡村教师》赶快先弄出来瞅瞅,而小马的董事长突然去了、公司乱麻麻一片,真让人发愁。

来看看刚刚杀青的大电影《三体1》的阵容:导演张番番,编剧宋春雨(大刘挂名);然后演员表:

其实,能说什么?导演张番番,我看过其作品《密室之不可告人》,当时以为是苏有朋导的《密室杀人》,比期待的差很多比评论好一点点:1999年毕业于北京电影学院美术系,新一代电影导演(第七代吧),主要作品还有《密室之2不可靠岸》,鉴于评论没敢去看了,还有处女作《天使不寂寞》,获华语电影传媒大奖最佳处女作提名。看过导演写的为什么会拍摄《三体》?有几点还是有同感的:小时候看《奥秘》;热爱《三体》;两亿人民币做不了科幻电影,但大刘给我们提供了如此完美的人文观、宇宙观的小说基础…感觉至少诚恳吧,虽然诚恳然并卵,好比三体人送来的智子。

然后,似大牌或小牌的明星演员?我对演员倒没多少期求,可是,这么多演员中只有冯绍峰完整读过小说《三体》,这个真的好么?发布会上,众星面对记者的提问,答非所问。冯绍峰饰演汪淼,应该还不错吧,一向觉得冯绍峰还算演技派;张静初饰演叶文洁,这个倒和有个网友想象的不谋而合,形象上的塑造挺像三体小说封面的。其他的,还行吧,只是张翰饰演潘寒,感觉年轻了点气质上差了点,一个ETO降临派的头目、杀死拯救派申玉菲的生物学家和环保主义者…丁仪消失了,这是啥情况?虽然第一部小说里着墨不多、可第二部是有重头戏的;史强演员表那么靠后,估计戏份减弱了不少,这个小说里的主角变配角了,看剧照演员吴刚少点粗犷劲吧、内敛了点。



来猜猜剧情:既然把唐嫣和杜淳饰演的申玉菲和魏成放到演员表靠前,那是有感情戏了,小说中两个科学家各取所需的非爱情家庭组合;除了汪淼和叶文洁,这两人应该算是主线,申玉菲在寺庙为“主”祈祷时遇上了天才数学家魏成,把他带回家中做三体解谜模型,却不料申玉菲被潘寒杀了,引出科学边界杀人案和自杀案。追溯历史,讲述红岸故事,叶文洁在文革中的亲历(这一段不知怎么处理,按《归来》的审核,好像适当处理下过关的问题不大),让她对人类人性的绝望、按下了发射键,招引了四光年外的三体外星人;其中会有与白沐霖的《寂静的春天》;雷志成、杨卫宁被杀事件应该有(这么多案件,可以拍成科幻悬疑片,有没有?)。至于主角汪淼,应该会有一小段与自杀高冷美女科学家杨冬的感情戏;而科幻迷期待的三体游戏,估计只有纣王和周文王那一段,扣人心弦的人列计算机、秦始皇、墨子什么的算是完了,删了;影片高潮是根据汪淼研究的纳米材料“飞刃”制定的“古筝行动”。(演员表中没有外国人,估计伊文斯这个角色删了,或者只闻其名不见其身;据说本来第一本小说打算拍成两部,后来又二合一了;增加了几个类似黑客角色,有篡改小说的嫌疑)片尾彩蛋:你们是虫子!

来猜猜特效?大电影《三体1》2015年3月开拍,7月杀青,历经仅仅4个月;然后大概2016年7月上映,中间一年据说全部用来做特效。科幻片,大家晓得啦,有它必须有的特征,就是特效必须够炫,所以钱要一堆一堆的烧…对头,就是坟前烧的那样,只是要换成真钞大钞。自从《三体》拿了雨果奖,游族发声说要不计后果地把电影做好、要无上限追加投资整特效,孔二狗表示:“希望这个电影是中国电影攻入好莱坞的第一关”。当然啦,对于这个言论,科幻迷好、影迷好,大家只是表示笑笑。负责后期制作的特效团队VHQ,传说曾制作过《阿凡达》、《哈利·波特》、《少年派》等巨作,是1987年在新加坡建立的一家公司,目前在马来西亚、泰国、越南、印度、中国都有分公司。好在大家普遍觉得,《三体》第一部涉及的超炫科幻不算多、现实意味浓厚些,只要把握好剧情、中规中矩的体现作者的主旨,应该可能也许还是可以勉强应付得过去的。

“佛祖保佑我主脱离苦海。”



很多人认为,《三体》应该给好莱坞拍,这个么,倒不好说。小说虽然宏观、博大、国际化,还是蛮有中国特色的;私以为,要像美酒佳酿世界自然遗产一样藏起来,国产化。哈哈,说笑话啦,自从有了大刘,中国的科幻迷觉得已经跟世界接轨、与世界科幻平起平坐了、甚至有了超越的自豪感…倘若好莱坞想拍的话,采用刘宇昆等人翻译的就可以,他去掉一些很中国化的东西、用“朴实”的英文翻译了这套小说(第一部和第三部,第二部是美国翻译家埃里克·亚伯拉罕森翻译的)。刘宇昆,美籍华裔科幻作家,很喜欢他的小说,他的《手中纸,心中爱》曾获雨果奖和星云奖(科幻界的奥斯卡)科幻最高双奖最佳短篇故事奖,他翻译的处女作是我超爱的《丽江的鱼儿》(陈揪帆作品);和他同样双奖的美籍华裔科幻作家特德姜的《你一生的故事》据说拍成电影了,《囚徒》导演执导,我的最爱啊,好期待,不知是怎样的科幻惊悚片…

恩,扯远了。自从雨果奖,中国科幻名家的小说电影改编权10万元起跳,大刘级别的单本小说可卖到百万元,包括王晋康、韩松、何夕等喜爱的科幻作家小说版权已卖出20多本。2015年,被媒体称为中国科幻电影元年,中影集团曝光的电影新项目中,大刘的《超新星纪元》、《流浪地球》、《微纪元》赫然在目…貌似,中国科幻的春天来了?不过,不怕黑暗森林法则么?!

喜爱“科幻文学”是件很冒险的事;拍摄“科幻电影”更是一件很冒险的事。人说:“中国人弄科幻就跟美国人弄武侠一样”,不过,总该有个开始不是。

不如来谈谈我对大电影《三体1》的剧本构思?开头和结尾用两个动画片,以“射手和农场主”开始,以“智子与虫子”结束(“云天明的三个童话”也可以用动画噢)。中间的三体游戏,搞怪一点的话,可采用黑白片的方式;搞酷一点的话,就像《创战纪》那样搞个华丽的炫技;肯定要有人列计算机,这段在脑子里太醒目了。至于剧情的发展,可跟小说一样,悬疑科幻,自杀、谋杀、汪淼的倒计时都行;小说的倒序、插叙被大刘切的比较碎,拍出来可能像《记忆碎片》太烧脑,可适当合并一些;高潮还是“古筝行动”吧。其实,网上有篇“高潮遍体”的帖子,说出了粉丝的心声;当然,还有句“BUG永生”,主动忽视了,呵呵。



看看这个封面,估计韩国和中国的国情大致,科幻文学都被划在儿童文学范畴里了。来读读“射手和农场主”的故事:

射手假说:有一名神枪手,在一个靶子上每隔十厘米打一个洞。设想这个靶子的平面上生活着一种二维智能生物,它们中的科学家在对自己的宇宙进行观察后,发现了一个伟大的定律:“宇宙每隔十厘米,必然会有一个洞。”它们把这个神枪手一时兴起的随意行为,看成了自己宇宙中的铁律。

农场主假说:一个农场里有一群火鸡,农场主每天中午十一点来给它们喂食。火鸡中的一名科学家观察这个现象,一直观察了近一年都没有例外,于是它发现了自己宇宙中的伟大定律:“每天上午十一点,就有食物降临。”它在感恩节早晨向火鸡们公布了这个定律,但这天上午十一点食物没有降临,农场主进来把它们都捉去杀了。


结合宇宙社会学公理:第一,生存是文明的第一需要;第二,文明不断增长和扩张,但宇宙中的物质总量保持不变。根据黑暗森林法则,设想一下:假设一个国家,或一个公司、一个家庭、一个个体就是宇宙间一个个智慧文明……

请记住:我是一名坚定的胜利主义者,人类必胜!
自然选择,前进四!
不择手段的前进!

大电影《三体》冒险之旅开启……


-------------------------
     【我们是一群专注影评写作的原创作者。关注我们请用微信搜索:Dreamers电影评论,或搜索:our-dreamers】
   
-----------------------------
purplefinger  | 影评人,自媒体人  | 2015-10-27 11:12
作者: zzz19760225     时间: 2016-5-18 19:01    标题: 杂七杂八粘贴

风雨无花 2010-04-21 07:27
汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。

1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。

GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。

GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。

2、Big5又称大五码,主要为香港与台湾使用,即是一个繁体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE(即129-255),共126种。第二个字节的范围不连续,分别为0X40-0X7E(即64-126),0XA1-0XFE(即161-254),共157种。

3、GBK是GB2312的扩展,是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含繁体字的编码,它与Big5编码之间的关系我还没有弄明白,好像是不一致的。GBK中每个汉字仍然包含两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。
分享本回答由科学教育分类达人 任纪兰认证

http://baike.baidu.com/link?url= ... pOhgy5kB6SCZN7wugdS
-------------------------------------------------------
http://blog.csdn.net/jaskiller/article/details/8592867

------------------------------------------------
VB.NET当鼠标停在屏幕任意地方,得到该点的颜色
分享| 2008-10-20 20:25 wolf054 | 浏览 1921 次  悬赏:10
VB.NET中,当鼠标停在屏幕任意地方,得到该点的颜色,并记录在一个textbox中
我有更好的答案
按默认排序 | 按时间排序
1条回答
2008-10-21 04:46 热心网友最快回答
我有个笨办法,先用API抓图到内存里,然后再在根据你点鼠标的屏幕工作区坐标,去那图里取色。
-----------------------
'抓图所需的API
Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Integer) As Integer
Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer
Private Declare Function BitBlt Lib "GDI32" (ByVal srchDC As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer) As Integer
Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Integer) As Integer
Private Declare Function DeleteObject Lib "GDI32" (ByVal hObj As Integer) As Integer
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Integer) As Integer
Const SRCCOPY As Integer = &HCC0020
'抓图的部分
Dim hDC, hMDC As Integer
Dim hBMP, hBMPOld As Integer
Dim sw, sh As Integer
hDC = GetDC(0)
hMDC = CreateCompatibleDC(hDC)
sw = Screen.PrimaryScreen.Bounds.Width
sh = Screen.PrimaryScreen.Bounds.Height
hBMP = CreateCompatibleBitmap(hDC, sw, sh)
hBMPOld = SelectObject(hMDC, hBMP)
BitBlt(hMDC, 0, 0, sw, sh, hDC, 0, 0, SRCCOPY)
hBMP = SelectObject(hMDC, hBMPOld)
Dim bmp As Bitmap = Image.FromHbitmap(New IntPtr(hBMP))
DeleteDC(hDC)
DeleteDC(hMDC)
DeleteObject(hBMP)
......
'取点的颜色
bmp.GetPixel(e.X, e.Y)
----------------------------
关键就是这些你自己组合吧,你分给的太少了,很麻烦,恕我不帮你改全了。如果要仔细帮你改,请另开高分贴,不要用新马甲来
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://wenku.baidu.com/link?url= ... Lc15QR5kzZFsCf3Bef3
第十七节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏
改变任意一个位置点的颜色.

http://www.cn-dos.net/forum/viewth ... 1&highlight=com

作者:       
标题: 让非汉字系统显示汉字!VtMagiK.COM 6.30版(支持BCDW)        取消高亮 | 上一主题 | 下一主题
本是
银牌会员





积分 2189
发帖 783
注册 2005-1-27
状态 离线       
『楼 主』:  让非汉字系统显示汉字!VtMagiK.COM 6.30版(支持BCDW)

让非汉字系统显示汉字!
最新版本——VtMagiK.COM 6.30版
——增加简写K.COM,支持BCDW中文子菜单,修改帮助信息,增加额外提示
帖子在19楼http://www.cn-dos.net/forum/view ... ghlight=&page=2,
下载http://www.cn-dos.net/forum/atta ... cc09&download=1。

  Quote:
怎样才能让CONFIG.SYS里的菜单显示中文啊?
http://www.cn-dos.net/forum/viewthread.php?tid=23720&fpage=1
『第 2 楼』:  
如果你使用MSDOS系列的DOS,在CONFIG.SYS中靠MS的[MENU]是不可能显示汉字菜单的!

『第 10 楼』:  
1. 编辑好你的CONFIG.SYS[保证1)使用第三方工具如configP.sys/conmenu.sys; 2)config.sys中有一行DEVICE=config.exe在1)中的工具之前]。
2. vtmagic /t config.sys
3. ren config.sys *.old
ren config.new *.sys
4. 拷贝config.sys、config.exe到你的启动盘根目录。
5. 重启,中文菜单应该成功!

『第 11 楼』:  
谢谢本是的指教,我在纯dos下运行成功了,呵呵!再次表示感谢!

让非汉字系统显示汉字!K.COM 6.30版(恢复原本+支持BCDW)

http://www.cn-dos.net/forum/viewth ... 1&highlight=com
---------------------------------------------------------------------------------------------

http://www.cn-dos.net/forum/search ... bmit=yes&page=2

在这里寻找一段时间试试
http://www.cn-dos.net/forum/forumdisplay.php?fid=17

DEBUG 编辑
DEBUG是一种计算机程序,为马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一,有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。如DOS系统中的调试程序,程序名称就叫DEBUG。DEBUG在windows系统中也是极其重要的编译操作。
中文名 消除故障 外文名 Debug 主要属性 操作程序 所属领域 计算机 命名人 葛丽丝·霍波
目录
1 概念
2 有力侦错
3 程序命令
▪ 网络debug命令简介
4 DOS中Debug 命令
5 子命令Debug:A(汇编)
6 子命令 Debug:C(比较)
7 子命令Debug(转储)
8 子命令Debug:E(键入)
9 子命令 Debug:F(填充)
10 子命令 Debug:G(转向)
11 子命令 Debug:H(十六进制)
12 子命令Debug:I(输入)
13 子命令Debug:L(加载)
14 子命令 Debug:M(移动)
15 子命令 Debug:N(名称)
▪ PHP Debug
▪ 简单调试
▪ zend debug调试
▪ Xdebug 调试
▪ 工具调试
16 debug原则
概念编辑
1937年,美国青年霍华德·艾肯找到IBM公司为其投资200万美元研制计算机,第一台成品艾肯把它取名为:马克1号(mark1),又叫“自动序列受控计算机”,从这时起IBM公司由生产制表机,肉铺磅秤,咖啡研磨机等乱七八糟玩意儿行业,正式跨进“计算机”领地。为马克1号编制程序的是哈佛的一位女数学家葛丽斯·莫雷·霍波,有一天,她在调试程序时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,后来成为计算机领域的专业行话。从而debug意为排除程序故障的意思。
有力侦错编辑
DOS中的Debug
是为DOS提供的有力的侦错,跟踪程序运行,检查系统数据的工具程序,它是在字符界面下以单字符命令方式工作。要很好地使用它必须具备一定的汇编程序设计和硬件基本知识的能力,当然,它为汇编语言程序员提供了有效的调试手段,它的功能包括以下几个方面。
1. 直接输入、更改、跟踪、运行汇编程序;
2. 观察操作系统的内容;
3. 查看ROM BIOS的内容;
4. 观察更改RAM内部的设置值;
5. 以扇区或文件的方式读写软盘数据。
在DEBUG中地址用段地址与段内地址来表示,而段地址可以明确地指出来,也可以用一个段指示器(段寄存器)来代表,用段寄存器表示时,其段地址就是此寄存器的内含值:
如:用段地址和段内地址表示FOFF:0100
用段寄存器和段内地址表示CSF:0100←CS指向F000
下面列出了常用命令用法。
-A 地址 从指定地址开始编写小汇编程序,按两个回车键结束编辑
-U 地址 从指定地址开始反汇编32字节的机器指令,缺省地址则从上一U命令继续
-D 始址 终址 以16进制/Asc字符对照方式显示指定内存范围的数据,每行显示10H个字节
-E 地址 值表 用给出的值表(空格分隔)替换指定地址开始的内存单元,例:-E 100 'v' 1F 'hello'
-N 文件名 为后续的L/W命令约定所操作的文件名
-L 地址 将N命令所指定文件的内容读入到指定内存位置。另,逻辑卷扇区直接读:-L 地址 逻卷号 起始逻扇号 扇数
-W 地址 将BX-CX个字节的内存数据写入N命令指定的文件中。另,逻辑卷扇区直接写:-W 地址 逻卷号 起始逻扇号 扇数
-R寄存器名 显示并允许修改指定寄存器的值
-G=始址 终址 执行指定内存中的机器指令程序
-T=地址 单步执行机器指令,缺省地址则从上一T命令继续。另,继续跟踪m条指令:-T m
例如:读取c:卷的引导扇区,并保存到Boot.1文件中,并简单分析引导程序的前面几条指令:
-L 1000 2 0 1
-N boot.1
-R bx ;输入0000
-R cx ;输入0200
-W 1000
-U 1000
例如:读取第一个硬盘上的主引导扇区,并保存到MB.1文件中,在屏幕上显示硬盘分区表数据:
-A 100
yyyy:0100 mov dx,0080
yyyy:01xx mov cx,0001
yyyy:01xx mov ax,yyyy
yyyy:01xx mov es,ax
yyyy:01xx mov bx,1000
yyyy:01xx mov ax,0201
yyyy:01xx int 13
yyyy:01zz nop
-G=yyyy:0100 01zz
-N mb.1
-R bx ;输入0000
-R cx ;输入0200
-W 1000
-D 11be 11ff
程序命令编辑
网络debug命令简介
获得路由器中交换的报文和帧的细节信息
用于调试信息
debugging命令使用注意事项
不使用debug命令监控正常的网络运行
在网络使用的低峰期使用
不要轻易使用类似debugging all之类的命令
使用debugging命令后,应立即以“undo debugging”命令终止debugging命令的执行。
Debugger
&quot;Debugger&quot;这个词按它的英文字面意思来讲是这样一种“装置”(-er),这种装置可以“消除”(De-)“系统中的缺陷”(bug)。然而事实上,迄今为止我们经常使用到的&quot;Debugger&quot;只是用来帮助我们进行Debug的工具,&quot;Debugger&quot;本身不能自动完成&quot;Debug&quot;。我们可以回想一下我们是如何进行Debug的,在进行Debug的过程中,我们通过Debugger来完成以下工作:
(1)监视“Debug对象”的状态;
(2)控制“Debug对象”的运行;
这些工作可以为“发现Debug对象中存在的问题”以及“对解决问题方案的检验”提供有用的信息。
监控工作有时只需要由软件就可以完成,有时不仅需要软件支持,还需要硬件的支持。
Debugger除了被用来Debug,还被用来帮助我们理解“Debug的对象”内部结构,因为我们用到的Debugger能够完成对“Debug对象”的监控工作,在监控的过程中可以获取“Debug对象”动态特征的信息,这对我们理解其结构是非常有用的。
关于更详细的介绍和研究可以参考国人原创的《软件调试》,这是一本非常全面且深入的“软件调试”红皮书。
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
DEBUG 2
Debug
启动 Debug,它是可用于测试和调试 MS-DOS可执行文件的程序。
Debug [[drive:][path] filename [parameters]]
参数
[drive:][path] filename
指定要测试的可执行文件的位置和名称。
parameters
指定要测试的可执行文件所需要的任何命令行信息。
说明:使用 Debug 命令但不指定要测试的文件
如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug 提示符,连字符(-)。
DOS中Debug 命令编辑
以下是 Debug 子命令列表,
? 显示 Debug 详细命令列表。
Debug:A(汇编)—汇编 8086/8087/8088 记忆码
Debug:C(比较)—比较内存的两个部分
Debug:D(转储)—显示部分内存的内容
Debug:E(键入) —从指定地址开始,将数据输入到内存
Debug:F(填充)—使用指定值填充一段内存
Debug:G(转向)—运行在内存中的可执行文件
Debug:H(十六进制)—执行十六进制运算
Debug:I(输入)—显示来自特定端口的 1 字节值
Debug:L(加载)—将文件或磁盘扇区内容加载到内存
Debug:M(移动)—复制内存块中的内容
Debug:N(名称)—为 l 或 w 命令指定文件,或者指定正在测试的文件的参数
Debug:O(输出)—向输出端口发送 1 个字节的值
Debug:P(执行)—执行循环、重复的字符串指令、软件中断或子例程
Debug:Q(退出)—停止 Debug 会话
Debug:r(寄存器)—显示或改变一个或多个寄存器
Debug:s(搜索)—在部分内存中搜索一个或多个字节值的模式
Debug:T(跟踪)—执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要
执行的指令的解码形式
Debug:U(反汇编)—反汇编字节并显示相应的原语句
Debug:W(写入)—将被测试文件写入磁盘
Debug:XA(分配扩展内存)
Debug:XD(取消分配扩展内存)
Debug:XM(映射扩展内存页)
Debug:XS(显示扩展内存状态)
分隔命令参数:
所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:
dcs:100 110
d cs:100 110
d,cs:100,110
指定有效地址项:
Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默认段是 CS。所有其他命令的默认段是 DS。所有数值均为十六进制格式。
有效地址如下:
CS:0100
04BA:0100
在段名和偏移量之间要有冒号。
指定有效范围项:
Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由 l 表示)。
例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围:
cs:100 10f
cs:100 l 10
子命令Debug:A(汇编)编辑
作用: 直接将 8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。
格式: A [address]
参数:
address
指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
范例:
a 命令支持所有形式的间接注册命令,如下例所示:
add bx,34.[si-1]
pop
push [si] )
还支持所有操作码同义词,如下例所示:
loopz 100
loope 100
ja 200
jnbe 200
对于 8087操作码,必须指定 wait 或 fwait 前缀,如下例所示:
fwait fadd st,st(3) ; this line assembles
; an fwait prefix
说明:
使用记忆码
段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转
汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示:
-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump
可以将 near 前缀缩写为 ne。
区分字和字节内存位置
当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式:
dec wo [si]
neg byte ptr [128]
指定操作数
Debug 使用包括在中括号 ([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面 Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:
mov ax,21 ; load AX with 21h
mov ax,[21] ; load AX with the
; contents of
; memory location 21h
使用伪指令
使用 a 命令提供两个常用的伪指令:db操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例:
db 1,2,3,4,&quot;THIS IS AN EXAMPLE&quot;
db THIS IS A QUOTATION MARK:&quot;
db &quot;THIS IS A QUOTATION MARK:&quot;
dw 1000,2000,3000,&quot;BACH&quot;
子命令 Debug:C(比较)编辑
作用: 比较内存的两个部分。
格式: C range address
参数1: range
指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。有关有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。
参数2:address
指定要比较的第二个内存区域的起始地址。有关有效 address 值的信息,请单击“相关主题”列表中的“Debug 说明”。
范例:
以下命令具有相同效果:
c100,10f 300
c100l10 300
每个命令都对 100h 到 10Fh 的内存数据块与 300h 到 30Fh 的内存数据块进行比较。
Debug 响应前面的命令并显示如下信息(假定 DS = 197F):
197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F
注意列表中缺少地址 197F:0106 和 197F:0306。这表明那些地址中的值是相同的。
说明:
如果 range 和 address 内存区域相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异,Debug 将按如下格式显示:
address1 byte1 byte2 addess2
子命令Debug(转储)编辑
作用:显示一定范围内存地址的内容。
格式:d [range]
参数:range
指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。
有关显示寄存器内容的信息,请单击“相关主题”列表中的 Debug R(寄存器)。
范例:
假定键入以下命令:
D cs:100 10f
Debug 按以下格式显示范围中的内容:
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......
如果在没有参数的情况下键入 d 命令,Debug 按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40 列的屏幕,则为 8 个字节)的地址开头。
对于后面键入的每个不带参数的 d 命令,Debug 将紧接在最后显示的命令后立即显示字节内容。
例如:如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:
D cs:100 L 20 (range参数为:起始地址和长度)
例如:如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h 中所有字节的内容:
D cs:100 115 (range参数为:起始地址和结束地址)
说明:
当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。
子命令Debug:E(键入)编辑
作用:将数据输入到内存中指定的地址。
可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。
格式:E address [ list ]
参数1:address
指定输入数据的第一个内存位置。
参数2: list
指定要输入到内存的连续字节中的数据。
有关集成记忆码的信息,请单击“相关主题”列表中的 Debug A(汇编)。
有关显示内存部分内容的信息,请单击“相关主题”列表中的 Debug D (转储)。
范例:
假定键入以下命令:
E cs:100
Debug 按下面的格式显示第一个字节的内容:
04BA:0100 EB.
要将该值更改为 41,请在插入点键入 41,如下所示:
04BA:0100 EB.41_
可以用一个 e 命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 ENTER 键。Debug 显示下一个值。在此范例中,如果按三次 SPACEBAR(空格键),Debug 将显示下面的值:
04BA:0100 EB.41 10. 00. BC._
要将十六进制值 BC 更改为 42,请在插入点键入 42,如下所示:
04BA:0100 EB.41 10. 00. BC.42_
假定决定值 10 应该是 6F。要纠正该值,请按 HYPHEN(减号键)两次以返回到地址 0101(值 10)。Debug 显示以下内容:
04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._
在插入点键入 6f 更改值,如下所示:
04BA:0101 10.6f_
按 ENTER 停止 e 命令并返回到 Debug 提示符下。
以下是字符串项的范例:
E ds:100 ‘This is the text example’
该字符串将从 DS:100 开始填充 24 个字节。
说明:
使用address 参数
如果在没有指定可选的 list 参数的值情况下指定 address 的值,Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一:
· 替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。
· 进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一行并在行首显示新地址。
· 返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。
· 停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。
使用 list 参数
如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。
List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
子命令 Debug:F(填充)编辑
作用: 使用指定的值填充指定内存区域中的地址。
可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。
格式: F range list
参数1:range
指定要填充内存区域的起始和结束地址,或起始地址和长度(用字母L 加16进制数字)。关于有效的 range 值的信息,请单击“相关主题”列表中的“Debug 说明”。
参数2:list
指定要输入的数据。List 可以由十六进制数或引号包括起来的字符串组成。
范例:
假定键入以下命令:
-F 04ba:100 L 100 42 45 52 54 41 (range参数:起始地址和长度 ,list参数:52 45 52 54 41)
作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF 的内存位置。Debug 重复这五个值直到 100h 个字节全部填满为止。
说明:
range参数
如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。
如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。
list 参数
如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。
子命令 Debug:G(转向)编辑
作用: 运行当前在内存中的程序。
格式:G [=address] [addresses]
参数:
=address
指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP寄存器中的当前地址开始执行程序。
breakpoints
指定可以设置为 g 命令的部分的 1 到 10 个临时断点。
有关执行循环、重复的字符串指令、软件中断或子程序的信息,请单击“相关主题”列表中的 Debug P(执行)。
有关执行指令的信息,请单击“相关主题”列表中的 Debug T(跟踪)。
范例:
假定键入以下命令:
-G cs:7550
Windows 2000 运行当前内存中的程序,直到执行到 CS 段中的断点地址 7550 为止。Debug 将显示寄存器的内容和标志的状态并结束 g 命令。
以下命令设置两个断点:
G cs:7550, cs:8000
如果在 Debug 遇到断点之后再次键入 g 命令,将从在断点之后的指令开始执行,而不是在通常的开始地址执行。
说明:
-使用 address 参数
必须在 address 参数之前使用等号 (=) 以区分开始地址 (address) 和断点地址 (breakpoints)。
-指定断点
程序在它遇到的第一个断点处停止,而不论您在 breakpoint 列表的什么位置键入断点。Debug 在每个断点处用中断代码代替原始指令。
当程序到达断点时,Debug 将所有断点地址恢复到它们的最初指令并显示所有寄存器的内容、所有标记的状态以及最后执行指令的解码形式。Debug 显示的信息与使用 Debug r(寄存器)命令并指定断点时所显示的信息相同。
如果不在断点处停止程序,Debug 程序将不使用原始指令替换中断代码。
-设置断点的限制
可以只在包含 8086 操作代码(操作码)的第一个字节的地址上设置断点。如果设置了 10 个以上的断点,Debug 将显示以下信息:
bp error
-对用户堆栈指针的要求
用户堆栈指针必须有效且必须有 6 个字节可用于 g 命令。该命令使用iret指令跳转到正在被测试的程序。Debug 设置用户堆栈指针并将用户标志、代码段寄存器和指令指针压入用户堆栈。(如果用户堆栈无效或太小,操作系统可能会失败。)Debug 在指定的断点处设置中断代码 (0CCh)。
-重新启动程序
不要在 Windows 2000 显示以下消息后尝试重新启动程序;
Program terminated normally
要正确地运行程序,必须通过使用 Debug n(名称)和 l(加载)命令重新加载该程序。
子命令 Debug:H(十六进制)编辑
作用: 对指定的两个参数执行十六进制运算。
格式: H value1 value2
参数:value1代表从 0 到 FFFFh 范围内的任何十六进制数字。
value2代表从 0 到 FFFFh 范围内第二个十六进制数字。
范例:假定键入以下命令:-H19f 10a
Debug 执行运算并显示以下结果。 02A9 0095
说明:
Debug 首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。
子命令Debug:I(输入)编辑
作用: 从指定的端口读取并显示一个字节值。
格式: I port
参数:port 按地址指定输入端口。地址可以是 16 位的值。
有关将字节值发送到输出端口的信息,请单击“相关主题”列表中的 Debug O(输出)。
范例:假定键入以下命令:-i 2f8
Debug 读取该字节,并将其值显示如下:42 (同时假定端口的字节值是 42h。)
子命令Debug:L(加载)编辑
作用:将某个文件或特定磁盘扇区的内容加载到内存。
要从磁盘文件加载 BX:CX寄存器中指定的字节数内容,请使用以下语法:
格式: L [address] [drive] [firstsector] [number]
要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:
l address drive start number
参数:
address
指定要在其中加载文件或扇区内容的内存位置。如果不指定 address,Debug 将使用 CS寄存器中的当前地址。
drive
指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C 等。
start
指定要加载其内容的第一个扇区的十六进制数。
number
指定要加载其内容的连续扇区的十六进制数。只有要加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和 number 参数。
有关指定用于 l 命令的文件的信息,请单击“相关主题”列表中的 Debug n(名称)。
有关写入调试到磁盘的文件的信息,请单击“相关主题”列表中的 Debug w(写入)。
范例:
假定启动 Debug 并键入以下命令:
现在可以键入 l 命令以加载 File。com。Debug 将加载文件并显示 Debug 提示符。
假定需要从驱动器C 将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到起始地址为 04BA:0100 的内存中。为此,请键入以下命令:
-L 04ba:100 2 0f 6d
注意:
-使用不带参数的 l 命令
当使用不带参数的 l 命令时,在 debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX寄存器设置为加载的字节数。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n 命令经常指定的文件。
-使用具有 address 参数的 l 命令
如果使用带 address 参数的 l 命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。
-使用带全部参数的 l 命令
如果使用带所有参数的 l 命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。
-加载特定扇区的内容
指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载,直到在 number 中指定的扇区数中的内容全部被加载。
-加载文件
Debug 忽略 .exe 文件的地址 address 参数。如果指定 .exe 文件,Debug 将文件重新定位到 .exe 文件的标题中指定的加载地址。在 .exe 文件被加载到内存前,标题自身从 .exe 文件脱离,因此磁盘上的 .exe 文件大小与内存中的不同。如果要检查整个 .exe 文件,请使用不同的扩展名重命名文件。
-打开十六进制文件
Debug 将具有 .hex 扩展名的文件认为十六进制格式文件。键入不带参数的 l 命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的 l 命令包含 address 参数,Debug 将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。
子命令 Debug:M(移动)编辑
作用: 将一个内存块中的内容复制到另一个内存块中。
格式: m range address
参数:
range
指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。
address
指定要将 range 内容复制到该位置的起始地址。
范例:
假定键入以下命令:
mcs:100 110 cs:500
Debug 首先将 CS:110 地址中的内容复制到地址 CS:510 中,然后将 CS:10F 地址中的内容复制到 CS:50F 中,如此操作直至将 CS:100 地址中的内容复制到地址 CS:500 中。要查看结果,请使用 Debug d(转储)命令,并使用 m 命令指定目标地址。
说明:
复制操作对现有数据的影响
如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。)
执行覆盖复制操作
m 命令执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。
子命令 Debug:N(名称)编辑
作用: 指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
格式:n [drive:][path] filename
参考:
1. WinDbg介绍:
Debugging Tools and Symbols: Getting Started
A word for WinDbg
2. WinDbg下载:
Install Debugging Tools for Windows 32-bit Version
Install Debugging Tools for Windows 64-bit Versions
PHP Debug
PHP的调试方法最基本的是echo或者var_dump。还有就是使用zend debug 或者Xdebug的调试插件。
简单调试
echovar_dump这样的调试方法最近本也最常用,而且相对来说小点的项目也没有必要使用调试插件。这里就不做介绍了。
zend debug调试
zend debug鄙人使用的少,这里稍微提一下,有需要的请自己查询相关信息。
这里是zend debug的官网以及下载地址:
Xdebug 调试
采用Xdebug进行调试,官网以及下载地址配置如下:
[Xdebug]
zend_extension=D:\wamp\bin\php\php5.3.3\ext\php_xdebug-2.1.0-5.3-vc6.dll
;允许调试的客户端IP
xdebug.remote_host=192.168.1.107
;远程调试的端口(默认9000)
xdebug.remote_port=9000
;调试插件dbgp
xdebug.remote_handler=dbgp
详细配置请参阅:
工具调试
最后给大家介绍一个小工具Eclipse Console for PHP(EC4P)下载地址:
我们有时候需要echo 或var_dump, 但是发现直接在网页上输出调试信息的方法又不起作用,或者起到反作用。比 如A页面调用B页面需B返回信息而非转向到B时,在B加入echo调试永远不能得到正确的结果。所以我们需要使用IDE比如Eclipse输出内容,很遗憾,PHP并不能输出到控制台,至少我是这么认为的。这时候就需要想办法了。
我在网上找到这个工具,同时这个工具很好的实现了我们的需求,同时实现了输出定位,可以很容易找到问题。
我们可以在网上搜“PHP开发调试(debug)工具Eclipse Console for PHP(EC4P)”,或者直在sourceforge里搜“econsole4php”。
debug原则编辑
你改错了文件
你改对了文件,但却是在别人的机器上
你改对了文件,但忘了保存
你改对了文件,但忘了重新编译
你认为你把那个东西开启了,但实际上你把它关闭了
你认为你把那个东西关闭了,但实际上你把它开启了
会议中,你应该用心听。
你运行了错误的版本
你运行了正确的版本,但却是在别人的机器上
你改正了问题,但忘了提交
你改正了问题,也提交了,但忘了 push 到版本库中
你改正了问题,也提交了,也 push 了。然而,很多用户的工作都依赖于之前有问题的版本,于是你必须回滚。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
杨晓飞  学生 洛阳师范在校生洛阳师范在校生 2015-11-27 20:01
  汉字是经系统将其机内码和字体、字号等二进制数据索引对应的汉字字库,按一定的编排方式,通过显卡将电脑的数字信号转换成模拟信号让显示器显示出来的。
  1)汉字编码系统,就是汉字编码系列的集合。它具有共同的编码模式,统一的拼写代码,从共同的初始编码出发,演化出一个个相互联系、相互演化的汉字编码系列,将这些汉字编码系列集合起来,就组成一个汉字编码系统。操作系统的一个重要组成部分。
  2)汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接受后就由汉字操作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法无关。机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理。
  3)显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最本配置、最重要的配件之一。显卡作为电脑主机里的一个重要组成部分,是电脑进行数模信号转换的设备,承担输出显示图形的任务。显卡接在电脑主板上,它将电脑的数字信号转换成模拟信号让显示器显示出来,同时显卡还是有图像处理能力,可协助CPU工作,提高整体的运行速度。
分享本回答由电脑网络分类达人 李士洲认证

[ Last edited by zzz19760225 on 2016-5-18 at 22:30 ]
作者: zzz19760225     时间: 2016-5-18 23:48
http://blog.cechina.cn/zhiy66/205022/message.aspx


发表于 2009/6/26 9:27:24
0

标签: 无标签
汉字点阵字库的原理与显示

一、什么是点阵?
我们先看两个字的点阵图:

A字母的点阵是这样的:8×16



汉字“你”的点阵是这样的:16×16


以上的两个文字的字模信息,应该让我们很清楚的明白了文字的显示原理。但是又是如何获取这些字模信息的呢?

我们知道英文字母数量比较少,我们只要用一个字节(8位)就足以表达。但是汉字非常多。要怎么表达呢?
前人采用的一个方法就是把ASCII码的高128位作为汉字的内码,低128位仍然作为英文字母的内码,然后用两个字节来表示一个汉字。通过这个内码,我们可以获取汉字的字模信息。然后再根据这些字模的信息,把相应的汉字显示出来。

二、什么是汉字字库?如何寻址?
点阵字库其实就是按照汉字内码的顺序,把汉字的字模信息存起来。16×16的点阵字库有94区,每个区有94个汉字的字模。这样总的有94×94个汉字。
我们之前说了,一个汉字由两个ASCII扩展码构成。第一个ASCII扩展码用来存放汉字的区码,第二个ASCII扩展码用来存放汉字的位码。具体是这样的:
第一个扩展ASCII码 = 128  + 汉字的区码
第二个扩展ASCII码 = 128 + 汉字的位码
这样,如果我们用char HZ[2]来表示一个汉字。则:
区码 = HZ[0] - 128
位码 = HZ[1] - 128
这样,算出区位码之后,我们就可以用它在汉字库里面寻址找字模了。具体的方式是:
该汉字的偏移地址 = (区码-1)×94×一个字占用的字节数 + 位码×一个字占用的字节数

这样我们就很容易的写出显示汉字字模的函数:

INT8U *HZK = (INT8U *)0x801c0000;   /* 汉字字库的存储地址 */
INT8U *ASCII = (INT8U *)0x801fba00; /* ASCII码字库的存储地址 */

INT8U const cmp_w[8]={128,64,32,16,8,4,2,1};

/*
*********************************************************************************************************
* Function   : DisplayHZ()                                         
*
* Description: 该函数用于在FDGK/GUI上显示一个汉字。汉字为:16*16点阵
*
* Arguments  : x     预显示的位置的横坐标
*              y     预显示的位置的纵坐标
*              FontModule 预显示的汉字模指针
*              color 该点的颜色值:16位,闪烁位(1位)+ RGB555(15位)
*
* Returns    : none
*********************************************************************************************************
*/
static void DisplayHZ(INT16U x, INT16U y, INT8U *FontModule, INT16U color)
{
    INT16U row,c;
    for( row="0";row<16;row++)                       /* 十六行点阵 */
    {
        for( c="0";c<8;c++)
            if((FontModule[row*2]&cmp_w[c])!=0)    /* 前八位显示 */
                LCD_DrawPixel(c+x,row+y,color);
        for(c=0;c<8;c++)
            if((FontModule[row*2+1]&cmp_w[c])!=0)  /* 后八位显示 */
                LCD_DrawPixel(c+8+x,row+y,color);
    }
}

/*
*********************************************************************************************************
* Function   : GUI_WriteHZ()                                         
*
* Description: 该函数用于在FDGK/GUI上显示一个或多个汉字。
*
* Arguments  : x     预显示的位置的横坐标
*              y     预显示的位置的纵坐标
*              HZ    预显示的汉字串指针
*              color 该点的颜色值:16位,闪烁位(1位)+ RGB555(15位)
*
* Returns    : none
* Note       : 汉字串里面不能带有ASC字符,因为它们使用的字库不一样,会导致无法正常显示。
*********************************************************************************************************
*/
void GUI_WriteHZ(INT16U x,INT16U y,INT8U *HZ, INT16U color)
{
    INT32U i,j,k;
    INT8U *str;   
k = 0;
while(1)
{
   if(*HZ=='\0') break;               /* 显示所有,直到结束 */
   
   /* 取得字在字库里面的索引地址 */
   i = *HZ++ - 0xa0;
   j = *HZ++ - 0xa0;   
   str = HZK+((i-6-1)*94+(j-1))*32;   /* -6 操作是因为本终端对字库做了处理,汉字是由16区开始,而不是从11区开始*/
   
        DisplayHZ(x+k*16,y,str,color);     /* 在相应的地方写上汉字 */
        k++;
    }
}


这样就可以显示一大串的汉字了。但是还有一个问题,就是如果要显示的文字里面夹带英文字母,就无法显示。于是,对函数进行改进。

void GUI_PutString(INT16U x,INT16U y,INT8U *font, INT16U color)
{
    INT8U i,j;
    INT8U *str;   
    INT16U x0,y0;
    x0 = x;
    y0 = y;
    while(1)
    {
        if(*font == '\0') break;
        
        i = *font;
        if( (i & 0x80) == 0)                      /* 判断是否是扩展ASCII码 */
        {
            i = *font++;
            str = ASCII + (i-0x20)*16;
            DisplayASCII(x0,y0,str,color);     /* 在相应的地方写上ASC码 */
            x0 += 8;           
        }
        else {
            i = *font++ - 0xa0;
            j = *font++ - 0xa0;   
       str = HZK+((i-6-1)*94+(j-1))*32;   /* -6 操作是因为本终端对字库做了处理,汉字是由16区开始,而不是从11区开始*/
   
            DisplayHZ(x0,y0,str,color);     /* 在相应的地方写上汉字 */
            x0 += 16;           
        }
    }
}

这样,无论是汉字,还是英文单词,都可以很好的显示了。
系统分类: 嵌入式系统   |   用户分类: 技术分享   |   来源: 转贴

[ Last edited by zzz19760225 on 2016-5-19 at 01:09 ]
附件 1: 深度截图20160518235253.png (2016-5-18 23:55, 67.27 K,下载次数: 1)


附件 2: 深度截图20160518235624.png (2016-5-18 23:58, 85.69 K)



作者: zzz19760225     时间: 2016-5-19 00:41
字符编码的前世今生
In 网页重构 on 2013-07-30 16:48:32 by 小倪
由于“字符编码”这个话题牵涉到的历史久远、机构众多、专业术语较多,所以本篇文章可能会略长,为了避免内容过于枯燥,我会尽量用一种通俗易懂的语言来写这篇文章。
其中本文的第一篇章会对历史中的主要字符编码进行介绍,由于篇幅较长,如果读者对此已很了解,可直接跳过进行第二章的阅读。
完成本篇文章的过程中参考和阅读了大量的文章和文献,写本篇文章的目的一是让自己对“字符编码”能够做一个较深的理解,二是希望给曾经徘徊或正在徘徊在编码困惑中的前端们一个很好的参考,搞清楚字符编码问题是前端万事之基石。
由于本人才疏学浅,好多信息也是从网络和书籍中参考而来,错误之处难免,请大家指正。
------------------题记
跟随历史的足迹看字符编码

古代的通信方式
很久很久以前,人们之间的长途通讯主要是用信鸽、骑马送报、烽烟等方式进行:

世界第一条电报
直到1837年,世界第一条电报诞生,当时美国科学家莫尔斯尝试用一些“点”和“划”来表示不同的字母、数字和标点符号,这套表示字符的方式也被称为“摩尔斯电码”:

世界第一台计算机
再后来到了1946年,世界第一台计算机诞生。发明计算机的同学们用8个晶体管的“通”或“断”组合出一些状态来表示世间万物,不过当时的计算机有一间半教室那么大,六头大象重,从现在看来这简直就是个怪物,但在当时却是震惊世界与改变世界的一项重要发明:

ASCII
8个晶体管的“通”或“断”即可以代表一个字节,刚开始,计算机只在美国使用,所有的信息在计算机最底层都是以二进制(“0”或“1”两种不同的状态)的方式存储,而8位的字节一共可以组合出256(2的8次方)种状态,即256个字符,这对于当时的美国已经是足够的了,他们尝试把一些终端的动作、字母、数字和符号用8位(bit)来组合:
0000 0000 ~ 0001 1111 共 33 种状态用来表示终端的特殊动作,如打印机中的响铃为 0000 0111 ,当打印机遇到 0000 0111 这样的字节传过来时,打印机就开始响铃;
0010 0000 ~ 0010 1111 、 0011 1010~0110 0000 和 0111 1101 ~ 0111 1110 共 33 种状态来表示英式标点符号,如 0011 1111 即代表英式问号“?”;
0011 0000 ~ 0011 1001 共 10 种状态来表示“0~9”10个阿拉伯数字;
0100 0001 ~ 0101 1010 和 0110 0001 ~ 0111 1010共 52种状态来表示大小写英文字母;
自此,一共只用到了128种状态,即128个字符,刚好占用了一个字节中的后7位,共包括33个控制字符和95个可显示字符,这一字符集被称为ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),这一套字符集在1967年被正式公布。
讲到这里,引出几个基础概念:
比特(bit):也可称为“位”,是计算机信息中的最小单位,是 binary digit(二进制数位) 的 缩写,指二进制中的一位
字节(Byte):计算机中信息计量的一种单位,一个位就代表“0”或“1”,每8个位(bit)组成一个字节(Byte)
字符(Character):文字与符号的总称,可以是各个国家的文字、标点符号、图形符号、数字等
字符集(Character Set):是多个字符的集合
编码(Encoding): 信息从一种形式或格式转换为另一种形式的过程
解码(decoding): 编码的逆过程
字符编码(Character Encoding): 按照何种规则存储字符
现在我们来看我们文章开头提到的第一条电报的诞生,莫尔斯编码中包含了大小写英文字母和数字等符号。
这里的每一个符号其实就是⌈字符⌋,
而这所有的字符的集合就叫做⌈字符集⌋,
“点”或“划”与字符之间的对应关系即可以称为⌈字符编码⌋。
而电报的原理是:
“点”对应于短的电脉冲信号,“划”对应于长的电脉冲信号,这些信号传到对方,接收机把短的电脉冲信号翻译成“点”,把长的电脉冲信号转换成“划”,译码员根据这些点划组合就可以译成英文字母,从而完成了通信任务。
这里把字符表示为“点”或“划”并对应为电脉冲信号的过程既是⌈编码⌋,
而译码员把接收机接收到的脉冲信号转化成点划后译成字符的过程即为⌈解码⌋。
而对于计算机诞生之后,只不过是将摩斯电码中的“点”和“划”换成了以8位字节二进制流的方式表示,如数字1的二进制流是0011 0001,对应的十进制流是49,十六进制流是31。
EASCII
虽然刚开始计算机只在美国使用,128个字符的确是足够了,但随着科技惊人的发展,欧洲国家也开始使用上计算机了。不过128个字符明显不够呀,比如法语中,字母上方有注音符号,于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语的é的二进制流为1000 0010,这样一来,这些欧洲国家的编码体系,可以表示最多256个字符了。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,1000 0010在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。 EASCII(Extended ASCII,延伸美国标准信息交换码)由此应运而生,EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号:

GB2312
EASCII码对于部分欧洲国家基本够用了,但过后的不久,计算机便来到了中国,要知道汉字是世界上包含符号最多并且也是最难学的文字。 据不完全统计,汉字共包含了古文、现代文字等近10万个文字,就是我们现在日常用的汉字也有几千个,那么对于只包含256个字符的EASCII码也难以满足天朝的需求了。 于是⌈中国国家标准总局⌋(现已更名为⌈国家标准化管理委员会⌋)在1981年,正式制订了中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,项目代号为GB 2312 或 GB 2312-80(GB为国标汉语拼音的首字母),此套字符集于当年的5月1日起正式实施。
包含字符:
共包含7445个字符,6763个汉字和682个其他字符(拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母)
存储方式:
基于EUC存储方式,每个汉字及符号以两个字节来表示,第一个字节为“高位字节”,第二个字节为“低位字节”
BIG5
要知道港澳台同胞使用的是繁体字,而中国大陆制定的GB2312编码并不包含繁体字,于是信息工业策进会在1984年与台湾13家厂商签定“16位个人电脑套装软件合作开发(BIG-5)计划”,并开始编写并推出BIG5标准。 之后推出的倚天中文系统则基于BIG5码,并在台湾地区取得了巨大的成功。在BIG5诞生后,大部分的电脑软件都使用了Big5码,BIG5对于以台湾为核心的亚洲繁体汉字圈产生了久远的影响,以至于后来的window 繁体中文版系统在台湾地区也基于BIG5码进行开发。
包含字符:
共收录13,060个汉字及441个符号
编码方式:
用两个字节来为每个字符编码,第一个字节称为“高位字节”,第二个字节称为“低位字节”
Unicode
由来:
在计算机进入中国大陆的相同时期,计算机也迅速发展进入了世界各个国家。 特别是对于亚洲国家而言,每个国家都有自己的文字,于是每个国家或地区都像中国大陆这样去制定了自己的编码标准,以便能在计算机上正确显示自己国家的符号。 但带来的结果就是国家之间谁也不懂别人的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,都使用了不同的编码体系。 于是,世界相关组织意识到了这个问题,并开始尝试制定统一的编码标准,以便能够收纳世界所有国家的文字符号。 在前期有两个尝试这一工作的组织:
国际标准化组织(ISO)
统一码联盟
国际标准化组织(ISO)及国际电工委员会(IEC)于1984年联合成立了ISO/IEC小组,主要用于开发统一编码项目; 而Xerox、Apple等软件制造商则于1988年组成了统一码联盟,用于开发统一码项目。 两个组织都在编写统一字符集,但后来他们发现各自在做相同的工作,同时世界上也不需要两个不兼容的字符集,于是两个组织就此合并了双方的工作成果,并为创立一个单一编码表而协同工作。
1991年,两个组织共同的工作成果Unicode 1.0正式发布,不过Unicode 1.0并不包含CJK字符(即中日韩)。
       
Unicode 1.0:1991年10月
Unicode 1.0.1:1992年6月
Unicode 1.1:1993年6月
Unicode 2.0:1997年7月
Unicode 2.1:1998年5月
Unicode 2.1.2:1998年5月
Unicode 3.0:1999年9月
Unicode 3.1:2001年3月
Unicode 3.2:2002年3月
Unicode 4.0:2003年4月
Unicode 4.0.1:2004年3月
Unicode 4.1:2005年3月
Unicode 5.0:2006年7月
Unicode 5.1:2008年4月
Unicode 5.2:2009年10月
Unicode 6.0:2010年10月
Unicode 4.1:2005年3月
Unicode 6.1:2012年1月31日
Unicode 6.2:2012年9月
ISO/IEC 8859
ISO/IEC小组在1984年成立后的第三年(即1987年)开始启动ISO 8859标准的编写,ISO 8859是一系列8位字符集的标准,主要为世界各地的不同语言(除CJK)而单独编写的字符集,一共定义了15个字符集:
ISO/IEC 8859-1:西欧语言
ISO/IEC 8859-2  :中欧语言
ISO/IEC 8859-3 :南欧语言
ISO/IEC 8859-4: 北欧语言
ISO/IEC 8859-5: 斯拉夫语
ISO/IEC 8859-6: 阿拉伯语
ISO/IEC 8859-7:希腊语
ISO/IEC 8859-8:希伯来语
ISO/IEC 8859-9:土耳其语
ISO/IEC 8859-10: 北日耳曼语
ISO/IEC 8859-11:泰语
ISO/IEC 8859-13: 波罗的语族
ISO/IEC 8859-14: 凯尔特语族
ISO/IEC 8859-15:西欧语言,收录芬兰语字母和大写法语重音字母,以及欧元(€)符号
ISO/IEC 8859-16 :东南欧语言,主要供罗马尼亚语使用,并加入欧元(€)符号
其中ISO/IEC 8859-1至ISO/IEC 8859-4四个项目早在1982年就已经编写出来,只不过是由ANSI与ECMA合作完成,并于1985年正式公布,ISO/IEC小组成立后,这一成果被其收录,并改名为ISO/IEC 8859 前四个项目。 大家其实发现以上15个字符集中并没有代号为“ISO/IEC 8859 -12”的字符集,据说-12号本来是预留给印度天城体梵文的,但后来却搁置了(阿三有了自己的编码-ISCII)。由于英语没有任何重音字母,故可使用以上十五个字符集中的任何一个来表示。
ISO/IEC 10646 / UCS
1993年,ISO/IEC 10646标准第一次发表,ISO/IEC 10646是ISO 646的扩展,定义了1个31位的字符集。ISO 10646标准中定义的字符集为UCS,UCS是Universal Character Set的缩写,中文译作通用字符集。
版本:
ISO/IEC 10646-1:第一次发表于1993年,现在的公开版本是2000年发表的ISO/IEC 10646-1:2000。
ISO/IEC 10646-2:在2001年发表。
包含字符:
最初的ISO 10646-1:1993的编码标准,即Unicode 1.1,收录中国大陆、台湾、日本及韩国通用字符集的汉字共计20,902个,当然每个版本的Unicode标准的字符集所包含的字符数不尽相同,UCS包含了已知语言的所有字符,除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的方块文字,此外还包括了大量的图形、印刷、数学、科学符号。 UCS给每个字符分配一个唯一的代码,并且赋予了一个正式的名字,通常在表示一个Unicode值的十六进制数的前面加上“U+”,例如“U+0041”代表字符“A”。
编码方案:
UCS仅仅是一个超大的字符集,关于UCS制定的编码方案有两种:UCS-2和UCS-4,Unicode默认以UCS-2编码。 顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。那么UCS-2其实可以容纳的字符数为65536(2的16次方),而UCS-4可以容纳的字符数为2147483648(2的31次方)。其实对于UCS-2已经是完全够用了,基本可以包含世界所有国家的常用文字,如果需要考虑一些偏僻字,那么UCS-4则绝对可以满足了,21亿个字符哪怕是整个宇宙也够用了吧!
UTF
Unicode 诞生,随之而来的计算机网络也发展了起来,Unicode 如何在网络上传输也是一个必须考虑的问题,于是在1992年,面向网络传输的UTF标准出现了。 UTF是Unicode Transformation Format的缩写,中文译作Unicode转换格式。其实我们从现在可以把Unicode看作是一个标准或组织,而UCS就是一个字符集,那么UCS在网络中的传输标准就是UTF了。 前面提到了UCS的编码实现方式为UCS-2和UCS-4,即要么是每个字符为2个字节,要么是4个字节。如果一个仅包含基本7位ASCII字符的Unicode文件,每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0,这就造成了比较大的浪费。但是,聪明的人们发明了UTF-8,UTF-8采用可变字节编码,这样可以大大节省带宽,并增加网络传输效率。
UTF-8
使用1~4个字节为每个UCS中的字符编码:
128个ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)
拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母需要二个字节编码(Unicode范围由U+0080至U+07FF)
大部分国家的常用字(包括中文)使用三个字节编码
其他极少使用的生僻字符使用四字节编码
UTF-16/UCS-2
UCS-2的父集,使用2个或4个字节来为每个UCS中的字符编码:
128个ASCII字符需两个字节编码
其他字符使用四个字节编码
UTF-32/UCS-4
等同于UCS-4,对于所有字符都使用四个字节来编码
GB13000
前面提到了Unicode的迅速发展,至1993年时,包含CJK的Unicode 1.1已经发布了,天朝的ZF也意识到了需要一个更大的字符集来走向世界,于是在同一年,中国大陆制定了几乎等同于Unicode1.1的GB13000.1-93国家编码标准(简称GB13000)。是的,你没听错,中华人民共和国信息产业部把Unicode里的所有东东拿过来,然后自己重新修订发布了下,改为了国家标准GB13000。此标准等同于 ISO/IEC 10646.1:1993和Unicode 1.1。
GBK
1995年,在GB13000诞生后不久,中国教育科研网(NCFC)与美国NCFnet直接联网,这一天是中国被国际承认为开始有网际网路的时间。此后网络正式开始在中国大陆接通,个人计算机开始在中国流行,虽然当时只是高富帅才消费得起的产品。中国是一个十几亿人口的大国,微软意识到了中国是一个巨大的市场,当时的微软也将自己的操作系统市场布局进中国,进入中国随之而来要解决的就是系统的编码兼容问题。 之前的国家编码标准GB 2312,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁体字,GB 2312不能处理,因此微软利用了GB2312中未使用的编码空间,收录了GB13000中的所有字符制定了汉字内码扩展规范GBK(K为汉语拼音 Kuo Zhan中“扩”字的首字母)。所以这一关系其实是大陆把Unicode1.1借鉴过来改名为了GB13000,而微软则利用GB2312中未使用的编码空间收录GB13000制定了GBK。所以GBK是向下完全兼容GB2312的。
包含字符:
共收录21886个字符, 其中汉字21003个, 字符883个
编码方式:
GBK只不过是把GB2312中未使用的空间,编码了其他字符,所以GBK同样是用两个字节为每个字符进行编码。
GB18030
微软到了99年前后,说GBK已经落伍了,现在流行UTF-8标准,准备全盘转换成UTF-8,但中国ZF不是吃素的,编写并强制推出了GB18030标准。GB18030的诞生还有一个原因是GBK只包含了大部分的汉字和繁体字等,我们的少数民族兄弟根本木有考虑!中国有56个民族,其中有12个民族有自己的文字,那怎么办呢?在2000年,电子工业标准化研究所起草了GB18030标准,项目代号“GB 18030-2000”,全称《信息技术-信息交换用汉字编码字符集-基本集的扩充》。此标准推出后,在中国大陆之后的所售产品必须强制支持GB18030标准,不然不得卖!(这招挺狠的 - -#)
版本:
GB 18030-2000
GB 18030-2005
包含字符:
GB18030收录了GBK中的所有字符,并将Unicode中其他中文字符(少数民族文字、偏僻字)也一并收录进来重新编码。其中GB 18030-2000共收录27533个汉字,而GB 18030-2005共包含70244个汉字。
编码方式:
采用多字节编码,每个字符由1或2或4个字节进行编码
前端眼中的字符编码

前面我们穿越回过去对字符编码做了下了解,那么这些字符编码跟我们到底有啥关系?
基本原理:
当我们打开编辑器coding时,按下ctrl+s的那一刻,其实等于是将自己的工作成果存储进了计算机,而这里最关键的是我们以什么字符编码来进行存储,我们以intellij编辑器为例:

我们在编写此文档时,是以UTF-8编码方式进行coding,当我们按下ctrl+s时,则此文档以utf-8编码方式存储进了计算机(右下角的UTF-8),而head区域中的<meat charset="utf-8">的作用则是告诉浏览器此文档以utf-8编码方式编码。 我们此时用Hex编辑器打开这个文件,来看看他的二进制流:

其中红框标注出的即为“小海”两个中文字的二进制流,第一个为"11100101 10110000 10001111"转化为十六进制则为“E5B08F”,第二个为“10110101 10110111 00001101”转化为十六进制为“E6B5B7”,而当我们去查询UTF-8的码表时发现“E5B08F”对应的字符为“小”,“E6B5B7”对应的字符则为“海”,至此当我们用浏览器进行预览页面时,由于浏览器同样以UTF-8方式对此页面进行解码,“小海”两个字则可以被正确的显示出来。
乱码是个XX
做过前端的基本都遇到过乱码问题吧?好吧,下面就带大家来揭开这一神秘的面纱。
我们用notepad打开上面的文件,并重新以GBK方式编码,然后用intellij打开后:

乱了有木有!居然变成了“C??”,木有道理呀!我在用notepad编辑文件时采用的是gbk编码,而头部申明的也是gbk,本身notepad打开也是正常,但用intellij打开却乱了!
罪魁祸首:编辑器默认编码。每个编辑器都会有默认编码,如果没有为一个项目单独设置过默认编码,打开一个单独的文件,编辑器往往以自己的默认编码去解码这个文件,如上图,我们的inellij编辑器的默认是UTF-8解码,而文件是GBK编码方式,那么打开肯定就是乱的拉。
所以编辑器也是一个因素,DW则可以智能判断文件的编码方式,上述文件用DW打开并不会乱码,而intellij可能对中文的支持并不是很好,所以还不能智能判断中文编码,默认以UTF-8解码(当然默认编码自己是可以修改的)。
很多读者可能还有一个疑问,为啥乱码出来的是“C??”? 其实原理已在上面的基本原理中做过介绍,即编辑器ctrl+s存进计算机时是GBK,但尝试用utf-8来解析,对应的utf-8中的码表中却找到了“C??”,感兴趣的同学可以自己研究下。
我们现在将文件重新编辑,即编辑时采用GBK,但头部申明为UTF-8:

然后用浏览器打开后,就是这样了:

乱了有木有!这个其实和编辑器打开一个文件乱码的原理是一致的:即编辑器编码时所采用的字符编码和解码时所采用的字符编码不一致。上述栗子,我们在coding时采用的是GBK编码,但头部却告诉浏览器这个文档是UTF-8编码,那么浏览器在用UTF-8解码时就会出现了乱码。
申明编码的方式
我们在coding时需要告诉浏览器自己的文件采用了什么字符编码,下面列出一些常见的方法:
<meta charset="gb2312"> //html5
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> //html4 xhtml
<script src="http://ossweb-img.qq.com/images/js/foot.js" charset="gb2312"></script>
<link href="http://gameweb-img.qq.com/css/common.css" rel="stylesheet" charset="gb2312" >
我们可以在head区域的meta元素中为整个页面申明编码方式,也可以为单独的外链文件申明编码方式(link/script等元素)。问题是如果页面头部和外链文件中只有部分申明或者全部申明,那么对应的到底是以什么方式解码呢?这里就有一个优先级的问题,具体的判定关系如下:

通过上述判定,我们其实可以发现,一个页面中优先级最高的其实是服务端的编码设置,如果一旦服务端设置了编码A,那么页面即以A来解析。 目前Google采用的是这一做法,这样的传输效率会更高,不需要在头部额外再单独申明编码,但这样其实也有一定的风险,除了需要有一个严谨的编码规范,还需要确保服务器上的页面都保持同一编码,一旦不一致就会造成乱码,所以目前这一方案在国内用的并不多。 其他的,如果外链资源设置了编码C,那么即以C来解析,无论服务端和头部是否申明编码。 但必须要提醒大家的是:申明的编码只是告诉浏览器相关的内容是以什么方案去解码,并不是这一部分内容就采用了这个编码。所以大家在coding时的编码一定要确保和你申明的保持统一,不然就会出现乱码的问题。
BOM是个神马
BOM是byte-order mark的缩写,为Unicode标准为了用来区分一个文件是UTF-8还是UTF-16或UTF-32编码方式的记号,又称字节序。
UTF-8以单字节为编码单元,并没有字节序的问题,而UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?这是UTF-16文件开头的BOM就有作用了。
采用Unicode编码方式的文件如果开头出现了“FEFF”,“FEFF”在UCS中是不存在的字符,也叫做“ZERO WIDTH NO-BREAK SPACE”,那么就表明这个文件的字节流是Big-Endian(高字节在前)的;如果收到“FFFE”,就表明字节流是Little-Endian(低字节在前)。
在UTF-8文件中放置BOM主要是微软的习惯,BOM其实是为UTF-16和UTF-32准备的,微软在UTF-8使用BOM是因为这样可以把UTF-8和ASCII等编码明确区分开,但这样的文件在Window以外的其他操作系统里会带来问题。
我们以Window下的文本文件为例:

在保存时可以选择ANSI、Unicode、Unicode big endian和UTF-8四种编码方式。
其中ANSI是默认的编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码);
Unicode其实是UTF-16 endian big编码方式,这个把带有BOM的小端序UTF-16称作Unicode而又不详细说明,也是微软的习惯;
而Unicode big endian则是带有BOM的大端序编码方式
目前UTF-16通常用于系统文件的编码,而UTF-32由于对每个字符都采用四个字节编码,所以现在互联网中大部分都采用UTF-8来进行编码传输。
关于未来的展望

概述

(左图:中国地区ALEXA排名前20的站点所采用的编码占比)                  (右图:腾讯互娱所有业务所采用的编码占比)
左图表明GB2312、GBK与UTF-8编码三分天下,而右图显示腾讯互娱的业务大多数采用了GB2312,零星的采用了其他编码。总的就是不同的字符编码方案基本都存在了,而这也与各公司业务的历史原因也有一定的关系。 当我们在项目的最初期时采用了一种非Unicode编码方案时,随着业务的壮大,积累的页面越来越多,到后期想去改成Unicode编码方案,就会担心出错的问题,所以现在大多数公司都采用了延用初期编码的方式,如淘宝,腾讯互娱等,以及四大门户。
摆在眼前的问题
可是,某一天了,我们的网站用户港澳台用户也变多了,我们需要支持繁体怎么办?
某一天,我们的业务拓展到东南亚了,我们需要我们的网站也能支持那些国家的语言怎么办?
如今,国内大多数公司采用的方案是,为相应的环境单独做一套编码文件,如 http://big5.china.com.cn/ ,又如 http://big5.qidian.com
再比如,哪一天了,我们的网站需要支持少数民族的语言怎么办?
难道像某某企业这样切成图么?

嗯,这一切都只是暂时的方案,但人一旦变得懒起来,就不愿意去改变一些东西,就比如UTF-8。
拥抱国际化标准
一切就等着我们敞开胸怀去拥抱,而不是沉浸在过去的喜悦中。最终的编码方案决定权在我们自己手里,改变,只是时间的问题。

参考资源及文献列表:
http://zh.wikipedia.org/wiki/ISO_10646
http://zh.wikipedia.org/wiki/%E4 ... F%E8%A8%98%E8%99%9F
http://www.ruanyifeng.com/blog/2 ... code_and_utf-8.html http://www.imkevinyang.com/2010/ ... 81%93%E7%9A%84.html http://zh.wikipedia.org/wiki/Gb2312 http://zh.wikipedia.org/wiki/GBK http://zh.wikipedia.org/wiki/GB18030
http://www.unicode.org/
http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
http://zh.wikipedia.org/wiki/Big5
分享到 > 腾讯微博 QQ空间 新浪微博
留言板
留言板系统维护中...暂不提供评论
作者: zzz19760225     时间: 2016-5-19 01:42
汉字编码 编辑
Hanzi bianma汉字编码(Chinese character encoding )是为汉字设计的一种便于输入计算机的代码。由于电子计算机现有的输入键盘与英文打字机键盘完全兼容。因而如何输入非拉丁字母的文字(包括汉字)便成了多年来人们研究的课题。 汉字信息处理系统一般包括编码、输入、存储、编辑、输出和传输。编码是关键。不解决这个问题,汉字就不能进入计算机。
中文名 汉字编码 外文名 Chinese character encoding 本    质 代码 信息处理系统 输入、存储、编辑
目录
1 途径
2 原因
3 分类
4 类型
5 双轨制
6 趋势
7 定型标准
▪ 定型化
▪ 标准化
8 字符集
9 参考书目
途径编辑
汉字进入计算机的三种途径 分别为:
①机器自动识别汉字:计算机通过“视觉”装置(光学字符阅读器或其他),用光电扫描等方法识别汉字。
②通过语音识别输入:计算机利用人们给它配备的“听觉器官”,自动辨别汉语语音要素,从不同的音节中找出不同的汉字,或从相同音节中判断出不同汉字。
③通过汉字编码输入:根据一定的编码方法,由人借助输入设备将汉字输入计算机。
机器自动识别汉字和汉语语音识别,国内外都在研究,虽然取得了不少进展,但由于难度大,预计还要经过相当一段时间才能得到解决。在现阶段,比较现实的就是通过汉字编码方法使汉字进入计算机。
原因编辑
汉字编码的困难点 汉字进入计算机,有许多困难,其原因主要有三点:
①数量庞大:一般认为,汉字总数已超过6万个(包括简化字)。虽有研究者主张规定3000多或4000字作为当代通用汉字,但仍比处理由二三十个字母组成的拼音文字要困难得多。
②字形复杂:有古体今体,繁体简体,正体异体;而且笔画相差悬殊,少的一笔,多的达36笔,简化后平均为9.8笔。
③存在大量一音多字和一字多音的现象:汉语音节416个,分声调后为1295个(根据《现代汉语词典》统计,轻声39个未计)。以1万个汉字计算,每个不带调的音节平均超过24个汉字,每个带调音节平均超过7.7个汉字。有的同音同调字多达66个。一字多音现象也很普遍。
分类编辑
计算机中汉字的表示也是用二进制编码,同样是人为编码的。根据应用目的的不同,汉字编码分为外码、交换码、机内码和字形码。
1.外码(输入码)
外码也叫输入码,是用来将汉字输入到计算机中的一组键盘符号。常用的输入码有拼音码、五笔字型码、自然码、表形码、认知码、区位码和电报码等,一种好的编码应有编码规则简单、易学好记、操作方便、重码率低、输入速度快等优点,每个人可根据自己的需要进行选择。
2.交换码(国标码)
计算机内部处理的信息,都是用二进制代码表示的,汉字也不例外。而二进制代码使用起来是不方便的,于是需要采用信息交换码。中国标准总局1981年制定了中华人民共和国国家标准GB2312--80《信息交换用汉字编码字符集--基本集》,即国标码。
区位码是国标码的另一种表现形式,把国标GB2312--80中的汉字、图形符号组成一个94×94的方阵,分为94个“区”,每区包含94个“位”,其中“区”的序号由01至94,“位”的序号也是从01至94。94个区中位置总数=94×94=8836个,其中7445个汉字和图形字符中的每一个占一个位置后,还剩下1391个空位,这1391个位置空下来保留备用。
3.机内码
根据国标码的规定,每一个汉字都有了确定的二进制代码,在微机内部汉字代码都用机内码,在磁盘上记录汉字代码也使用机内码。
4.汉字的字形码
字形码是汉字的输出码,输出汉字时都采用图形方式,无论汉字的笔画多少,每个汉字都可以写在同样大小的方块中。通常用16×16点阵来显示汉字。
5.汉字地址码
汉字地址码是指汉字库中存储汉字字形信息的逻辑地址码。它与汉字内码有着简单的对应关系,以简化内码到地址码的转换。
类型编辑
据粗略统计,现有400多种编码方案,其中上机通过试验的和已被采用作为输入方式的也有数十种之多。归纳起来,不外5种类型:
①整字输入法:
前一阶段,一般是将三四千个常用汉字排列在一个具有三四百个键位的大键盘上。大多是将这些汉字按XY坐标排列在一张字表上,通常叫“字表法”,或“笔触字表法”。比如,X25行和Y90列交叉的字为“国”,当电笔点到字表上的“国”字时,机器自动将该字的代码2590输入。键盘上或字表中字按部首或按音序或按字义联想而排列。不常用的字作为盘外字或表外字,另行编码处理。
②字形分解法:
将汉字的形体分解成笔画或部件,按一定顺序输进机器。笔画一般分成 8种:横一、竖(丨)、撇(丿)、点(丶)、折(□)、弯(□)、叉十、方(口)。部件一般归纳出一二百个。由于一般键盘上只有42个键(包括数字和标点),容纳不下这么多部件,因而有人设计中键盘,也有人利用部件形体上的相似点或出现概率的不同,而把100多个部件分布在26个字母键上。
③字形为主、字音为辅的编码法:
这种编码法与字形分解法的不同在于还要利用某些字音信息。如有的方案为了简化编码规则,缩短码长,在字形码上附加字音码,有的方案为了采用标准英文电传机,将分解归纳出来的字素通过关系字的读音转化为拉丁字母。
④全拼音输入法:
绝大多数是以现行的汉语拼音方案为基础进行设计。关键问题是区分同音字,因而有的方案提出“以词定字”的方法,还有的方案提出“拼音-汉字转换法”,即“汉语拼音输入 ──机内软件变换(实为查机器词表)──汉字输出”系统。
⑤拼音为主、字形为辅的编码法:
一般在拼音码前面或后面再添加一些字形码。拼音码有用现行汉语拼音方案或稍加简化的,还有的为了缩短码长而把声母和韵母都用单字母或单字键表示的“双拼方案”或“双打方案”。如F键既表声母F,又表韵母ang,连击两下,便是Fang“方”字。区分同音字的字形码也多种多样。除了大部分采用偏旁部首的信息外,还有采用起末笔或采用语义类别的。
上述各种编码法,各有短长。例如,字表法的特点是一字一格(键),无重码,直观性好,操作简单。缺点是需特制键盘,速度较慢。字形分解法的好处是按形取码,不涉及字音,因而不认识的字(包括生僻字、古字)也同样可以编码输入;但汉字形体结构非常复杂,写法也有许多差异,分解标准不易统一,因而不少方案规则较多。拼音输入法(包括拼音-汉字转换法)的优点是操作简捷,可以“盲打”,不受汉字简化、字形改变的影响,符合拼音化方向,并且还便于作进一步信息处理;缺点是不认识的字无法输入;另外,如果不加字形码或不用以词定字法或显式选择法,同音字较难处理。
双轨制编辑
汉语拼音推广应用,并逐步过渡到汉字和汉语拼音文字并存并用,这是一种双轨制。汉字信息处理领域中,音码和形码的并存并用,同样是一种双轨制。因此,不少人认为,采用双轨制好,理由有以下5点:
①对掌握普通话的人来说,使用音码比形码方便,速度比较快。形码虽然较慢,但能输入任何汉字(包括古字)。采用双轨,操作员认识的字可按音输入,不认识的字按形输入,会普通话的人可按音输入,方音重的人可按形输入。
②对于用字量少的单位,按音输入无问题,但对用字量多的单位来说,按音输入就不如按形输入,因为一般人只能念出一部分汉字。
③按形输入(尤其是整体输入)对于中文信息处理的某类工作,如统计汉字,非常适合;但是对于其他类工作,例如统计汉语的音(声韵调)则无能为力。按音输入则正相反。双轨正好是相辅相成。
④有的形码可以照顾多种汉字(如日本的汉字、南朝鲜的汉字),而音码能分词连写,便于作进一步的信息处理。
⑤适当的双轨方案,不会增加设备上的麻烦。如不考虑采用整字输入,一般均可使用现有的小键盘。
趋势编辑
汉字编码研究的新发展 除了单轨向双轨发展之外,还有下列趋势:
①混合式编码法。笔触字表示法中除整体字之外,增加一些部件或字元,可以解决盘外字问题,甚至能具有字形分解法的全部优点。而笔画方案为了提高速度,一般也增加一些部件或整字。
②充分利用简码和词汇码。这样可以提高输入速度。因而人们为少量出现频率高的字或词设计了单字母和双字母的简码。
词汇码也是提高速度的手段。有一种形码方案的词汇码是根据每个字的部件规定的,如“汉字编码”的词汇码是43、45、55、13(氵冖纟石)。另一种形码方案的词汇码是利用计算机引导方式输入的。例如,当“中”字输入后,一按语词键,屏幕上便显示出“中国”、“中型”、“中性”、“中华”等双音词;选择“中国”后,如再按一下语词键,便可显示出“(中国)话”、“(中国)人民”、“(中国)共产党、”、“(中国)工农红军”等词或词组。音码方案的词汇码实际上为词组码,如 ZRG“中华人民共和国”,ZZXY“中国中文信息研究会”。词汇码不仅能提高速度,而且也能区别同码。但是,如果用得太多,也会产生重码。因此,有必要划分通用词汇码和专业词汇码,以减少重码。
③充分发挥“电脑”的作用,尽量减少“人脑”的负担。上述计算机引导输入法就是一例。还有的方案不断以开窗口方式向操作员提供选择的范围。这样,操作员不必再记忆大量的编码规则。
定型标准编辑
定型化
编码方案的定型化,即一般所说的选优工作,对计算机的普及应用非常重要。当然,定型或选优并不意
《信息交换用汉字编码字符集辅助集》
《信息交换用汉字编码字符集辅助集》
味着只定一种或只选一种,而要照顾到多种用户的需要。关于选优,曾提出多种评定标准,一般包括字码无二义性、操作方便易学、输入和处理效率高、存储节省、传输可靠、设备经济实用、组词能力强。
标准化
编码方案繁多,需要有一个统一的标准。1981年,国家标准局公布了《信息交换用汉字编码字符集基本集》(简称汉字标准交换码),共分两级,一级3755个字,二级3008个字,共6763个字。这种汉字标准交换码是计算机的内部码,可以为各种输入输出设备的设计提供统一的标准,使各种系统之间的信息交换有共同一致性,从而使信息资源的共享得以保证。正在制定《信息交换用汉字编码字符集辅助集》,以满足少数用字量超过基本集的用户和台湾、香港等地的需要。
字符集编辑
① GB2312-80字符集,中文名国家标准字符集(GB=GuóBiāo国标)。收入汉字6763个,符号715个,总计7478个字符,这是大陆普遍使用的简体字字符集。楷体-GB2312、仿宋-GB2312、华文行楷等市面上绝大多数字体支持显示这个字符集,亦是大多数输入法所采用的字符集。市面上绝大多数所谓的繁体字体,其实采用的是GB-2313字符集简体字的编码,用字体显示为繁体字,而不是直接用GBK字符集中繁体字的编码,错误百出。
② Big-5字符集,中文名大五码,是台湾繁体字的字符集,收入13060个繁体汉字,808个符号,总计13868个字符,普遍使用于台湾、香港等地区。台湾教育部标准宋体楷体等港台大多数字体支持这个字符集的显示。
③ GBK字符集,中文名国家标准扩展字符集(GB=GuóBiāo国标;K=Kuò扩,即扩展),兼容GB2312-80标准,包含Big-5的繁体字,但是不兼容Big-5字符集编码,收入21003个汉字,882个符号,共计21885个字符,包括了中日韩(CJK)统一汉字20902个、扩展A集(CJK Ext-A) 中的汉字52个。Windows 95/98简体中文版就带有这个GBK.txt文件。宋体、隶书、黑体、幼圆、华文中宋、华文细黑、华文楷体、标楷体(DFKai-SB)、Arial Unicode MS、MingLiU、PMingLiU等字体支持显示这个字符集。微软拼音输入法2003、全拼、紫光拼音等输入法,能够录入如镕镕炁夬喆嚞姤赟赟䶮龑昳堃慜靕臹等GBK简繁体汉字。
Big-5 (台湾繁体字)与GB2312-80 (大陆简体字),编码不相兼容,字符在不同的操作系统中便产生乱码。文本文字的简体与繁体(文字及编码)之间的转换,可用BabelPad、TextPro或Convertz之类的转码软件来解决。若是程序,Windows XP操作系统,可用Microsoft AppLocale Utility 1.0解决;Windows 2000的操作系统,大概只有用:中文之星、四通利方、南极星、金山快译之类的转码软件方能解决了。
④ GB18030-2000字符集,包含GBK字符集和CJK Ext-A 全部6582个汉字,共计27533个汉字。宋体-18030、方正楷体(FZKai-Z03)、书同文楷体(MS Song)宋体(ht_cjk+)、香港华康标准宋体(DFSongStd)、华康香港标准楷体、CERG Chinese Font、韩国New Gulim,以及微软Windows Vista操作系统提供的宋黑楷仿宋等字体亦支持这个字符集的显示。Windows 98支持这个字符集,以下的字符集则不支持。手写输入法逍遥笔4.0版支持GB18030字符集及方正超大字符集汉字的录入。
⑤ 方正超大字符集,包含GB18030-2000字符集、CJK Ext-B中的36862个汉字,共计64395个汉字。宋体-方正超大字符集支持这个字符集的显示。Microsoft Office XP或2003简体中文版就自带有这个字体。Windows 2000的操作系统需安装超大字符集支持包“Surrogate更新”。
⑥ GB18030-2005字符集,在GB13030-2000的基础上,增加了CJK Ext-B的36862个汉字,以及其它的一些汉字,共计70244个汉字。
⑦ ISO/IEC 10646 / Unicode字符集,这是全球可以共享的编码字符集,两者相互兼融,涵盖了世界上主要语文的字符,其中包括简繁体汉字,计有:CJK统一汉字编码20992个、CJK Ext-A 编码 6582个、CJK Ext-B 编码 36862个、CJK Ext-C 编码 4160个、 CJK Ext-D 编码 222个,共计74686个汉字。SimSun-ExtB(宋体)、MingLiU-ExtB(细明体)能显示全部Ext-B汉字。目前有 UniFonts 6.0 可以显示Unicode中的全部CJK编码的字符,输入法可用海峰五笔、新概念五笔、仓颉输入法世纪版、新版的微软新注音、仓颉输入法 6.0 版(单码功能)等输入法录入。Ext-C还有2万多个汉字。详情请参阅香港中文大学网站、马来西亚仓颉之友网站、福建陈清钰个人网站。
⑧ 汉字构形数据库2.3版,内含楷书字形60082个、小篆11100个、楚系简帛文字2627个、金文3459个、甲骨文177个、异体字12768组。可以安装该程序,亦可以解压后使用其中的字体文件,对于整理某些古代文献十分有用。
如果超出了输入法所支持的字符集,就不能录入计算机。有些人利用私人造字区PUA的编码,造了一些字体。一些如果没有相应字体的支持,则显示为黑框、方框或空白。如果操作系统或应用软件不支持该字符集,则显示为问号(一个或两个)。在网页上亦存在同样的情况。
参考书目编辑
刘涌泉:《语言应用和现代化──中文信息处理研究》,载《语文研究》,1983,第1期,太原。
中国汉字编码研究会编:《汉字编码方案汇编》,科学技术文献出版社,北京,1979。
(刘涌泉)
作者: zzz19760225     时间: 2016-5-19 01:54
DelphiGuy
早打大打打核战争
本版等级:T7
Blank
#9 得分:5 回复于: 2009-02-12 14:59:48
两种方法:
1. 使用图形模式,逐点画出来。缺点是有点麻烦,但可以显示任意多的汉字。
2. 文本模式,修改EGA/VGA字模,INT 10h Ax=1110h。优点是简单,而且兼容INT 21h、INT 10h的字符输出功能,但是只能(同屏)显示很少的汉字,最多256个吧(实际不可能,因为用单个8x16/9x16的字模显示汉字有点勉强,至少要16x16才能看,这样就只剩下128个,还要保留一部分常用的ASCII符号)。
-----------------------------------------------------------------------------------------------------------------------------------------------------
dos是1MB内存,其中640KB为用户内存,256KB为BIOS,128KB为显示。

忆往昔DOS操作系统——内存管理 2011-08-24 11:22:55
分类: 服务器与存储
在我们现在看来,内存有多少G,要么就是几根内存条,可在当年DOS的环境下,系统中存在以下四种内存:

   常规内存(Conventional Memory)

   高端内存(Upper Memory)

   扩充内存(Expanded Memory) EMS

   扩展内存(Extended Memory) XMS

DOS在实模式下,能直接寻址的范围是1MB。而这1MB分为640KB的常规内存和384KB的高端内存,加在一起就是1024KB也就是1MB。因为DOS使用16位段基址:便宜量格式,只能使用低端的640KB,这就是有名的640KB限制。其中最低端的1KB,即00000H~003FFH存放的是中断(IRQ)矢量表;接下来是256B的BIOS数据区;DOS及应用程序使用00500H~9FFFFH。这在开始使用DOS的20世纪80年代是完全能够满足要求的,因为当时PC上安装的物理内存容量也是640KB,甚至更少。(前面地址中的H代表16进制)
系统硬件使用的内存位于地址区域的高端,范围是A0000H~FFFFFH,共384KB。其中有用于显示的视频缓冲区和BIOS程序空间,例如显卡,网卡和主板BIOS。

地址FFFF0H在PC中有特别的用途。

计算机在加电启动时,CPU中的CS=F000H,IP=FFF0H,即从地址FFFF0H处开始执行,这个区域属于系统BIOS。(F000:FFF0)=EA5BE000F0(是JMP F000:E05B指令的十六进制表示),它立即跳转到BIOS的初始化程序,开始系统自检。(这段跟DOS没有关系,只是查资料时看到了,就也写上了。是想让大家知道,在按下主机电源开关后,CPU都做了些什么,为什么BIOS开始工作,自检硬件设备)

最后我附了一张图,本来想自己画的,可一搜发现已经有人画好了,并且画的肯定比我好,我就用人家的图了,一看这个,肯定就清楚多了,比文字怎么写的都强。

上面说的扩充内存是一种硬件,那个年代的主板专门预留了扩展槽,可以插上,我是没见过。扩展内存就是内存条上大于1M的部分,通过DOS下的一些驱动可以将XMS的一部分虚拟成EMS,以满足一些为EMS开发的程序的需要。

中间有一段叫高端内存,指位于常规内存之上的384K内存。程序一般不能使用这个内存区域,但是EMM386.exe可以激活高端内存的一部分,并且它允许用户将某些设备驱动程序和用户程序用Devicehigh或LH(即loadhigh)装入高端内存。dos=high,umb也是把DOS的一部分装到高端内存里。这里的umb是高端内存块(Upper Memory Block)的缩写。(以后我会专门写config.sys的部分)

DOS的程序,主要还是要使用常规内存的,如我刷HP笔记本的BIOS的时候,连点Shift进入最小的DOS模式也就是为了节省640K这部分的空间,以便让HP的刷写程序有足够的空间运行,不然刷写程序就要报错,就算XMS再大也没用。

还有一个叫DOS4GW.EXE的程序,在DOS玩过一些大一些的游戏如仙剑,红警等,在启动的时候,有时候能看到有个DOS4GW一闪而过,它可以使用CPU直接进入保护模式,直接访问XMS,不过这时就已经脱离了DOS状态。后来的Windows 3.x,95,98也都运行在保护模式下的,但都需要DOS带一下。

有些东西要看一下计算机组成原理或汇编之类的书才能理解,尤其是内存的寻址与CPU的寄存器(上面提到的CS,IP等)。

文:kingduanlian
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2016-6-5 at 14:56 ]
作者: zzz19760225     时间: 2016-5-19 02:00
http://wenku.baidu.com/link?url= ... dc7YxhWdCn50uS8sC1W

(shauens)

从零开始创作中文汇编语言《机器语言》以及《中国信息交换标准代码》
然后是中文系统
从机器语言开始。 我们从最开始的二进制转换为人类可以看懂的语言开始设计!
在中文里面。 汉字笔画是文化里面最小的符号,那么。我们为什么不把笔画转化为二进制。 让01的电信号变为我们能够理解的中文汉字呢!
在中文里面 “横竖撇捺折”为五种基本笔画!
别的先不管。我们先来定义横- 我想用  0000 来表示 。至于为什么。 不好解释
然后就是剩下的了。 我们依次来写出来
─  0000
ㄧ  1111
╱  0101
╲  1010
¬  0011
ㄥ  1100

这仅仅是开始。 因为我也只是在做梦的时候想到这些。 我还需要更多的补充和修改。但是, 我不能就这么放着。于是。频繁的查阅资料成为了这段时间的良好习惯!

在我的设想中, 中文汉字可以直接和机器对话。 而不用靠《美国信息交换标准代码》ASCII来运行。 我们为什么不取名叫做《中国信息交换标准代码》!

例如这套系统显示文字《中文系统》 对应的机器编码应该是

“中文系统”

“1111 0011 0000 1111 1010 0000 0101 1010 0101 1100 1010 1111 0101 1010 1100 0101 1010 0000 0011 1010 0101 1010”

这总共有88个bit字位 也就是11个字节 byte。
1Byte=8bit
1KB=1024Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB   太
1PB=1024TB   拍
1EB=1024PB   艾


这么看来。我们还要继续优化二进制和笔画之间的关系才行。 要不然1KB的数据空间我们只能存储370多个汉字。 这是多么可怕的占有率!  


中华文明是值得敬畏的。 繁星般的文字也给我们想把它们数字化变得十分繁琐。

这里我查了一些资料。 偏旁部首。 笔画顺序。 想要试着给他们换成二进制编码。

这真是让人头疼的问题。 那么让我先解决笔画的问题

笔 画        名     称        例  字                 笔 画        名     称        例  字
丶        点        广                乛        横    钩        写
一        横        王                        横 折 钩        月
丨        竖        巾                        横折弯钩        九
丿        撇        白                        横撇弯钩        那
        捺        八                ㄋ        横折折折钩        奶
        提        打                        竖折折钩        与
ㄑ        撇  点        巡                        竖    弯        四
し        竖  提        农                        横 折 弯        沿
        横折提        论                ┐        横    折        口
        弯  钩        承                ∟        竖    折        山
亅        竖  钩        小                ㄥ        撇    折        云
乚        竖弯钩        屯                        横    撇        水
        斜  钩        浅                        横折折撇        建
        卧  钩        心                        竖 折 撇        专

以上图表格中的28个笔画依次编入二进制代码怕是要好好思考一番了。






然后是各种部首。 我在想。如果将部首也精简一下。 那么可以节省很多存储空间!

形状        名称        例字                                 形状        名称        例字
冫                两点水        次、冷、准                        止                止字旁        武、
冖           秃宝盖        军、写、冠                        户                户字旁        扇、
十           十字儿        华、                                礻                示字旁        祖、
讠           言字旁        论、计、识                        王                斜玉旁(王字旁)        琅、
刂           立刀旁        制、别、剑                        木                木字旁        村、杜、极
八           八字旁        谷、分、公                        车                车字旁        辆、输、轻
人           人字头        仓、全、合                        日                日字旁        暇、明、暗
厂           厂字旁        原、压、历                        曰                冒字头        冒、暑、显
力                力字旁        努、                                父                父字头        爹、斧、釜
又                又字旁        艰、                                牜                牛字旁        牵、特、物
亻                单人旁        侵、                                攵                反文旁        敏、故、
卩                单耳刀        却、                                斤                斤字头        新、
阝                双耳刀        陆、                                爫                爪字头        爱、
廴                建字旁        延、                                月                肉月旁(月字旁)        腹、肋、膛
勹                包字头        甸、                                穴                穴宝盖        穿、空、窟
厶                私字儿        参、                                立                立字旁        竖、
匚                三框儿        医、                                目                目字旁        盲、瞳、盯
冂                同字框        网、                                田                田字旁        男、胃、累
氵                三点水        泸、                                石                石字旁        研、砂、磊
彡                三撇儿        彤、                                矢                矢字旁        矮、
忄                竖心旁        悄、                                疒                病字旁        疼、
宀                宝盖儿        宜、                                衤                衣字旁        衬、
广                广字旁        底、                                钅                金字旁        错、
夕                夕字旁        梦、                                罒                皿字头        蜀、
辶                走之旁        邀、                                皿                皿字底        孟、盖、
寸                寸字旁        封、                                禾                禾木旁        秋、秀、秒
扌                提手旁        拖、                                白                白字旁        泉、
土                提土旁        地、                                鸟                鸟字旁        鸭、
艹                草字头        药、                                米                米字旁        粒、糕、料
大                大字头        套、                                西                西字头        栗、要、
小                小字头        肖、                                页                页字旁        顷、
口                口字旁        唱、                                舌                舌字旁        乱
囗                方框儿        国、                                缶                缶字旁        缸、缺、
门                门字框        阅、                                耳                耳字旁        耽、职、
巾                巾字旁        师、                                虫                虫字旁        蛹、
山                山字旁        峡、                                虍                虎字头        虑、虚、虎
彳                双人旁        徐、                                竹                竹字头        管、篮、
犭                反犬旁        猪、                                舟                舟字旁        船、
饣                食字旁        饱、                                走                走字旁        赵、
尸        尸字头        屡、        足        足字旁        距、踞、跳
弓        弓字旁        张、        角        角字旁        触、解、
孑        子字旁        孩、        身        身字旁        躲、
女        女字旁        妈、        鱼        鱼字旁        鲜、鳄、鳔
纟        绞丝旁        绒、        隹        隹字旁        雀、
马        马字旁        骝、        雨        雨字头        露、霜、零
灬        四点底        热、        齿        齿字旁        龄、
方        方字旁        旅、        革        革字旁        靴、鞭、勒
手        手字旁        拜、        骨        骨字旁        骼、
欠        欠字旁        欲、        音        音字旁        韶、韵、
火        火字旁        灭、                           
心        心字旁        意、                




我的最终设想是: 在桌面。我们敲击“关机” 电脑会执行关机命令

当我输入 “打开浏览器” 的时候。 它会执行打开网页的操作

当然。这些都是输入法和系统内部内核结合了!命令直接执行。

未完待续。

[ Last edited by zzz19760225 on 2016-5-19 at 16:23 ]
作者: zzz19760225     时间: 2016-5-19 16:21
-v
使得 lspci 以冗余模式显示所有设备的详细信息。
-vv
使得 lspci 以过冗余模式显示更详细的信息 (事实上是 PCI 设备能给出的所有东西)。这些数据的确切意义没有在此手册页中解释,如果你想知道更多,请参照 /usr/include/linux/pci.h 或者 PCI 规范。
-n
以数字形式显示 PCI 生产厂商和设备号,而不是在 PCI ID 数据库中查找它们。
-x
以十六进制显示 PCI 配置空间 (configuration space) 的前64个字节映像 (标准头部信息)。此参数对调试驱动和 lspci 本身很有用。
-xxx
以十六进制显示所有 PCI 配置空间的映像。此选项只有 root 可用,并且很多 PCI 设备在你试图读取配置空间的未定义部分时会崩溃 (此操作可能不违反PCI标准,但是它至少非常愚蠢)。
-b
以总线为中心进行查看。显示所有 IRQ 号和记忆体地址,就像 PCI 总线上的卡看到的一样,而不是核心看到的内容。
-t
以树形方式显示包含所有总线、桥、设备和它们的连接的图表。
-s [[<bus>]:][<slot>][.[<func>]]
仅显示指定总线、插槽上的设备或设备上的功能块信息。设备地址的任何部分都可以忽略,或以「*」代替 (意味著所有值)。所有数字都是十六进制。例如:「0:」指的是在0号总线上的所有设备;「0」指的是在任意总线上0号设备的所有功能块;「0.3」选择 了所有总线上0号设备的第三个功能块;「.4」则是只列出每一设备上的第四个功能块。
-d [<vendor>]:[<device>]
只显示指定生产厂商和设备 ID 的设备。 这两个 ID 都以十六进制表示,可以忽略或者以「*」代替 (意味著所有值)。
-i <file>
使用 <file> 作为 PCI ID 数据库而不是使用预设的 /usr/share/hwdata/pci.ids。
-p <dir>
使用 <dir> 作为包含 PCI 总线信息的目录而不是使用预设的目录 /proc/bus/pci。
-m
以机器可读的方式转储 PCI 设备数据 (支持两种模式:普通和冗余),便於稿本解析。
-M
使用总线映射模式,这种模式对总线进行全面地扫描以查明总线上的所有设备,包括配置错误的桥之后的设备。请注意,此操作只应在调试时使 用,并可能造成系统崩溃 (只在设备有错误的时候,但是不幸的是它们存在),此命令只有 root 可以使用。同时,在不直接接触硬体的 PCI 访问模式中使用 -M 参数没有意义,因为显示的结果 (排除 lspci 中的 bug 的影响) 与普通的列表模式相同。
--version
显示 lspci 的版本。这个选项应当单独使用。

PCILIB 选项 PCILIB OPTIONS
PCI 工具使用 PCILIB (一种可移植的库,提供平台独立的函数来访问 PCI 配置空间)来和PCI卡交互。下面的选项用来控制库参数,特别是所用访问模式的指定。预设情况下,PCILIB 使用第一种可用的访问模式,不会显示任何调试信息。每一个开关选项都列出了一组它所支持的硬件/软软件列表。
-P <dir>
使用 linux 2.1 风格的配置,直接访问目录 <dir> 而非 /proc/bus/pci 目录。(只能在linux 2.1或以上版本中使用)
-H1
通过 Intel 架构 1 来实现直接硬体访问。(只能用於 i386 及其相容机)
-H2
通过Intel 架构2来实现直接硬体访问。警告:此模式只能寻址任何总线上的前16个设备,并且在很多情况下相当不可靠。(只能用於 i386 及其相容机)
-S
使用 PCI 系统调用访问。(只能用於 Alpha 和 Ultra-Sparc 上的 Linux)
-F <file>
从所给的包含 lspci -x命令输出的档案中获取相关信息。这在分析使用者提交的错误报告时很有用,因为你可以用任何方式来显示硬体配置信息而无需为了获取更多信息打扰使用者。(可用於所有系统)
-G
增加库的调试等级。(可用於所有系统)
作者: zzz19760225     时间: 2016-5-19 17:58
习近平在哲学社会科学工作座谈会上讲话全文

  新华社北京5月18日电在哲学社会科学工作座谈会上的讲话

  (2016年5月17日)

  习近平

  今天,我们召开一个哲学社会科学工作座谈会,参加的大多是我国哲学社会科学方面的专家学者,其中有德高望重的老专家,有成果丰硕的学术带头 人,也有崭露头角的后起之秀,包括马克思主义理论研究和建设工程的咨询委员或首席专家、国家高端智库代表,还有在校的博士生、硕士生、本科生,以及有关部 门负责同志。首先,我向大家,向全国广大哲学社会科学工作者,致以诚挚的问候!

  党的十八大以来,为加强和改进宣传思想文化工作和理论研究工作,党中央先后召开了全国宣传思想工作会议、文艺工作座谈会、新闻舆论工作座谈 会、网络安全和信息化工作座谈会等会议,我在这些会议上作了讲话。召开这些会议,目的是听听各方面意见,大家一起分析形势、沟通思想、凝聚共识、谋划未 来。

  哲学社会科学是人们认识世界、改造世界的重要工具,是推动历史发展和社会进步的重要力量,其发展水平反映了一个民族的思维能力、精神品格、文 明素质,体现了一个国家的综合国力和国际竞争力。一个国家的发展水平,既取决于自然科学发展水平,也取决于哲学社会科学发展水平。一个没有发达的自然科学 的国家不可能走在世界前列,一个没有繁荣的哲学社会科学的国家也不可能走在世界前列。坚持和发展中国特色社会主义,需要不断在实践和理论上进行探索、用发 展着的理论指导发展着的实践。在这个过程中,哲学社会科学具有不可替代的重要地位,哲学社会科学工作者具有不可替代的重要作用。

  刚才,几位同志讲得很好,很多是真知灼见、肺腑之言,听了很受启发。下面,我就几个问题讲点意见,同大家交流讨论。

  第一个问题:坚持和发展中国特色社会主义必须高度重视哲学社会科学

  恩格斯说:“一个民族要想站在科学的最高峰,就一刻也不能没有理论思维。”我们党历来高度重视哲学社会科学。革命战争年代,毛泽东同志就说 过,必须“用社会科学来了解社会,改造社会,进行社会革命”。毛泽东同志就是一位伟大的哲学家、思想家、社会科学家,他撰写的《矛盾论》、《实践论》等哲 学名篇至今仍具有重要指导意义,他的许多调查研究名篇对我国社会作出了鞭辟入里的分析,是社会科学的经典之作。进入改革开放历史新时期,邓小平同志指出: “科学当然包括社会科学。”“政治学、法学、社会学以及世界政治的研究,我们过去多年忽视了,现在也需要赶快补课。”江泽民同志指出:“在认识和改造世界 的过程中,哲学社会科学与自然科学同样重要;培养高水平的哲学社会科学家,与培养高水平的自然科学家同样重要;提高全民族的哲学社会科学素质,与提高全民 族的自然科学素质同样重要;任用好哲学社会科学人才并充分发挥他们的作用,与任用好自然科学人才并发挥他们的作用同样重要。”胡锦涛同志说:“应对激烈的 国际综合国力竞争,在不断增强我国的经济实力的同时增强我国的文化创造力、民族凝聚力,增强中华文明的影响力,迫切需要哲学社会科学发展具有中国特色的学 科体系和学术思想。”党的十八大以来,党中央继续制定政策、采取措施,大力推动哲学社会科学发展。

  观察当代中国哲学社会科学,需要有一个宽广的视角,需要放到世界和我国发展大历史中去看。人类社会每一次重大跃进,人类文明每一次重大发展, 都离不开哲学社会科学的知识变革和思想先导。从西方历史看,古代希腊、古代罗马时期,产生了苏格拉底、柏拉图、亚里士多德、西塞罗等人的思想学说。文艺复 兴时期,产生了但丁、薄伽丘、达·芬奇、拉斐尔、哥白尼、布鲁诺、伽利略、莎士比亚、托马斯·莫尔、康帕内拉等一批文化和思想大家。他们中很多人是文艺巨 匠,但他们的作品深刻反映了他们对社会构建的思想认识。英国资产阶级革命、法国资产阶级革命、美国独立战争前后,产生了霍布斯、洛克、伏尔泰、孟德斯鸠、 卢梭、狄德罗、爱尔维修、潘恩、杰弗逊、汉密尔顿等一大批资产阶级思想家,形成了反映新兴资产阶级政治诉求的思想和观点。马克思主义的诞生是人类思想史上 的一个伟大事件,而马克思主义则批判吸收了康德、黑格尔、费尔巴哈等人的哲学思想,圣西门、傅立叶、欧文等人的空想社会主义思想,亚当·斯密、大卫·李嘉 图等人的古典政治经济学思想。可以说,没有18、19世纪欧洲哲学社会科学的发展,就没有马克思主义形成和发展。20世纪以来,社会矛盾不断激化,为缓和 社会矛盾、修补制度弊端,西方各种各样的学说都在开药方,包括凯恩斯主义、新自由主义、新保守主义、民主社会主义、实用主义、存在主义、结构主义、后现代 主义等,这些既是西方社会发展到一定阶段的产物,也深刻影响着西方社会。

  中华文明历史悠久,从先秦子学、两汉经学、魏晋玄学,到隋唐佛学、儒释道合流、宋明理学,经历了数个学术思想繁荣时期。在漫漫历史长河中,中 华民族产生了儒、释、道、墨、名、法、阴阳、农、杂、兵等各家学说,涌现了老子、孔子、庄子、孟子、荀子、韩非子、董仲舒、王充、何晏、王弼、韩愈、周敦 颐、程颢、程颐、朱熹、陆九渊、王守仁、李贽、黄宗羲、顾炎武、王夫之、康有为、梁启超、孙中山、鲁迅等一大批思想大家,留下了浩如烟海的文化遗产。中国 古代大量鸿篇巨制中包含着丰富的哲学社会科学内容、治国理政智慧,为古人认识世界、改造世界提供了重要依据,也为中华文明提供了重要内容,为人类文明作出 了重大贡献。

  鸦片战争后,随着列强入侵和国门被打开,我国逐步成为半殖民地半封建国家,西方思想文化和科学知识随之涌入。自那以后,我们的国家和民族经历 了刻骨铭心的惨痛历史,中华传统思想文化经历了剧烈变革的阵痛。为了寻求救亡图存之策,林则徐、魏源、严复等人把眼光转向西方,从“师夷长技以制夷”到 “中体西用”,从洋务运动到新文化运动,西方哲学社会科学被翻译介绍到我国,不少人开始用现代社会科学方法来研究我国社会问题,社会科学各学科在我国逐渐 发展起来。

  特别是十月革命一声炮响,给中国送来了马克思列宁主义。陈独秀、李大钊等人积极传播马克思主义,倡导运用马克思主义改造中国社会。许多进步学 者运用马克思主义进行哲学社会科学研究。在长期实践探索中,产生了郭沫若、李达、艾思奇、翦伯赞、范文澜、吕振羽、马寅初、费孝通、钱钟书等一大批名家大 师,为我国当代哲学社会科学发展进行了开拓性努力。可以说,当代中国哲学社会科学是以马克思主义进入我国为起点的,是在马克思主义指导下逐步发展起来的。

  现在,我国哲学社会科学学科体系不断健全,研究队伍不断壮大,研究水平和创新能力不断提高,马克思主义理论研究和建设工程取得丰硕成果。广大 哲学社会科学工作者解放思想、实事求是、与时俱进,坚持以马克思主义为指导,坚持为人民服务、为社会主义服务方向和百花齐放、百家争鸣方针,深入研究和回 答我国发展和我们党执政面临的重大理论和实践问题,推出一大批重要学术成果,为坚持和发展中国特色社会主义作出了重大贡献。

  新形势下,我国哲学社会科学地位更加重要、任务更加繁重。面对社会思想观念和价值取向日趋活跃、主流和非主流同时并存、社会思潮纷纭激荡的新 形势,如何巩固马克思主义在意识形态领域的指导地位,培育和践行社会主义核心价值观,巩固全党全国各族人民团结奋斗的共同思想基础,迫切需要哲学社会科学 更好发挥作用。面对我国经济发展进入新常态、国际发展环境深刻变化的新形势,如何贯彻落实新发展理念、加快转变经济发展方式、提高发展质量和效益,如何更 好保障和改善民生、促进社会公平正义,迫切需要哲学社会科学更好发挥作用。面对改革进入攻坚期和深水区、各种深层次矛盾和问题不断呈现、各类风险和挑战不 断增多的新形势,如何提高改革决策水平、推进国家治理体系和治理能力现代化,迫切需要哲学社会科学更好发挥作用。面对世界范围内各种思想文化交流交融交锋 的新形势,如何加快建设社会主义文化强国、增强文化软实力、提高我国在国际上的话语权,迫切需要哲学社会科学更好发挥作用。面对全面从严治党进入重要阶 段、党面临的风险和考验集中显现的新形势,如何不断提高党的领导水平和执政水平、增强拒腐防变和抵御风险能力,使党始终成为中国特色社会主义事业的坚强领 导核心,迫切需要哲学社会科学更好发挥作用。总之,坚持和发展中国特色社会主义,统筹推进“五位一体”总体布局和协调推进“四个全面”战略布局,实现“两 个一百年”奋斗目标、实现中华民族伟大复兴的中国梦,我国哲学社会科学可以也应该大有作为。

  面对新形势新要求,我国哲学社会科学领域还存在一些亟待解决的问题。比如,哲学社会科学发展战略还不十分明确,学科体系、学术体系、话语体系 建设水平总体不高,学术原创能力还不强;哲学社会科学训练培养教育体系不健全,学术评价体系不够科学,管理体制和运行机制还不完善;人才队伍总体素质亟待 提高,学风方面问题还比较突出,等等。总的看,我国哲学社会科学还处于有数量缺质量、有专家缺大师的状况,作用没有充分发挥出来。改变这个状况,需要广大 哲学社会科学工作者加倍努力,不断在解决影响我国哲学社会科学发展的突出问题上取得明显进展。

  历史表明,社会大变革的时代,一定是哲学社会科学大发展的时代。当代中国正经历着我国历史上最为广泛而深刻的社会变革,也正在进行着人类历史上最为宏大而 独特的实践创新。这种前无古人的伟大实践,必将给理论创造、学术繁荣提供强大动力和广阔空间。这是一个需要理论而且一定能够产生理论的时代,这是一个需要 思想而且一定能够产生思想的时代。我们不能辜负了这个时代。自古以来,我国知识分子就有“为天地立心,为生民立命,为往圣继绝学,为万世开太平”的志向和 传统。一切有理想、有抱负的哲学社会科学工作者都应该立时代之潮头、通古今之变化、发思想之先声,积极为党和人民述学立论、建言献策,担负起历史赋予的光 荣使命。

  第二个问题:坚持马克思主义在我国哲学社会科学领域的指导地位

  坚持以马克思主义为指导,是当代中国哲学社会科学区别于其他哲学社会科学的根本标志,必须旗帜鲜明加以坚持。

  马克思主义尽管诞生在一个半多世纪之前,但历史和现实都证明它是科学的理论,迄今依然有着强大生命力。马克思主义深刻揭示了自然界、人类社 会、人类思维发展的普遍规律,为人类社会发展进步指明了方向;马克思主义坚持实现人民解放、维护人民利益的立场,以实现人的自由而全面的发展和全人类解放 为己任,反映了人类对理想社会的美好憧憬;马克思主义揭示了事物的本质、内在联系及发展规律,是“伟大的认识工具”,是人们观察世界、分析问题的有力思想 武器;马克思主义具有鲜明的实践品格,不仅致力于科学“解释世界”,而且致力于积极“改变世界”。在人类思想史上,还没有一种理论像马克思主义那样对人类 文明进步产生了如此广泛而巨大的影响。

  马克思主义进入中国,既引发了中华文明深刻变革,也走过了一个逐步中国化的过程。在革命、建设、改革各个历史时期,我们党坚持马克思主义基本 原理同中国具体实际相结合,运用马克思主义立场、观点、方法研究解决各种重大理论和实践问题,不断推进马克思主义中国化,产生了毛泽东思想、邓小平理论、 “三个代表”重要思想、科学发展观等重大成果,指导党和人民取得了新民主主义革命、社会主义革命和社会主义建设、改革开放的伟大成就。我国哲学社会科学坚 持以马克思主义为指导,是近代以来我国发展历程赋予的规定性和必然性。在我国,不坚持以马克思主义为指导,哲学社会科学就会失去灵魂、迷失方向,最终也不 能发挥应有作用。正所谓“夫道不欲杂,杂则多,多则扰,扰则忧,忧而不救”。

  马克思主义中国化取得了重大成果,但还远未结束。我国哲学社会科学的一项重要任务就是继续推进马克思主义中国化、时代化、大众化,继续发展21世纪马克思主义、当代中国马克思主义。

  在对待坚持以马克思主义为指导问题上,绝大部分同志认识是清醒的、态度是坚定的。同时,也有一些同志对马克思主义理解不深、理解不透,在运用 马克思主义立场、观点、方法上功力不足、高水平成果不多,在建设以马克思主义为指导的学科体系、学术体系、话语体系上功力不足、高水平成果不多。社会上也 存在一些模糊甚至错误的认识。有的认为马克思主义已经过时,中国现在搞的不是马克思主义;有的说马克思主义只是一种意识形态说教,没有学术上的学理性和系 统性。实际工作中,在有的领域中马克思主义被边缘化、空泛化、标签化,在一些学科中“失语”、教材中“失踪”、论坛上“失声”。这种状况必须引起我们高度 重视。

  即使在当今西方社会,马克思主义仍然具有重要影响力。在本世纪来临的时候,马克思被西方思想界评为“千年第一思想家”。美国学者海尔布隆纳在 他的著作《马克思主义:赞成与反对》中表示,要探索人类社会发展前景,必须向马克思求教,人类社会至今仍然生活在马克思所阐明的发展规律之中。实践也证 明,无论时代如何变迁、科学如何进步,马克思主义依然显示出科学思想的伟力,依然占据着真理和道义的制高点。邓小平同志深刻指出:“我坚信,世界上赞成马 克思主义的人会多起来的,因为马克思主义是科学。”

  我国广大哲学社会科学工作者要自觉坚持以马克思主义为指导,自觉把中国特色社会主义理论体系贯穿研究和教学全过程,转化为清醒的理论自觉、坚定的政治信念、科学的思维方法。

  坚持以马克思主义为指导,首先要解决真懂真信的问题。哲学社会科学发展状况与其研究者坚持什么样的世界观、方法论紧密相关。人们必须有了正确 的世界观、方法论,才能更好观察和解释自然界、人类社会、人类思维各种现象,揭示蕴含在其中的规律。马克思主义关于世界的物质性及其发展规律、人类社会及 其发展规律、认识的本质及其发展规律等原理,为我们研究把握哲学社会科学各个学科各个领域提供了基本的世界观、方法论。只有真正弄懂了马克思主义,才能在 揭示共产党执政规律、社会主义建设规律、人类社会发展规律上不断有所发现、有所创造,才能更好识别各种唯心主义观点、更好抵御各种历史虚无主义谬论。

  马克思主义经典作家眼界广阔、知识丰富,马克思主义理论体系和知识体系博大精深,涉及自然界、人类社会、人类思维各个领域,涉及历史、经济、 政治、文化、社会、生态、科技、军事、党建等各个方面,不下大气力、不下苦功夫是难以掌握真谛、融会贯通的。“为学之道,必本于思。”“不深思则不能造于 道,不深思而得者,其得易失。”我看过一些西方研究马克思主义的书,其结论未必正确,但在研究和考据马克思主义文本上,功课做得还是可以的。相比之下,我 们一些研究在这方面的努力就远远不够了。恩格斯曾经说过:“即使只是在一个单独的历史事例上发展唯物主义的观点,也是一项要求多年冷静钻研的科学工作,因 为很明显,在这里只说空话是无济于事的,只有靠大量的、批判地审查过的、充分地掌握了的历史资料,才能解决这样的任务。”对马克思主义的学习和研究,不能 采取浅尝辄止、蜻蜓点水的态度。有的人马克思主义经典著作没读几本,一知半解就哇啦哇啦发表意见,这是一种不负责任的态度,也有悖于科学精神。

  坚持以马克思主义为指导,核心要解决好为什么人的问题。为什么人的问题是哲学社会科学研究的根本性、原则性问题。我国哲学社会科学为谁著书、 为谁立说,是为少数人服务还是为绝大多数人服务,是必须搞清楚的问题。世界上没有纯而又纯的哲学社会科学。世界上伟大的哲学社会科学成果都是在回答和解决 人与社会面临的重大问题中创造出来的。研究者生活在现实社会中,研究什么,主张什么,都会打下社会烙印。我们的党是全心全意为人民服务的党,我们的国家是 人民当家作主的国家,党和国家一切工作的出发点和落脚点是实现好、维护好、发展好最广大人民根本利益。我国哲学社会科学要有所作为,就必须坚持以人民为中 心的研究导向。脱离了人民,哲学社会科学就不会有吸引力、感染力、影响力、生命力。我国广大哲学社会科学工作者要坚持人民是历史创造者的观点,树立为人民 做学问的理想,尊重人民主体地位,聚焦人民实践创造,自觉把个人学术追求同国家和民族发展紧紧联系在一起,努力多出经得起实践、人民、历史检验的研究成 果。

  坚持以马克思主义为指导,最终要落实到怎么用上来。“凡贵通者,贵其能用之也。”马克思主义具有与时俱进的理论品质。新形势下,坚持马克思主 义,最重要的是坚持马克思主义基本原理和贯穿其中的立场、观点、方法。这是马克思主义的精髓和活的灵魂。马克思主义是随着时代、实践、科学发展而不断发展 的开放的理论体系,它并没有结束真理,而是开辟了通向真理的道路。恩格斯早就说过:“马克思的整个世界观不是教义,而是方法。它提供的不是现成的教条,而 是进一步研究的出发点和供这种研究使用的方法。”把坚持马克思主义和发展马克思主义统一起来,结合新的实践不断作出新的理论创造,这是马克思主义永葆生机 活力的奥妙所在。

  对待马克思主义,不能采取教条主义的态度,也不能采取实用主义的态度。如果不顾历史条件和现实情况变化,拘泥于马克思主义经典作家在特定历史 条件下、针对具体情况作出的某些个别论断和具体行动纲领,我们就会因为思想脱离实际而不能顺利前进,甚至发生失误。什么都用马克思主义经典作家的语录来说 话,马克思主义经典作家没有说过的就不能说,这不是马克思主义的态度。同时,根据需要找一大堆语录,什么事都说成是马克思、恩格斯当年说过了,生硬“裁 剪”活生生的实践发展和创新,这也不是马克思主义的态度。

  坚持问题导向是马克思主义的鲜明特点。问题是创新的起点,也是创新的动力源。只有聆听时代的声音,回应时代的呼唤,认真研究解决重大而紧迫的 问题,才能真正把握住历史脉络、找到发展规律,推动理论创新。坚持以马克思主义为指导,必须落到研究我国发展和我们党执政面临的重大理论和实践问题上来, 落到提出解决问题的正确思路和有效办法上来。要坚持用联系的发展的眼光看问题,增强战略性、系统性思维,分清本质和现象、主流和支流,既看存在问题又看其 发展趋势,既看局部又看全局,提出的观点、作出的结论要客观准确、经得起检验,在全面客观分析的基础上,努力揭示我国社会发展、人类社会发展的大逻辑大趋 势。

  有人说,马克思主义政治经济学过时了,《资本论》过时了。这个说法是武断的。远的不说,就从国际金融危机看,许多西方国家经济持续低迷、两极 分化加剧、社会矛盾加深,说明资本主义固有的生产社会化和生产资料私人占有之间的矛盾依然存在,但表现形式、存在特点有所不同。国际金融危机发生后,不少 西方学者也在重新研究马克思主义政治经济学、研究《资本论》,借以反思资本主义的弊端。法国学者托马斯·皮凯蒂撰写的《21世纪资本论》就在国际学术界引 发了广泛讨论。该书用翔实的数据证明,美国等西方国家的不平等程度已经达到或超过了历史最高水平,认为不加制约的资本主义加剧了财富不平等现象,而且将继 续恶化下去。作者的分析主要是从分配领域进行的,没有过多涉及更根本的所有制问题,但使用的方法、得出的结论值得深思。

  第三个问题:加快构建中国特色哲学社会科学

  哲学社会科学的特色、风格、气派,是发展到一定阶段的产物,是成熟的标志,是实力的象征,也是自信的体现。我国是哲学社会科学大国,研究队 伍、论文数量、政府投入等在世界上都是排在前面的,但目前在学术命题、学术思想、学术观点、学术标准、学术话语上的能力和水平同我国综合国力和国际地位还 不太相称。要按照立足中国、借鉴国外,挖掘历史、把握当代,关怀人类、面向未来的思路,着力构建中国特色哲学社会科学,在指导思想、学科体系、学术体系、 话语体系等方面充分体现中国特色、中国风格、中国气派。

  中国特色哲学社会科学应该具有什么特点呢?我认为,要把握住以下3个主要方面。

  第一,体现继承性、民族性。哲学社会科学的现实形态,是古往今来各种知识、观念、理论、方法等融通生成的结果。我们要善于融通古今中外各种资 源,特别是要把握好3方面资源。一是马克思主义的资源,包括马克思主义基本原理,马克思主义中国化形成的成果及其文化形态,如党的理论和路线方针政策,中 国特色社会主义道路、理论体系、制度,我国经济、政治、法律、文化、社会、生态、外交、国防、党建等领域形成的哲学社会科学思想和成果。这是中国特色哲学 社会科学的主体内容,也是中国特色哲学社会科学发展的最大增量。二是中华优秀传统文化的资源,这是中国特色哲学社会科学发展十分宝贵、不可多得的资源。三 是国外哲学社会科学的资源,包括世界所有国家哲学社会科学取得的积极成果,这可以成为中国特色哲学社会科学的有益滋养。要坚持古为今用、洋为中用,融通各 种资源,不断推进知识创新、理论创新、方法创新。我们要坚持不忘本来、吸收外来、面向未来,既向内看、深入研究关系国计民生的重大课题,又向外看、积极探 索关系人类前途命运的重大问题;既向前看、准确判断中国特色社会主义发展趋势,又向后看、善于继承和弘扬中华优秀传统文化精华。

  绵延几千年的中华文化,是中国特色哲学社会科学成长发展的深厚基础。我说过,站立在960万平方公里的广袤土地上,吸吮着中华民族漫长奋斗积 累的文化养分,拥有13亿中国人民聚合的磅礴之力,我们走自己的路,具有无比广阔的舞台,具有无比深厚的历史底蕴,具有无比强大的前进定力,中国人民应该 有这个信心,每一个中国人都应该有这个信心。我们说要坚定中国特色社会主义道路自信、理论自信、制度自信,说到底是要坚定文化自信。文化自信是更基本、更 深沉、更持久的力量。历史和现实都表明,一个抛弃了或者背叛了自己历史文化的民族,不仅不可能发展起来,而且很可能上演一场历史悲剧。

  中华民族有着深厚文化传统,形成了富有特色的思想体系,体现了中国人几千年来积累的知识智慧和理性思辨。这是我国的独特优势。中华文明延续着 我们国家和民族的精神血脉,既需要薪火相传、代代守护,也需要与时俱进、推陈出新。要加强对中华优秀传统文化的挖掘和阐发,使中华民族最基本的文化基因与 当代文化相适应、与现代社会相协调,把跨越时空、超越国界、富有永恒魅力、具有当代价值的文化精神弘扬起来。要推动中华文明创造性转化、创新性发展,激活 其生命力,让中华文明同各国人民创造的多彩文明一道,为人类提供正确精神指引。要围绕我国和世界发展面临的重大问题,着力提出能够体现中国立场、中国智 慧、中国价值的理念、主张、方案。我们不仅要让世界知道“舌尖上的中国”,还要让世界知道“学术中的中国”、“理论中的中国”、“哲学社会科学中的中 国”,让世界知道“发展中的中国”、“开放中的中国”、“为人类文明作贡献的中国”。

  强调民族性并不是要排斥其他国家的学术研究成果,而是要在比较、对照、批判、吸收、升华的基础上,使民族性更加符合当代中国和当今世界的发展 要求,越是民族的越是世界的。解决好民族性问题,就有更强能力去解决世界性问题;把中国实践总结好,就有更强能力为解决世界性问题提供思路和办法。这是由 特殊性到普遍性的发展规律。

  我们既要立足本国实际,又要开门搞研究。对人类创造的有益的理论观点和学术成果,我们应该吸收借鉴,但不能把一种理论观点和学术成果当成“唯 一准则”,不能企图用一种模式来改造整个世界,否则就容易滑入机械论的泥坑。一些理论观点和学术成果可以用来说明一些国家和民族的发展历程,在一定地域和 历史文化中具有合理性,但如果硬要把它们套在各国各民族头上、用它们来对人类生活进行格式化,并以此为裁判,那就是荒谬的了。对国外的理论、概念、话语、 方法,要有分析、有鉴别,适用的就拿来用,不适用的就不要生搬硬套。哲学社会科学要有批判精神,这是马克思主义最可贵的精神品质。

  哲学社会科学研究范畴很广,不同学科有自己的知识体系和研究方法。对一切有益的知识体系和研究方法,我们都要研究借鉴,不能采取不加分析、一 概排斥的态度。马克思、恩格斯在建立自己理论体系的过程中就大量吸收借鉴了前人创造的成果。对现代社会科学积累的有益知识体系,运用的模型推演、数量分析 等有效手段,我们也可以用,而且应该好好用。需要注意的是,在采用这些知识和方法时不要忘了老祖宗,不要失去了科学判断力。马克思写的《资本论》、列宁写 的《帝国主义论》、毛泽东同志写的系列农村调查报告等著作,都运用了大量统计数字和田野调查材料。解决中国的问题,提出解决人类问题的中国方案,要坚持中 国人的世界观、方法论。如果不加分析把国外学术思想和学术方法奉为圭臬,一切以此为准绳,那就没有独创性可言了。如果用国外的方法得出与国外同样的结论, 那也就没有独创性可言了。要推出具有独创性的研究成果,就要从我国实际出发,坚持实践的观点、历史的观点、辩证的观点、发展的观点,在实践中认识真理、检 验真理、发展真理。

  第二,体现原创性、时代性。我们的哲学社会科学有没有中国特色,归根到底要看有没有主体性、原创性。跟在别人后面亦步亦趋,不仅难以形成中国 特色哲学社会科学,而且解决不了我国的实际问题。1944年,毛泽东同志就说过:“我们的态度是批判地接受我们自己的历史遗产和外国的思想。我们既反对盲 目接受任何思想也反对盲目抵制任何思想。我们中国人必须用我们自己的头脑进行思考,并决定什么东西能在我们自己的土壤里生长起来。”只有以我国实际为研究 起点,提出具有主体性、原创性的理论观点,构建具有自身特质的学科体系、学术体系、话语体系,我国哲学社会科学才能形成自己的特色和优势。

  理论的生命力在于创新。创新是哲学社会科学发展的永恒主题,也是社会发展、实践深化、历史前进对哲学社会科学的必然要求。社会总是在发展的, 新情况新问题总是层出不穷的,其中有一些可以凭老经验、用老办法来应对和解决,同时也有不少是老经验、老办法不能应对和解决的。如果不能及时研究、提出、 运用新思想、新理念、新办法,理论就会苍白无力,哲学社会科学就会“肌无力”。哲学社会科学创新可大可小,揭示一条规律是创新,提出一种学说是创新,阐明 一个道理是创新,创造一种解决问题的办法也是创新。

  理论思维的起点决定着理论创新的结果。理论创新只能从问题开始。从某种意义上说,理论创新的过程就是发现问题、筛选问题、研究问题、解决问题 的过程。马克思曾深刻指出:“主要的困难不是答案,而是问题。”“问题就是时代的口号,是它表现自己精神状态的最实际的呼声。”柏拉图的《理想国》、亚里 士多德的《政治学》、托马斯·莫尔的《乌托邦》、康帕内拉的《太阳城》、洛克的《政府论》、孟德斯鸠的《论法的精神》、卢梭的《社会契约论》、汉密尔顿等 人著的《联邦党人文集》、黑格尔的《法哲学原理》、克劳塞维茨的《战争论》、亚当·斯密的《国民财富的性质和原因的研究》、马尔萨斯的《人口原理》、凯恩 斯的《就业利息和货币通论》、约瑟夫·熊彼特的《经济发展理论》、萨缪尔森的《经济学》、弗里德曼的《资本主义与自由》、西蒙·库兹涅茨的《各国的经济增 长》等著作,过去我都翻阅过,一个重要感受就是这些著作都是时代的产物,都是思考和研究当时当地社会突出矛盾和问题的结果。

  改革开放以来,我们坚持理论创新,正确回答了什么是社会主义、怎样建设社会主义,建设什么样的党、怎样建设党,实现什么样的发展、怎样发展等 重大课题,不断根据新的实践推出新的理论,为我们制定各项方针政策、推进各项工作提供了科学指导。推进国家治理体系和治理能力现代化,发展社会主义市场经 济,发展社会主义民主政治,发展社会主义协商民主,建设中国特色社会主义法治体系,发展社会主义先进文化,培育和践行社会主义核心价值观,建设社会主义和 谐社会,建设生态文明,构建开放型经济新体制,实施总体国家安全观,建设人类命运共同体,推进“一带一路”建设,坚持正确义利观,加强党的执政能力建设, 坚持走中国特色强军之路、实现党在新形势下的强军目标,等等,都是我们提出的具有原创性、时代性的概念和理论。在这个过程中,我国哲学社会科学界作出了重 大贡献,也形成了不可比拟的优势。

  当代中国的伟大社会变革,不是简单延续我国历史文化的母版,不是简单套用马克思主义经典作家设想的模板,不是其他国家社会主义实践的再版,也 不是国外现代化发展的翻版,不可能找到现成的教科书。我国哲学社会科学应该以我们正在做的事情为中心,从我国改革发展的实践中挖掘新材料、发现新问题、提 出新观点、构建新理论,加强对改革开放和社会主义现代化建设实践经验的系统总结,加强对发展社会主义市场经济、民主政治、先进文化、和谐社会、生态文明以 及党的执政能力建设等领域的分析研究,加强对党中央治国理政新理念新思想新战略的研究阐释,提炼出有学理性的新理论,概括出有规律性的新实践。这是构建中 国特色哲学社会科学的着力点、着重点。一切刻舟求剑、照猫画虎、生搬硬套、依样画葫芦的做法都是无济于事的。

  第三,体现系统性、专业性。中国特色哲学社会科学应该涵盖历史、经济、政治、文化、社会、生态、军事、党建等各领域,囊括传统学科、新兴学 科、前沿学科、交叉学科、冷门学科等诸多学科,不断推进学科体系、学术体系、话语体系建设和创新,努力构建一个全方位、全领域、全要素的哲学社会科学体 系。

  现在,我国哲学社会科学学科体系已基本确立,但还存在一些亟待解决的问题,主要是一些学科设置同社会发展联系不够紧密,学科体系不够健全,新兴学科、交 叉学科建设比较薄弱。下一步,要突出优势、拓展领域、补齐短板、完善体系。一是要加强马克思主义学科建设。二是要加快完善对哲学社会科学具有支撑作用的学 科,如哲学、历史学、经济学、政治学、法学、社会学、民族学、新闻学、人口学、宗教学、心理学等,打造具有中国特色和普遍意义的学科体系。三是要注重发展 优势重点学科。四是要加快发展具有重要现实意义的新兴学科和交叉学科,使这些学科研究成为我国哲学社会科学的重要突破点。五是要重视发展具有重要文化价值 和传承意义的“绝学”、冷门学科。这些学科看上去同现实距离较远,但养兵千日、用兵一时,需要时也要拿得出来、用得上。还有一些学科事关文化传承的问题, 如甲骨文等古文字研究等,要重视这些学科,确保有人做、有传承。总之,要通过努力,使基础学科健全扎实、重点学科优势突出、新兴学科和交叉学科创新发展、 冷门学科代有传承、基础研究和应用研究相辅相成、学术研究和成果应用相互促进。

  学科体系同教材体系密不可分。学科体系建设上不去,教材体系就上不去;反过来,教材体系上不去,学科体系就没有后劲。据统计,全国本科院校几 乎都设立了哲学社会科学学科,文科生也占了在校学生很大比例。这些学生是我国哲学社会科学后备军,如果在学生阶段没有学会正确的世界观、方法论,没有打下 扎实的知识基础,将来就难以担当重任。高校哲学社会科学有重要的育人功能,要面向全体学生,帮助学生形成正确的世界观、人生观、价值观,提高道德修养和精 神境界,养成科学思维习惯,促进身心和人格健康发展。培养出好的哲学社会科学有用之才,就要有好的教材。经过努力,我们在实施马克思主义理论研究和建设工 程的过程中,教材建设取得了重要成果,但总体看这方面还是一个短板。要抓好教材体系建设,形成适应中国特色社会主义发展要求、立足国际学术前沿、门类齐全 的哲学社会科学教材体系。在教材编写、推广、使用上要注重体制机制创新,调动学者、学校、出版机构等方面积极性,大家共同来做好这项工作。

  发挥我国哲学社会科学作用,要注意加强话语体系建设。在解读中国实践、构建中国理论上,我们应该最有发言权,但实际上我国哲学社会科学在国际 上的声音还比较小,还处于有理说不出、说了传不开的境地。要善于提炼标识性概念,打造易于为国际社会所理解和接受的新概念、新范畴、新表述,引导国际学术 界展开研究和讨论。这项工作要从学科建设做起,每个学科都要构建成体系的学科理论和概念。要鼓励哲学社会科学机构参与和设立国际性学术组织,支持和鼓励建 立海外中国学术研究中心,支持国外学会、基金会研究中国问题,加强国内外智库交流,推动海外中国学研究。要聚焦国际社会共同关注的问题,推出并牵头组织研 究项目,增强我国哲学社会科学研究的国际影响力。要加强优秀外文学术网站和学术期刊建设,扶持面向国外推介高水平研究成果。对学者参加国际学术会议、发表 学术文章,要给予支持。

  构建中国特色哲学社会科学是一个系统工程,是一项极其繁重的任务,要加强顶层设计,统筹各方面力量协同推进。要实施哲学社会科学创新工程,搭 建哲学社会科学创新平台,全面推进哲学社会科学各领域创新。要充分发挥马克思主义理论研究和建设工程、中国特色社会主义理论体系研究中心、马克思主义学 院、报刊网络理论宣传等思想理论工作平台的作用,深化拓展马克思主义理论研究和宣传教育。要运用互联网和大数据技术,加强哲学社会科学图书文献、网络、数 据库等基础设施和信息化建设,加快国家哲学社会科学文献中心建设,构建方便快捷、资源共享的哲学社会科学研究信息化平台。要创新科研经费分配、资助、管理 体制,更好发挥国家社科基金作用,把财政拨款和专项资助结合起来,把普遍性经费资助和竞争性经费资助结合起来,把政府资助和社会捐赠结合起来,加大科研投 入,提高经费使用效率。要建立科学权威、公开透明的哲学社会科学成果评价体系,建立优秀成果推介制度,把优秀研究成果真正评出来、推广开。

  第四个问题:加强和改善党对哲学社会科学工作的领导

  哲学社会科学事业是党和人民的重要事业,哲学社会科学战线是党和人民的重要战线。加强和改善党对哲学社会科学工作的领导,是繁荣发展我国哲学社会科学事业的根本保证。

  各级党委要把哲学社会科学工作纳入重要议事日程,加强政治领导和工作指导,一手抓繁荣发展、一手抓引导管理。要深化管理体制改革,形成既能把 握正确方向又能激发科研活力的体制机制,统筹管理好重要人才、重要阵地、重大研究规划、重大研究项目、重大资金分配、重大评价评奖活动。要统筹国家层面研 究和地方层面研究,优化科研布局,合理配置资源,处理好投入和效益、数量和质量、规模和结构的关系,增强哲学社会科学发展能力。各级领导干部特别是主要负 责同志,既要有比较丰富的自然科学知识,又要有比较丰富的社会科学知识,以不断提高决策和领导水平。

  各级党委和政府要发挥哲学社会科学在治国理政中的重要作用。党的十八届三中全会提出,要加强中国特色新型智库建设,建立健全决策咨询制度。党 的十八届五中全会强调,要实施哲学社会科学创新工程,建设中国特色新型智库。2015年11月,我主持中央深改组会议,通过了国家高端智库建设试点工作方 案,第一批高端智库已经建立并运行起来。我在那次会议上强调,要建设一批国家亟需、特色鲜明、制度创新、引领发展的高端智库,重点围绕国家重大战略需求开 展前瞻性、针对性、储备性政策研究。近年来,哲学社会科学领域建设智库热情很高,成果也不少,为各级党政部门决策提供了有益帮助。同时,有的智库研究存在 重数量、轻质量问题,有的存在重形式传播、轻内容创新问题,还有的流于搭台子、请名人、办论坛等形式主义的做法。智库建设要把重点放在提高研究质量、推动 内容创新上。要加强决策部门同智库的信息共享和互动交流,把党政部门政策研究同智库对策研究紧密结合起来,引导和推动智库建设健康发展、更好发挥作用。

  构建中国特色哲学社会科学,要从人抓起,久久为功。哲学社会科学领域是知识分子密集的地方。目前,我国哲学社会科学有五路大军,我们要把这支 队伍关心好、培养好、使用好,让广大哲学社会科学工作者成为先进思想的倡导者、学术研究的开拓者、社会风尚的引领者、党执政的坚定支持者。要实施以育人育 才为中心的哲学社会科学整体发展战略,构筑学生、学术、学科一体的综合发展体系。要实施哲学社会科学人才工程,着力发现、培养、集聚一批有深厚马克思主义 理论素养、学贯中西的思想家和理论家,一批理论功底扎实、勇于开拓创新的学科带头人,一批年富力强、锐意进取的中青年学术骨干,构建种类齐全、梯队衔接的 哲学社会科学人才体系。要完善哲学社会科学领域职称评定和人才遴选制度,建立规范的奖励体系,表彰有突出贡献的哲学社会科学工作者,增强他们的荣誉感、责 任感、获得感。宣传部门、组织人事部门、教育部门和高等院校、哲学社会科学研究机构、党校行政学院、党政部门所属研究机构、军队院校等要共同努力,形成培 养哲学社会科学人才的良好激励机制,促进优秀人才不断成长。

  要认真贯彻党的知识分子政策,尊重劳动、尊重知识、尊重人才、尊重创造,做到政治上充分信任、思想上主动引导、工作上创造条件、生活上关心照 顾,多为他们办实事、做好事、解难事。领导干部要以科学的态度对待哲学社会科学,尊重哲学社会科学工作者的辛勤付出和研究成果,不要觉得哲学社会科学问题 自己都能讲讲,不是什么大不了的学问。要主动同专家学者打交道、交朋友,经常给他们出题目,多听取他们的意见和建议。要加强哲学社会科学优秀人才使用,让 德才兼备的人才在重要岗位上发挥作用。

  百花齐放、百家争鸣,是繁荣发展我国哲学社会科学的重要方针。要提倡理论创新和知识创新,鼓励大胆探索,开展平等、健康、活泼和充分说理的学 术争鸣,活跃学术空气。要坚持和发扬学术民主,尊重差异,包容多样,提倡不同学术观点、不同风格学派相互切磋、平等讨论。要正确区分学术问题和政治问题, 不要把一般的学术问题当成政治问题,也不要把政治问题当作一般的学术问题,既反对打着学术研究旗号从事违背学术道德、违反宪法法律的假学术行为,也反对把 学术问题和政治问题混淆起来、用解决政治问题的办法对待学术问题的简单化做法。


  繁荣发展我国哲学社会科学,必须解决好学风问题。当前,哲学社会科学领域存在一些不良风气,学术浮夸、学术不端、学术腐败现象不同程度存在, 有的急功近利、东拼西凑、粗制滥造,有的逃避现实、闭门造车、坐而论道,有的剽窃他人成果甚至篡改文献、捏造数据。有的同志比较激烈地说,现在是著作等 “身”者不少、著作等“心”者不多。要大力弘扬优良学风,把软约束和硬措施结合起来,推动形成崇尚精品、严谨治学、注重诚信、讲求责任的优良学风,营造风 清气正、互学互鉴、积极向上的学术生态。广大哲学社会科学工作者要树立良好学术道德,自觉遵守学术规范,讲究博学、审问、慎思、明辨、笃行,崇尚“士以弘 道”的价值追求,真正把做人、做事、做学问统一起来。要有“板凳要坐十年冷,文章不写一句空”的执着坚守,耐得住寂寞,经得起诱惑,守得住底线,立志做大 学问、做真学问。要把社会责任放在首位,严肃对待学术研究的社会效果,自觉践行社会主义核心价值观,做真善美的追求者和传播者,以深厚的学识修养赢得尊 重,以高尚的人格魅力引领风气,在为祖国、为人民立德立言中成就自我、实现价值。

  同志们!在中国特色社会主义发展历史进程中,我国广大哲学社会科学工作者天地广阔。希望大家不畏艰辛、不辱使命,以自己的智慧和努力,为实现“两个一百年”奋斗目标、实现中华民族伟大复兴的中国梦不断作出新的更大的贡献!(完)

责任编辑:刘德宾 SN222
作者: zzz19760225     时间: 2016-5-19 18:03
一篇比《独立宣言》有水平多的印第安人的宣言
作者:印第安索瓜米西族酋长·西雅图
    
  这篇动人心弦的演说,是1851年,印第安索瓜米西族酋长西雅图所发表的,地点在美国华盛顿州的布格海湾。是时,美国政府要求签约,要以15万美元买下印第安人的200万英亩土地。华盛顿州的州政府便以他的名字定名。原载《山茶·人文地理杂志》第100期
    
  -----------------------------------
    
  你怎能把天空、大地的温馨买下?我们不懂。
    
  若空气失去了新鲜,流水失去了晶莹,你还能把它买下?
    
  我们红人,视大地每一方土地为圣洁。在我们的记忆里,在我们的生命里,每一根晶亮的松板,每一片沙滩,每一撮幽林里的气息,每一种引人自省、鸣叫的昆虫都是神圣的。树液的芳香在林中穿越,也渗透了红人自亘古以来的记忆。
    
  白人死后漫游星际之时,早忘了生他的大地。红人死后永不忘我们美丽的出生地。因为,大地是我们的母亲,母子连心,互为一体。绿意芬芳的花朵是我们的姊妹,鹿、马、大鹰都是我们的兄弟,山岩峭壁、草原上的露水、人身上、马身上所散发出的体热,都是一家子亲人。
    
  华盛顿京城的大统领传话来说,要买我们的地。他要的不只是地。大统领说,会留下一块保护地,留给我们过安逸的日子。这么一来,大统领成了我们的父亲,我们成了他的子女。
    
  我们会考虑你的条件,但这买卖不那么容易,因为,这地是圣洁的。
    
  溪中、河里的晶晶流水不仅是水,是我们世代祖先的血。若卖地给你,务请牢记,这地是圣洁的,务请教导你的子子孙孙,这地是圣洁的。湖中清水里的每一种映象,都代表一种灵意,映出无数的古迹,各式的仪式,以及我们的生活方式。流水的声音不大,但它说的话,是我们祖先的声音。
    
  河流是我们的兄弟,它解我们的渴,运送我们的独木舟,喂养我们的子女。若卖地给你,务请记得,务请教导你的子女,河流是我们的兄弟,你对它,要付出爱,要周到,像爱你自己的兄弟一样。
    
  白人不能体会我们的想法,这点,我知道。
    
  在白人眼里,哪一块地都一样,可以趁夜打劫,各取所需,拿了就走。对白人来说,大地不是他的兄弟,大地是他的仇敌,他要一一征服。
    
  白人可以把父亲的墓地弃之不顾。父亲的安息之地,儿女的出生之地,他可以不放在心上。在他看来,天、大地、母亲、兄弟都可以随意买下、掠夺,或像羊群或串珠一样卖出。他贪得无厌,大口大口吞食土地之后,任由大地成为片片荒漠。
    
  我不懂。
    
  你我的生活方式完全不同。红人的眼睛只要一看见你们的城市就觉疼痛。白人的城里没有安静,没地方可以听到春天里树叶摊开的声音,听不见昆虫振翅作乐的声音。城市的噪音羞辱我们的双耳。晚间,听不到池塘边青蛙在争论,听不见夜鸟的哀鸣。这种生活,算是活着?
    
  我是红人,我不懂。
    
  清风的声音轻轻扫过地面,清风的芳香,是经午后暴雨洗涤或浸过松香的,这才是红人所愿听愿闻的。
    
  红人珍爱大气:人、兽、树木都有权分享空气,靠它呼吸。白人,似从不注意人要靠空气才能存活,像坐死多日的人,已不能辨别恶臭。若卖地给你,务请牢记,我们珍爱大气,空气养着所有的生命,它的灵力,人人有份。
    
  风,迎着我祖父出生时的第一口气,也送走它最后一声的叹息。若卖地给你,务请将它划为圣地,使白人也能随着风尝到牧草地上加强的花香。
    
  务请教导你的子女,让他们知道,脚下的土地,埋着我们祖先骨骸;教你子弟尊崇大地,告诉他们,大地因我们亲族的生命而得滋润;告诉他们,红人怎样教导子女,大地是我们的母亲,大地的命运,就是人类的命运,人若唾弃大地,就是唾弃自己。
    
  我们确知一事,大地并不属于人;人,属于大地,万物相互效力。也许,你我都是兄弟。等着看,也许,有一天白人会发现:他们所信的上帝,与我们所信的神,是同一位神。
    
  或许,你以为可以拥有上帝,象你买一块地一样。其实你办不到,上帝,是全人类的神,上帝对人类怜恤平等,不分红、白。上帝视大地为至宝,伤害大地就是亵渎大地的创造者。白人终将随风消失,说不定比其他种族失落的更快,若污秽了你的床铺,你必然会在自己的污秽中窒息。
    
  肉身因岁月死亡,要靠着上帝给你的力量才能在世上灿烂发光,是上帝引领你活在大地上,是上帝莫明的旨意容你纵白人。
    
  为什么会有这种难解的命运呢?我们不懂。
    
  我们不懂,为什么野牛都被戮杀,野马成了驯马,森林里布满了人群的异味,优美的山景,全被电线破坏、玷污。
    
  丛林在哪里?没了!
    
  大老鹰在哪里?不见了!
    
  生命已到了尽头,
    
  是偷生的开始。
  
网上有多个译本,不过流传最广的是这个节译本。英文也是值得一读的。
  
  How can you buy or sell the sky, the warmth of the land The idea is strange to us. If we do not own the freshness of the air and the sparkle of the water, how can you buy them.
......略
作者: zzz19760225     时间: 2016-5-19 19:14    标题: 外星人访谈1-3

ALIEN INTERVIEW
外星人访谈

内容根据个人自述和会谈记录的提供者
Matilda O'Donnell MacElroy
(马蒂尔达·欧’丹奈尔·马克艾罗伊)

(英文)编辑整理
Lawrence R. Spencer
(劳伦斯·斯宾塞)


主体部分内容摘录、翻译、编辑
一个中国人

(图片引自- http://alieninterview.org/

内容简介
(根据原英文电子版1-18页内容摘要概括如下)


一位名为“Lawrence R. Spencer”(劳伦斯·斯宾塞)的业余作家在2007年9月14日收到由“Mrs. MacElroy”(马克艾罗伊夫人)邮寄的一个包裹和附带的一封信件,邮戳上显示邮包在2007年9月3日从爱尔兰的纳文(Navan, Ireland)寄出……
在这之前,劳伦斯·斯宾塞曾在1998年撰写《The Oz Factors》一书时,由于查询到一些相关线索与这位女士的经历有牵连,他当时认为此人曾在“51区”(Area 51)或“罗斯威尔(飞碟)坠毁现场”(Roswell crash site)或者其它类似的某一次接触外星人事件中出现过。因此,他通过推理和一些意外的介绍指引,终于找到了这样一个人的电话号码。于是,他在1998年打通了电话并与她进行了唯一一次仅20分钟的交流,也想借此补充新书的内容。可是,她除了提到自己曾在1947年美国新墨西哥州军营服役之外,并没有提供任何更有价值的信息。后来,劳伦斯·斯宾塞在1999年新书发表的时候,还特意向这位女士(马克艾罗伊夫人)邮寄了一本作为礼物以表谢意。那时她住在美国蒙大拿州的格拉斯哥(Scotty Pride Drive, Glasgow, Montana)……
劳伦斯·斯宾塞在2007年收到马克艾罗伊夫人的包裹后,按照回退的地址-爱尔兰的米斯郡(Meath County, Ireland)尝试去联系她,可是结果除了那个被刚刚租用几星期住处的女房东回信之外,没有任何回应。房东在信中提到这里有两位老年夫妇都在近期去世了,他们火化后被葬在当地的“Saint Finian公墓” (Saint Finian Cemetery, Athboy Road),可是二人的墓碑上出现的却是 “鲍尔”(Paul)的姓氏,而不是“马克艾罗伊”(MacElroy)。他怀疑这是“假名”,可能与马克艾罗伊夫人在信件中提到离开罗斯威尔时的身份被更改的事情有关……

劳伦斯·斯宾塞除了收到马克艾罗伊夫人的信件外,剩下的包裹中包含了三种类型的文档:

1、普通草稿类型的手写文档,大小为“8 1/2" x 11"”的学生用笔记本纸张。
2、20磅重已打印过的手动打字机证券纸,纸张中的出现的一些手写笔迹与以上的手写文档一致,而且与信封上的回退地址手写笔迹也相同。
3、大量记录与外星人专访内容的打印记录纸张,其中包含了不同类型的打印纸,显然这些并不是用同一个打字机完成的,而且纸张陈旧,有明显频繁使用过的痕迹。
…… ……
为了不受各方调查者的频繁“打扰”,劳伦斯·斯宾塞已将所有资料烧毁……

罗伯特·雷普利 (Robert Ripley)曾说过:
“信不信由你。”(Believe it or not.)

劳伦斯·斯宾塞(Lawrence R. Spencer)留给读者的一句话:
“只有你认为的真实,才是真实的。”
"What's true for you, is true for you".


以后的主体翻译内容将按照以下顺序分类

一、马克艾罗伊夫人的信件原文。

二、马克艾罗伊与外星人“艾罗”(Airl)进行心灵感应访谈的现场官方记录,以及马克艾罗伊针对每一次“谈话”过程的个人补充解释(个人自述)。


来自马克艾罗伊夫人的信件


2007年8月12日
亲爱的劳伦斯先生,

现在我正在使用退伍后购买的一台“安能吾得”牌(Underwood)手工打字机给您写信,不知何故,这种书写方式与信中内容的主旨,以及你将看到的被附文档资料似乎有些相称。
记得在8年前与您有过一次交谈,在那次简短的电话交流中,您希望我可以对您撰写的《The Oz Factors》一书收集的材料有所帮助,因为您猜测我有可能了解一些有关地外生命影响地球历史事情,可能对您在这方面的调查会有所帮助。可是当时我却回应说,我没有任何可以同您分享的任何信息。
在那之后,我读完了你写的书,内容十分引人入胜。我认为您显然是一位做足了“功课”并且应该会理解我个人经历的人。记得您在电话中引用过一位老哲人的话“伴随着崇高的权力而来的,是重大的责任。”,这些话一直以来对我都是一种暗示。虽然我并不认为我有什么相关的权力去给您邮寄这些附带的文件资料,但是您的确让我感到了自己的责任所在。
    不仅仅因为我对您的认可,也由于种种的原因,我重新审视了我所处在的位置。我的确至少对于自己是负有责任的。我不可能向你讲述从1947年以来,我在个人炼狱中忍受着道德标准的摇摆不定和心灵深处的矛盾挣扎。在余下的“来生”里,我不想再玩那种“或许我应该或不应该”的游戏了。
迄今为止,为了压制和消灭那些泄露我所协助保管的真实信息的可能性,在这个圈子中已经有许多人被杀害了。世界上只有极少数人曾经看到或听说过我所保留了六十年的秘密。在过去几十年里,虽然我曾经常认为“权利”已经被严重地误导去“保护”人类不受某类“认知”的(干扰),可是这类“认知”不仅仅是去承认外星智慧生物形式确实存在,而且他们一直都在积极活跃地监视和侵袭着地球上的每一个人。虽然这种情形每一天都在继续着,可我却一直坚信我已经被我们政府中那些“有影响力的人物”授予了重托。
正因如此,我想现在是时候将我所掌握的秘密信息转交给一个可以理解它用途的人了。我认为将这部分知识带到死后的沉寂中使其销声匿迹,并不是一种对自己负责的行为。虽然这个保密信息曾被认为事关“国家安全”并因此贴上了“顶级机密”的“标签”,可我还是认为让这些“既得利益”的知识服务于公众,比起保护这些信息的好处会更多。
此外,现在我已经83岁了。我已经决定使用一种自我执行的无痛安乐死方式,离开这个对我来说经久耐用的身体。我还有不到一个月活在人世的时间,已经没有什么值得恐惧或失去的了。
所以,我已经从我丈夫生活过大半生的蒙大拿州迁移了出来,来到了我丈夫的家乡-爱尔兰,我们在米斯郡租用了一座别墅楼上的一间漂亮的睡房,在这里将我们余生最后的那些天留给了我丈夫的祖籍所在地-爱尔兰的米斯郡。
我将会选择在距离优雅神秘的巨墩“那奥思”(Knowth)和“道思”(Dowth)不远的地方离开人世。这些巨型石碑或大规模的石头建筑是公元前3700年前的产物,它们表面雕刻着难以破译的象形图画文字,它们与埃及金字塔以及遍及世界其它地点的神秘石碑都是在同一时期建造的。
我所在的地方距离“特拉”山丘 (The Hill of Tara)也不算远,据说那山丘是曾是古代142位爱尔兰国王在史前的关键时期登基宣布统治权的地方。在古爱尔兰人的宗教信仰和神话故事中,“特拉”山丘被描述为“神灵们”居住的场所,也是进入“其它世界”的入口。
圣帕特里克曾来到“特拉”征服了古宗教的异教份子。当你阅读一些相关文献时,你会发现虽然他在当时可能有效镇压了这一地区的宗教习俗,可是并没有对那些将文明带到地球的“神灵们”造成丝毫的影响。正因如此,这个地方将很适合我启程离开这个不洁净的世界,最终释放掉此生所有的负担。
从一个显而易见的后知之明视角来看,这一切已经显示出了对我本人更高的期盼:去协助整个星球乃至我们银河系的全部生物形式的幸存者!
我们政府的现状已经成了“保护人民”免于接受对这类事件认知的行政机构。而事实上,由无知与保密的行为所提供的唯一“保护措施”,是为了隐藏那些私人的议程,已到达继续保有奴役他人权利的目的。而且通过这样的做法,使用迷信和麻痹的手段,可以使每一个刚刚觉察到这些的反对者和拥护者们放下防备。
因此,面对这样一桩曾使我向每个人(包括我的家人)隐瞒和保密的重要事件,这一次我将自己保留的原始文档和唯一现存的个人笔记资料放进了邮寄包裹中。同时,我也附带了当时由速记员转录与外星人会见访谈内容的打印副本,稿件包含了我与外星飞碟驾驶员从头到尾每一次会见的访谈内容记录。我没有任何关于这次访谈的现场录音资料,直到现在也没人知道我曾经可以秘密地保留这些官方专访的记录副本。
现在,我将这些文件资料委托给你,你可以根据自己的判断以任何你觉得合适的形式向全世界告知里面传达的信息。如果可以的话,不要因此让这一事件危及到你的生活或健康问题是我唯一的请求。如果你能够想办法将我的一些个人经历写入虚构的故事中,比如以小说的文体形式出现,那么在故事中所体现的真实材料内容就会很轻易地避开任何管制机构的阻碍,尽管他们经常把“国家安全”作为对抗个人审查和司法公正的私人盾牌使用。
通过这样的做法,你可以对那些信息关联的任何来源问题拒绝承担责任,同时声明那是一个你想象中虚构的故事。无论谁说“现实比虚构更不可思议”是再正常不过的事了。所有这些对于大多数人来说都是“难以置信”的。然而不幸的是,“信任”对于现实本身来说并不是一个可靠衡量标准。
同样,如果你将这些记录内容,介绍给任何一个宁愿选择去做物质和实用主义或精神的奴隶以驾驭自由的人,那么,我确定包含这样实质问题的主题应该会引起这类人极大的反感。如果你想尝试以事实报道的形式,将这些文档资料在报纸或电视的新闻媒体中发表,那么他们应该会断然拒绝为一个疯子的作品进行报道。这些文档资料所反映的本质问题会使他们难以置信,因此被认为不可靠。恰恰相反,其实这些信息的发布,对于某些政治、宗教和经济的既得利益来说,是一种潜在的毁灭性灾难。
这些文档资料中所包含的信息,与你对遭遇外星人事件和超自然体验的兴趣和调查研究有关系。说实话,如果用你撰写的“The Oz Factors”一书中的类比方法,其他少数几个有关“外星人”影响作用的事实报道,就好像在环绕地球的毁灭性飓风涡流中心处的一缕轻风,微不足道。在这个宇宙中,真的有巫师、邪恶的巫婆和飞猴!
这个信息(罗斯威尔事件)已经被许多人质疑很久了,包括一直来自于主流媒体、学术界和“军事-工业复合体”方面的不断否认,艾森豪威尔总统曾在离任演讲中警告过我们(与公众利益相违背的)“军事-工业复合体”的问题。
正如你所了解的那样,在1947年7月,罗斯威尔军用基地的军方组织召开新闻发布会公布了这样一则消息:基地的第509空军轰炸大队,在新墨西哥州一个靠近罗斯威尔的农场,收获了一架坠毁的“飞碟”。这一事件引起了媒体的强烈关注。
就在同一天晚些的时候,第8空军司令又发表声明说,最初参与现场残骸复原任务的“Jesse Marcel”少校,仅仅收复了一个气象用气球的残余碎片。自那以后,这起事件的真实情况就已经被美国政府隐瞒了。
你可能不知道我曾应征参军进入了美国女子空军部队(WAC)的医务组,当时的编制属于美国陆军的一部分。在罗斯威尔事件发生的那段时期,我在第509空军轰炸大队任飞行护士。
当坠毁事件的消息传到基地时,我被委派随同反情报官员“凯维特”先生(Mr. Cavitt),来到事故现场针对飞行器驾驶员和生还者的任何的需求,如果有必要的话,我将实施紧急的医疗协助。因此,我亲眼目睹了一架外星飞行器失事的现场,包括几名已经死亡的外星飞行器上的成员。
我到达现场后得知其中有一个外星飞船的成员幸免遇难,而且还处于清醒状态,并没有受伤。这个意识清醒的外星人相貌与其他遇难的同类相似,但并不是完全相同。
当时在场的工作人员中没有人可以与这个外星幸存者交流,因为“她”既不使用口语,也不会识别任何符号。然而,就在我给这位“患者”检查伤情的时候,我立即察觉并领悟到这个外星生命正在试图与我交流,“她”使用的是一种由心理直接产生的“意念的画面”或者“心灵感应的思想”。
我立刻把这个现象汇报给了“凯维特”先生。由于当时在场的没有其他人可以接收到这些“思想”,而且这个外星人似乎愿意与我进行交流,于是,经过与一位高级军官的简短商议之后,决定由我参与陪同这个外星人返回驻军基地。
做出这个决定的部分原因是由于我是一名护士,可以参与外星人身体护理方面需要的工作,同时我的角色也是一个不具威胁性的通讯员和同伴。毕竟,我是当时在场的唯一女性,而且没有配备武器。从那之后,我被固定指派以“同伴”的身份去招待那个外星人。
我的职责是去会见并访问这个外星人,然后根据实际情况做出一份完善的审查报告,向指挥部当局汇报。后来,一些军方和非军方的工作人员向我提供了一份详细的问卷,由我将问卷中的问题“翻译”给这个外星人,然后针对每一个回答进行记录。
无论这个外星人是在医疗测试的过程期间,还是在“她”遭受的来自众多政府机构的其它调查活动期间,一直都有我在场陪同。
由于受到这个非同寻常的任务委派,为了增加我的安全(保密)级别,我还因此被提升了军衔成了高级军士长(Senior Master Sergeant),我的津贴也从原来的54.00美元/月上涨到138.00美元/月。从1947年7月7日起,一直到8月份这个外星人“死亡”或与“身体”分离的那一刻,我执行了这些特殊委派的任务,你将可以从我提供的文件资料中读到相关细节。
由于时常有军方、情报机构和其他各式各样的官员在场,虽然我从来没有与这个外星人完全独处的机会,但是我仍然在未受干扰的条件下与“她”进行了将尽六个星期的(思想)交流。
下文内容是针对我个人的回忆与外星人“交谈”的概括总结,后来我得知这个外星人名叫“艾罗”(Airl),也是那艘外星飞船的驾驶员。
此时此刻,也是在她的“死亡”或启程离开后六十周年的纪念日,为了地球居民的最大利益,我感到我有责任去泄露我与“艾罗”在那六个星期的时间里所交流的内容。
虽然我曾经是以护士的身份在空军服役,但是我并不是飞行员或技术人员。此外,在那段时期里,我并没有直接接触过那艘太空飞船,包括从事故地点获得的其它残骸。为此,人们必须在考虑以我个人主观理解能力所及的前提下,看待我与“艾罗”通过感知思想和意念图像互动的方式进行交流的内容。
我们之间的交流并不是通过传统意义上的“口头语言”进行的。事实上,这个外星人的“身体”并没有“嘴”这样的器官可以说话。我们之间是通过心灵感应进行交流的。最初的时候,我并不能很清楚地理解艾罗所要表达的意思。虽然我能够接收到图像、情感和模糊的概念,可是却很难用言辞的方式表达出来。直到她学会了英文,才可以集中精力将我能够理解的精确的文字和符号信息传达给我。(她)学习英文这件事算是帮了我的大忙,这对我来说,比她更受益匪浅。
在接近我们所有会谈尾端的那段时期,我已经能够轻松自在地应对这种心灵感应的交流方式。我已经变得可以更加熟练地理解艾罗的想法了,仿佛那些想法和情绪就是我自己产生的一样。然而,这样的交流方式又受限于她自身的主观能动性和目的性,以及我与她之间的默契程度。她能够有选择性地传达我接受能力允许范围内的信息。另外,在个人经验、历练、教育、关联性和目的性方面,她又同样具有独一无二的自我个性。

这个符号是“同领地”(The Domain)的标志。

“同领地”是一支种族或一种文明世界的名称,我所专访的这个外星人“艾罗”,正是服务于同领地远征军的一名军官,同时也是飞行员和工程师。那个标志代表了这个已知宇宙的起源与无边际的状态,被统一与综合后并入一个由同领地管辖的浩瀚的文明世界。
艾罗目前的岗位被安置在小行星带里的一个基地中,据她介绍,这个基地被用作地球在太阳系中的空间站。首先最重要的一点,艾罗只是代表她自己。其次,她在同领地远征军中担任军官、飞行员和工程师都是自愿服务的行为。在那个职位上,她有相应的任务和职责,但是,只要她愿意,可以随时离开。
请接管这个资料,并且尽可能地让更多人知道这些。我想重申我的本意并不希望您因占有这样的资料而对生命造成威胁,我也真的没有期望您去相信资料中的任何情节。可是,对那些愿意并能够面对这个资料现实意义的人来说,我的确感觉到您能够意识到这些知识的价值所在。
人类需要知道来自这些文件资料中那些问题的答案。我们是谁?我们来自何方?我们来到地球的目的是什么?人类在宇宙中是孤独的吗?如果在其它地方有外星生命存在,那为何他们不与我们接触呢?
如果我们无法采取有效的措施去撤销外星人对地球长期、普遍渗透性的影响,那么,让人们懂得这种对我们精神与肉体的生存方式所造成的破坏性后果,将是至关重要的事情。
也许这些文件资料中所提供的信息,会成为使人类奔向更美好未来的垫脚石。我希望您可以在传播这信息的时候,表现得比我更加机智、更富有创造力、更加的勇敢。
愿神灵们保佑你,也留住你。

爱尔兰,米斯郡
米斯郡,纳文
Troytown Heights,100号
美国女子空军部队医务组,退伍军人
高级军士长
马蒂尔达·欧’丹奈尔·马克艾罗伊 夫人


第一章
我与这位外星人的第一轮访谈

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


在这个外星人被送回基地之前,我已经与她共处了几个小时了。正如我前面所提到的那样,由于我是我们当中唯一可以理解她交流方式的人,于是凯维特先生要我留在这个外星人身边。我当时搞不明白为何我会有这种能力去跟那个生物“交谈”。在那之前,我从来没有用心灵感应与任何人进行交流的经历。

我所经历这种无声的非口头的交谈方式,就像是去理解一个婴儿或一只狗的意图,因为它们会试图让你懂得它们所要表达的意思,但是比较而言,这次经历要显得更直接,更有效力!尽管没有任何的口述“文字”或“符号”显示,可是那些对我传达的思想意图却明确无误。后来我认识到,尽管我接收到了这种“思想”,但是我也没有必要将它的确切含义翻译出来。

我认为这个外星生命不会愿意去讨论一些技术的问题,因为她身份是军官和飞行员,因此她从属的组织机构应该会需要她履行相应的保密职责。任何一名军人在被“敌人”俘获期间,都有职责去对重要信息进行保密,当然,即使面临严刑拷打也不能例外。

可是,尽管如此,我还是一直觉得这个外星生命并没有真的试图对我隐瞒任何事情,我就是没有那种感觉。她的交流方式对我来说总是觉得诚实可信。可是,我猜想你可能从来没有确切体会过。我可以肯定我和这个外星人之间共享了一个独特的“纽带”,那是一种“信任”或者与患者或孩童相处时的一种理解和认同的感觉。我想这是由于这个外星人能读懂我是真的对“她”感兴趣,而且不仅没有任何恶意,也不允许对她造成任何伤害,如果我可以防止那种行为发生的话。这些也是真实的感受。

我谈到这位外星人时使用了“她”,实际上,无论在生理还是心理方面,这个生物都没有性别存在。“她”的确具有一种相当强烈的女性举止和风度。然而,在生理方面,这个生命无论从内到外都不具有生殖器官。她的身体更像是一具“替身”或“遥控设备”。她的身体既没有内部“器官”,也不是由生物细胞构造而成的。不过,确实有一种“电路”或电子神经系统遍布了她的全身,可我搞不明白那是怎样运作的。

从身材和外观上看,她的身体显得短小而纤细,身高约有1.2米。与她的细小的四肢和躯干比较,那巨大的头部显得很不相称。在双“手”和双“脚”上,各长有三只有些抓握能力的“手指”,她的头部没有起作用的“鼻子”或“嘴巴”或“耳朵”。我推测,这位军官在太空航行的过程中并不需要这些器官去感应声音,因为没有空气的环境就不能传导声音,因此,在她身上并没有制造与感应声音有关的器官,而且那个身体也不需要消耗食物,所以她也没有嘴巴。

她的眼睛非常大,我一直没能测定她眼睛的视力水平和视觉敏感度,但是,通过我的观察,她一定具有极高的视觉敏锐度。我认为那双黑色不透明的晶状体,应该可以觉察到超越光谱波段和微粒的光线,而且我推测,她的视觉可接收的范围可能包括了全部电磁波频谱波段,或更多,我并不了解确切的情况。

当这个生命用她的双眼凝视我的时候,我有一种好像被穿透全身的感觉,仿佛她使用了“X射线显像”技术。面对这种感觉,一开始我还有些尴尬,直到我确定她并没有任何性倾向的企图才放心。事实上,我认为她从来没有对我是男是女的问题产生过任何想法。

在与这个生命短期的相处之后,很明显,她的身体不需要氧气、食物或水分或其它任何外部的营养或能量。我后来得知,这个生命可以用她自己的“能量”作为补给,用来维持身体功能的活性和运转。我虽然一开始对这种现象感觉似乎有些怪异和不安,可后来还是适应了。同我们的身体复杂性比较而言,那确实是一个构造非常简单的躯体。

艾罗向我解释那身体既不是机器人一样机械构造,也不是生物体,它是一个被她激活的精神生命体。从技术角度来讲,站在医学的立场上,我会说艾罗的身体不应该被称为“活体”,由于不具备细胞等等的构成条件,因此她的“替身”并不是生物学意义上的生命形式。

它有光滑灰色的皮肤,身体可以耐受温度、大气环境和压力的变化。她身体的四肢非常弱小,没有肌肉组织。由于在太空中没有重力,因此,强健的肌肉是不必要的。这个身体几乎被完全应用在太空飞船上,或者无重力的环境中。由于地球具有很大的重力加速度,因此,这种身体无法到处走动,因为它的双腿并不是为这一目的而设计的。不过,它的手和脚却表现得非常灵活。

就在我与这位外星人访谈之前,仅一夜之间,这个地方就已经变成了一个嘈杂喧嚣的闹市,几十个工作人员忙碌着布置灯光和摄像设备。一部电影摄影机、一个麦克风、一台磁带录音机被提前布置在“会谈房间”里。(我不明白为何需要准备麦克风,因为与这个外星人之间根本不存在声音交流的可能性。)现场还有一个速记员和几个在打字机上忙碌敲打的打字员。
我接到通知说,一位外语翻译专家和一支“密码破译”的工作队伍已经出发,他们连夜赶来这里,协助并参与我即将与这位外星人进行的会面访谈。几个来自各领域的医学专家准备对这个外星人进行检测,同时还有一位心理学教授来协助阐明问题并“翻译”回答的内容,之所以这样做,是由于考虑到我只是一名并没有翻译员“资格”的护士,尽管我是当时在场唯一能够理解这个外星人想法的人。

后来在我们之间进行了许多次交流,而每一次“交谈”都使我们之间相互理解的程度成指数级增长,关于这些,我在以后的自述内容中也会谈及。以下内容是针对第一轮会谈的“问题清单”与“对应回复”的记录副本,预先备好的“问题清单”由基地情报官员为我提供,“对应回复”的部分是由速记员在访谈过程中听取我汇报的同时,当即笔录的内容。

(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 9

“问题”-“你受伤了吗?”

回答 –

没有

“问题”-“你需要什么样的医疗协助?”

回答 –

不需要

“问题”-“需要食物或水或其它营养物质吗?”

回答 –

不需要

“问题”-“你对环境有什么特殊要求吗?比如空气温度,大气的化学成分,空气压力,或其它废弃的排泄物?”

回答 –

不需要,我不是一个生物构造的生命体。
“问题”-“你的身体或太空飞船是否携带了对人类或地球其它生物形式具有危害的细菌或污染物?”

回答 –

在太空中没有细菌。

“问题”-“你的政府知道你在这里吗?”

回答 –

不是在这个时候

“问题”-“你的其他同类会来到这里寻找你吗?”

回答 –

是的

“问题”-“你们的人使用的是什么性能的武器?”

回答 –

非常具有破坏性。

我并没有理解他们可能拥有的那类武器装备的确切性质,可我也没感到她在回答这一问题时带有任何的恶意,只是在陈述事实而已。

“问题”-“你的太空飞船因为什么而坠毁?”

回答 –

大气层的一次放电击中了飞船,导致我们失去了控制。

“问题”-“为何你们的太空飞船会出现在这个区域?”

回答 –

对“燃烧的云状物”/ 放射线 / 爆炸 进行调查

“问题”-“你们的太空飞船是怎样实现飞行的?”

回答 –

它通过“心智”进行控制,对“思维的指令”做出响应。

“心智”或“思维的指令”是我能够想到去描述她想法的仅有的英文词汇,我觉得他们的身体与飞船之间是通过某种电子“神经系统”直接联系的,这样他们才可以通过自己的思想去控制飞船。

“问题”-“你们的人彼此间是怎样交流的?”

回答 –

通过 心智 / 思想

把“心智”和“思想”两个词结合在一起的英文意思,是我现在能想到的最接近本意的描述方式。然而,对我来说显而易见的是,他们之间用心灵相互沟通的方式,与她和我之间进行的交流是一样的。

“问题”-“你们有没有手写的语言或符号去交流沟通?”

回答 –



“问题”-“你来自什么星球?”

回答 –

家乡 / 同领地的出生地世界

由于我并不是一个天文学家,因此我没有办法去思考行星、星系、星座以及它们在太空中的方位。在我所接收到的意念中,显示了处于一团巨大星群中心的一颗行星,这颗星对她来说好像“家乡”一般,或者“出生地”。关于她出生地的理解,“同领地”是我能想到去描述最接近于她的想法、观念和图像的词语。它还可以被简单地称为“势力范围”或“国土领域”。然而,我确定那不仅仅是一个星球或一个太阳系或一团星群,而是一个星系数量庞大的集合!

“问题”-“你们的政府会派代表们来会见我们的领导人吗?”

回答 –

不会

“问题”-“你们关注地球的目的是什么?”

回答 –

保留 / 保护同领地的所有权

“问题”-“你对于我们政府和军队的设施有哪些了解?”

回答 –

拙劣的 / 小规模的。 破坏星球。

“问题”-“为何你们一直不让地球人知道你们的存在?”

回答 –

守护 / 观察。 不接触。

我接收到的意念信息表明,他们与地球人类进行接触的行为是被禁止的,可是我还是无法找到一个与她沟通的词汇或方式,以确认我所理解的是否准确。他们只不过就是一直在观察我们。

“问题”-“你们的人曾经拜访过地球吗?”

回答 –

周期性的 / 反复进行观察

“问题”-“你们了解地球有多久了?”

回答 –

比人类早很多

我不确定用“史前”一词描述是否会更准确,但是肯定比人类进化的时期要早出很长的一段时间。

“问题”-“你对地球的文明史有哪些了解?”

回答 –

微弱的兴趣 / 注意力。 少量的时间。

这样去回答问题对我来说似乎非常含糊,可是我感到她对地球历史的兴趣并不是很大,或者她并没有放太多注意力在地球上,或许,可能… 我不明白,我并没有真正获得一个对这个问题的答案。

“问题”-“你可以对我们描述一下你的家乡吗?”

回答 –

具有文明社会的地方 / 文化 / 历史。 巨大的行星。 富饶 / 永远的资源。
秩序。权力。知识 / 智慧。两颗恒星。三颗卫星。

“问题”-“你们社会的文明状态发展到了怎样的程度?”

回答 –

远古的。数万亿年。总是。超越其它的。计划。进度表。改进。胜利。高等的目标 / 观念。

我使用了“数万亿”的数词进行描述,因为我确定她所表述的意思要大于数十亿的许多倍,而且她对于时间长度的概念表述是我所望尘莫及的,如果以地球的年限进行比较的话,就真的可以用“无限”这个概念去表达了。

“问题”-“你信仰上帝吗?”

回答 –

我们认为。它就是。使它继续。始终。

我确定这个外星生命并不像我们那样理解“上帝”或“崇拜”这个类的概念,我假定她所在的文明社会生活的人们都是无神论者。我的印象是,他们给予自己很高的评价,也确实很自傲!

“问题”-“你们的社会是什么类型的?”

回答 –

秩序。权力。永远的未来。支配。成长。

这些是我能够使用并描述关于她所在的文明社会最恰当的词汇,当她回答这个问题时,“情绪”显得非常高涨,非常的欢快有力!虽然她的思绪传达给我一种洋溢着欢乐和喜悦的情感,却也让我感到非常的紧张。

“问题”-“除了你们之外,还有其他的智慧生物形式存在于这个宇宙中吗?”

回答 –

每个地方。我们是最伟大的 / 所有的最高级别。

    由于她的身材弱小,我确定她并没有想表示形状“最高”或“最大”的意思。我再一次地接收到了来自她自傲“天性”的感受。


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


以上部分是对第一轮会谈的总结。当第一个问题清单的回复打印出来并送至等在外面的人们手中的时候,他们表现得非常激动,还以为我可以让这个外星人无话不谈。

然而,在他们读完我的答复内容之后却失望了,他们认为我没能够清晰地理解她所回答的信息。现在,由于我第一次接收的问题回复内容,他们又要面对一大堆新的问题了。

一位军官让我待命等待下一步指示。我在隔壁的办公室等了几个小时,在那段时间,我没有被允许继续与这个外星人进行“会谈”,不过,我一直受到了良好的对待,只要我有需要,随时都可以吃东西、睡觉、使用休息室的设施。

终于,我等到了一份用于对外星人提问的新问卷。我推测,已经有相当多的特工人员以及政府和军方的官员,都在这一刻之前抵达了基地。他们告诉我,在下一轮会谈的过程中,还会有其他几个人与我一同出席,以便提示我针对一些详细的内容进行发问。然而,当我尝试在这些人的陪同下与她进行交流时,却无法接收到任何的想法和情绪,也没有任何可以觉察到的信息。没有任何反应,这个外星人只是坐在椅子上一动不动。

于是我们都离开了会谈房间,面对这一情形,一个情报官员显得非常不安,他谴责我对于第一轮的问题回答中有说谎或造假的行为。我坚持我所回答的内容是真实的,都是尽我所能做到的准确回复!

那一天晚些的时候,上面决定指派其他几个人向外星人发问。然而,尽管通过不同的“专家”进行了多次尝试,却仍然没有其他的任何人可以从这个外星人那获得任何信息。

在后来的几天里,一位从事心理调查的科学家从东部乘飞机来到基地,准备会见这个外星人。她名叫“格特鲁德”(Gertrude),我记不起她姓什么了。在另一场合中,出现了一个具有超视能力的印度人,名叫“克里希那穆提”(Krishnamurti),他也来到基地试图与外星人交流。可是这两个人的努力都以失败告终了,而且我自己也无法与这两人中的任何一位进行心灵感应交流,虽然我的确认为“克里希那穆提”先生是一位非常友善、理解力极强的绅士。

最后,上面决定应该把我留在外星人身边,看我可以得到什么样的解答。

第二章
我进行的第二轮访谈

“在接下来的一轮会谈中,他们只让我问外星人一个问题。”


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 10


“问题”-“你为什么停止了继续交谈?”

回答 –

没有停止。其他人。隐藏的 / 隐蔽的。暗藏的恐惧。

这个外星人之所以不能与他们交流,是因为他们对她感到恐惧,或者不信任她。而且,很显然,这位外星人已经完全感知到那些人对她隐瞒着想法和暗藏的企图。同样明显的是,在这一点上,这个外星人对我们居然没有一丝的恐惧或其它的任何想法!


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


在我向速记员和那些焦急等待在隔壁房间里的人们汇报之前,我仔细考虑了这位外星人想法的含义,而且在措辞方面非常谨慎。
对我个人而言,却从没遭遇过来自这位外星人的任何恐惧或误解,我只是抱着非常好奇和兴奋的心态去倾听任何我可以从她那里接收到的信息。然而,和这位外星人一样,我对那些操控会谈过程的情报人员或“权力部门”也没有什么信心,我不知道他们会对她有怎样的企图。不过,我确定这些军方的官员们一定会感到非常非常地紧张和不安,因为居然有一架外星飞船和一位外星飞行员落到他们的手上了!

在那段时期,我最烦恼的是不知道如何更清楚地理解这个外星人的思想和念头。我认为我作为一个心灵感应的“接收者”,一直都做得不错,可是我并不算一个很好的心灵感应“发送者”。

我当时非常想找到一个与这个外星人更好的沟通方式,以便使不断增多的政府官员们更直接地了解她的想法,而不必依赖我去充当翻译的角色。然而,我又是那外星人唯一可能愿意交流的人,所以,这个工作最后还是要落回我的头上。

我同时也敏锐地意识到,这可能是地球史上最重大的“新闻事件”了,而我应该为能够参与此事件而感到自豪。当然,在那之前,整个事件被军方和“权力机构”在新闻报道中以官方名义进行否认的活动已经开始了。
然而,我也开始感觉到在我所了解的范围内,作为地球上第一个与外星生命形态进行交流的人所承受的压力。我想我能了解哥伦布在一颗小行星的一块大陆上发现一个“新天地”时的心情。但是,我即将发现的却是一个全新的,尚未勘查过的宇宙。

在等待上级给我委派下一个指令那段时间里,我在几名全副武装的军警护送下回到了宿舍,途中还有几个身穿黑色西服打着领带的人陪同在我身旁。早上起来后,他们还在那边驻守着,而且还有人送来早餐。早饭过后,他们又护送我回到基地那间为访谈准备的会议室。


第三章
我进行的第三轮访谈

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)

在第三轮访谈中,以及所有后续的会谈过程正如我前面提到的那样,都是在许多其他工作人员参与录制和观察的环境下进行的。虽然他们没有在现场露面,可是在会谈房间与隔壁办公室之间,已经布置了一面单向反光镜,目的是为了在不打扰外星人的前提下监视会谈现场。

这个外星人已经被转移到这个重新布置的房间里了,而且被放置并坐在一把普通的沙发型睡房椅上,椅子被华丽的编织物覆盖着。我确定有人被派到了城镇里最近的一间家具商店购买了一把椅子。由于这位外星人的身材尺寸相当于一个非常瘦弱的5岁小孩,因此那椅子使她显得相形见绌。

由于她的身体不是生物构造的,所以它不需要任何食物、空气或热量,而且,她显然也不需要睡觉。她没有眉毛也没有上下眼皮,所以眼睛是一直睁开的。除非她做出手势或移动自己的身体,否则,只要她笔直地坐在那里,我想没有人能看出她到底是处于醒着还是睡着的状态。除非你可以接收她的意念信息,否则很难判断她是否还活着。

终于,我明白这个外星人的存在与否并不是靠她的身体去鉴别的,可以这样说,是由她的“品格”来定位的。她的外星人同伴们称呼她“艾罗”(“Airl”),而且这是我在描述时能想到最接近她名字的英文字母组合。我能感觉到她的性别更倾向于女性。我想我们都共有一种女性天生的同情心,以及一种培养对于生命和彼此的态度。我确定她看不惯在那些男性的官员和干事身上表露出好战的、有侵略性的、级盛气凌人的态度,因为,同发现宇宙的奥秘相比,他们当中的每一个人更担心的是自己的自尊和权力。

当我进入这房间时,她看到我非常高兴。我能感受从她那里接收到的一种非常诚恳的认同感,一种安慰和“温暖”的情绪,那就像是一种渴望的激情,一种从狗或小孩身上感受到的绝对理想主义的温情,然而又伴随着平静和缄默的抑制。我必须要说,我非常惊讶于对这个外星生命产生如此的感情,尤其是在我们仅相处了那么短时间的条件之下。我很欣喜我能够继续与她进行访谈,尽管所有的注意力都来自于滔滔不绝抵达基地的政府和军队的人们。

为我策划下一系列问题的人一定是想让我去了解,他们怎样才能不通过我,与这个外星人进行交流,这是显而易见的。下面的内容就是针对这些新问题的回答:
(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 11


“问题”-“你能阅读或书写任何地球语言吗?”

回答 –

不能。

“问题”-“你了解数字或数学吗?”

回答 –

是的。我是一名军官 / 飞行员 / 工程师

“问题”-“你能书写或画出可以翻译成我们语言的符号或图画吗?”

回答 –

不确定

“问题”-“有没有其它交流的手势或方法可以帮助我们更清晰地理解你的想法?”

回答 –

没有。

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


    我非常确定这段回答不是真实的。但是,我能体会艾罗一直不愿意用书写或绘画或手势的方式进行交流。我所感受到的是,她一直是在奉命行事,就像任何一个被俘虏的军人一样,即使在酷刑之下,也绝不能透露任何对敌人有帮助的信息。她只能够也只愿意透露那些非机密性质或个人的信息,或“姓名、军衔和编号”。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 11,第2段会谈


“问题”-“你能在一张星系图上向我们展示你家乡的行星吗?”

回答 –

不能。

这样回答并不是因为她不知道地球与她出生地行星之间的路线,她只是不愿意展示它的所在位置,也因为那个行星的位置并不存在于地球上任何的星系图中,它距离这里太遥远了。


“问题”-“你们的人需要花多长时间才可以查出你在这里?”

回答 –

未知的。

“问题”-“你们的人到这里营救你需要花费多长时间?”

回答 –

几分钟或几小时。

“问题”-“我们怎样才能让他们明白我们对你没有伤害的意图?”

回答 –

意图是清晰的。看你的心智 / 图像 / 感觉

“问题”-“如果你不是一个生物体,那为何你将自己归属于女性?”

回答 –

我是一名造物主。母亲。源头。


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


回答这些问题只花了我几分钟的时间,我意识到,如果这个外星人还是不愿意合作,也不愿意透露任何让军方、情报机构或科学家们认为有价值的信息,那么我们可能将要面临非常严重的麻烦。

我同样确定这位外星人非常清楚那些策划问题清单的人的真实意图,因为她能够“阅读他们的心智”,就像与我在心灵感应交流时阅读我的想法一样的轻松。正由于感应到了那些意图,她才不愿意也不能与他们当中的任何人以任何方式在任何的境况下合作。我同样确定,由于她不是一个生物的生命形态,因此也没有任何类型的拷问或强制行为可以迫使她改变主意。

第四章
语言的障碍

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


针对那些“没有答案”的答复内容,我向情报机构人员解释了我对造成这种结果起因的个人看法,结果引起了一大片骚动与不安。在情报和军方官员以及心理学家和语言学家之间引发了激烈的讨论,这一状况一连持续了几个小时。最后决定应该允许我继续与这个外星人进行交流,而且提供了一些我可能会得到满意答复的下列问题:


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 11,第3段会谈





“问题”-“为了让你在回答我们提问时感觉足够的安全,你需要我们做出什么样的保证或证明呢?”

回答 –

只有她说话。只有她听到。只有她提问。没有其他人。必须认识 / 熟悉 /
理解。


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我从会谈房间出来后,汇报了外星人对问题的答复,结果遭受了来自集合在一起的情报和军方人员冷酷、怀疑的接待,他们无法理解外星人如此回复究竟是何意。

我承认我也真的不明白她究竟想表达什么意思,但是我一直都在尽最大的努力去表达她心灵感应的意图。我告诉那些官员,沟通存在的问题可能与我应对这位外星人心灵感应语言的能力不够有关系,在理解方面还达不到足够清晰的满意程度。在这一点上,我感到非常泄气,几乎想要放弃了!

而现在又比以往增添了更多的争论!我很确定我快要被从这一任务中剔除了,尽管事实说明这个外星人拒绝和任何人交谈,而且并没有找到任何其他人可以与她沟通。

幸运的是,来自海军的一位非常聪明的日文语言学专家名叫“约翰·纽勃”(John Newble),对这一现象做出了解释并提供了一个解决方案。他的解释是,第一,这个问题与外星人的沟通能力欠缺没有什么关系,而与她不情愿与除我之外的任何人交流有更多关系。第二,为了获得一个清晰全面的沟通环境,会谈的双方都需要去理解和使用共同的语言进行交流。

文字和符号在语言中传达着非常精准的概念和含义,他说日本人在他们的语言中有许多同音异义词,使日常的交流沟通出现很多混淆的情况。为了解决这一难题,后来他们使用了标准的中国汉字去书写所要表达语言的确切含义,这个办法为他们消除了困惑。

如果不能建立一个明确的命名法,那么这种沟通水平也不太可能超越那些初级的相互理解方式,比如人与狗之间的,或两个小孩子之间的。缺乏掌握带有清晰概念并可以共用的词汇,是影响不同人、不同族群或不同国家之间相互交流的限制因素。

因此,他提出我们只有两个选择,要么我不得不去学习这个外星人的语言,要么就让外星人学习说英语。而事实上只有一个选择是可行的:由我来劝说艾罗去学习英语,然后由我在这位语言学专家的指导下,教她学英语。对于尝试这个分析的方案,没有人提出异议,也是由于当时确实无计可施了。
这位语言学专家建议我找来一些儿童读物和一些基本的初级读本,外加一本语法课本带进会谈房间。到时候由我坐在这位外星人身边,为她大声朗读书本内容的同时,用手指着每一个读到的文字,以便她跟上我的进度。

这个理论是为了使这位外星人完全可以学会阅读,就好像教小孩子通过认字和边写边读的方法来学习阅读一样,在学习基本语法的用法方面也是这样。他们同时还这样假设过,我想,如果这个外星人可以聪明到使用心灵感应与我交流的程度,而且还能偶乘坐太空飞船穿越星系,那么她学习说英语的速度应该至少不会低于一个5岁的儿童。

于是我回到会谈房间并把这个想法传达给了艾罗,虽然她并没有拒绝学习语言的意思,可是她特没有做过任何许诺去回答以后的问题。没人提出更好的主意,于是,我们就这样做了。


第五章
阅读的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)
   

我在阅读课程的开始阶段使用了一本教科书的前几页,这本书在19世纪用来教那些美国边疆城市拓荒者家庭的孩子们,书名叫做“McGuffey's Eclectic Reader, Primer Through Sixth”(麦加菲美德读本,初级到六级)。

由于我不是教师,而是一名护士,所以这位语言专家在向我提供教学书籍的同时,还给了我一份详尽的教学讲解——需要我花上一天时间的课程——学习如何使用对应的书去教这个外星人学英语。他说,之所以选用这些特别的书籍,是因为它们的最初版本始于1836年,在横跨四分之三个世纪的时间里,用来教美国全部学校五分之四的儿童如何去阅读,而且没有其它任何书籍能够对美国儿童有如此长期的影响力。

麦加菲(McGuffey)的教学课程,是从以字母顺序学习认字的“初级读本”开始进行的,孩子们可以按步骤利用搭起带有字母的方块进行组字和发音,这个过程涉及在读音教学法中如何教给孩子使字母与发音结合。每一节课都要首先对阅读训练中出现的词语进行研究,而且还要对应做标记以显示每个单词的正确发音。

我发现“第一和第二级读本”中的图片所讲述的故事,都是描述孩子与家庭成员、老师、朋友和动物之间关系的,而“第三、四、五和第六级读本”则是对其进行扩展延伸的内容。我还记得其中一个故事名叫“寡妇和商人”,这是一个关于道德情操的类型的故事,一个商人去帮助一个身处困境的寡妇,后来,当这个寡妇证明了自己的正直时,那商人送给她一件精美的礼物。这些书并不一定是在教你去相信慈善的行为来自于富人。因为我们都知道,慷慨是一种每个人都应该操行的美德。

所有故事的内容都是非常健康有益的,而且还配有相当不错的插图,比如针对诚实、仁慈、节俭、勤劳、勇敢、爱国主义、对上帝的崇敬,以及对父母的尊重。我个人会向任何人推荐这本书。

我同样发现这本书中所使用的词汇,比现代社会人们常用的有限数量的词语要显得非常先进。我想,自200年前开国元勋们撰写了独立宣言之后,我们已经失去了大量我们自己的语言!

正如对我指导过的那样,在会谈房间里,我坐在艾罗的身边为她大声朗读麦加菲系列读本,每本书中都针对教学的主题和故事匹配了精美的插图,虽然相对于当今的标准是显得有些过时的。尽管如此,艾罗似乎懂得并全神贯注于课程进程中的每一个字母、发音、音节和词义。我们每天进行14小时的课程,这样未间断地一连持续了3天,我自己占用的休息和吃饭时间刨除在外。

艾罗没有要求过任何休息,她不睡觉。正相反,她一直坐在会谈房间的软垫椅子上,复习回顾我们所讲过的内容。当我每天早晨从上次结束的课程开始讲起的时候,她已经记住了上堂课的内容,而且很顺利地进入了下一章节的学习进程中。这样的学习进度模式不断地加速,直到我为她而采用的朗读教学方式变得失去意义为止。

虽然艾罗没有可以用来说话的嘴部器官,不过,她现在已经能够用英语作为媒介进行“思考”了。在课程结尾阶段,艾罗已经能够读书并进行自学了。我向她说明了如何使用英语字典去查找学习过程中遇到的生词,在那之后,艾罗开始频繁地翻阅字典,也是从那时起,我的工作角色成了一个负责递送书本的仆人,将她需要的参考书籍络绎不绝地送到她跟前。

紧接着,“纽勃”先生拿来了一套“大英百科全书”,艾罗尤其喜欢这些书籍,因为书中有许多的图片。在那之后,她又要求阅读更多的图画书和带图片的参考书籍,因为,在她参照图片进行理解的过程中,会更有利于掌握所学内容的含义。

在接下来的六天里,我猜想,这里可能已经引进了来自于遍及全国范围图书馆中的书籍,因为还没过几天时间,她就已经读完了几百本书!她学习了每一个我能够想象到学科,以及其它很有技术含量的,甚至我从来没想要去了解的科目,比如天文学,冶金学,工程学,数学,各种技术手册等等。

后来,她开始阅读文学作品,小说,诗集和文学经典著作。艾罗同时还要求阅读大量以人文和历史为主题的书籍。我认为她已经阅读了至少50本关于人类历史和考古学的书。当然,我十分确定,她还接到过一本《圣经》,而且是从头到尾一页接一页地翻看,期间没有进行任何评论或提问。

虽然我继续保持着每天呆在艾罗身边12-14小时,可是除了她偶尔会向我提问之外,在接下一周的大部分时间里,我们之间并没有进行什么交流。那些提问通常都是针对所读文章背景的理解,或意在阐明书中的一些事情。奇怪的是,艾罗告诉我,她最喜欢的几本书是“爱丽丝梦游仙境”,“堂吉诃德”和“一千零一夜”。她说,这些故事书的作者向人们展示了,拥有一个伟大的灵魂和创造力,远比掌握一项重要的技能或权力更重要。
由于我无法回答她提出的大量问题,所以我只能向房间外面的人们去请教答案,他们中大部分人都是与科技研究领域相关的人士,其中少数几个问题是关于人文科学的。从综合理解的深度和她所提问题的微妙性能够看出,她的智慧是非常敏锐的。

我个人认为,她所掌握的地球文明和历史知识,已经超出了我们开始时由她自愿接受的范围。我很快就会发现更多了。



第六章
我受教育的课程开始了

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


就在从坠毁现场“援救”艾罗迄今为止的第15天,我已经可以同她轻松流畅地进行英语交流了。到目前为止,她吸收了如此大量的书写材料,以至于已经远远超越了我的受教育程度,尽管我曾在洛杉矶高中毕业后进入了大学,并完成了四年的医学院预科与护理培训的课程,可是,同时我自己的认知空间已经因此被彻底限制了。

最近呈现给艾罗的大部分学科知识,都令我望尘莫及,尤其针对于她深刻的理解能力和强烈的学习热情,以及如照相功能一般的记忆力!她能够记起已读书籍中的一大段内容。她还特别喜欢一些经典文学著作的某个故事片段,其中,她喜欢回味来自“顽童历险记”、“格列佛游记”、“(小飞侠)彼得潘”和“睡谷的传说”中的故事。

到了现在,艾罗已经变成了一位老师,而我却成了她的学生。我以后要学习的内容,将是生活在地球上的人一无所知也无从得知的!

在会谈房间隔壁聚集了利用单向反光镜观察我们的科学家们和相关人员,我和艾罗称这些人为“旁听席”,他们已经迫不及待地想让她去回答问题了。可是艾罗去始终拒绝回答来自除我个人之外任何人的提问,即使在我扮演转译者角色或以书写方式表达的时候,也是如此。

第16天的下午,在艾罗读书的时候,我们并排坐着,她合上了一本书的最后一页,然后把书放在一边。在我正准备从一大堆等待阅的书籍中为她递送下一本时,她转过头对我说或对我“传递想法”--“现在,我准备好发言了”。起先,我对她这样的言语有点困惑,然后我向示意可以继续她的发言,就这样,由她为我上的第一课内容开始了。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 24,第1段会谈


我提问,“艾罗,你想要说些什么呢?”。

“我成为在这一空间区域同领地远征军的一个成员,已经有几千年时间了。然而,自公元前5965年以后,我并没有与任何地球人私下里进行过亲近的接触,因为我的首要职责并不是去与同领地行星上的居民进行接洽。我是一名身兼多职的军官、飞行员和工程师。尽管如此,虽然我可以流利地运用347种同领地范围内的语言,可是,我一直也没有接触过你们的英文。

上一次我精通的地球语言,是来自吠陀经赞美诗中的梵文,那段时期,在一项任务中,我作为一名成员,被派去调查坐落于喜马拉雅山脉同领地基地所遭受的损失。因为,全部的军营的军官、飞行员、通讯和管理职员都消失了,那个基地被摧毁了。

几百万年前,我在同领地接受培训,担任调研、数据评估和程序开发官员一职。因为我拥有那些技术经验,所以我成了被派往地球的搜寻小组成员之一。去询问生活在那一区域附近的一些居民,也是我任务所涉及的一部分,结果许多当地的住户都反映看见‘vimanas’或飞行器曾出现在那片区域。

通过对合理的迹象、陈述和侦察进行延伸性追踪之后,在某些证据缺失的情况下,我带领我的团队发现,有些‘旧帝国’的船只与‘旧帝国’的设施仍然巧妙地隐藏在这个太阳系中,而我们居然一直都没察觉到。

之所以你和我以前不能够使用你的语言沟通,是因为我个人一直都没接触过你的语言。不管怎样,现在我已经扫描了所有你向我提供的数据,这些信息被传达到了我们负责这一区域的太空站中,并且已经被我们的通讯指挥官通过我们的计算机进行了处理,在与我意见一致的上下文中,将其翻译成我自己的语言之后,再传达给我。与此同时,我还接收到一些存储在我们计算机文件系统中的额外信息,其中包括英语方面和同领地关于地球文明的记录。”

“现在,我已准备好向你传达一些确切的信息,我感觉这些对你来说极具价值。我将告诉你这个真相,虽然真相是同其它所有的事实相关联的,可我还是希望在不超出自己的诚实界限范围内,在不违反我所服务并宣誓去捍卫的组织职责的前提下,尽可能公正准确地与你分享我所理解的事实真相。”

“好的”,我提问,“你愿意去回答旁听席的提问吗?”。

“不,我不会去回答问题了,我将提供给你一些信息,会使构成人类社会的这些不朽的精神生命在幸福方面收益,而且将有利于扶植地球上无数的生物形式和生态环境,正如这也是我使命的一部分,以确保地球得到保管。

就我个人而言,我深信所有的意识生物都是不朽的精神生命,这其中包括人类。为了准确和简洁起见,我将使用一个虚构的词:‘现在—成为者’,因为,一个不朽的生命最初的天性,是生活在永恒的状态 ——‘现在’,而唯一使他们如此存在的理由,是他们决定去 —— ‘成为’。

无论他们在社会中的地位有多么低下,与我自己期望从其他人那里得到的一样,每一个现在-成为者都应受到尊重和对待。不过,无论他们是否意识到这个事实,每一个地球上的人仍然一个现在-成为者。”


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我永远无法忘记这段交谈经历,她的语气显得非常的务实和平淡,另一方面,这也是我第一次感觉到来自艾罗温和而真实的“个性”,她对“不朽的精神生命”的一段阐述,好似黑暗的房间中出现的一束闪光那般触动了我,因为我以前从没考虑过人类可能是不朽的生命。

我曾经认为,地位或权力都是完全由圣父、圣子和圣灵所掌管的,而且,由于我是一个虔诚的天主教徒,受托于主耶稣和圣父,因此,我从没想到过作为一个女人同样可以是一个不朽的精神生命 —— 不仅仅只有圣母玛利亚。但是,当艾罗传递给我那个概念时,我第一次清楚地意识到,就她自己而言,她是一个不朽的精神生命,而且我们所有人都是!

艾罗说她感觉到我对她的想法有些困惑,她说她会向我证实我也是一个不朽的精神生命,接着她说,“到身体的上方来!”与此同时,我开始意识到我已经处在身体的“外部”了,而且正在从我的头上方天花板的位置朝下面看!我还能看到我身体周围房间内部的景象,包括坐在我身体旁边的艾罗的身体。过了一会儿,我认识到这个自然而又震撼的事实 ——“我”并不是一个实体。

在那一刻,一面黑色的面纱在我生命中第一次被掀开了,而且在过去的很长一段时间里,我意识到我并不是“我的灵魂”,而“自我”才是“我”—— 一个精神生命。

过了一会儿 —— 我不确定过了多久 —— 艾罗问我是否对这个概念有了进一步的了解,突然,我又回到了自己的身体中,然后大声地回答说,“是的!我明白你的意思了!”

那段体验让我太吃惊了,甚至我可能不得不从椅子上站起来围绕房间步行几分钟才能平静,于是我借口去喝杯水,并走出了房间,然后进了洗手间,我对着洗手间内的镜子观察我“自己”,又在梳妆台重新补妆整理了一番,然后拉直了我的制服。过了10或15分钟后,我感觉自己又再次恢复了“正常”,于是返回了会谈房间。

在那之后,我感觉我已经不再只是艾罗的一个翻译员了。我觉得自己似乎是一个与她“志趣相投的人”。我感觉好像我正在与一个关系最亲近的人、一个信任的朋友或一个家人,很安全地呆在家里。艾罗发觉我对于“个人的永恒”这一概念存在困惑,于是,为了给我解释清楚,她开始了她的第一堂“课程”。


(继续接上一段会谈内容的官方记录)


“艾罗告诉我,她之所以来到地球和这片第509轰炸机空军中队的驻地,是因为她被上级派遣到这里,调查发生在新墨西哥的核武器爆炸实验。她的上级安排她去大气层搜集一些数据,用这些来测定对环境造成的辐射和潜在的危险范围。在她执行任务时,飞船被一束闪电击中,导致她对飞船失去了控制而坠毁。

这架飞船是由一些现在-成为者操控飞行的,这些现在-成为者用的都是‘替身’,这种方式与一个头戴面具、身披戏装的演员很相似,这就好象是通过一种机械的工具在物理世界中进行操作。在太空执行任务时,她与其他同级或他们上级的军官一样,都寄居在这些‘替身的躯体’中。当他们不在工作岗位时,就会‘离开’这个身体,然后在没有使用身体的情况之下,进行操作、思考、交流、旅行和生存。

这些替身是由人工合成的材料制作的,包括一种非常敏感的电子神经系统,目的是使每一个现在-成为者可以校准他们自己,或者调谐到一种电子的波长范围,并且与每一个现在-成为者发出的波长或频率进行独特的匹配。每一个现在-成为者都有能力创造一种可以识别他们的独特波动频率,很象是一种无线电信号的频率。这个过程在局部意义上比较符合以指纹识别身份的原理,替身的躯体扮演了现在-成为者的一个无线电接收机角色,没有任何两种接收频率段或任何两个替身的躯体,是完全相同的。

每个现在-成为者飞船成员的替身,同样被调谐并连接到构造在飞船里的‘神经系统’中。飞船与替身躯体的设计方式非常相似,它是根据每个现在-成为者船员的频率段而被特别调整过的。因此,飞船可以由现在-成为者发出的‘意识’或能量进行操作。这是一种非常简单而直接的控制系统,所以,在飞船上并没有复杂的控制或导航的装置,而且操作起来就像是这个现在-成为者的延长缆线一样。当闪电击中飞船时,引起了电路的一次短路,从而使飞船即刻‘断开联络’,造成了这次坠毁事件。

艾罗曾经是,而且依然是一名来自‘同领地’远征军的军官、飞行员和工程师,这支远征军称他们来自于某类太空歌剧(Space Opera)中出现的一个文明社会‘同领地’,这个文明社会管理着数量庞大的星系、恒星、行星、卫星和陨石群,所掌控范围遍及了整个有形宇宙的四分之一!她所在的机构正在进行的任务,是‘保护、控制和扩展同领地的版图与资源’。

艾罗指出,他们自己的这类行为在许多方面,同那些‘发现’和‘声明’新天地的欧洲探险家们非常相似,那些人的探险活动打着为了圣父、罗马教皇和西班牙、葡萄牙国王们的旗号,后来又为了荷兰、英格兰、法兰西的国王们,以此类推。欧洲从那些本土居民‘已经获得的’所有权中获取利益,然而,当地的本土居民却从没有经历过商议或征求许可的过程,而直接成为了欧洲国家的‘领地’,为了助长他们自己的利益,士兵和传教士们被派遣去获取领土和财富。

艾罗说她读过一本历史书,里面提到一个西班牙国王对自己手下残忍对待本土居民的行为感到懊悔,因为他担心遭到来自所信奉的各种《<圣经>旧约》中诸神的惩罚,所以,他让罗马教皇去编写一份名为‘要求’(Requerimiento)的声明告示,用以昭示最新遇到的本土居民。

不管是否被本土居民所接受,这位国王都希望通过此声明,免除自己所有屠杀和奴役人民的罪责。他利用这一则声明,作为他的士兵和罗马教皇的传教士没收并霸占他们土地的正当理由。显然,就人而论,罗马教皇在这一事件中并没有半点愧疚感。

艾罗认为这些做法都是胆小鬼的行为,所以,西班牙的领土范围减小得如此之快,一点都不稀奇,而且仅仅在这位国王驾崩的几年后,他的帝国就已经被其他国家同化了。

艾罗说,这类行为并没有在同领地发生过,因为他们的领袖们为同领地的行为负全责,更不会以那样的方式毁坏他们自己的名誉,他们不畏惧任何神明,也不会为他们的行动感到任何悔恨。这一想法加强了我早先的暗示,他们的人可能都是无神论者。

在同领地去发现并获取地球的事件中,同领地的统治者们并没有选择去向地球‘本土居民’公开展示这个意图,直到过一段时间后,等到形势有可能或没可能满足他们的利益时,他们才会脱颖而出。目前在战略上没有必要让人类知道同领地远征军的存在。事实上,直到现在,他们一直都在积极地隐藏着,而这些原因会在以后透露。

同领地在太空所处的这一区域,也就是地球附近的小行星带,这是一个非常窄小却又重要的位置。事实上,我们太阳系中的某些目标,在作为弱重力‘太空站’的用途方面,是非常有使用价值的。他们最初对这个太阳系中的弱重力卫星感兴趣,其中包括,月球的背面和一颗数十亿年前被摧毁的行星形成的小行星带,在涉及程度较小的方面,还包括火星和金星。由石膏合成的圆顶结构或电磁压力屏障覆盖的地下基地,对于同领地势力来说,都是非常简易的建筑构造。

一旦某一太空区域被同领地获得并成为其控制领域的一部分,那么它将被视为同领地的‘所有物’。之所以靠近地球的同领地太空站是非常有影响力的原因,正是因为它被布置在沿着一条朝向银河系中心和更远处的同领地扩展路线上。当然,同领地中的每一个人都意识到了这一点 —— 地球上的人除外。”


第七章
一堂关于远古历史的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我聆听艾罗所讲授的内容,从晚上一直持续到第二天黎明。在我从艾罗那里获得的“课程”中,我必须说,我经历了着迷、多疑、震惊、惊恐、沮丧和不满的心理变化过程。她所告诉我的事情,都是我无法想象的 —— 甚至也不可能在我最狂野的美梦或噩梦中出现!

第二天下午,我一觉醒来,洗过澡,吃过东西后,我参加并听取了关于前一晚会谈的报告会议,具体内容是由旁听席的人员,根据我对艾罗阐述的汇报进行的记录。与往常一样,我在每次访问后都要向速记员汇报,因此,一位速记员也出席了这次会议。同时还有6、7个人需要我对所陈述的内容做些澄清。如往常一样,不断有压力在施加给我,想利用我对艾罗的影响,去劝说她回答旁听席中的一些人所提出的问题。我尽力向每个人保证,我将会付出最大的努力去做这些工作。

尽管如此,在那之后的每一天里,只有三件事发生:

1)只要艾罗感觉到任何问题是由旁听席中的人转达给我提问的,她都毅然地拒绝回答。

2)艾罗继续对我讲授她自己选择的主题内容。

3)每天傍晚,在我与艾罗的交谈或讲授课程结束之后,她都会根据她在某方面想要了解更多信息的需求,给我罗列一个新主题内容的清单。每晚我都把这个清单转交给旁听席。第二天,艾罗会收到一大堆书本、杂志、论文等等。她利用我用来睡觉的整晚时间,学习所有这些资料。这种模式在我与她共处后余下的时间里,每一天都在重复着。

我接下来与艾罗会谈或授课的主题内容,将以同领地的角度阐述关于地球和我们的太阳系,以及附近空间的发展简史。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 25,第1段会谈


“在你能够理解关于历史这个主题之前,你必须首先理解关于时间的主题。时间只不过是一种通过空间去任意测量目标运动的计算单位而已。

空间不是线性的,空间是由一个现在-成为者在观察一个目标时的视角所决定的,一个现在-成为者与被观察目标之间的间隔,被称为‘空间’。

在空间中的物体或能量体,并不一定按照线性的模式运动。在这个宇宙中,物体运动的模式往往是随机的、弯曲的、循环转动的,或者与所确立的规则一致。

正如许多地球历史书的作者暗示的那样,历史不仅仅是对重大事件的一种线性记载过程,因为它并不是一根可以伸长并作对应标记的绳子,比如某种测量工具。历史事件是通过空间去观察物体这一运动过程的个人主观表述,不过,并不是通过那些屈服者或死者,而是根据事件中幸存者的视角去进行记载。

事件的发生既是相互作用的,又是同步进行的结果,就象是新陈代谢的过程,生物体拥有泵出血液的心脏,同时肺脏又为细胞提供了氧气,也利用太阳的能量和植物中的化学成分进行复制再生,与此同时,肝脏过滤了血液中的毒素,然后通过膀胱和肠道排除体外。

所有这些交互作用都是同步并发的。虽然时间的运行具有连续性,但是,偶然事件并不是在一种单独和线性流动的条件中触发的。如果有人想看清历史并试图理解发生在过去的事实,那么,他必须要在一个相互作用的体系中扮演一个角色,去审视一切相关的事件。在遍及在全部的有形宇宙中,时间也可以被感知作为一种统一的振动形式存在。

艾罗解释说,现在-成为者们早在宇宙诞生之前就已经出现了,他们之所以被认为‘不朽’,是因为一个‘灵魂’既不会出生也无法死亡,反而,它存在于一种个人亲自要求的感性认识“现在 — 即将成为”之中。她小心翼翼地解释说,每一个灵魂都是不同的,在个性、力量、意识和才能方面,每一个灵魂都是绝对独一无二的。

在地球上大多数寄居在生物体身上的现在-成为者,与像艾罗这样的现在-成为者的区别在于,艾罗能够随意进入和离开她的‘替身’,她能够感知到可选择的深度穿过物质,艾罗与其他同领地官员之间可以通过心灵感应进行交流。由于某个现在-成为者并不是有形宇宙中的实体,因此,他不具有位置或时间的属性,也可以将现在-成为者说成是“非物质的”,他们可以在瞬间完成巨大的空间跨度。

在不需要生理感官机能的条件下,他们能够体验比生物躯体更强烈的情感。一个现在-成为者能够将痛苦排除在他们感知之外。艾罗还能够回忆起她的‘身份’,而且一直向回追溯到暗淡而模糊的时间长河中,已有数万亿年之久了。

她说,在这个宇宙附近现存的太阳集合,已经燃烧了至少200万亿年了。这个有形宇宙的古老程度已经接近于无限,不过,自从最初的诞生开始,它年龄可能至少有4x1015年了。

时间是一个很难衡量的因素,它同样依赖于现在-成为者的主观记忆,而且,自从它产生开始,在全部有形宇宙中一直都没有统一的对事件的记载。同样在地球上,也曾出现了由许多不同的文化所定义的各种时间测量体系,他们利用运动的周期和原始起点之间的关系,确定了使用的年限和持续的时间。

这个有形的宇宙本身由许多其他单独的宇宙汇聚、融合而成,每一个单独的宇宙都是由某一个或某一群现在-成为者所创造出来的。为了形成一个共同创造的宇宙,这些虚幻的宇宙在彼此碰撞的过程中,相互混合、聚结并固化在一起。由于经过了一致同意:能量与形体能够被创造产生,但不可以被废弃。因此,这个创造性的进程一直都在建立一个接近无限实体容积的、不断膨胀的宇宙。

在这个有形宇宙构成之前的很长一段时期内,宇宙们不是真实的实体,它们统统都是幻影。你也可以将它说成是一种由魔术幻觉构成的宇宙,由魔术师随心所欲地在有与无之间变换。在每一个场合里,这个‘魔术师’可以是一个或多个现在-成为者,许多地球上的现在-成为者仍然能够回忆起在那段时期些许的模糊印象。在一些魔法与巫术的故事中,以及童话和神话故事里,虽然使用的都是些非常粗略的术语,可是都讲到了那些情形。

每个现在-成为者在进入这个有形宇宙的同时,也就失去了他们自己的‘家乡’宇宙。其过程可以这样解释,某一个现在-成为者的‘家乡’宇宙被有形宇宙所倾覆。或者,这个现在-成为者与其他的现在-成为者们共同创造或占领了有形宇宙。

在地球上,之所以很难有办法测定某个现在-成为者进入有形宇宙的时间,有两个原因:

1)地球上这些现在-成为者们的记忆,已经被消除了。

2)现在-成为者们到达或闯入这个有形宇宙的事件发生时间有所不同,有些是在60万亿年前,其他的仅仅有3万亿年的历史。每隔一阵时间——几百万年,都会有某区域或某行星被其他的现在-成为者组织进入并占领。

有时候,他们会捕获其他现在-成为者并当作奴隶,他们会被强迫进入某些躯体中做奴仆或体力的劳动——尤其是在那些强重力行星上开采矿藏,比如地球。

艾罗说,她在6.25亿年前成为同领地远征军的一名成员,当时她作为一名飞行员去执行生物学勘察任务,其中包括对地球进行一系列不定期的调查工作。她能够回忆起在那一时期的全部经历,还包括在那之前很长一段时期发生的事情。

她告诉我,地球上的科学家们并没有建立一个精确评估物质年龄的测量体系。由于某些类型的材料似乎变质得相对比较快,比如有机物或碳基物质,于是他们假定物质具有一种衰减的属性。以测量木头或骨头的年龄作为依据去测量石头的年龄,是不准确的。这是一个根本性的错误。而事实上,物质并不会变质,它无法被毁灭,物质可能会改变形态,但绝对不会被真正地毁灭。

自从同领地在80万亿年前开发了时空旅行技术之后,他们针对众多星系中的这一区域进行了周期性的考察。回顾地球的这些变化情况,包括山脉的起伏,陆地的移位,行星磁极的变换,冰雪浮盖的消长,海洋的出现与消失,河流与峡谷的变化。在所有这些情况里,物质是相同的,一直都是同一颗沙粒,每一样由同一基本材料制成的物质和形态,都绝对不会变质。”


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我甚至无从想象一个经历了数万亿年文明的社会,在技术和精神领域
会拥有怎样先进的发展水平!只要想想现在我们国家对比150年前所达到的先进程度,仅仅在100多年前,运输迁移活动还在依赖于步行、马背或船只,读书要在烛光下进行,取暖和做饭要使用壁炉,而且没有任何室内的水管。


(继续接上一段会谈内容的官方记录)


“艾罗向我描述了一位担任同领地军官的现在-成为者所具有的技能,然后她做了示范,用心灵感应与一位来自同领地小行星带太空站的通讯官员进行交流。

小行星带是由成千上万由某颗被摧毁的行星残骸组成的,这颗行星曾经处于火星与木星之间,对于朝向我们银河系中心行进的太空飞船来说,它适合被当作一个可靠的弱重力起跳点使用。

她向这位官员请求咨询存储在同领地‘文件’系统中关于地球历史的部分,并且让这位通讯官员将信息‘输入’给艾罗,通讯官立刻接受了这个请求。基于同领地储存的这部分文件信息,艾罗给我做了一个简要的介绍或‘历史课程’,接下来就是艾罗向我讲述关于同领地对于地球历史的评述:

她告诉我,同领地远征军最近,也是第一次进入银河系的时间——只有大约10000年以前,他们采取的第一个行动是去征服一些‘旧帝国’(这并不是正式的名称,而是一个由同领地势力对被征服的文明赋予的昵称。)的大本营行星,而且‘旧帝国’曾经担任银河系和其它邻近空间领域的中央政府席位,这些行星坐落在北斗星星群的尾部。她并没有提及确切的星体名称。

大约在1500年后,同领地为了他们的势力导向银河系的中心并向远处铺路,于是开始在地球上设置基地。约8200年前,同领地势力在喜马拉雅山脉靠近现代的巴基斯坦与阿富汗边境的地方,建造了一座地球的基地,作为同领地远征军的军营,大概有3000名驻军队员。

他们在一座大山下面或内部建立了一个基地。他们从山顶钻向山体内部并使其空心,创造了足够大的空间容纳船只和军队成员。然后又在山顶处制造了一种电子幻象,这样形成的‘压力屏障’保障了虚假图像所覆盖的山体内部基地不会暴露在外。如此一来,飞船就能够通过压力屏障实现出行和返回,而且还能保证不被现代人类所察觉。

就在他们将基地安置不久之后,基地很意外地遭受了一次来自’旧帝国’势力残余力量的攻击。一个尚未被同领地发觉的,隐藏的火星地下基地,一直由‘旧帝国’操控已经存在很长时间了。同领地的基地被一次来自‘旧帝国’火星基地的军队击垮,使那些现在-成为者们变成了俘虏。

你可以想象,同领地对失去如此庞大数量的军官和队员,感到非常不安。所以他们派遣了其他队员来地球搜寻这些人,结果他们也同样受到了攻击。那些被俘的同领地远征军现在-成为者们遭受的处理方式,与所有其他被发送到地球的现在-成为者是一样的。他们每个人都被给予了记忆缺失处理,并用一些虚假的图像和催眠指令替换了他们原有的记忆,然后发送到地球上寄居在那些生物的躯体中。目前,他们仍然是地球人口的一部分。

在针对全体队员的损失方面进行持久和深入的调查之后,同领地发现‘旧帝国’一直在非常广泛地,同时又小心隐藏地进行运作,而且这些运作的基地在银河系的这一区域已经存在数百万年了,没人知道确切的时间。最终,‘旧帝国’军队的战舰与同领地相互约定在太阳系内进行决战。

根据艾罗的阐述,大约在公元1235年,’旧帝国’势力与同领地进行过一次激战,同领地军队最终摧毁了在这一区域‘旧帝国’军团的最后一支飞船。在那段时期,同领地远征军也在这一区域损失了很多自己的战舰。

大约又过了1000年,‘旧帝国’的基地在公元1914年被意外发现了。这一发现是在奥匈帝国皇储弗朗茨·斐迪南大公当政的时期,那时他的身体已经被一位同领地远征军官员‘接管’,这位曾驻守在小行星带的同领地军官,被派遣到地球执行搜集与勘测的常规任务。

这次‘接管’的目的是为了用‘身体’作伪装,通过渗透人类社交场所的方法去搜集信息,掌握地球发生的事件。这位军官,作为一个现在-成为者,拥有比弗朗茨·斐迪南大公原有寄居体更加强大的力量,以至于他只需要简单地‘推开’那个寄居体,就可以接管他的身体进行控制了。

然而,这位军官并没有认识到,哈布斯堡皇室在国家内部一直遭到仇视派别憎恨,所以,弗朗茨·斐迪南大公的身体遭到一个波斯尼亚学生行刺的情形,令他措手不及。当这位军官或现在-成为者,遭到刺客射击的时候,被突然间‘击打出’身体之外,这位失去了方位感的现在-成为者,不经意间由于被其中一个‘强制失忆’渗透而遭到捕获。

最后,同领地发现辽阔的空间区域都被一种‘电子强制场域’监视着,它控制了所有在银河系末端的现在-成为者,包括地球上的。电子强制滤网被设计用于探测现在-成为者的存在,并且阻止他们离开原来的区域。

如果有哪个现在-成为者想试图穿过这个‘强制滤网’,那么,它将在一种‘电子网络’中将其‘捕获’。结果是,被捕获的现在-成为者去遭受一种极其剧烈的‘洗脑’处理,用来消除这个现在-成为者的记忆。在这个过程中使用了极高强度的电击,这种做法与地球上那些精神病医师很像,他们使用“电击疗法”清除掉某位 ‘患者’的记忆和个性,让他变得更容易‘合作’。

地球上的这种‘疗法’仅仅使用了几百伏的电压,可是,‘旧帝国’用来实施对抗现在-成为者们的电压,却达到了数十亿伏特的数量级!这样强烈的电击将彻底清除现在-成为者的记忆,而且被清除的这部分记忆并不是一次生命或一个身体所经历的,它除去的是所有累计的近乎无限往昔的经历,也包括这个现在-成为者的身份。

这种电击处理的目的,意在使现在-成为者不可能回忆起他们是谁,他们从哪里来,他们的拥有的知识和技能,他们关于过去的记忆,以及作为一个精神实体所能够体现的作用。他们被制服,变成了一种无意识的、机器人式的非实体。

每一现在-成为者遭到电击处理后,产生的一系列催眠后的暗示,都被用于去装载虚假的记忆和错误的时间定位,这些内容包括在身体死亡后‘返回’基地的指令,这样可以使同一类的电击处理一次又一次地重复实施——直到永远,同时,催眠的指令告诉这位‘患者’,要忘记回忆。

同领地通过这位军官的经历认识到,‘旧帝国’一直在使用地球作为‘监狱星球’——已经很久了——无人知晓究竟有多长时间——可能有数百万年了。

所以,当现在-成为者的身体死亡后,他们会离开躯体,接着,被‘强制滤网’发现并遭到捕获,同时接受催眠的指令去‘返回到亮光中’,‘天堂’与‘来生’的概念是催眠暗示的一部分 —— 是背信弃义的一部分,使得整个机制运转起来。

当现在-成为者经历了电击处理和催眠,被清除了前世的记忆之后,他在催眠状态下立刻接到了向地球‘报到’的‘指令’, 就好象他们正在执行一个秘密的任务,去寄居在一个新的躯体中。每一个现在-成为者都被告知,他们呆在地球上有特殊的目的。可是,在一所监狱中的人本来就没怀有什么特殊目的——至少对囚犯来说是这样。

任何一个遭判决后送往地球且不合乎要求的现在-成为者,都被‘旧帝国’列为‘贱民’的类别,这样的情形包括,任何被‘旧帝国’认为是品性不端到不能改过自新或无法制服的人,同样包括其他罪犯,比如性变态或其他不愿做任何生产性工作的人们。

现在-成为者中的一个‘贱民’类别同样包括各种各样的‘政治犯’,这样的现在-成为者都是一些被认为是固执的人,一些为‘旧帝国’在不同星球上的政府制造麻烦的‘自由思想家’或‘革命者’。当然,任何一个曾经对‘旧帝国’有军事反抗记录的人,也同样被运送到了地球。

一份‘贱民’名单包括艺术家,画家,歌唱家,音乐家,作家,演员,和各种表演者。正因如此,与‘旧帝国’范围的其它星球相比,在数量上,地球上拥有更多的艺术家。

‘贱民’还包括知识分子,发明家和天才人物,他们几乎存在于每一个领域中。由于‘旧帝国’认为那些有价值的东西都是几万亿年前所发明创造的,因此,他们并没有想继续使用这些人,其中也包括干练的管理人员,因为在一个惟命是从的、机器人式的公民社会中,不需要这样的人存在。

任何人,如果不愿意或者无法作为纳税工人,去服从经济、政治和宗教的奴役,那么,他们将被‘旧帝国’的等级制度定为‘贱民’,而且遭受清除记忆的判决,然后永远被关押在地球上。

最终的结果是,一个现在-成为者将无法逃脱牢笼,因为他们无法回忆起自己是谁,曾来自何方,以及现在的处境。除了他们自己真实的经历之外,早已经被催眠去认为他们是某个人,在某件事中,某个时候和某个地方。

奥匈帝国弗朗茨·斐迪南大公被‘暗杀’一事,也可以说成是寄居在他身体中的同领地军官被‘旧帝国’势力俘获。这位特殊的军官与其他大多数比较而言,是一个能力很强的现在-成为者,他被带到了‘旧帝国’设置在火星地下的秘密基地中,关入了一个特殊的电子牢房中进行监禁。

幸运的是,在囚禁了27年后,这位同领地军官从地下基地中逃了出来。他成功脱逃后立即回到了自己在小行星带的基地中。接着,他的指挥官下令将远程导弹定为在由这位军官提供的坐标上,从而彻底摧毁了那个‘旧帝国’的基地,它坐落在火星Cydonia区域中,赤道以北几百英里的地方。

虽然‘旧帝国’的军事基地被摧毁了,可不幸的是,大量用对付现在-成为者的强制滤网机构设施仍然在起作用,因此,就在此时此刻,电击 / 失忆处理 / 催眠机器还在其它尚未被发现的地方继续运行着。由于主要‘意识控制监狱’的控制中心基地,仍旧没有被找到,因此,这座基地或这些基地所带来的影响,依然在生效。

同领地已经发现,自从‘旧帝国’太空势力被歼灭以后,在全部银河系或与其相邻的星系中,没有任何势力去积极阻止其它行星系统,向地球派送他们自己的‘贱民’现在-成为者。因此,在这整个一大片的太空区域,地球已经变成了一个通用的倾倒垃圾的场所。

这部分历史解释了为何在地球的现在-成为者人口中,会出现非同寻常的混合现象,比如来自种族、文化、语言、道德准则、宗教和政治方面的影响。若以数量计算地球上社会形态的多样性,那么在一个普通的行星上都是极其罕见的。大多数‘第12太阳类型,第7等级’的行星,只有一种人类形体或种族居住,如果存在的话。

此外,大多数地球古文明和其它许多发生在地球上的重大事件,都曾受到来自‘旧帝国’基地进行隐藏和催眠活动的严重影响。到目前为止,由于一直得到来自于滤网和陷阱的严密保护,因此,仍然没有人搞清楚究竟是谁,在哪里,以及怎样去运作这些。

此外,在银河系的这一端,一直也没有采取行动去寻找、发现并摧毁这个巨大的,由制造现在-成为者强制滤网的远古电子机械网络。在完成这些过程之前,我们还是无法阻止或中断这种来自‘旧帝国’监狱行星的电击处理、催眠和远程思维控制的活动。

当然,现在所有同领地远征军的队员们都已经意识到了这一现象,因此,当他们在这个太阳系空间工作的时候,时时刻刻都在防止被‘旧帝国’的陷阱探测并捕获。”

[ Last edited by zzz19760225 on 2016-5-20 at 13:02 ]
作者: zzz19760225     时间: 2016-5-19 19:21    标题: 外星人访谈2-3

第八章
一堂关于近代史的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


这次会谈为我讲述了一堂历史课,而且是我不会在任何地球的历史书中读到的内容!同领地对某些重大事件的观点与我们的理解大相径庭。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 26,第1段会谈


“自公元1150年起,也就是‘旧帝国’在这个太阳系的残余舰队被歼灭之后,同领地远征军已经发现西方科学与文化的复苏迹象,虽然在那之后,远程催眠控制的活动略微地削弱了,可是在很大程度上却依然有效。

显然,‘旧帝国’的远程意识控制活动遭受了少量的破坏,导致这个机构的力量有小幅下降。因此,现在-成为者们开始恢复了一些有关科学技术的记忆,那是在他们来到地球之前就已经熟悉的知识。此后,被称为‘欧洲黑暗時代’(Dark Ages)的知识镇压活动开始减少。

自那时起,物理和电学的基本定律已经近乎在一夜之间,彻底革新了地球的文化状态。由于并不是象公元1150年以前那样遭到压制,所以,地球上现在-成为者人口中产生的许多天才,都部分地恢复了科技记忆能力。艾萨克·牛顿爵士就是一个最好的例子,在短短几十年里,他单枪匹马地重新确立了几个主要基础学科和数学的定律。

这些‘回忆起’科学知识的人,早在被送往地球之前就已经掌握那些了。通常,没人可以在一生中观测或发现如此多的自然科学和数学的知识,甚至经历几百次生命轮回的时间也做不到。这些学科已经花费了那些文明社会数十亿年的时间才得以建立。

在地球上的现在-成为者只是刚开始回忆起一些存在于整个宇宙中零星技术知识的片段而已。从理论上讲,如果用于对抗地球的催眠机构能够被彻底破坏,那么,现在-成为者们将重新获得他们所有的记忆。

不幸的是,由于地球上的现在-成为者们不断在彼此间表现非常恶劣的行为,因此,在人性中还没有发现与之相称的友爱表现。然而,这种恶劣行为的产生,在每个现在-成为者每一生的时间里,都受到了‘催眠指令’的严重影响。

而且,地球上的‘同狱囚犯们’是一种非同寻常的成员集合——罪犯、堕落者、艺术家、革命者和天才——制造了一个非常动乱喧嚣的环境。这座行星监狱的目的是要把现在-成为者们拘留在地球,直到永远。通过在现在-成为者彼此间宣扬无知、迷信和战争的方法,保持被削弱反抗能力的人口数量,并使他们在电子强制滤网的‘隔离屏障’幕后,被陷阱捕获。

被倾倒在地球上的现在-成为者们,来源遍布于整个银河系和其它邻近星系,包括‘旧帝国’的全部行星系统,比如天狼星、毕宿五、昴宿星、猎户星座、天龙星座和无数的其它星座。有些地球的现在-成为者来自于一些尚未命名的种族、文明社会、文化背景和行星自然环境,每一种不同的现在-成为者居民,都拥有他们自己的语言、信仰体系、道德准则、宗教信仰、教养和一些不知名和数不清的历史故事。

这一部分现在-成为者与早期从另一个恒星系统来到地球的居民混合在了一起,这些居民在400000年以前就来到地球,并建立了亚特兰蒂斯文明和利莫里亚文明,在当前的‘监狱’居民到达地球的数千年之前,那些文明在一次行星‘磁极转换’的过程中,被海啸淹没了。显然,从那些恒星系统来到地球的现在-成为者们,是地球原始东方族群的源头,始于澳大利亚。

另一方面,‘旧帝国’监狱系统在地球上建立的文明,与‘旧帝国’自身的文明有很大区别,因为它是一种由更早期文明的原子动力聚结而成的电子太空歌剧(Space Opera),那些文明曾经被核武器所征服,并且被来自另一个星系的现在-成为者们殖民。

控制‘旧帝国’的官僚机构来自于一个远古的太空歌剧(Space Opera)社会,由行星政府的一种集权主义同盟进行运作,以及一个严酷的社会、经济和政治的集团进行管制,并用他们作为皇室君主的傀儡。

这类的政府规律性地出现在一些行星上,那里的公民为了自治而放弃了个人责任和自我约束。他们经常为了一些发狂的现在-成为者而失去了自由,那些现在-成为者曾受到无法抵挡的偏执想法的折磨,认为其他每一个现在-成为者都是他们敌人,而且一定要将其控制或消灭才可以。然而他们又信奉热爱和珍视他们最亲密的朋友和盟友,可以说是被他们‘爱到死’的程度。

由于诸如此类现在-成为者的存在,同领地认识到,必须要赢得自由,通过保持永久的警惕性和防御的能力,并使用武力去维持它。结果,同领地征服了‘旧帝国’的执政星球。比较而言,同领地的文明虽然相当年轻,而且在规模上显得更小,可是,它已经更加强大,而且组织得更好,它由一种平等主义的团队精神统一起来。这在‘旧帝国’的历史中从来都没出现过。

最近,掠夺成性的德国在地球上的极权主义状态与‘旧帝国’的表现类似,但是残酷程度仍无法与之相比,强度也不及 ‘旧帝国’的万分之一。许多的现在-成为者之所以呆在地球上,是因为他们一直激烈地反对极权主义政府,或者因为他们的精神问题是如此的恶性,以至于无法被‘旧帝国’的政府所控制。

由于地球的居民是由一种比例非常高的此类群体不均衡地分布组成的,因此,在地球现在-成为者们之间的文化与伦理道德标准的冲突,显得极不寻常。

同领地使用电子炮轰征服了‘旧帝国’的核心行星,这些组成‘旧帝国’核心政府所长行星上的平民,构成了一种肮脏的,堕落的,无意识的,纳税工人自相残杀的奴隶社会。汽车赛道上的血腥和暴力,罗马马戏团的娱乐表演类型是他们唯一的消遣方式。

无论我们有任何合理的理由去使用原子能武器,以击败‘旧帝国’的统治星球,为了不毁灭那些行星的资源,同领地都小心翼翼地使用天然武器和放射性力量。

当前的美国社会正在开始从一些外观上模仿那个文明,尤其表现在对飞机、汽车、船舶、火车和电话的设计方面。同样,那些被认为是‘时尚’或‘前卫’的地球城市建筑,其是都是‘旧帝国’建筑艺术形式的体现。

在‘旧帝国’被同领地取代之前,由这样一些人组成,他们拥有一种非常怯懦的情报机构,很像是你们近期世界大战中的轴心国。那些人所表现的行为,正与流放他们到地球进行永远监禁的银河系政府一致。他们是来自永恒座右铭的可怕暗示,因为在其中的某个现在-成为者,会经常使用以往他人对待自己的方式去表现自己的行为。善有善根,恶有恶果。一个人必须能够并愿意去使用武力,同时还要具有温和的理解力,以免伤及无辜。无论如何,为了有效地防止野蛮行径发生,为了不被激发野蛮行为的预谋所控制,特别的理解力、自律和勇气是必不可少的。

只有那种恶魔般的、自我服务的政府,才会使用‘逻辑’或‘科学’去构思一种‘终极解决方案’,用谋杀和永远清除记忆的方式去对待每一个艺术家、天才、干练的管理者和发明家,并且把它们抛到一座行星监狱中,与那些来自全部星系的政治反对者、杀人犯、小偷、性变态和丧失能力的人生存在一起。

一旦现在-成为者们被‘旧帝国’驱逐并抵达地球之后,他们就会被给予记忆缺失处理和催眠的骗术,让他们认为还有其它什么事情发生在他们身上。接下来,要使他们植入到地球生物的躯体中,并成为地球人口‘伪造文明’的一部分,这样伪造的文明是设计并安置在现在-成为者的头脑中形成的,目的是为了使它与‘旧帝国’文明完全区别开。

所有来自印度、埃及、巴比伦、希腊、罗马和中世纪欧洲的现在-成为者们,受到许多初期现在-成为者发展形成的标准模式的引导,于是效仿并建立了一系列的社会文化基础。这些类似的文明出现在‘第12太阳类型,第7等级’的行星上,它们已经在宇宙中存在数万亿年了。

最早被送往监狱地球的现在-成为者生活在印度,他们逐渐扩散到美索不达米亚、埃及、中美洲、亚该亚、希腊、罗马、中世纪欧洲以及其它的新天地。他们被催眠去接受‘命令’,在一个由‘旧帝国’监狱操纵者们指定的文明社会中随波逐流。为了向关押在地球上的现在-成为者掩饰实际的时间和位置,这样的做法是一种有效的机制。由各种虚构文明衍生出语言、服饰和文化的用意在于,使失忆症更加牢固,因为他们不想让地球上最初遭到驱逐的现在-成为者回想起‘旧帝国’统治星球的事情。

向回追溯很长的一段时间里,这些类型的文明往往都是一遍又一遍地重复着,因为创造它们的现在-成为者们熟悉某些模式和风格,而且把它们保留了下来。开创一个完整的文明是需要大量工作才能完成的,比如需要完善文化,建筑,语言,风俗,数学,道德价值等等。相比之下,去重复一个既熟悉又成功的模式副本会显得容易很多。

一颗‘第12太阳类型,第7等级’的行星,是为那些基于碳氧居住的生物形式所特定设计的星球。行星类型的划分,基于其规模、恒星的辐射强度、恒星到行星轨道的距离,以及行星的体积、密度、地心引力和化学成分。同样,植物与动物都要根据其恒星类型和所居住行星的等级才能标明和鉴别。

平均而言,在有形宇宙中,那些具有可呼吸的大气的行星所占百分比相对比较小,大多数行星不具备大气层——生物形式赖以生存的‘饲料’,就象在地球上,大气中的化学成分为植物和其它有机体提供了营养,这反过来又扶持了其他的生物形式。

当同领地在8200年前将吠陀经赞美诗带到喜马拉雅山一带时,那里已经存在了一些人类社会的活动,雅利安人入侵并征服了印度,同时也将吠陀经赞美诗带到了那片区域。

印度人学会了《吠陀经》,在使用书写形式进行记载之前,他们以口述的方式记忆并传承了7000年之久。在那段时期,同领地中的一位军官来到地球化身为‘毗湿奴’,他在《梨俱吠陀》中曾被描述了许多次。他仍然被印度人尊为一位神圣。毗湿奴在宗教战争中反抗‘旧帝国’的势力,他是一个非常有才能又敢做敢为的现在-成为者,同时也是一位极具影响力的军官,他后来又被指派在同领地执行其它的任务。

攻击和反抗‘旧帝国’管理者所安置的埃及神殿,这一整个事件都是精心策划的。这次斗争的目的是帮助人类从虚构文明所灌输的要素中解脱出来,而不是让一些神职人员管理并要求他们将注意力集中在许多‘神灵’和迷信的崇拜仪式中。这些都是‘旧帝国’精神操控的一部分,目的是为了隐藏他们在地球上对现在-成为者们犯下的罪行。

某位神职人员,或监狱看守的作用,是去帮助并加强认识这样一个概念,一个人仅仅是生物的躯体,并不是一个不朽的精神生命,个人没有任何的身份,也没有前世的经历,个人没有任何的权力,而只有神灵们才拥有权力。此外,神灵的称呼是由神职人员们发明的,神职人员在人们与那些神灵之间的调解人,人们成了在神职人员指挥之下的奴隶,一旦有人不去服从指示,神职人员们就会以遭受永远的精神审判来威胁他们。

如果所有的囚犯都患了失忆症,而神职人员自己也成了囚犯,那么,对于这样一个监狱星球还能期待些什么呢?由于‘旧帝国’秘密的意识控制活动仍然在继续运作,因此,同领地对地球的干预活动尚没完全成功。

在‘旧帝国’势力与同领地之间通过宗教征服的方式展开过一次战争,在公元前1500年-公元前1200年之间,同领地势力曾尝试向几个具有影响力的地球人传授这样一个概念,个人是不朽的精神生命。而这样的情况导致了一种对此概念非常悲剧性的曲解和滥用,当时的观念是扭曲的,它的用意是要说明只存在唯一一个现在-成为者,以此替代了每个一个人都是一个现在-成为者的事实!显然,这是一种对个人为自我权力而承担责任的做法缺乏理解和完全不情愿的观念。

‘旧帝国’的神职人员们设法腐蚀了个人不朽的观念,取而代之的是,仅存在一个全能的现在-成为者,而且没有其他任何人可以成为或被允许成为现在-成为者。显然,这是‘旧帝国’实施记忆缺失处理操作的结果。

对于那些不想为自己的生活负责的人们,很容易就可以教他们学习这些去改变观念,奴隶都是这样人。只要一个人为了某人对别人产生的想法和行动,而选择并确定去为了创造、生存和个人义务而承担责任,那么这个人就成了一个奴隶。

因此,一个单纯的一神论‘上帝’的概念,导致并引起了来自许多先知的自我宣传,比如犹太人奴隶的领袖——摩西——在法老王阿蒙霍特普三世家族中长大,家族成员包括阿蒙霍特普的儿子——阿肯那顿,同样还有阿肯那顿的妻子和儿子——纳芙蒂蒂与图坦卡蒙。

教导地球上特定的几个人去认识自己,让他们知道自己就是现在-成为者,这种尝试曾是计划的一部分,目的是为了倾覆‘旧帝国’神秘仪式所虚构出的人神同形论的华丽外衣,这种被称为‘大毒蛇兄弟会’(The Brothers of The Serpent)的仪式,在埃及同样以‘阿蒙的祭司们’得名,他们是非常古老又神秘的旧帝国内部社会团体。

法老王阿肯那顿并不是一个很聪明的人,他为了自我美化而被他的个人野心严重地影响了。他擅自更改了个人精神生命的概念,并以太阳神阿托恩的形象将其具体化,于是,他可怜的生命在不久后就被终结了。他是被玛雅(Maya)和帕任奈夫(Parennefer)暗杀的,这两个人都是阿蒙或‘阿门’(Amen)的祭司。基督徒们仍在延用的‘阿门’一词,代表了‘旧帝国’势力的利益。

‘唯一神’的概念是由希伯来人的领袖‘摩西’在埃及的时候延续下来的,他带着收留的犹太人奴隶离开了埃及,当他们穿越沙漠的时候,摩西在接近‘西奈山’的地方被‘旧帝国’派来的一个工作者在中途拦截了,这个利用催眠指令制造的骗局,使他相信那人就是‘这个’唯一神,同样,‘旧帝国’也经常性地使用技术和美学的诡计去诱捕现在-成为者。自那以后,完全相信摩西言语的犹太人奴隶,开始敬拜一个唯一的神,他们称之为‘耶和华’。

‘耶和华’的意思是‘匿名的’,因为同摩西‘合作’的那个现在-成为者不可以使用一个实际名字或任何可以辨别身份的称呼,他也不能去揭露失忆处理 / 监狱操控的黑幕。这种隐蔽的失忆处理 / 催眠 / 的监狱体制最后想要做的是,向地球上全部的现在-成为者们公开展示他们自己。他们(同领地)觉得这样的做法可能会恢复囚犯们的记忆!

因此,所有太空文明与人类之间的实体接触迹象,一直都在谨慎隐藏、伪装、隐蔽、否认或误导中进行着。

这个‘旧帝国’的工作者在一座沙丘顶端接触了摩西,并传输给他‘十个催眠指令’。这些指令的言辞非常有说服效力,可以迫使一个现在-成为者彻底屈服于操控者的意愿。而且在数千年之后,这些催眠指令仍然影响着数百万现在-成为者们的思维模式。

后来,我们偶然发现了所谓的‘耶和华’同样也撰写、制定并编译了摩西五经,从字面上看,或以译解出的形式进行阅读,都向读者提供了大量虚假的信息。

最终,《吠陀经》赞美诗成了几乎所有东方宗教信仰的源头,也曾是佛陀、老子、琐罗亚斯德,以及其他思想家的哲学思想的来源。这些哲学家彻底取代了‘旧帝国’宗教的邪神崇拜信仰,而且也是真正慈悲胸怀的起源。

你曾问过我,为何同领地和其它的太空文明不想登录地球,让众人皆知他们的存在。登录地球?你认为我们疯了或想变成疯子吗?这需要一个非常勇敢的现在-成为者下来穿越大气层并着陆在地球上,因为这是一个非常失控的、精神错乱的群体所居住的监狱星球,而且,正如8200年前在喜马拉雅山被俘的同领地远征军队员们一样,没有任何一个现在-成为者能够完全对抗被诱捕的危险。

没人知道这些现在-成为者们将在地球上做些什么,目前,我们并没有计划考察同领地在这一太空区域全部控制范围的资源,根据同领地安排的时间表,在不久的将来——地球时间约5000年后,会这样做。现在这个时候,我们并去不阻止从其它行星系统或河外星系,继续将现在-成为者们丢弃在强制失忆滤网的区域。而最终,这样的情形将会改变。

此外,地球本身是一个高度不稳定的行星。它不适合任何可持续文明的安定或永久的生存环境,这也是为何它被当作一个监狱行星使用的原因,由于(以下)种种简单有说服力的理由,所以没有人会很认真地考虑生活在这里:

1)地球的大陆板块漂浮在表层以下为熔岩的海洋上,造成了板块断裂,溃散和持续地漂移。

2)由于核心的液体性质,行星拥有大量的火山,容易遭受地震和火山爆发。

3)行星的磁极每隔大约20000年就会彻底转换一次,届时将造成海啸和气候的变化,从而导致不同程度的破坏。

4)地球距离银河系中心以及其它重要的银河文明非常遥远,除了用作星系之间的‘凹陷站点’或出发点使用之外,这种与世隔绝的状况并不适宜被利用,而月球与小行星带更适合这些用途,因为他们不具备任何有影响的重力场。

5)地球是一颗强重力行星,拥有重金属土壤和致密的大气层,这种情形在导航用途方面显得变幻莫测。无论我的飞船技术含量如何,无论作为一个具有怎样广博的专业知识的飞行员,现在的事实是,我已经呆在这间屋子里了,这是由于飞行事故造成的,也是对那些事实的证明。

6)仅仅在银河系中,大约存在600亿类似地球(第12太阳类型,第7等级)的行星,这还不算同领地所拥有的辽阔区域,以及我们即将在未来声明的领土。对我们的资源倾注全力的行动,远比定期对地球的考察活动更艰难。尤其是在这里进行资源投入,并不会得到立竿见影的效果。

7)在地球上,大多数人并没有意识到他们是现在-成为者,也没认识到存在任何形式的灵魂。虽然其他的许多人意识到了这一点,但是几乎每个人对作为现在-成为者的他们自己,都了解甚少。

造成这种局面的原因之一是,自从时间开始以后,现在-成为者们就一直在彼此交战。这些战争的目的,经常是为了某一个现在-成为者,或某一集团的现在-成为者们在另一方之上建立统治。由于现在-成为者是无法被‘处死’的,因此,这个目的就变成了捕获现在-成为者并使其丧失活动能力,有无数种方式都可以实现这一目的。最基本的捕获和固定现在-成为者的方法,是利用各式各样的‘陷阱’。

现在-成为者的陷阱已经被许多入侵性质的群居社会制造并实施了,这种活动开始于约64万亿年前,比如,建立‘旧帝国’的势力就是其中之一。陷阱经常设置在遭受攻击的现在-成为者们的‘领地’中。通常,一个陷阱会使用‘美丽’的电子波长去吸引这个现在-成为者的兴趣和注意力,比如,一座美丽的建筑或一曲动听的音乐,这个陷阱由这位释放能量的现在-成为者去激活。

其中一个最普通的陷阱机制是,当现在-成为者设法攻击或挣脱陷阱的时候,它可以利用这个现在-成为者自己的思想能量输出进行运作,也就是说,陷阱被这个现在-成为者自己的思想能量所激活,现在-成为者越是反抗陷阱,就越显艰难,逐渐将现在-成为者拖回陷阱的方向并套牢在其中。

贯穿整个有形宇宙的历史,大量的太空区域已经被现在-成为者团体接管和殖民了,他们使用的都是这一类对新领域进行侵占的方式。在过去,这些入侵活动都有(以下)共性:
1)绝大多数使用武力的方式,通常伴随着核武器或电子武器。

2)对入侵区域的现在-成为者们进行意识控制,通过电击疗法,毒品,催眠,清除记忆并植入虚假或伪造信息的方式,从而使当地的现在-成为者人口保持屈服和受奴役的状态。

3)自然资源由入侵的现在-成为者们接管。

4)对当地人口实施政治、经济和社会奴役。

这些活动在当前仍然在延续着,在地球上所有的现在-成为者,都曾是过去这类活动的参与者,其中既包括作为一个入侵者的情况,也包括曾经被入侵人口中的某部分,在这个宇宙中没有‘圣洁的人’,只有极少数可以从现在-成为者们之间的斗争中豁免。

在这个非常的时刻,地球上的现在-成为者们仍然是这种活动的受害者。‘旧帝国’精心制作的现在-成为者陷阱机制,在他们往生与来世之间实施了记忆缺失的处理,以防止现在-成为者脱逃。

这种操作是由一种不正当的、旧帝国中背叛的秘密警察势力进行管理的,通过虚假的挑衅行动以掩盖他们的活动,目的是为了防止被他们自己的政府、同领地和他们行为的受害者们所察觉。政府的精神病学家们开发了一套意识控制的方法。

地球是一颗‘犹太区’星球,这是由一场‘星际大屠杀’造成的后果,一些现在-成为者被判决发配到地球的原因有:

1)他们表现得太过邪恶失常或堕落,以至于无法对任何一个文明起作用,无论那个文明有多么的腐化或落后。

2)或者,他们对于社会、经济和政治的等级制度是一种革命性的威胁,这种等级制度一直都由‘旧帝国’精心设立并残酷地强迫运作。生物的躯体是指定作为‘旧帝国’等级体制中最低级的实体次序而专门设计的。当一个现在-成为者被送到地球,然后通过骗局或强迫的方式进入并操作一具生物躯体之后,他们实际上已经进入了一座监狱中的监狱。

4)‘旧帝国’为了达到永久性地、不可逆转地摆脱此类‘贱民’的效果,每一个现在-成为者的永恒身份、记忆和能力都被强制清除了。这种‘终极方案’由‘旧帝国’操控的心理变态的犯罪者们去构思和执行。

在最近显示的第二次世界大战中,德国建造了大量的集中营,并大规模地灭绝‘贱民’。同样,在‘旧帝国’同一类型可憎的懦夫的鼓动之下,地球上的现在-成为者们成了被根除灵魂并永久呆在脆弱的生物体中遭受奴役的受害者。

在地球上友爱的、富有创造力的同狱囚犯们,一直持续地遭受着来自‘旧帝国’监狱运营者——刽子手和精神错乱者的折磨。这个所谓的地球‘文明’,从无用的金字塔时代到原子能浩劫时期,已经浪费了大量的自然资源,对情报信息的不正当使用,对这个行星上的每一个现在-成为者所具有的精神本质进行公然的压制。

如果同领地将飞船派遣到这个宇宙的每一个角落去寻找‘地狱’,那么他们的探索应该终止在地球上。对任何人遭遇来说,还有什么比清除掉本属于自己精神本质的意识、身份、才能和记忆更残忍的处罚呢?

同领地迄今也仍未能挽救3000名远征军队员的现在-成为者,他们已经被强迫寄居在地球的生物体中。在过去的8000年里,我们已经辨认出并追踪到了其中的大多数成员。然而,我们与他们之间进行过的沟通尝试,通常都毫无效果,因为他们已经无法回忆起他们真实的身份了。

大多数同领地军队成员沿着从印度到西方文明的大体发展走向,进入中东,然后到了卡尔迪亚王国和巴比伦,进入埃及,经由亚该亚,希腊,罗马,进入欧洲,来到西半球,然后分散在世界各地。

在地球丧失的军队成员以及其他一些现在-成为者们,对同领地来说都可以是颇有价值的公民,这并不包括那些品性不端的罪犯或堕落者。不幸的是,目前还没有可行的方法去解放地球上的这些现在-成为者。
因此,除非可以配置适当的资源去定位并摧毁‘旧帝国’强制滤网和失忆处理的机器,开发一种可以恢复一个现在-成为者记忆的治疗方法,否则,在这样的时刻到来之前,依照普遍的逻辑,根据同领地的官方政策,避免与地球的现在-成为者居民接触,是更安全和更明智的做法。”


第九章
重要事件的时间表

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


针对这次会谈内容,我进行了一些手写的记录,因为艾罗提供了大量的日期和名称,如果不把它们写在纸上,我不可能全都记住。我不经常做记录,可是在这次课程中,我认为有必要准确无误地获得她传达给我的信息。然而,我发现做记录的过程却增加了我集中注意力接收艾罗信息的难度。我不时地因自己书写的问题而心烦意乱,以至于错过了她的思维线索,所以,我不得不请求她再‘重复’几次。

艾罗继续同小行星带太空站的通讯官进行着交流,这些大量的信息是她从那里接收到的。由于艾罗是一名同领地的军官 / 飞行员 / 工程师,而不是一名历史学家,因此,她只能从同领地远征军的其他官员实施的勘测任务记录中,获得这些信息。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 27,第1段会谈


“地球的真实历史是非常古怪的,它太没有条理了,以至于对地球上任何企图调查究竟它的人来说,都是难以置信的。无数至关重要的信息都已下落不明,不知所谓的遗迹和神话的被大量聚集,肆意武断地引进。地球自身反复无常的特性,周期性地保护、淹没、混淆并粉碎了物理的证据。

这些影响因素综合了失忆症和催眠后的暗示,以及虚华的外表和隐蔽的操纵,使得重建的真实起源和地球文明史几乎难以辨认。任何一个调查者,无论他多么有才华,都注定要深陷在一个不确定的假设、不可行的假说泥潭和永久的谜团中。

虽然我参加过几次由我们任务指挥中心人员做的简要讲解活动,内容是关于过去几百年内地球的一般背景介绍。可是这一次,我将主要依赖被我们袭击的‘旧帝国’行星总部获取的战利品中所搜集的数据,而且自那时起,同领地远征军已经对地球上事件的总体进展进行了追踪。

正如我所说,在某些事例上,同领地选择对一些发生在地球上的特殊事件进行干预,以确保我们长期发展的计划取得成功。虽然同领地对地球和这座星球的居民没有什么兴趣,不过,这样做符合我们的利益,因为这样可以确保地球的资源不被摧毁或糟蹋。为此,同领地一次又一次地派遣了一些可靠的军官来到地球,执行勘测和收集信息的任务。

无论如何,下面出现的日期和时间都是从积累的同领地数据档案信息中所推知的——至少是那些我可以通过太空站通讯中心所访问到的内容。

公元前208000年 --

‘旧帝国’将总部设置在银河系大熊座(北斗七星)的‘尾部星群’附近之一。在这之前,‘旧帝国’侵略军使用原子能武器征服了这一区域。在放射能消退以及清理与修复的工作完成之后,那里接收了来自于另一个河外星系的移民。那些生命所建立的社会一直延续到10000年前,直到被同领地接替。

虽然现在已经不由它(旧帝国)直接控制了,不过,最近的地球文明变得与那个文明的面貌非常类似,尤其是在运输工具的外观和技术方面,比如飞机,火车,船舶,消防车和小汽车,正如你们认为‘时髦的’或‘前卫的’建筑风格,都在效仿‘旧帝国’主要城市的建筑构思。

公元前75000以前 --

同领地的记录包含了很少量关于亚特兰大和利莫里亚大陆板块上的文明,只记录了它们的确在地球上几乎同一时期共存过,显然,两种文明都是由电子的、太空歌剧文化的残存者们建立的,他们为了逃离政治或宗教的迫害而从家乡的行星系统逃到这里。

同领地知道一个‘旧帝国’持续了很长时间的法令,即禁止未被授权的行星殖民化行为,因此,他们(两个文明)的毁灭是由于警察或军队对殖民者的追击和破坏造成的,虽然这似乎是一种可能性推测,可是并没有确凿的存在证据可以解释两个纯粹的电子文明彻底的毁灭与消失。

另一个可能是,在苏门答腊岛和爪哇的喀拉喀托以及多巴湖水底大规模的火山喷发,导致了利莫里亚的毁灭。洪水爆发淹没了所有的土地,包括那些最高的山峰。利莫里亚人是中华民族最早的祖先,澳大利亚和北部的海洋区域是利莫里亚文明的中心,也是东方人的起源地。两个文明都拥有电子学,飞行学和类似的太空歌剧文化的技术。

显然,火山喷发排放出如此庞大数量的熔岩,使地壳以下变成真空,致使大面积的大陆板块下沉到海底,由这两个文明占领的大陆地区被火山所覆盖,然后被淹没,因此,除了地球上各个文明所流传的一个全球性洪水的传说,以及作为东方种族和文明的一类幸存者,几乎没留下什么曾经存在文明的证据。
这种庞大的火山喷发使有毒气体环绕填充了整个地球大气的平流层。通常,这些火山排放的废物很容易因大气污染而造成‘40天又40夜’的降雨,以及长时期范围内,因太阳的辐射被反射回太空而造成全球变冷。当然,这样的事件会导致一个冰河时代,物种的灭绝以及许多其它相对长期的变化一直持续了几千年。

对于地球自身,种种自然发生的全球性灾难事件,表明它并不是一颗适合现在-成为者居住的星球。此外,也有一些由现在-成为者们造成的全球性灾难,比如,恐龙在7千万年前被灭绝的事件,那次毁灭是在星际间的冲突时期发生的,地球和其它临近的行星和卫星使用了原子能武器进行过轰击作战。原子弹爆炸引起的大气辐射微尘,非常象火山喷发的情形。自那时起,大多数处于银河系这一区域的星球,已经变成了无法居住的不毛之地。

之所以地球的状况并不令人满意,有许多其它的原因:强重力场和致密的大气,洪水,地震,火山,磁极转换,大陆漂移,流星撞击,大气和气候的变化,仅举几例而已。什么样持久的文明能在如此的环境下发展出任何先进的文化呢?

此外,地球是一颗银河系的小型‘边缘行星’,这一位置孤立了地球与更多集中存在并朝向银河系中心的行星文明之间的关系。这些显而易见的事实,使地球更适合被用作动物园或植物园使用,或者现在利用它作为监狱——但仅此而已。

公元前30000年以前 --

由于一些现在-成为者被判决为‘贱民’,意思是罪犯或不墨守成规的人,地球开始被用作倾倒的场所和监狱。这些现在-成为者们遭到捕获后,被封装入电子陷阱中,并从‘旧帝国’的各个部分运送至地球。地下的‘失忆处理控制站’曾经设置在火星和地球上,还有非洲的鲁文佐里山脉,在欧洲,有葡萄牙的比利牛斯山脉,以及蒙古的大草原。

当现在-成为者在离开死亡躯体的那一刻,这些电子监控点,能够制造出可以探测和捕获现在-成为者的强制滤网,紧接着,他们被极强的电力洗脑,目的是为了维持地球人口永久的失忆状态。对于更进一步的人口控制设置,则通过远程电子思想控制机械装置实现。这些控制站仍然在运行着,甚至对于同领地来说,它们还是极难被攻击和破坏的,虽然直到稍后的日子来临之前,同领地不会在这一区域部署重要的军事力量。

金字塔模式的文明,是作为地球现在-成为者监狱系统的组成部分而被特意创造的。金字塔被称为是‘智慧’的象征。然而,在地球上‘旧帝国’的‘智慧’,是为了有意精心去经营那种由物质、价值和神秘所组成的失忆‘陷阱’的才能,这些都是与一个非物质或无企图的不朽的精神生命背道而驰的。一个现在-成为者‘是’独有的,因为它认为它‘是’。

物质代表这个有形的宇宙,包含的对象有恒星,行星,气体,液体,能量粒子与茶杯。这些金字塔结构是非常非常坚固的物体,正如所有由‘旧帝国’创造的结构一样,由笨重的、结实的、密集的、坚固的物体创造了永恒的幻觉。尸体裹着亚麻布在树脂中浸泡,放置在刻制的金棺中,在其中摆放着带有神秘符号的现世财宝,并以此来创造一个永生的幻觉。然而,代表稠密而厚重有形宇宙的符号,恰恰是与一个现在-成为者相悖的事物,因为,一个现在-成为者即没有质量也没有时间,物体不会永远存在,而现在-成为者却‘是’永恒的。

价值:虚假的内涵阻止了对真理的认知,金字塔模式的地球文明是一个捏造的幻觉,他们只不过是由‘旧帝国’大毒蛇兄弟会的神秘仪式所缔造的‘虚假文明’。为了进一步加强对地球监狱系统中囚犯们的记忆缺失处理机制,虚假的内涵被捏造出来,并创造了一种伪造社会的幻觉。

神秘是由谎言和半真半假的事物所构建的,谎言之所以持久不衰,是因为它们改变了包含确切日期,地点和事件的事实。当真相被众所周知时,任何谎言都将不复存在,如果确切的真相被揭示,那么它就不再神秘了。

所有地球上金字塔模式的文明,都被精心设计了一层层的谎言,同时巧妙地结合了一些事实。‘旧帝国’的神职人员结合了复杂的数学与太空歌剧技术,伴随着戏剧性的隐喻和符号象征。所有这些都以美学和神秘学作为具有魅力的诱饵,对事实进行彻底的捏造。

错中复杂的仪式,天文的路线图,神秘的祭典,大量的古迹,不可思议的建筑,艺术性表现的象形文字,以及人兽一身的‘神’,这些都被设计去创造一种令地球现在-成为者监狱人口无法解释的神秘事物。这些神秘事物使那些被捕获的现在-成为者们转移了对事实的注意力,实际上他们是从遥远的那颗家乡星球遭到失忆缺失处理,并监禁在此的现在-成为者。

这个真相是,每一个地球上的现在-成为者,都曾经来自于其它行星系统。没有任何一个地球人是‘本土’居民,人类并没有在地球上‘进化’过。

在过去,埃及社会由那些监狱的管理员或神职人员所运作,通过轮流对法老王进行操纵,以控制财政,并保持囚犯的人口在肉体和精神上受奴役的状态。在近代以来,虽然神职人员已经改变了,但是功能是一样的。然而,现在的神职人员也是囚犯中的一员。

神秘的事物加固了这所监狱的围墙,‘旧帝国’害怕地球上的现在-成为者们可能会恢复他们的记忆,因此,‘旧帝国’神职人员的首要功能,是防止地球的现在-成为者回忆起他们是谁,是怎样来到地球的,以及他们从哪里来。

‘旧帝国’监狱系统的运作者们以及他们的上司,并不想让现在-成为者们回忆起究竟是谁谋杀并捕获了他们,然后偷走了他们全部的所有物,把他们发配到地球上使其记忆缺失,并被定罪为永远监禁。

想象一下,若全部的囚犯突然回忆起他们有权利获得自由,可能会发生什么!如果他们突然意识到自己一直被错误地关押着,并因此起身反抗狱卒,那么,可能会发生什么呢?

他们害怕透露任何看起来像是囚犯们家乡星球的文明。一个形体,一件衣服,一个符号,一架飞船,一种先进的电子设备,或任何其它来自一个家乡星球文明的残迹,都有可能‘提醒’这个人,并重新唤起他的记忆。

由‘旧帝国’开发了数百万年用于诱捕与奴役的尖端技术,为这所监狱创造了一种伪装,而且一直运用在地球的现在-成为者身上。这些伪装曾在地球上同时被安置,每一段细枝末节都是这个监狱系统不可分割的一部分。

这样的伪装包括一种充满迷惑和双言巧语的宗教信仰。每一个金字塔模式的文明都利用这种伪装作为一项控制机制,使人们在武力、恐惧和无知的庇护之下遭受奴役。难以辨认无关信息的混淆状态、几何图案、数学计算、天文路线图,这些都是基于实体性质的虚假灵性,而不是不朽的灵魂,目的是为了混淆和迷惑地球上的现在-成为者。

在一个人死后,他们的尸体与其在地球上拥有的财产一并下葬,用亚麻布包裹,以维持他们死后的‘灵魂’或‘阴灵’继续生存。一个现在-成为者并不是‘拥有’灵魂,一个现在-成为者就是一个灵魂。

在一个现在-成为者的家乡星球上,当这个人死亡或离开身体的时候,他们所拥有的具体财产既没有丢失,也没有遭偷窃或遗忘,一个现在-成为者能够返回并认领他的所有物。然而,一旦这个现在-成为者患了健忘症,那么他们将无法回忆起曾拥有过任何的财产。所以,那些政府,保险公司,银行,家庭成员和其他贪婪的人们可以挑选他们清白的财产,不必担心遭到死者的惩罚。

制造这些虚假内涵的原因,是为了灌输这样一种观念,一个现在-成为者并不是一个灵魂,而是一种有形的物体!这是一个谎言,它是一个捕获现在-成为者的陷阱。

数不尽的人们已经花费了无数的时间,试图解开埃及以及其它‘旧帝国’文明的拼图游戏谜团,它们是由那些并不相匹配的断片所制造的难解谜题。一个问题却声明了它自己的答案,因此,埃及和其它金字塔模式文明的神秘之处是什么呢?还是神秘!

大约公元前15000年 --

‘旧帝国’曾经管理的水利采矿作业工程,坐落在今日玻利维亚的安第斯山脉,靠近的的喀喀湖(锡矿石之湖),包括在蒂亚瓦纳科以Kalasasaya神庙闻名的大规模石刻建筑物,它的‘太阳之门’高达海拔14000英尺(4268米)。

公元前11600年 --

地球的极轴移位到了海洋区域,由于地球极地的浮冰融化,导致海平面上升并淹没了大量的大陆板块,因此上一个冰河时代突然间结束了。最后残余的亚特兰蒂斯与利莫里亚的遗迹被海水所覆盖。由于磁极发生了转换,致使在美州、澳洲和北极地区的动物大规模地灭绝了。

公元前10450年 --

一位名叫托特(Thoth)的‘旧帝国’现在-成为者,曾经策划建造了吉萨的金字塔群,正如当年看到的那样,金字塔4条汇聚的‘空中轴线’精确地指向了‘旧帝国’的关键星球。

比较而言,正如早期尼罗河被看作天空中银河的代表一样,吉萨金字塔群的排列阵型与天空中看到的猎户座排列模式也完全一致。

公元前10400年 --

根据地球的历史学家希罗多德对毁灭的亚特兰蒂斯文明的记载,所提及到那个社会里电子科技和其它方面的技术,埋在了(狮身人面像)斯芬克斯两只脚爪下方的地下室中。这位希腊的史学家写道,他是从一些信奉阿奴(Anu)的神职人员朋友那里获知的这些史料,阿奴在Heliopolis的埃及城市中,是苏美尔人的神。然而,‘旧帝国’监狱系统的管理者们,不可能允许任何一种文明的遗迹被完好无缺地保留下来。

公元前8212年 --

《吠陀经》或《吠陀经》赞美诗,是以一种宗教圣歌的形式被引进到地球的社会中的,它们经过一代又一代地记忆并口口相传。‘写给启蒙儿童的赞美诗’包括一种被称为‘有形宇宙的循环’的概念:在某空间里,能量与物质的创造、发展、保持、衰落和死亡或毁灭,这些循环过程制造了时间。同一套赞美诗描述了‘进化的原理’,它是一个巨大的包含很多精神真理的知识体系。不幸的是,它一直被人们错误地评价,被那些神职人员的谎言与颠倒的事实所修改,这是一种陷阱,用来防止任何人去运用智慧,并发现一条路,以逃离这个监狱星球。

公元前8050年 --

在这个银河系中,‘旧帝国’执政大本营星球的毁灭,标志着‘旧帝国’作为一个政治实体存在于银河系的终结。然而,让同领地完全征服‘旧帝国’广大的范围,还需要数千年的时间。因此,来自于‘旧帝国’的政治、经济和文化体系的惯性运作,还会持续实行一段时间。

尽管如此,在太阳系地球上的残余‘旧帝国’太空舰队,还是于公元后1230年被最终消灭了。除了操控地球监狱运作的‘旧帝国’工作者们,还有其他一些从‘旧帝国’来到地球的人,由于自从他们被同领地军队打败后,地球已经不再受‘旧帝国’的控制,因此,具有把关职能的警察势力也随之消失了,他们曾经负责控制那些为了个人获利或其它罪恶的原因,而来到地球上开发资源的军事叛徒、太空海盗、采矿者、商人和企业家。

举例来说,在地球史上,根据犹太人对《圣经》创世纪中第六章‘拿非利人’ (Nephilim)的描写中,记述了拿非利人的起源:

‘当人在世上多起来,又生女儿的时候,神的儿子们看见人的女子美貌,就随意挑选,娶来为妻。 

那时候有伟人在地上,后来神的儿子们和人的女子们交合生子,那就是上古英武有名的人。 ’

那些撰写《旧约全书》的古代犹太人都曾是奴隶、牧民和收集者。任何一种现代科技,甚至一个简单的手电筒,都会令他们感到惊讶和奇迹般的不可思议。他们把任何无法解释的现象或技术都归咎于‘神’的杰作,不幸的是,这种行为反应一直普遍地存在于那些被给予记忆缺失处理的现在-成为者身上,而且他们无法回忆起自己的经历、受过的教育、技术、性格或身份。

显然,如果他们是男性,而且与地球上的女子配对,那么,他们就不是‘神的儿子’。他们只是为了利用‘旧帝国’政局的利益而寄居在生物体中的现在-成为者,或者只是为了沉迷于身体感觉而已。他们跨越了警察和税务机构的限制,在地球上建立了自己的小块殖民地。

巧合的是,在‘旧帝国’中,现在-成为者遭受最严重的罪行之一,是违反收入税的法规,收入税既被用于一种奴役的机制,也是‘旧帝国’的一项惩罚,任何现在-成为者‘贱民’的纳税报告出现的丝毫错误,都会遭至在地球关押的判罚。

公元前6850年 --

‘旧帝国’在地球上建立了其它金字塔模式的文明,设立在巴比伦,埃及,中国和中美洲。为了这些虚假的文明,在美索不达米亚地区提供了服务机构,那里有通讯站,太空港口,以及采石场的作业设施。

卜塔(Ptah)这个名字曾经给了第一个在地球的‘旧帝国’管理者继承人,这些管理者在地球上以‘神的’统治者的形象自居。

卜塔的重要意义可以这样理解,‘埃及’(Egypt)这一词,来自于一段希腊人不道德的习语‘Het-Ka-Ptah,’或‘卜塔的神府’。卜塔的别名也被称作‘开发者’,他是一名建筑工程师,他的高级祭司曾被授予‘伟大的工匠领袖’称号。

卜塔也是埃及的转世之神,他创办了‘开口仪式’,由祭司们在葬礼中表演从尸体中‘释放灵魂’。当然,这些‘灵魂’被释放的同时就被捕获了,然后给予记忆缺失的处理,再次返回到地球上。

那些在地球上跟随卜塔的所谓‘神的’统治者们,被埃及人称为‘Ntr’,意思是‘护卫者或看守人’。他们的符号象征是大毒蛇,或龙,代表了一个来自‘旧帝国’神秘教会的术士,叫做‘大毒蛇兄弟会’。

‘旧帝国’的工程师们使用的是高聚光波的切割工具,可以迅速挖掘和切开石块,为了举起和搬运每块重达百吨或千吨的石块,他们还使用了势能屏蔽技术和太空飞船。相对这一银河区域中的各种天体,其中某些地面建筑的布置,被发现具有测量学或天文学的意义。

与大多数行星的建筑标准相比较,这些建筑物显得简陋和不切实际。作为一名同领地的工程师,我可以证明,在一颗同领地行星上,像这样临时代替的建筑物,绝对不会通过验收的检查。在这些金字塔模式的文明中所使用的此类石块,至今还可以在中东和其它地区的一些采石场中,看到部分被开凿过的痕迹。
这些建筑中的大部分都是草率建造的‘小道具’,很像电影荧幕中出现的西部城镇的虚华外表。它们似乎是真实的,而且好像具有某些使用价值,可是,它们并没有任何价值,它们一点用处都没有。金字塔群和其它所有‘旧帝国’建立的石碑建筑,都可以被称为‘神秘古迹’。究竟是什么原因可以使任何人去浪费如此多的资源,建造这么多无用的建筑物呢?是为了创造一个神秘的幻觉。

这个事件的事实是,每一个‘神的统治者’都是现在-成为者,他们作为‘旧帝国’的工作者为之服务。他们当然不是‘神圣的’,尽管他们是现在-成为者。

公元前6248年 --

同领地太空指挥部与这个太阳系‘旧帝国’幸存的残余太空舰队之间,持续了长达7500年的战争。战争开始时,3000名同领地远征军的官员和其他队员在喜马拉雅山脉建立了一处基地。由于当时同领地没有意识到‘旧帝国’已将地球运作成了一颗监狱行星,因此基地并没有加强防范措施。

这一处同领地的基地被运作在地球所在的太阳系中‘旧帝国’太空军队攻击并摧毁了, 同领地军队的现在成为者们被俘,并带到了火星上,给予记忆缺失处理后,发送回地球寄居在生物体中,他们目前仍然在地球上。

公元前5965年 --

由于针对同领地部队在这个太阳系的失踪进行的一系列调查,导致‘旧帝国’在火星和其它区域的基地被发现了。同领地占领了金星,并将其作为对抗‘旧帝国’太空军队的防御阵地。同领地远征军同样监测了金星的生物形式,它具有非常致密、炎热和浓厚的硫酸云大气,在地球上有少数生物形式可以耐受象金星那样的大气环境。

同领地同样在地球所在的太阳系中建立了秘密的基地或太空站,这个太阳系中有一颗行星曾被破坏过——(现在的)小行星带,它提供了非常有利用价值的弱重力平台,可以用来起飞或降落太空飞船,它被用作银河系与河外星系之间的一种‘银河跳板’。在银河系的这一端,没有任何行星能够适合作为一个恰当的银河输入点,进行运输和其它船只的传入,而这颗破碎的行星却成了一座非常理想的太空站。作为我们与‘旧帝国’交战的结果之一,现在,这个太阳系的此区域,已经变成了同领地一处有价值的领土。

公元前3450年 – 3100年 --

‘旧帝国’的工作者或‘绝世之神’对地球事件的参与进程,在这一时期被同领地势力中断了。他们被迫用人类的统治取代了他们自己,第一个人类法老王王朝,开始于一位法老的统治,巧合的是,这一任法老的名字叫做‘人类’(MEN),他统一了上埃及和下埃及。他建立了首都,叫做Men-Nefer,在埃及的‘人类的美景’。这一幕开始于10个人类法老王当中的第一任继承人,也是在‘旧帝国’执政之下,混乱了350年之后所发生的事件。

公元前3200年 --

正如我前面提到的,在这一时期,地球遭到了来自同领地与‘旧帝国’势力之间的战争侵袭。当然,这对那些地球的考古学家或历史学家们没有任何意义,因为,这段埃及时期是太空歌剧时代。由于地球的历史学家们记忆缺失的缘故,所以,依他们的设想,这仅仅是一段宗教时期而已。

此外,由于这段时期在地球上安置的科技和文明都被‘预包装’过,因此,他们并没有在地球‘进化’过。当然,在地球上没有任何的进化跃迁证据,能够导致复杂的数学、语言、写作、宗教、建筑、文化传统出现在埃及,或出现在任何金字塔模式的文明中。这些文化,完善了所有种族的身体形态,头发风格,面部化妆,礼节,道德准则等等,刚好都‘呈现出’完整的集成包装。

一些实体的证据表明,所有来自同领地或‘旧帝国’的势力,或其它外星活动的参与,都已经被谨慎地‘清理干净’了,以免产生怀疑。‘旧帝国’势力不希望地球的现在-成为者们怀疑他们曾经遭到捕获,并转移到地球进行洗脑。

因此,地球的历史学家们继续假设,埃及的神职人员们不应该拥有‘放射光线枪支’或其它‘旧帝国’的科技,而且,他们猜想地球上什么都没有发生过,除了某些神职人员们到处说‘阿门’而已,当今的基督徒们仍然在延用这一词。

公元前3172年 --

在安第斯山脉,庞大无法估计的坐标栅格布局,以及巨大的‘神灵们’的建筑物,都连接着关键的矿址,比如,蒂亚瓦纳科、库斯科、基多、Ollantaytambo、Machupiccu和帕恰卡马克,这些地点曾被用做开采稀有金属,包括制造青铜所使用的锡矿。金属曾经是属于‘神灵’的财产,那是当然的了。

由于‘旧帝国’势力与同领地之间战争的缘故,在那一段时期里,采矿的创业者种类繁多。这些矿工对他们自己曾进行过少许的雕刻,他们戴着采矿用的头盔。在Kalasasaya神庙中,塌陷庭院的Ponce Stela石碑雕塑,粗线条地描绘了一个采石工人,他使用的是放置在套囊中的电子光波石头切割工具,以及雕刻用的工具。

‘旧帝国’同样在遍及这个星系的行星上,很长一段时期里一直保持采矿的作业。现在,地球上的矿物资源已经是同领地的所有物了。

公元前2450年 --

靠近开罗的‘巨型’金字塔以及金字塔群建设完工,在那里可以看到由‘旧帝国’管理者创建的碑文。碑文中讲到,金字塔是在卜塔的儿子‘托特’(Thoth)指挥下完成的。当然,绝对没有任何一任国王被埋在下方的墓室中,因为这些金字塔从来都没有被有意用作埋葬的墓室使用。

正如在太空中看到的那样,大金字塔的位置精确地坐落在地球所有大陆板块的正中心,显然,这类精确的测量需要从一个航空的视角,在太空对地球的大陆板块进行观察才行,否则,对测量地球大陆中心的纯粹数学的计算是无法办到的。

在金字塔内部所构建的柱身的布局与一些天体的排列一致,它们是猎户座、大犬座,而且尤其是天狼星。这些柱身同样排列对应了北斗七星的位置,曾经的‘旧帝国’大本营星球就在那里,同样包括Ainitak,Alpha Draconis(天龙座α)和小熊座。这些星球中的每一颗星星,都是‘旧帝国’向地球运送并倾倒现在-成为者的关键系统,因为这些人是多余的货物。

所有吉萨高地金字塔布局的目的,是为了在旧帝国范围内,创造一种能反映太阳系中地球和某些星系的‘镜像’。

公元前2181年 --

MIN(米恩)成为埃及保佑物产丰饶之神,这位现在-成为者同样作为希腊的神,以‘潘’(Pan)而得名。米恩或潘,是一位曾经设法逃离‘旧帝国’记忆缺失处理系统的现在-成为者。

公元前2160年 - 2040年 --

同领地与‘旧帝国’势力之间加强斗争的结果之一是,‘神的统治者们’的控制权在这段期间被破坏了。他们最终离开了埃及,返回到‘老天爷’那去了,也可以说是失败了。人类的法老王接手了统治者的角色。第一任人类法老王将埃及的首都从孟菲斯迁移到了‘赫拉克雷奥波利斯’(Herakleopolis)。

公元前1500年 --

这是埃及高级神职人员们记载的亚特兰蒂斯毁灭的日子,其中记录了在赫利奥波利斯(Heliopolis)的森诺费斯(Psenophis),以及塞易斯(Sais)的Sonchis(松契斯)和希腊的圣人-梭伦。阿奴(Anu)的神职人员们的记录表明,在这一时期,地中海区域曾遭到‘亚特兰’人的侵入,这些人并不是来自于古代70000年前存在大西洋中的亚特兰大大陆。

他们来自于克里特文明,都是从克里特岛逃亡的难民,(古代的)Thera山脉的火山喷发和海啸,毁灭了他们的文明。

柏拉图所提到的亚特兰蒂斯,借用了古希腊哲学家梭伦的著作,这些是梭伦曾经从埃及的神职人员那里获得的信息,那些人称亚特兰蒂斯为‘Kepchu’, 这恰好也是埃及人对克里特人的称呼。其中一些从克里特火山喷发灾难中逃出的幸存者们,曾向埃及人寻求过帮助,因为在那段时期,他们曾是地中海区域中其它唯一拥有高级文明的人。

公元前1351年 - 1337年 --

在埃及被称为‘阿蒙的祭司们’的神秘信徒,也被叫做‘旧帝国’的大毒蛇兄弟会,同领地远征军对他们主动地展开了一次宗教战争。在这段时期,法老王-阿肯那顿废止了阿蒙的神职人员活动,并且从埃及的底比斯迁都到了新址-Amarna,它恰好准确地坐落在埃及测地学的中心。可是,这次为了推翻‘旧帝国’宗教控制的秘密计划,很快就被破坏了。

公元前1193年 --

在近东和亚该亚地区,希腊人与特洛伊人曾经为了争夺霸权而战,导致特洛伊在最后一次特洛伊战争中被毁灭。于此同时,在太阳系的两股势力,为了争夺围绕地球的‘太空站’控制权,也展开了斗争。在那段时期的300年中,虽然‘旧帝国’势力非常激烈地对抗着同领地的军队,然而,并没有持续很长时间,因为这种反抗同领地的做法是徒劳的。

公元前850年 --

荷马,希腊的盲诗人,通过借用和修改早期原始资料,撰写了一些‘神灵们’的故事,资料来源有吠陀梵语的、苏美尔语的、巴比伦语的原文,以及埃及的神秘学。他的诗集,和许多其它古代世界的‘神话’一样,准确地描述了那些不需要生物躯体就可以摆脱‘旧帝国’记忆缺失操作的现在-成为者们。

公元前700年 --

《吠陀经》赞美诗被首次翻译成希腊语,这是西方文明文化革命的开始,从野蛮的部落文明转为更合理的民主共和管理方式。

公元前638年 - 559年 --

梭伦,一位来自希腊的智者,记录了亚特兰蒂斯的存在,这些是他在埃及从一同进行学习的‘旧帝国’神职人员那里获知的信息,其中有赫利奥波利斯(Heliopolis)的森诺费斯(Psenophis)以及塞易斯(Sais)的Sonchis(松契斯)。
公元前630年 --

琐罗亚斯德在波斯国围绕着一位被称为阿胡拉·马兹达的现在-成为者,创建了宗教活动。这又是同领地工作者们设置的另一个不断增多的‘一神论’众神之一,目的是为了取代‘旧帝国’神灵们的华丽服饰。

公元前604年 --

老子,一位哲学家,撰写了一本小册子,叫做‘道’(The Way),这是一位伟大的智者,他克服了‘旧帝国’失忆处理 / 催眠机制的影响,并且逃离了地球。他对一个现在-成为者本性的理解一定已经非常彻底,才能达到如此的境界。

根据共有的传说描述,他作为一个人类的形态出现的最后一生,是在中国的一座小村庄里度过的。他沉思了自己生命的本质,像释迦摩尼一样,他勇敢地面对了自我的观念与生活。通过这样的做法,他恢复了某些他自己的记忆、才能和不朽的状态。

作为一位老人的他,决定离开村庄,到森林里脱离肉身。而村子的门卫却拦住了他,请求他在临离开前写下个人的哲学思想。这里有一小段忠言,是他留下的关于使他重新发现自我精神本质的‘道’。

‘注视它的人,将无法看到它;
收听它的人,将无法听到它;
盲目摸索它的人,将无法领会它。
虚无、静止的运动本源、无限的精神本质,是生命之源。
精神是自我。

虽然,几面墙壁构建并支撑着一间屋子,但是,其内部的空间才是最重要的。
虽然罐子由泥土加工而成,但是,其内部形成的空间才是最实用的。
正如一切的形态源自于精神的虚无一样,行为是由无中生有的力量促成的。

一个人之所以遭受着巨大的痛苦,是因为他拥有一个身体,如果没有身体,
他还能遭受什么呢?当一个人在乎自己的身体超越了他自己的精神的时候,    他就会变成这个躯体,并且放纵了其精神之道。

自我、精神,创造了幻觉。
一个人产生的错觉,使他认为现实并非是一种幻觉。一个能够创造比现实更加真实的幻觉的人,可以遵循精神的道路,发现天之道。’
  
公元前593年 --

犹太人撰写的《圣经》创世纪中的故事,描述了‘天使们’或‘神的儿子们’与地球上的女子配对,并生下了他们的后代。他们很可能是‘旧帝国’的背叛者,也可能是来自河外星系的太空掠夺者或商人,他们来到地球盗取资源或走私毒品。

同领地已经注意到,许多到地球的访客都来自临近的行星和星系,可是,他们很少停下来定居在这里。如果不是迫不得已这样做,那么,什么样的人才会选择一个监狱行星生活下去呢?

同一书中还记录了关于一位名叫‘以西结’的人,他目睹了一架飞船或飞行器降落到新巴比伦王国的哈布尔河附近。他使用了非常古老的学术语言对这架飞行器进行了描述,非常准确地记述了一架‘旧帝国’的飞碟或侦察机,它的形态类似于曾生活在喜马拉雅山脚下的人们所见到的‘Vimana’。

他们在《圣经》创世纪的故事中还提到了‘耶和华’有计划地使肉身在地球上存活了120年。生物躯体在大多数‘第12太阳类型,第7等级’的行星上,通常被设计的平均持续寿命约为150年,而地球上的人类躯体仅仅可以维持一半的时间,对此,我们猜想,由于监狱管理者们已经改变了地球人类生物体的构成原料,使他们死亡得更加频繁,从而让寄居在躯体中的现在-成为者们更加频繁地通过记忆缺失机制的处理。

应当指出的是,大量的《〈圣经〉旧约》内容都是在巴比伦遭奴役的犹太人被囚禁期间所撰写的,而且受到了‘旧帝国’神职人员们非常严密的控制。这本书引入了一种伪造意义的时间概念,以及一种虚假的天地万物起源观念。

大毒蛇的图案是‘旧帝国’的象征,它出现在他们有关万物起源的故事中,或者希腊人所说的‘创世纪’中,导致神性毁灭的第一代人类,成了亚当和夏娃隐喻性的代表。

《〈圣经〉旧约》很明显已经被‘旧帝国’势力影响了,它提供了关于现在-成为者被引诱进入地球上的生物躯体中的细节描述。这本书中还记述了许多‘旧帝国’的洗脑活动,包括植入虚假的记忆、谎言、迷信、命令,目的是为了使现在-成为者们忘记所有骗局和陷阱的样式,并将它们保留在地球上。最重要的是,它摧毁了人类是不朽的精神生命这一认知。

公元前580年 --

特尔斐的祭司神殿是一种由许多庙宇所组成网络的其中之一,每一座神殿都是一个通讯中心。‘旧帝国’的神职人员们为每一座神殿指定了一个本地‘神灵’。从底比斯的首都,穿越地中海,至最北端一直延伸到波罗的海,这一区域网络中的每一座神殿的位置在纬度上都精确地间隔了5度。

这些神殿服务于其它的表现形式,作为栅格出现的房屋电子信标——‘翁法洛斯石器’(Omphalos Stones)。这些神殿栅格网络的排列地点,只能够从地球上方几英里处观察到。当神职人员们遭到驱逐时,那些最初的电子通讯网络信标发射机被禁用了,取而代之的是一些石刻制品。

‘旧帝国’神职人员的符号是一只巨蟒,龙或大毒蛇,在特尔斐曾经被称为‘地球之龙’,它一向在雕刻品和瓶饰图案中以一只大毒蛇的形态体现出来。

在希腊神话中,守卫特尔斐神殿里‘翁法洛斯石器’的人,叫‘皮同’(Python),她是一个现在-成为者,被一位称为阿波罗的‘神’战胜,并埋葬在翁法洛斯石器之下。这是又一个由某个‘神’在另一个神灵的墓穴上建立自己庙宇的例子,也是同领地探测并终止‘旧帝国’地球神殿网络的一种非常精确而委婉的说法。这是针对在太阳系地球的‘旧帝国’势力所给予致命打击的事件之一。

公元前559年 --

派遣到地球的一支同领地远征军,探测并定位了一位曾经在公元前5965失踪的同领地军队指挥官。他在这段时期作为波斯国国王‘居鲁士二世’的肉身存在。

居鲁士二世,以及从印度到地球上一路行进跟随他的人们所组成的军队,使用了一种独特的组织体系,在某种程度上,这使他们在那个年代建立了地球史上最庞大的帝国。

同领地搜寻特遣队在地球上已经花了几千年时间四处寻找丢失的军队,这支搜寻队由900名同领地官员组成,划分成分别由300名队员组成的3组分队。其中一组负责陆地的搜寻工作,另一组针对海洋区域,剩下的一组则围绕在地球周围的外太空进行搜寻。在许多来自于不同人类文明的记载中,都提到了他们活动,当然,那些都曾是人们无法理解的事情。

同领地搜寻特遣队设计了各种电子的探测仪器,用来追踪军队中每一个失踪队员的电子信号签名或波长,有一些仪器使用在太空中,其它一些用于陆地,还发明了在水下探测现在-成为者们的特殊仪器。

在这些电子探测仪器中,有一种被称为‘生命之树’(Tree of life),该装置真正的设计目的是为了探测某个现在-成为者生命的存在。这是一个在广泛区域进行渗透的巨大电子滤网发生器,由于它是由一些电子场域发生器和接收装置的网格交织在一起构成的,所以对于古代的地球人来说,它的外观类似某种树木。无论是现在-成为者正在占用着一个身体,还是他们已经离开了那个身体,这种电子场域都可以探测到现在-成为者们的存在。

同领地搜寻特遣队曾经携带过一种便携式的同类探测装置,在古苏美尔人的石刻工艺品中显示了一些长有双翼的人,他们使用松果形状的仪器扫描人类的身体。其中还显示出他们手提着动力装置,而雕刻时被风格化为长有鹰首和双翼的人提着篮子或水桶。

许多同领地搜寻特遣队的空中部队都是由阿胡拉·马兹达(Ahura Mazda)所带领的,他们在人类的描述中经常被称为‘有翼的神’。贯穿波斯文明,出现了大量描述长有双翼的太空飞船,他们被称为‘faravahar’(‘发罗瓦哈’)。

同领地搜寻特遣队的水上部队成员曾被当地人称作‘Oannes’。石刻画面显示所谓的‘Oannes’身穿着银色的潜水装,他们生活在海洋中,而且出现在人类居民中的装束看起来好似鱼一样。其中有一些在海里被找到的丢失的队员,寄居在海豚或鲸鱼的身体中。

在陆地的部分,同领地搜寻特遣队的成员们曾被古苏美尔人称为‘安奴纳奇人’(‘Annunaki’),以及《圣经》中出现的‘拿非利人’(‘Nephilim’) 。当然,他们真正的任务和行动意图从来没有透露给现代人类。他们的活动已经被刻意地掩饰过了,因此,人类关于安奴纳奇人,以及其他同领地搜寻特遣队成员的故事和传说,不但一直没有被理解,还遭到了严重的误解。

在缺乏完整和准确资料的情况下,任何人观察一种现象时,为了力图使那些资料有意义,都会通过假定或猜测方式进行解释。

因此,虽然神话传说与历史记录可能都是基于真实的事件,可是这些信息资料中同样充满了误解和扭曲的评价,以及想当然的修饰、学说和错误的假定。

同领地远征军的太空部队被表示为‘带双翼的圆盘’,这是一种对现在-成为者精神力量的隐喻,同样也在暗指同领地搜寻特遣队的太空飞船。曾经丢失的军队指挥官,也就是居鲁士二世,曾是一位被犹太人和伊斯兰教徒视为地球救世主的现在-成为者。在不到50年的时间里,他建立起了高度的道德和人道主义的价值体系,而且遍及了全部西方文明。

他所征服的领土,以及人民组织机构和纪念碑的建筑工程,都是空前绝后的,在短时期内取得如此规模的成就,只有一个领导者和一支受过训练的团队才能够胜任,他们由同领地部队的军官、飞行员、工程师和工作人员组成,作为一个团队展开行动,而且一直接受培训,在一起工作已经有数千年时间了。

尽管我们已经发现了许多丢失军队中的现在-成为者的所在位置,可是同领地还是无法复原他们的记忆,也就不能恢复他们尚未废弃的职务。

我们当然不能把寄居在生物体中的现在-成为者们传送到同领地的太空站,因为在我们的太空飞船中没有氧气的环境,在那里,我们也没有针对生物体的生命维持设施。我们一直以来唯一的希望是,定位并重新点燃丢失军队中现在-成为者们的警觉性、记忆和身份。有一天他们将有能力重新加入我们。

公元前200年 --

‘旧帝国’金字塔文明的最后残余坐落在‘提奥提华坎’。‘阿兹特克’(Aztec)名字的意思是‘神的领地’或‘人转化成神的地方’,就像在埃及吉萨金字塔的天文学布局一样,整个建筑群是一个精确的太阳系比例模型,它们准确地反映了内部行星、小行星带、木星、土星、天王星、海王星和冥王星的轨道距离。由于人们只不过是在1787年用地球现代的天文望远镜‘发现’的天王星,直到1930年发现了冥王星,所以很明显,那些建造者们是通过‘其他来源’获知的信息。

持续地使用蛇、龙或大毒蛇的形象,是遍布全球的金字塔文明具有的共同要素。这是因为植入这些文明的人们想创建一种假象,即‘神’是蜥蜴人,也是为了使记忆缺失无限延续下去所设计的部分幻觉。在地球上设置虚假文明的那些人都是现在-成为者,就像你们一样。许多被‘旧帝国’的现在-成为者寄居的生物躯体,在外貌上与地球上的形体非常相似。那些‘神’并不是爬虫族,虽然他们的行为举止很像蛇。

公元后1034 - 1124 --

整个阿拉伯世界被一个人奴役了: ‘哈桑·萨巴赫’(‘Hassanibn-al- Sabbah’),‘山中的老人’。他创立了 ‘阿萨辛派’(‘Hashshashin’),并经营着通过恐怖活动和恐惧进行控制的一部分伊斯兰教,以及小亚细亚和大部分地中海盆地。他们成了这样一种神职人员,使用非常有效的意识控制机制和勒索手段,使得‘刺客们’能够操纵那个文明世界几百年之久。

他们的方法很简单,将青年男子绑架并击昏,同时使用了由印度大麻提炼的麻药。接着,他们被带到一个花园中,里面满是住有黑眼睛的(伊斯兰教)天堂美女的闺房,房间内部布置着如河水般流淌的牛奶和蜜汁。这些年轻人被告知自己已经来到了天堂,并且收到这样承诺,假如他们愿意献身作为听从指令的刺客去暗杀指定的人,那么就可以回来永远生活在这里。于是,这些人又再次被击昏,推到外面的世界执行暗杀的任务。

与此同时,无论是哈里发,或是那些被他们要求付钱的、征收满载黄金的骆驼、香料或其它贵重物品的富有的统治者,‘山中的老人’都向他们派送了一个信使,并告诉他们,如果酬劳没有及时送到,那么将会派送刺客去除掉犯错的一方。实际上并没有什么反抗势力可以阻止那些身份不明的攻击者,因为他们只想完成任务,直到被杀后返回‘天堂’。

当这个非常粗糙的例子可以被巧妙、有效地利用时,又是一个多么简单有效的洗脑和意识控制的活动啊。在‘旧帝国’使用记忆缺失的意识控制活动对抗整个地球的现在-成为者方面,这只是一个小规模范围的示范而已。

公元后1119年 -

在第一次十字军东征之后,圣殿骑士团作为基督教的军事组织被建立,可是,很快就转化成了蓄积货币的国际金融体系,目的是为了实施‘旧帝国’在地球上的残余运作议程。

公元后1135年 - 1230年 --

同领地远征军彻底消灭了‘旧帝国’在太阳系中地球周围的太空舰队活动,不幸的是,他们长期建立起来的思想控制活动在很大程度上仍然奏效。

公元后1307年 --

圣殿骑士团被负债累累的法兰西‘腓力四世’解散,他向教皇克雷芒五世施压,并谴责制定其规程的成员们,将他们抓捕后用酷刑屈打成招,为了清除自己所有的债务,强占了他们全部的财产,而且在火刑柱上将这部分都烧死了。

大多数圣殿骑士团成员逃到了瑞士,在那里建立了一个国际银行系统,秘密操纵地球的经济。

‘旧帝国’运作者作为一种国际银行家们毫无察觉的影响,银行作为一种战争煽动者被暗地里操纵,偷偷摸摸地促进地球上不同国家之间的战争,并为其提供武器。战争是一种针对囚犯人口的内部控制机制。
国际银行支助那些无意义的战争屠杀和残杀活动的目的,是为了防止地球的现在-成为者们共享开放的思想交流和结盟合作的活动,以免现在-成为者们成功地被启迪,并逃脱他们遭受的监禁。”

[ Last edited by zzz19760225 on 2016-5-20 at 13:02 ]
作者: zzz19760225     时间: 2016-5-19 19:22    标题: 外星人访谈3-3

第十章
生物学的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


为了补充速记员记录的解释说明,我的汇报过程同样作为备份由磁带记录下来,而且是在我的访谈结束后立刻进行的汇报,这样可以保证每件被提及的事依然清晰地保留在我脑海中。

当我将这些故事详细叙述给旁听席的速记员时,还有一点摇摆不定的感觉。至少可以说,同领地对地球历史的看法是非常奇怪的,我不确定这种令我不自在的感觉是否来自于迷失方向,或是被重新导向的缘故,无论哪种原因,我都感到了困惑和不安。然而,与此同时,那些也是带有真实性的信息,这使我兴奋的同时又感到不可思议。

当速记员记录我传递给她‘历史课程’的会谈内容时,她不以为然地斜视我好几次,我肯定她认为我快疯了!或许她的感觉是对的。然而,正如艾罗所提到的,如果我的头脑中充满了‘旧帝国’的催眠暗示与虚假记忆,那么,让自己发疯也未尝不是一个好主意!

在那一刻,我没有太多时间去思考我自己,以及关于这些事情的个人想法。我的工作职责是在艾罗结束访谈内容后,尽快将所有我能从她那里获知的信息传递给速记员,我的工作并不是去分析信息,而仅仅是尽可能地如实汇报。分析汇报的任务将留给旁听席中的男职员们,或者其他接到访谈记录副本的人。

我同样向旁听席房间的工作人员递送了一份由艾罗要求的书籍和资料清单,以保证可以收集材料并递交给艾罗。每晚我离开艾罗之后,她会利用晚上剩余的时间,将我带给她的资料进行阅读或‘扫描’。旁听席的每一个人都收到一份来自速记员记录的副本进行研究,找寻与他们利益相关的信息。清晨,早餐过后,我又回到会谈房间报到,继续我与艾罗的访谈或‘课程’。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 28,第1段会谈


“正如前面讨论过的,我在教科书中所读到的关于宇宙以及地球生命起源的内容,都是非常不准确的。由于你作为一位医务人员服务于你们的政府,因此,你的职责要求你去了解生物体。所以,我相信你会明白我今天即将分享给你的资料的价值所在。

一直以来,我读到的你们有关生命构成功能的教科书科目的内容,都包含了立基于虚假记忆的信息,不准确的观测资料,丢失的数据,未证实的理论和迷信的想法。

举例来说,就在几百年前,你们的内科医师还在使用放血疗法释放身体中可能存在的病患,以努力缓解或治疗各种身体和精神的痛苦。虽然这种做法在某种程度上已得到了纠正,可是仍然有许多愚昧的人以医学的名义在继续实施。

除了涉及关于运用生物工程的错误理论之外,由于对自然界的无知,以及对比较重要的现在-成为者们的无知,对他们作为能量和赋予每种生命形态生机的智力来源缺乏认知,从而导致地球上的科学家们犯了许多初级的错误。

尽管介入地球事务并不是同领地的首要任务,同领地通讯官还是授权给我,让我向你们提供一些信息,为这些方面提供更准确和完善的理解,从而使你们去发现更有效的解决方案,以应对你们在地球所面临的严峻问题。

关于生物起源的正确信息已经从你们的头脑中被抹去了,同样被除去的还有你们智慧的蒙导者。为了帮助你们重新获得自己的记忆,我愿意同你们分享一些关于生物起源的属实材料。
我问艾罗是否在谈论关于进化论的主题,她回答说‘不,不完全是这些’。

你会发现古代《吠陀经》赞美诗中提及了‘进化’的内容。由同领地系统四处搜集到的《吠陀经》原文,就像是民间的传说或公共的至理名言和迷信一样。这些内容曾被汇编成诗篇,就像是一本韵律诗集,诗篇中针对每一段关于真理的陈述,都包含了许多半真半假的成份,以及颠倒的事实和稀奇的想象,都毫无限定或区分地被混杂在一起。

进化论先假设赋予每种生命形态生机的能量的动机来源并不存在。接着,它假定一个没有生命的物体或一种化学混合物会突然变‘活’,或偶然间或自然地被赋予生机,或者,可能由于某个泥塘中含化学成份的软泥发生一次放电,就会奇迹般地孕育一种自行活动的实体。

目前没有任何证据说明这理论是真实的,仅仅因为它并不是事实。科学怪人(Frankenstein)并没有真的将死人复活成一个掠夺成性的怪物,除非这位写虚幻小说的现在-成为者,是在某个漆黑的暴雨之夜获得的灵感空想出来的。

没有西方的科学家曾停下来考虑过,是谁,是什么,在哪里,在什么时候,或怎样使这些被赋予生机的过程发生的?由于完全的无知,以及对将精神作为赋予细胞组织或无生命物体以生机所必需的生命力之源,进行无视或否认,成为了西方医学失败的唯一原因。

此外,进化并不会意外地发生,它需要大量的技术,必须在现在-成为者们的精心监管之下进行操作才可以。很简单的例子,比如在农场对牲畜进行改良,或者饲养狗。不管怎样,人类的生物器官从早期的类人猿形态进化而来的观念,是不正确的。没有任何被发现的物理证据能证实人类身体的进化是在地球上完成的。

这样做的原因很简单:认为人类是在暗淡无光的年代,偶然间从发生化学作用的原始软泥中进化而来,这一观念只不过是一种经过记忆缺失处理后实施并灌输的催眠谎言而已,以防止你们回忆起真实的人类起源。事实上,不同形式的类人生物已经遍布宇宙存在数万亿年之久了。

这些方面的内容,曾被8200年前的同领地远征军带到地球的《吠陀经》赞美诗混合在一起,当他们在喜马拉雅山的基地驻扎时,那些诗篇被传授给了其中当地的一些人类居民并由他们记忆下来。然而,我应该说明的是,同领地基地队员的这类活动是在未获批准的前提下进行的,虽然我相信在那段时期,对他们来说就像是一段单纯的消遣而已。

这些诗篇在数千年的时间里以口述的方式代代相传下来,从丘陵地带开始蔓延,最终遍及了整个印度。就像你们用格林童话作为抚育儿女的指南一样,在同领地中也没有人会把任何来自《吠陀经》赞美诗中的材料当回事。然而,对于一座行星上所有记忆被抹除的现在-成为者们来说,将这些传说和想象认真对待的行为又是可以理解的。

不幸的是,学习过《吠陀经》诗篇的人们在传授给其他人的时候,却说那些是来自‘神灵’的东西,最终导致这些诗篇的内容被逐字地以‘真理’的形态采用。《吠陀经》中带有委婉和隐喻性的内容被接受,并作为教义的论据进行操练。诗篇中所体现的哲理被忽视了,而且几乎变成了地球上每种宗教活动的起源,尤其是印度教。

作为同领地的一名军官、飞行员和工程师,我必须始终采取一种非常务实的观点,因为如果我利用哲学的信条或花言巧语作为我工作的条令,那么我将无法实施并完成我的任务。因此,我们对于历史问题的讨论,都是基于真实事件进行的,它们发生在现在-成为者们抵达地球的很久以前,甚至远远早于‘旧帝国’上台掌权的时期,我可以结合个人的经来历叙述这部分历史:

在几十亿年前,我曾是距离很远的河外星系中一个大型生物实验室的成员之一,它被称作‘世外桃源再生公司’。我曾是一名与大量技术人员共事的生物工程师,我们的业务是对那些无人居住的行星制造和供应新的生物形式,在那段时期的此区域,拥有数以百万计的恒星系统与无人居住的行星。

‘世外桃源再生公司’所专攻的是森林中的哺乳动物,以及热带地区的鸟类,我们的行销人员与各个行星的政府以及来自遍及宇宙的独立买家们进行合同协商。技术人员们创造了与气候、大气环境和陆地密度以及化学成份相兼容的动物,此外,我们曾经受聘去将我们的样品与其它公司设计的已经存活在一颗行星上的生物有机体进行结合。
为了完成这样的工作,我们的职员曾与其它创造生命的公司进行信息交流,那时还有工业贸易的展览和发布会,通过协调相关工程的联盟提供其它各式各样的信息。

你可以想象一下,为了对行星进行勘测,我们的调查工作需要大量的星际旅行,而我的飞行员技能就是在这段时期掌握的。搜集的数据被累积存储在巨大的计算据数据库中,并由生物工程师们进行评估。

计算机是一种作为人造大脑和综合计算设备的电子装置,它可以存储信息,进行计算,解决问题,并执行机械功能。在这个宇宙的大多数星系中,都使用非常庞大的计算机进行整个行星或行星系统日常事务、机械保养和维护活动的管理。

基于调查和收集的数据,以及构思和艺术渲染,都被用作设计新生命。一些设计成果售给那些出价最高的竞标者。其他的生物形式被创造出来,以满足我们客户的定做要求。

通过一系列细胞、化学和机械的工程师解决各种难题,并将设计和技术规范沿着装配生产线进行配置。他们的工作是将所有的组件要素整合成一个可行、实用并赋有美感的成品。

这些生物的雏形就这样被制造出来,并且在人造的环境中进行测试,然后对不完善的地方进行处理和改进。最后,新的生物形式伴随着一种生命力或精神能量被‘赋予’或‘激活’,然后才能被引入确切的行星环境进行最后测试。

当一种新的生物形式被引进以后,我们会对这些生物有机体与行星环境和其他本土生物形式之间的相互作用进行监控。我们通过与其它公司之间的协商,来解决在互不相容的生物体之间的冲突,通常谈判妥协的结果需要对我们或他们的生物进行更进一步的改进。这是一门科学或艺术,即你们所说的‘优生学’。

在某些情况下,需要对行星的环境做些改造,但不是经常性的,因为行星建设的复杂性远远超过对个别生物形式的改造。

巧合的是,一个与曾我在世外桃源再生公司共事的朋友,同时也是工程师 -- 在我离开那个公司很长时间之后 -- 他告诉我,他们在近代所承包过的项目之一,是向地球提供生命形式,以使他们再度获得补充,之所以这样做,是因为银河系的这一区域在一场战争之后,毁灭了太空中此区域行星上的大部分生命。这些大约发生在7000万年以前。

该技术要求将这颗行星改进成为一种可以维持数十亿个不同物种生存的交互式生态环境,这是一个巨大的承包项目。在银河系中,几乎每一个生物工艺学公司的专业顾问都被引进并协助该项目的工作。

你现在看到地球上种类繁多的生物形式都是那段时期遗留下来的。你们的科学家们认为荒谬的‘进化论’是对所有生命形式存在于此的一种解释,事实是,所有在这个星球上以及这个宇宙中其它任何一颗行星上的生命形式,都是由一些像我们这样公司所创造的。

还有什么能够让你们解释数以百万计分散、不相干的生命物种出现在这个星球的大陆与海洋之中呢?你们又如何解释为每一种现存的生物进行定义的精神活力的源泉呢?说那是‘上帝’的杰作,有点太不着边际了。每一个现在-成为者在不同的时间和地点,都拥有许多的名字和面孔,每一个现在-成为者都是一个上帝,当他们寄居在某个肉体的对象中时,他们就成了生命之源。

举例来说,这里有数以百万计的昆虫物种,其中大约有35万种属于甲虫类,在地球上的任何时候可能都拥有多达1亿种的生命形式。此外,地球上已经灭绝的生物比现存的生命形式要多出许多倍,其中一些可以在地球上的化石或地质记录中重新发现。

目前反映地球生命形式的‘进化论’,并没有将生物多样性的现象考虑在内。通过自然选择完成进化,是一种科学幻想而已。正如地球上的教科书指出的那样,一个物种不会意外地或随机地变成另一个物种,除非由某个现在-成为者对遗传物质进行处理才可以。

对地球物种进行选择性地培育,是一个由现在-成为者参与的简单例子。在过去的几百年间,几百个品种的狗与上百种鸽子,以及几十种锦鲤都在不过几年的时间里得到了‘进化’,而且仅仅是从一个最初的品种开始的。如果没有现在-成为者们的介入,生物有机体很少会发生改变。

开发一种像‘鸭嘴兽’这样的动物,需要许多非常聪明的工程师将海狸与一种扁嘴鸭子进行结合,做成一种可以下蛋的哺乳动物。毫无疑问,有一些富有的客户发来一种‘特别的订单’,用作礼物馈赠或稀奇的娱乐消遣。我相信,一些生物技术公司的实验室在这种项目上花费了多年时间,才造出自一种可以我复制的生命形式!

将任何生命形式的诞生归结于在原始软泥中的一次偶然化学作用的分裂,简直是荒谬之极!事实上,一些地球上的生物体,比如‘变形菌门’,起初是设计在‘第3太阳类型,C等级’的行星上,换而言之,它是同领地针对一颗最临近的、酷热的厌氧性大气环境的蓝色行星所设计的,例如银河系的猎户座星群。

对于专门研究这一领域的现在-成为者们来说,创造生命形式是一种非常复杂的高技术含量工作。对于那些已经被抹除记忆的地球生物学家来说,遗传的异常现象使他们困惑不已,不幸的是,由‘旧帝国’灌输的虚假的记忆,阻止了地球的科学家们去发现那些显而易见的异常情况。

最大的技术挑战是发明生物体的自我再生或有性繁殖能力,这一方案用来解决由于被其它生物毁灭或吃掉而不得不频繁制造补充所造成的难题。那些行星的政府们并不想一味地购买替换的动物。

这一计划是在数万亿年前开展的,作为一次解决争论生物工业既得利益会议的结果,曾经臭名昭著的‘Yuhmi-Krum商讨大会’被用来协调对生物体进行的生产活动。

在个别的会议成员被战略性地贿赂或谋杀之后,最后达成了一致的妥协,并开创了一项协议,从而产生了这种生物学现象,即我们现在所说的‘食物链’。

一种生物需要消耗另一种生命形式作为能量来源的这一想法,是由当时最大的生物工程公司之一所提供的,他们专门创造昆虫和开花植物。

这两者之间的联系是显而易见的,几乎每一种开花植物都需要有共生关系的昆虫来维持繁殖,原因很明显:飞虫与开花植物都是由同一家公司所创造的。不幸的是,这个公司还有一个部门创造了寄生虫和细菌。

这家公司的名字被翻译成英语可能应该叫做‘飞虫与鲜花’。他们想要证明的是这样一个事实,即他们所创造的寄生生物的唯一有效的目的,是帮助有机的材料进行分解。在那个时期,这种生物的市场份额非常有限。

为了扩大他们的业务,他们雇佣了大量的公共关系公司,以及一个强大的政治游说团体,以美化某些生命形式应该靠消耗其它生命形式为生这一观念。他们发明了一种‘科学理论’作为宣传噱头,该理论是,所有生物都需要将‘食物’作为一种能量的来源。在那之前,没有任何被创造的生命形式需要任何外部的能量,动物们不用为了食物而吃掉其它动物,仅仅依靠消耗阳光、矿物质或植物。

当然,‘飞虫与鲜花’公司也展开了对食肉动物的设计业务。没多久,就有太多的动物被作为食物吃掉,使得重新对它们进行补充变得非常困难。由于‘飞虫与鲜花’公司提议的解决方案,以及对高层进行战略性贿赂的帮助下,使得其它公司开始利用‘有性繁殖’作为补充生物形式的基本方针。当然,‘飞虫与鲜花’曾是第一家开发有性繁殖设计蓝图的公司。

在此生物学工程的处理过程中,针对自我再生的动物,要求对其植入交配时所需的刺激反应、细胞分裂,以及预先设计的成长模式。正如所料,这些技术的专利权都由‘飞虫与鲜花’公司所有。

又经过了几百万年后,通过了一些立法,允许其它的生物技术公司购买这些生物设计程序,可这些程序需要对全部现有生物形式的细胞设计进行标记才可以。对于那些做出如此笨拙又不切实际的经营计划的生物技术公司们来说,它变成了一种费用浩大的事业。

所有这些导致了腐败的滋生和整个产业的垮台,最终,‘食物与性’的观念彻底毁灭了生物技术产业,其中包括‘飞虫与鲜花’公司。全部产业随着制造生命形式的市场消失而不复存在了。因此,当某个物种灭绝时,就没有办法替换它们了,因为创造新生命形式的技术已经丢失了。显然,这些技术从来都不为地球人所知,而且可能永远都不会。
在距离这里不远的某些行星上的计算机文件中,依然记录了这些关于生物工程的工艺规程,在某处可能还保留着一些实验室和计算机,然而,在它们周围已经没有人再做任何相关的事情了。因此,这下你可以理解为何对同领地来说,保护在地球上不断缩减的生物群是那么的重要。

‘有性繁殖’技术背后的核心概念,是一种电子/化学交互作用的发明,被称为‘循环刺激反应发生器’。这是一个经过编程的遗传机制,可导致一种看似自然的复发性刺激的繁殖活动。后来同样的技术被改编并应用到生物的血肉躯体之中,其中包括现代人类。

另一个被应用于再生过程中的重要机构,尤其对于现代人类型的躯体来说,是一种植入身体中的‘化学电子触发’机构。这种‘触发器’可以吸引现在-成为者们寄居在人体或任何的‘肉体身躯’之中,它使用了一种人造的电子波,可以利用‘具有美感的痛苦’去吸引现在-成为者。

包括宇宙中用来捕捉原本自由的现在-成为者们的每一个陷阱,都使用了一种具有美感的电子波作为‘诱饵’。对于某个现在-成为者来说,这种由具有美感的波长所带来的感觉的吸引力,超越了他的其它任何感觉。当痛苦与美丽的电子波结合在一起时,将导致这个现在-成为者‘陷在’某个躯体中。

以家畜和其它的哺乳动物为例,这些使用在次要生物形式中的‘再生触发器’,由一些从腺体气味中散发的化学物质,以及结合了由睾丸激素或雌性激素所激发的再生化学电子脉冲进行触发激活。

当食物来源匮乏时,这种触发机制还能够与引起此生命形式再生的营养物质水平相互作用,作为一种延续未来再生的生存手段,在当前的有机体无法维持生存时,饥饿就成了一种促使其再生的机能。这些基本的原理已经应用到所有的生命物种之中了。

由于存在这种削弱影响力和‘性欲审美与痛楚’的电子波,因此同领地的统治阶层并不会寄居在肉体的身躯中,这也是为何同领地的官员们只会使用替身的原因。据我所知,这种波已被证明是在宇宙历史中发明的最有效的诱捕装置。

在同领地与‘旧帝国’的文明中,都依赖于这种装置去‘招募’和维持一种工作团队,其中的成员由现在-成为者组成,他们寄居在行星和基地设施的肉体身躯中。这部分现在-成为者属于‘工人阶层’,他们在行星上做的都是那些盲从的、手工的、不合意的工作。

正如我所说的那样,对于所有‘旧帝国’和同领地的现在-成为者们来说,在他们当中存在一种管制非常严格的固定阶层,或者‘等级体系’,如下所述:

最高的等级是‘自由的’现在-成为者,也就是说,在不破坏或干预社会、经济或政治结构的前提下,他们可以不受限制地使用任何类型的躯体,而且可以随意地进入或离开。

在这一等级之下,由许多‘受限的’现在-成为者阶层所组成,他们可能会,也可能不会时常地使用某一个躯体。强加给每一个现在-成为者的限制,包括他们运用权利的范围,以及他们才能和灵活性。

在他们之下的是‘替身’等级,也就是我现在所属的阶层。几乎所有的太空军官和飞船的队员们,都需要在星际间进行穿梭旅行,因此,他们每个人都配备了由轻质耐用材料制成的替身。设计各种类型的替身,以方便实现特殊的功能。一些替身还配有附加的配件,比如一些可互换的工具或器械,用来应对维修、采矿、化学处理、导航等等的活动。在这个替身类型的许多等级中,也按照一种‘勋章’机制划分级别。

在他们之下的是士兵等级,这些士兵装备了无数种武器,以及专门设计用于探测、战斗并打击任何可能性敌人的军事配备。某些士兵以机械身躯的形态出现,而大多数士兵则只是远程操控的无任命等级的机器人。

比较低的等级被限制在‘肉体身躯’之中,当然,这是他们不可能进行太空旅行的显而易见的原因。从根本上讲,肉体身躯的耐受能力在重力的压力、极端温度、辐射曝光、大气化学成份以及真空的空间方面,都显得太脆弱了。还有肉体身躯需要的食品,排便,睡眠,大气构成要素明以及空气压力,都在后勤方面造成了明显的不便,而替身则不需要那些。

如果没有一种特别构成的大气化学成份,那么大多数肉体身躯仅仅在几分钟内就会窒息死亡,两三天后,由存活在尸体内外部的细菌所导致的臭味会被散发出来。而在一艘太空飞船中,任何种类的气味都是不容许的。

肉体只能耐受非常有限的温度范围,然而,对比在太空中的温度,可能在几秒钟之内就会变化数百摄氏度。所以,肉体身躯对于军事用途方面自然是毫无可取之处的。仅仅由一支电子机枪进行一次射击,就可以瞬间使一具肉躯变成一团腐化的蒸汽云。

寄居在肉体身躯中的现在-成为者们已经失去了他们大部分与生俱来的才能和本领。虽然在理论上可以重新获得或复原这些能力,可是同领地还没有发现或认可任何切实可行的办法。

尽管同领地的太空飞船可以在一天内穿越数万亿‘光年’的距离,而且这对于在太空中的星际旅行是非常重要的,可是,这并不意味着在如此短的时间内便可以完成某一批需要数千年来完成的任务。生物的肉体身躯只能存活非常短的时间 -- 只有60年到最多150年,然而替身却可以被循环再用,而且可以几乎无限期地进行修复。

在这个宇宙中,第一批生物体开发的时间始于74万亿年前,对于那些创造并寄居于不同类别躯体中的现在-成为者们来说,这种活动迅速地成为了一种狂热的时尚,他们持有各式各样可恶的目的:尤其在娱乐消遣方面,这样做是为了通过某个躯体去体验各种代理性质的身体感觉。

自那时起,现在-成为者与那些躯体之间的关系发生了一系列连续的‘使进化’过程。由于现在-成为者们持续地玩弄这些躯体,于是,为了使他们无法再次离开那些躯体,某些特殊的抓捕现在-成为者的陷阱骗局被引入使用。

这种做法主要是使那些躯体被制造得看似强健,但实际上却非常脆弱。某个现在-成为者运用其自然的能力去创造能量,可是在他接触某个躯体的时候,却意外地对躯体造成了伤害,于是这个现在-成为者对伤害这一脆弱的躯体的行为感到很懊恼。所以,当他们在下一次遭遇某个躯体时,便开始对其“细心关照”。他们会这样做,现在-成为者会收回或缩减他们自己的能力,以确保不去伤害这个躯体。由于这种恶作剧性质的长期背信弃义的历史存在,并结合了类似不幸事件的发生,因此,最终导致大量的现在-成为者们被永久性地俘获在躯体之中。

当然,对于那些想占据优势奴役他人的现在-成为者们来说,这又成为了一种有利可图的事业。由此产生的奴役过程经过了数万亿年的时间,一直持续到今天。最终,由于现在-成为者们对创造能量的本领以及维持个人可操纵自由状态的能力进行了缩减,导致了庞大而谨慎防卫的统治集团或阶级体制的产生。以躯体作为每个阶层象征的做法,被广泛应用在‘旧帝国’中,也包括同领地。

遍及这个宇宙星系中的绝大多数现在-成为者都寄居在某类肉体的身躯中,他们的身体构造、外观、功用和栖息地,都因所居住行星的地心引力、大气和气候条件的不同而显得多样化。躯体的类型根据种种因素而被大规模地预先确定下来,这些因素包括,被围绕公转行星的恒星大小,行星与恒星之间的距离,地质的要素,同样还有此行星大气的成分。

平均而言,将这些恒星与行星进行梯度分类,已相当于整个宇宙的公认标准。比如,地球可以概略地被鉴定为‘第12太阳类型,第7等级的行星’,意思是一颗由生物生命形式居住的强重力、氮/氧大气的行星,它接近一颗黄颜色、中等规模、低辐射的太阳或‘第12类型的恒星’。由于在英文中对天文学术语的极度限制,因此正确的名称是很难被准确翻译出来的。

各式各样的生命形式如沙滩上的沙粒一般品种繁多,你可以想象一下,在过去74万亿年间无数的行星系统之中,会有多少不同的生物品种被数以百万计像‘飞虫与鲜花’这样的公司所创造出来!”


(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


当艾罗结束对我讲述的“故事”时,由于遍布我脑海中的混乱思绪,造成了一段长时间停顿的沉默。难道艾罗在晚上阅读了科幻书籍或幻想小说吗?为什么她会给我讲述一些难以置信的事情?如果她不是一个只有40英寸身高、灰色‘皮肤’、手脚长有三根指头、坐在我对面的外星人,那么我也不会相信她说的每一个字!

回顾这60年,自从艾罗传递给我这些信息之后,地球的学者们已经开始发展正是由艾罗在这个世界上告诉我的某些生物学工程的技术,包括心脏搭桥、克隆、试管婴儿、器官移植、整型外科、基因、染色体等等。

有一件事是十分肯定的:自那以后,我已经无法再用以前的眼光去看待一只飞虫或一束鲜花了,更不用提我对《圣经》创世纪的宗教信仰了。


第十一章
科学方面的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


这段关于本次会谈的内容笔录也是一字不差的,我没有什么可额外添加的东西,因为它已经说明了一切。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 29,第1段会谈


“今天艾罗给我讲述了一些非常专业的东西,为了便于提醒自己,我还做了一些笔记,这样就可以让我尽可能接近地汇报她谈话的内容。她以一种关于科学知识的类比手法开始了谈话:

诸如约翰内斯·古腾堡,艾萨克·牛顿爵士,本杰明·富兰克林,乔治·华盛顿·卡弗,尼古拉·特斯拉,乔纳斯·索尔克和理查德·特里维西克,如果成千上万类似的天才们今天还活在世上的话,你能想象地球会有何等的进步吗?

设想一下,如果像他们这样的人从未死亡过,则可能早已取得了怎样的技术成就呢?如果他们从来没遭受过使之忘记每一件已知经历的失忆处理过程呢?如果他们可以继续专研并永远工作下去呢?

如果像这些人一样的不朽的精神生命被允许继续发明创造下去,则可能达到什么样的技术水平和文明程度呢?-- 在同一个地方和同一个时期开始 -- 一直延续几十亿或数万亿年。

从本质上讲,同领地是一个相对持续发展并存在了数万亿年的文明,其中几乎每一门能想到的和超乎想象的学科知识,都一直在累积、提炼和改良中。

最初,现在-成为者相互作用的幻觉或发明,创造了这个真正的有形宇宙结构 -- 宏观与微观。宇宙中每一个单一的粒子都是由某一个现在-成为者通过想象使之开始存在的,每一样东西都是有一个想法所创造 -- 一种在空间里没有任何重量或尺寸或位置的想法。

在太空中的每一粒尘埃,从最小的亚原子粒子的大小,到一颗太阳或一个相当于多个星系大小的麦哲伦星系的规模,都是由一个虚无的想法所创造的。甚至连人为设计的,为了使微生物去感知而进行调整的微小细胞,在极小的空隙间穿越航行,这些过程也都来自一个现在-成为者的一个想法。

你,以及每一个地球上的现在-成为者,都参与了这个宇宙的创造进程,即使你现在被限制在一个脆弱的由肉体制成的躯体中;即使你的存活时间仅仅相当于你的星球绕一颗恒星旋转短短的65圈而已;即使你由于已经遭受了无法抵抗的电击处理而丧失了你的记忆;即使你必须用每一生的时间将每一件事全部再学习一遍;尽管存在所有这些情况,可你依然是你,而且永远都是。而且,在内心深处,你仍然知道你是谁,以及你所知道的事情,你仍然是本然的你。

否则,怎样才能解释神童的现象呢?一个在钢琴上弹协奏曲的3岁的现在-成为者,而且没有接受过正式的培训?不可能的,如果他们没有回忆起他们早已在成千上万的生命经历中所学会的,在钢琴键盘的对面度过了数不尽的时光,或者出现在遥远的星球上。他们可能不清楚他们是怎样知道这些的。可他们就是知道。

人类在过去100年间所发展的技术已经超过了之前2000年内的水平,为什么呢?答案很简单:‘旧帝国’在人类的思想和事务上的影响已经被同领地缩减了。

地球创造力的复兴始于公元后1250年,也就是‘旧帝国’的太空舰队在太阳系被摧毁之后。在接下来的500年间,地球可能拥有了重新获得自主权和独立性的潜力,但是仅达到这样一种程度,人类能够应用那些地球上会聚的天才现在-成为者们去解决失忆症的问题。

然而,需要提醒的是,被流放到这个星球的现在成为者们所具有的潜在创造力,严重地被地球人口的犯罪分子们连累了,具体来讲,其中有政客、战争贩子以及那些不负责任的物理学家们,他们创造了那些毫无约束的武器,比如原子弹,化学品,疾病和社会混乱。它们有可能永远地压制地球上所有的生命形式。

即使在地球过去2年中,测试并使用了规模相对较小的爆炸活动,如果部署的数量足够,也会有毁灭全部生物的潜在危险,规模庞大的武器可以在一次单一的爆炸中,耗尽全球大气中的氧气!
因此,为使地球不至于被科学技术所摧毁而必须解决的最根本问题,是社会和人道主义问题。尽管有许多数学和机械方面的天才,可是就连地球上最优秀的科学头脑,也从未能处理这些难题。

因此,不要指望科学家们来拯救地球或人类的未来。认为存在物只是由能量和物体在空间移动所构成的聚合体,任何基于这种范例而建立的所谓的‘科学’,都不是一种科学。这样一类人完全忽视了由某个独立的现在-成为者以及由现在-成为者们组成的集体所产生的创造活力,并且不断地创造这个有形宇宙以及全部的宇宙。每一门科学都会保持相对的无效性或破坏性,并达到这样一种程度,对激起所有创造和生命的精神活力的重要性进行忽视或贬值。

不幸的是,‘旧帝国’为了确保这个星球上的现在-成为者们无法再复原他们与生俱来的,创造空间、能量、物质和时间或其它宇宙组成部分的才能,这种愚昧无知的观念一直都被谨慎且有效地灌输给了人类。只要这种不朽的、强大的精神‘自我’的意识被忽视,人类就会一直保持受监禁的状态,直到它自我毁灭和埋没的那天到来。

不要再依靠物质学科的教条去掌握天地万物的根本实质了,因为那并不比去相信一个烧香念咒的巫师好到哪里去,这两个例子的纯粹结果都是诱捕和漠视。科学家们自称去观察发现,但是,他们仅仅是在猜测他们的所见而已,并且将其称为事实。就像盲人一样,一个科学家在认识到自己失明之前,无法学会用眼睛观看。地球上的科学‘事实’中,并不包括创造之源,它们仅仅包含了结论或创造的副产物,这些科学‘事实’并不包括任何近乎无限的以往存在经历的记忆。

创造和存在的本质,无法通过一个显微镜或望远镜,或有形宇宙中任何其它的测量技术所发现。一个人不能通过米尺和游标卡尺去了解一束鲜花的芳香,也无法通过它们去理解一个被抛弃的情人。

所有你不会知道的关于某个神的创造力和才能,都可以在你的内心里发现 -- 你是一个不朽的精神生命。

怎样才能让一个盲人去教其他人看见由近乎无限的梯度构成的光谱范围呢?某人在对一个现在-成为者的天性不了解的前提下,而去对这个宇宙进行理解,这种想法,与认为一位画家是他自己画布上的一个斑点的性质是同样荒谬的;或者这样荒谬地比喻,芭蕾舞鞋上的花边是舞蹈动作设计者的想象力,或者是舞者的魅力,或者是首夜演出时的兴奋激动。

通过灌输在人们头脑中的宗教迷信思想进行控制运作,从而使对精神领域的研究一直被视为傻瓜的行为而截留。相反,对精神和思想的研究,一直都被那种将有形宇宙中任何不可测量的事物进行排除的科学所禁止。由于科学是属于物质的宗教信仰,因此它一直都崇拜物质。

科学的典范认为天地万物才是全部,而造物主什么都不是。宗教认为造物主才是一切,而创造物本身什么都不是。这两个极端就是监狱牢房的围栏,它们妨碍了将所有现象看成相互作用的整体的视野。

在不了解作为创造源泉的现在-成为者的前提下,而对天地万物进行研究的活动,是徒劳的。当你航行到由科学构想的一种宇宙边缘时,你会最终落入黑暗无情的深渊和毫无生机的冷酷势力之中。在地球上,你们一直认为在思想与精神的海洋中充满了可怕残忍的怪兽,而且只要你胆敢超越迷信的防波堤,那些怪兽就会将你活生生地吃掉。

‘旧帝国’监狱系统的既得利益,是防止你们去审视自己的灵魂,他们害怕你们会在自己的记忆中看到那些将你们关押的奴隶主们。这所监狱是由你们思维的阴影区域构建而成,而这些阴影则是由谎言、痛苦、损失和恐惧所组成的。

真正文明社会的天才们,是那些愿意使其他现在-成为者们恢复记忆,并重获自我觉察能力和判断力的现在-成为者们。这一问题并不是靠强制实施道德行为规范来解决的,也不是某些人通过神秘事物、信仰、毒品、枪支或其它任何一种奴隶社会的教条进行控制所解决的,当然,肯定绝不会通过使用电击处理和催眠指令来解决这个一问题。

地球与它上面每个生命的生存活动,都取决于由你们积攒了万亿的技能形成的记忆所复原的能力,从而恢复你的本然。而这类的艺术、科学或技术,从来都没有在‘旧帝国’中构想过,否则他们也不会使你们来到地球去面对当前的境况,并以此作为‘解决方案’。
同领地也从来没有开发过这类的技术,直到最近,由于使一个患失忆症的现在-成为者复原的必要性并未上升到紧迫的程度,因此,没有任何人曾解决过这一问题。到目前为止,不幸的是,同领地并没有什么解决方案可提供。

有几个同领地的官员在他们离开工作岗位期间,擅自将这些承担了起来,并且向地球提供技术。这些官员离开他们在太空站的‘替身’,作为一个现在-成为者,去接管某个在地球上的生物躯体。在某些情况下,一位官员在寄居并控制其不同躯体的同时,可以继续在工作岗位上履行职责。

这是一种非常危险的冒险计划,它需要一个非常有才能的现在-成为者完成这样的任务,并成功返回基地。其中有一位官员在继续履行他的官方职责的同时,从事了这些活动,他在地球上以电子学发明家闻名,名叫‘尼古拉·特斯拉’。

虽然这并不是我此行任务的一部分,可是我打算帮助你们努力推动科学和人道主义在地球的发展进程。我的目的是通过帮助其他的现在-成为者进行自助,为了解决地球上的失忆症问题,你们需要更先进的技术,以及稳定的社会环境,使之允许有足够的时间,对使现在-成为者从躯体中获得自由的技术,进行研究和开发,并且使现在-成为者的头脑摆脱失忆症。

虽然同领地从长远利益方面考虑将地球作为一个有用的行星,但是除了他们在地球上对自己的职员关注以外,对地球上的居民并不感兴趣。我们所关注的是防止破坏的活动,以及加速技术的发展,以维持全球的生物圈、水圈和大气的基本设施。

为了这一目的,经过非常仔细和彻底的考察之后,你会发现我的飞船含有地球上尚未存在的各式各样的技术。如果你们把这架飞船的部件分发给各方的科学家进行研究,他们将能够逆向设计出这种技术中的某些部分,并利用地球上的原材料复制出这部分元件。

其中有些功能是难以破解的,由于地球没有复制它们所需要的原材料,因此其它功能是无法复制的,尤其是对于建造飞船的纯正金属来说,这些金属不仅不存在地球上,而且用来精炼这些金属所需的生产流程还需要数十亿年时间去开发。

同样,导航系统需要一个现在-成为者的个人波长被特定地调谐到与飞船的‘神经系统’一致。这个飞船的驾驶员必须拥有一种非常高的精神意志力、修养、训练和智力的等级,才能操作这样一架飞船。地球上的现在-成为者们无法获得这种专门的技能,因为它需要为实现这种目的而专门使用人造的躯体才可以。

某些个别的地球科学家,其中一些人是宇宙中最杰出的人才,当他们对飞船的组件进行考察时,将会使他们关于这种技术的记忆与之对接。正如地球上的某些科学家和物理学家已经能够‘记得’如何再创造出发电机、内燃机、蒸汽机车、制冷机、飞机、抗生素和其它在你们文明中的器械,他们同样能够在我的飞船中重新发现其它核心的技术。

以下是我飞船配备的特殊系统中包含的有效部件:

1)在飞船的墙壁中有一类非常微小的配线或光纤,作为通讯、信息存储、计算机功能,以及自动导航的用途。

2)同样的配线还用于对光谱、亚光谱和超光谱的探测与显示。

3)飞船的内部构造远远优于这个时期地球上的任何飞行器,而且含有成百上千的应用软件。

4)你们还可以发现这种用来建立、放大与引导以光粒子或波作为能量形式的运作机制。

作为一名同领地的军官、飞行员和工程师,除了刚刚透露的一些信息之外,我不能以任何方式随意讨论或转让关于飞船运转或构造的细节。然而,我相信地球上有许多称职的工程师将会利用这些资源研发出有价值的技术。

我将这些细节提供给你们,希望这将是对同领地更有益的贡献。”

第十二章
一堂关于不朽的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我认为在接下来的记录内容中已经很清楚地说明了。

(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 30,第1段会谈


“为了方便起见,我将不朽的精神生命称为‘现在-成为者’,他们是幻觉的源泉与创造者。每一个单独的和集体性的、最初无拘束状态的生命,都是一个永恒的、全能的、无所不知的实体。

现在-成为者通过想象一个特定的区域来创造空间,介于他们自己与其想象的特定区域之间的间隔,就是我们所说的空间。一个现在-成为者能够感知由其他现在-成为者们所创造的空间和物体。

现在-成为者们并不是有形宇宙的实体,他们是能量与幻觉的源泉。现在-成为者们并不在空间或时间中居住,但是他们却可以创造空间,并且在其中放置微粒物质,创造能量,将微粒物质塑造成各种形状,从而促成了各种形式的运动和具有生命的形态。任何被某个现在-成为者所赋予生机的形式,都被称为生命。

一个现在-成为者能够决定适合他们居住的空间或时间,然后他们自己作为一种物体或由他们自己或别的现在-成为者所创造的其它幻觉风格中存在。

创造一种幻觉的缺陷就在于,幻觉必须被持续性地创造,如果不能持续进行,它就会消失。对某个幻觉进行的不断创造,需要对此幻觉的每一个细节进行关注,才能够维持它的存在。

欲求避免无聊的状态,似乎成了现在-成为者们所具有的共同特性。如果一个灵魂,既不与其他的现在-成为者们相互影响,也不与不可预知的运动、戏剧效果、意料之外的意图,以及由别的现在-成为者们创造的幻觉相互作用,那么他就会很容易感到无聊。
如果你可以想象出任何事情,随意感知并引发任何事情;如果你无法去做其它的任何事情;如果你总是清楚每一个游戏的结局与每一个问题的答案,那么,你会感到无聊吗?

完全向回追溯现在-成为者的存在期限,是无法衡量的,根据有形宇宙的时间计算,已经是近乎无限的概念了。对于某个现在-成为者的‘开始’或‘结束’是无法测量的,他们完全生活在一个永远的现在。

现在-成为者们的另一个共同特性是,若某个现在-成为者自创的幻觉获得其他现在-成为者们的赞美,则是非常令他满意的。如果这种期待的赞美没有来临,那么,这个现在-成为者将为了获得赞美,而不断地创造幻觉。可以说,整个宇宙是由一些不值得赞美的幻觉构成的。

宇宙的起源始于对诸多单个幻影空间的创造,这些空间就是现在成为者的‘家园’。有时候,某个宇宙是一种由两个或多个现在成为者合作创造的幻觉。因现在-成为者们与其创造的宇宙的扩散现象,导致他们有时候会发生抵触或混合,或者达到这样一种程度,由许多现在-成为者共享一个联合创造的宇宙。

现在-成为者们削弱了自己的能力,以便去玩一个游戏。现在-成为者们认为有游戏总比没游戏要好。于是,他们愿意承受疼痛、疾苦、愚昧、穷困,以及任何不必要和不良的环境,只是为了玩一个游戏。假装自己不知晓、看不到,也无法促成这一切的发生,都为玩这一场游戏创造了必要的条件:未知,可能性,障碍或对抗,以及终极目标,最后,玩这一场游戏解决了无聊的问题。

所有空间、星系、太阳、行星,和这个宇宙的物理现象,以及由现在-成为者们所创造的,由相互间的协议所维持的,包括生命的形式、所处位置和发生的事件,都通过这种方式得以存在。

由于现在-成为者们进行的想象、创造与感知,因而产生了许多的宇宙,其中每一个都合作性地存在于自己连续的统一体内部,而且,通过一个或多个创造它们的现在-成为者进行想象、改动、保留或毁坏的活动,使得每一个宇宙都拥有自己独特的一套规则。因此,在这个有形宇宙中所定义的时间、能量、物体和空间概念,在别的宇宙中可能存在,也可能不存在。与其它有形宇宙一样,同领地就存在于这样一种宇宙中。

有形宇宙的运作规则之一是,能量能够被创造,但是不可以毁灭。因此,只要现在-成为者们一直不断地为之增添新的能量,宇宙就会继续膨胀下去。这种概念是近乎无限的,就像是一条汽车的装配生产线,既不曾停止运转,也不会有汽车被销毁。

每个现在-成为者基本上都是好的,因此,一个现在-成为者并不会对其他现在-成为者做出他们不想体验的事情,他不会以此为乐。对于一个现在-成为者来说,并不存在何为好与坏、对与错、美与丑的固定标准,这些观念都基于每一个现在-成为者的独特判断力而存在的。

既然人类不得不将某个现在-成为者描述为一位‘神灵’的最接近的概念是:全知、全能、无限。那么,一位‘神灵’怎样才能使自己不再是‘神灵’呢?他们会假装‘不去’知道。如果你们总是知道其他人的藏身之处,那么又怎样去玩‘躲猫猫’的游戏呢?

只有你假装‘不去’知道其他玩伴的藏身地点,你才可以起身去‘寻找’他们。这些游戏就是这样创造出来的,而你已经忘记你只是一直在‘假装’而已。通过这样做,现在-成为者们就被诱捕并沉溺于由他们自己设计的迷宫之中。

怎样才能创造这样一间牢笼呢?将自己锁在笼中,把钥匙丢弃后,忘记钥匙或牢笼的事情,然后忘记‘里面’或‘外面’的存在,甚至忘记了还有一个自我。就这样创造了一个没有幻觉的幻觉:即整个宇宙是真实的,而且没有任何别的宇宙曾经存在或被创造过。

在地球上教给人们并达成一致意见的传教言论认为,神灵是可以信赖的,而人类是不可靠的。你们所学到的是,只有一个上帝才可以创造宇宙,因此,每一次行为的责任都要转让给另一个现在-成为者或神灵去承担,却从来不是自己。

面对人类自身 -- 个体与集体性质的 -- 神灵,没有任何人曾经为这样一个事实去承担他们的个人责任,而这个事实本身就是每一个现在-成为者所遭受诱捕行为的根源。”
第十三章
一堂关于未来的课程

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


我想,这段笔录本身也为会谈内容进行了说明。我尽可能如实地转达了艾罗提供的确切信息。艾罗在这次会谈中所说的关于可能性的军事影响,使我的上级军官们变得十分惊慌。


(会谈内容的官方记录)

顶级机密

美国空军官方记录
罗斯威尔空军基地,第509轰炸大队
主题:外星人访谈,1947. 7. 31,第1段会谈


“真理不应该成为政治、宗教或经济私利的牺牲品,这是我个人的信念。作为同领地的一名军官、飞行员和工程师,保护同领地的更大利益与它的所有物不受损害,是我的职责所在。然而,我们却无法防御我们尚未意识到的反抗势力。

地球与其它文明隔绝的现状,妨碍了我在这个时候与你们讨论更多的主题,除了来自同领地最广泛的关于计划活动的概要声明之外,安全与协议的因素阻止了我泄露任何其它的信息。无论怎样,我能够提供给你们一些你们可能会觉得有用的信息。

我现在必须要回到为我指派任务的‘太空站’了,由于我作为同领地军队的一名军官、飞行员和工程师的职责所带来的要求和限制,我觉得从伦理上讲,我已经提供了尽可能多的帮助。因此,我将作为一个现在-成为者,在接下来的24小时内离开地球。”



(编辑注释:接下来的几段话似乎是马克艾罗伊根据与艾罗的会谈内容,向速记员提供的个人评论。)


这意味着,艾罗即将离开她与我们接触的“替身”,因为她的飞船已经损毁得无法修复了。我们可以从容地对她的躯体进行检查、解剖和研究。她对那个替身既没有任何进一步的用途,也没有任何个人的知觉或附属物,因为还有其它的身体很容易让她使用。

然而,艾罗并没有建议地球科学家们在替身中可以找到有用的技术,虽然这具替身应用的技术很简单,却仍然大大超出了我们当前对任何方面进行分解与逆向工程的计算能力。这具躯体既不是生物制品,也不是机械物体,而是由一种独特的复合材料和不存在于任何地球类型的行星上的古代技术所制作的。

正如艾罗前面提到的,一种非常严苛和独特的社会、经济和文化等级制度普遍存在于同领地中,而且,历经了许多个黄金时代,从未到受到侵犯与更改。替身的类型和功能,根据各式各样的军衔、等级、资历、培训水平、指挥水平、服役记录,以及由每一个现在-成为者个人获得的功勋和其它任何军事勋章,专门指派给某一个现在-成为者军官。

艾罗使用的身体是专门为像她这样军衔和级别的军官、飞行员和工程师所设计的,那些在坠毁中被毁坏的艾罗同事的替身与她的并不是同一个军衔或级别,而是一种等级较低的职务。因此,那些躯体的外观、作用、组成和功能性都专门地受限于他们工作职务的要求。

在这次坠毁中损毁的下级军官已经离开他们的替身,并返回到了太空站的工作岗位。他们的替身遭受损害的主要原因是,他们是级别较低的军官,而且他们的替身是部分生物体结构,因此在耐久性和弹性方面远不如她的身体。


(编辑注释:在这一点上,以下的记录似乎是对艾罗陈述内容的概述。)


“虽然无论在哪里发现‘旧帝国’的任何残余活动,同领地都会毫不犹豫地将其摧毁,可是这并不是我们在本星系的主要任务。我确信,‘旧帝国’的意识控制机制能够最终被抑制和摧毁,然而,由于我们目前尚不清楚这种运作的活动范围,因此不太可能估算出完成这些所花费的时间。

我们的确知道‘旧帝国’的强制滤网庞大到至少足以覆盖至银河系的这一端。我们也曾从经验中得知,每一种强制信号发生器和陷阱装置都非常难以探测、定位和摧毁,并且,为这样的行动进行资源投入,并不是同领地远征军当前的任务。

这些装置的最终毁灭,将可能使你们的记忆恢复,只要在每一生结束之后,使之完好无损地不被清除。幸运的是,一个现在-成为者的记忆是不能够被永久性地清除的。

仍然有其它活跃的太空文明在这一区域继续进行着各式各样的邪恶活动,其中最为突出的就是将那些不受欢迎的现在-成为者倾倒在地球上,在这些飞船中没有同领地的敌对方或极端的反对派,他们也不会笨到去挑战我们!

在大多数情况下,除了确保地球自身不遭受持久性的破坏之外,同领地对地球和其上面的居民并不予理睬。这个银河系的此区域为同领地的附属地,是同领地的领土,并为了它认为最有利的方面去进行部署。地球的卫星(月球),以及小行星带,都已经成为同领地军队的固定指挥基地了。

不用说,任何人类或其他势力妄图在此太阳系干涉同领地的活动行为 -- 即使有这个肯定不会存在可能性 -- 都会被即刻终止。这并不是一个很严重的问题,正如我前面提到的,因为现代人类无法在开放的太空进行军事活动。

当然,我们会继续按步实施已经在进程表中持续了数十亿年的同领地扩展计划。在接下来的5000年中,由于我们朝向这个银河系中心发展,并且向除此外遍及宇宙的范围传播我们的文明,因此同领地进行的运输和活动范围将逐渐增加。

如果人类要生存,就必须合作,以便找到解决你们在地球的艰难生活条件的有效方案。人类必须要超越人的形式,并且找到他们的位置,要知道他们都是现在-成为者,而且要超越他们只是生物躯体的观念。一旦这些得以实现,就可能促使你们逃离当前的监禁状态,否则,地球上的现在-成为者们将永远不会有未来。

虽然在同领地与‘旧帝国’之间没有发动激烈的战争,可是, ‘旧帝国’通过他们的思想控制活动对地球隐蔽的对抗行为仍然存在。

当人们了解到这种活动的存在时,其影响便可以被明显地观察到。对人类的这些行为最明显的例子可以被看作是突然的,令人费解的行为事件。一个最近的实例发生在日本偷袭珍珠港之前的美国军队中。

就在袭击发生的三天前,当局有负责人下令所有珍珠港的船只入港进行安全检查,这些船只被要求将全部弹药撤出其军火库,并存储在下面。在这次袭击发生之前,尽管已经有两艘日本航空母舰被发现停在珍珠港右侧的远处,可是,当时所有的海军上将和高级军官们都在开会。

要采取的最明显的行动,应该是通过电话联系珍珠港,并向他们发出可能进行战斗的危险警告,同时将军火返库,并要求船只离港进入开放海域。

大约在日本开始袭击的六小时前,一艘美军战舰就在港口外侧击沉了一艘小型的日本潜艇。针对此事件,与珍珠港进行联系的电话汇报被更换为一种预警的电报形式,同时转换成了顶级机密的代码,此编码过程耗费了两个小时,然后还需再花两个小时对其进行解码。因此,直到珍珠港时间星期日上午10:00才收到对珍珠港发出的预警通知 -- 也就是在日本攻击并摧毁了美军舰队的两小时后。

怎么会发生这种事呢?

如果让那些对显而易见的灾难性过失负责的人们站起身来,并让其坦率地为他们的举动和意图进行辩护,那么,你会发现他们在工作中都非常忠于职守。通常,他们都在尽其所能地为国家和人民做事。然而,突然间,由于一些完全不知名与无法探查的原因,加入到这些野蛮与令人费解的境遇中,其实这种情形根本‘不允许存在’。
‘旧帝国’的思想控制活动通过一小撮心胸狭隘、守旧‘粗野的人’进行运作。他们除了玩那种在现在-成为者中进行控制和破坏的阴险游戏,别无其它目的。不然,即使对现在-成为者们不闻不问,他们也能够极佳地管理好他们自己。

这些人为制造的事件,是由意识控制监狱体系的运作者们强加给人类种族的。监狱的看守们会经常促进并拥护对地球的现在-成为者们进行压迫或极权主义的行为。为何不使囚犯们自相残杀呢?为何不把权力交给那些疯子去操纵地球的政府呢?因为那些运作在地球上罪恶政府中的人,所映射出的是隐蔽的‘旧帝国’思想控制机器向他们传达的命令。

人类种族在很长一段时期内仍然会继续谨慎对待这样的假想敌 -- 只要这样的人类种族存在。在此之前,地球的现在-成为者们将继续生活在一系列连续的生命轮回中,不停地重复下去。曾经在印度、中国、美索不达米亚、希腊和罗马寄居在人体中的现在-成为者们,经历了文明兴盛与衰落,同样的他们在当前这段时期,分布在美国、法国、苏联、非洲以及世界各地。为了再重新开始,一个现在-成为者在每一生之间都被再次返送回来,就好像这次新的生活体验是他们的唯一经历一样。于是他们在痛苦、不幸和神秘中重新开始了。

有一些现在-成为者比起其他被运送到地球的现在-成为者的时间,距离现在更近一些,由于某些现在-成为者仅仅在地球上呆了几百年,所以他们并没有早期地球文明的个人体验。由于他们没有任何在地球上居住过的经历,因此,即使他们的记忆被恢复了,也无法记起从前在这里的某段生活经历。不管怎样,他们可能会回忆起在其它星球和其它时期的某个地方生活过的经历。

其余的现在-成为者自从利莫里亚存在的第一天起就呆在这里了,在任何情况下,这些现在-成为者们都会永远呆在这里,直到他们可以冲破失忆症的循环,并且攻克由他们的猎捕者们设下的陷阱,才能够解放他们自己。

由于同领地还有三千名他们自己的现在-成为者被囚禁在地球上,因此他们在解决这一问题时存在一种利益关系,据他们了解,这个问题从来没有在宇宙中遭遇过或有效地解决过。当时机成熟时,他们会继续努力从地球上解放那些现在-成为者,不过,这需要时间去开发一种空前的技术以及完成此事的勤奋态度。”

(编辑注释:以下陈述是马克艾罗伊所做的评论。)


我认为这是艾罗作为一个现在-成为者对其他人真诚的愿望,希望我们的来生都会称心如意。


第十四章
艾罗校阅会谈记录

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


在我结束向速记员叙述前一次会谈内容的不久后,基地指挥办公室紧急召见了我,并由四名全副武装的军警进行护送。当我到达时,我被要求坐在一间非常宽敞的临时办公室里,而且里面已经布置了一张会议桌和一些座椅。在办公室中有几位我曾经在“旁听席”见过的高官,我之所以能认出他们,是因为他们都是有名望的人。

我被介绍给的那些人中包括:

空军部长(Stuart)Symington,空军参谋长Nathan(Farragut)Twining,空军上将Jimmy Doolittle(吉米·杜立特),空军上将(Hoyt) Vandenberg和上将(Lauris)Norstad。

出乎我意料的是,查尔斯·林德伯格(Charles Lindbergh)也在其中,空军部长Symington向我解释说,林德伯格先生在这里作为美国空军首席官员们的顾问出席会议。在房间中还有其他几个人并没有加以介绍,我推测那些人是这些军官们的私人助理或一些情报部门的工作人员。

所有这些突如其来的关注,不仅来自部长和空军上将们,而且还有如此闻名世界的人士,诸如林德伯格先生和吉米·杜立特,这情形使我认识到我作为艾罗的“翻译员”角色是多么的重要,同样从其他人的眼神中也可以看出来。到那一刻为止,我除了有一些肤浅的认识之外,并没有真正意识到这些,我猜想可能是由于我太全神贯注于这种特殊情况的细节所致。突然间,我领会到了我这一角色的份量,我想,从某种程度上讲,那些人出席会议是为了使这一事件在我心中留下印记。

部长指示我不要紧张,他说我并没遇到任何麻烦,他问我是否认为这个外星人会愿意回答他们已经准备好的问题清单。他解释说,他们非常渴望获得关于艾罗、飞碟和同领地以及其它艾罗在会谈记录中所透露主题方面的更多细节信息。当然,他们主要想就有关军事安全和飞碟构造方面进行提问。

我告诉他们,由于可以使艾罗信任旁听席人们的意图的征兆毫无改变,因此我十分确定艾罗也不会改变她拒绝回答你们问题的决定。我重复说了一遍,艾罗已经交流了每一件她愿意并可以自由讨论的事情。
尽管如此,他们仍坚持认为我应该再去问艾罗,看看她是否会回答问题,而且,如果她的回答仍然是“不”,那么我需要问她是否愿意阅读我在会谈中记录的“翻译内容”副本。他们想知道艾罗是否可以核实我对这些会谈的理解和翻译的准确性。

由于艾罗可以非常流利地阅读英文,部长请求在艾罗校阅记录内容并确认其准确性的期间,是否可以允许他们在场观察。他们想让她在记录内容副本上写下“翻译”是否正确,并且对任何不准确的记录内容做注释。当然,我除了服从命令别无选择,我完全按照部长的要求做了。

我得到了一份将要交给艾罗的包括签名页的记录副本,在艾罗结束校阅之后,我也将奉命向艾罗请求在封面页签名,以证明所有经她校正的翻译记录内容是正确的。

大约一小时过后,我进入了会谈房间,按照指示,在包括空军上将们(我猜测也包括林德伯格)和其他人的旁听席成员透过旁听席房间的玻璃观察的情况下,我将翻译的副本和签名页转交给了艾罗。

我坐在平时的座位上,距离艾罗对面4或5英尺远。我向艾罗递送了那个文件袋,并用心灵感应的方式将刚刚得到部长的指示传达给了艾罗。艾罗看了看我,又看了看文件袋,并没有接受它。

艾罗说:“如果你已经阅读过这些内容,而且如果你自己对它们的判断是准确的话,那么,也就不需要由我去校阅了。这些翻译内容是正确的,你可以告诉你的长官,你已经如实地转达了我们之间交流的记录内容。”

我向艾罗保证我已经阅读过它们了,而且记录的内容正是我向记录抄写员所陈述的那样。

“那么,你愿意在封面上签字吗?”,我问。

“不,我不想签。”,艾罗回答。

“我能问为什么吗?”,我说。我对为何她不愿意做如此简单的事情而困惑不解。

“如果你的长官不相信自己的下属可以诚实并准确地向他汇报,那么我在这一页上的签名又会给他带来什么样信心呢?如果他连自己的忠实职员都信不过,那么他为何会愿意相信由一位同领地的军官在一张纸上留下的墨水印记呢?”

我不太清楚面对这一情况应该怎样去说,我既不能用艾罗的逻辑去辩解,也不能强迫她去在文件上签字。我坐在我的椅子上呆了一会儿,不知道下一步该做什么。我向艾罗表示了感谢,并告诉她我需要向我的上司询问进一步的指示。我把会谈记录的纸袋放到了制服外套胸口的衣兜中,开始起身离开座位。

就在那一刻,旁听席房间的门突然砰地被打开了!五名全副武装的军警冲进会谈房间!一个身穿白大褂的男人紧随其后,他们推着一个小型的手推车,上面放着一个盒子形状的设备,在它的表面装有许多刻度盘。

我还没来得及反应,两名军警就将艾罗牢牢地按在那把加有厚坐垫的椅子上,艾罗自从我们进行会谈的第一天起就一直做在那上面。另两个军警抓住我的肩膀并将我按回到座椅上,使我动弹不得。剩下的一个军警直接站在艾罗的面前,用步枪对着她,距离她的头部不足六英寸(15.2厘米)。

身穿白大褂的男人立即把小车推到了艾罗椅子的背后,他熟练地将一个圆形的头带绑在了艾罗头上,然后又绕回到推车中设备上。突然间,他大喊道“可以了!”

这些一直按住艾罗的军警们放开了她,在这一瞬间,我看见艾罗的身体变得僵硬并颤抖起来。这一情形持续了大约15-20秒,这个操作设备的人在上面转动了一个旋钮,接着,艾罗的身体无力地跌回到椅子上,过了几秒钟后,他又一次转动了那个旋钮,而艾罗的身体就像刚才一样的僵硬,他又重复了多次同样的步骤。

我坐在我的椅子上,一直被军警们按住。我不明白发生了什么事,我被正在发生的一幕惊呆了!简直难以置信!

几分钟后,另外一些身穿白大褂的人进入了房间,他们简要地检查了艾罗的身体,此刻的她正无精打采地坐在椅子上。他们相互间喃喃而语了几句,其中一个人向旁听席的窗户挥手,接着,一张医用轮床立刻被两名服务人员推进房间。这些人把艾罗瘫软的身躯抬上了床,并且交叉地捆绑了她的胸部和手臂,然后将轮床推出了房间。

我立即在这些军警的护送下被直接带到我的宿舍,由军警在门外站岗,而我则被封闭在房间里。

过了大约一个半小时,有人敲我的房门,我开了门,空军参谋长Twining和刚才穿白大褂的设备操作员一同走进来。参谋长向我介绍此人为威尔考克斯医生(Dr. Wilcox),他让我陪同他和这位医生工作。我们在军警的尾随下离开了房间。在建筑群中经几经周转之后,我们进入了一个小房间中,艾罗已经被轮床运送到房间里了。

参谋长告诉我,艾罗与同领地被认为是对美国非常重大的军事威胁,艾罗已经被“固定不动”了,这样她就无法像她在会谈中说的那样离开并返回她的基地。如果允许艾罗去汇报她在此期间对这个基地所做的观察,那么,这将严重危及国家的安全。所以,为防止它发生,我们决定采取这样的行动。

参谋长问我是否理解这样做的必要性,我说我知道。尽管我肯定不会同意这种做法是必要的,而且我当然不会赞同这种对艾罗和我在会谈房间进行“突然袭击”的行为!然而,我并没有对参谋长说出这些想法,因为我非常害怕一旦我断言抗议,不知道对我和艾罗会发生什么。

威尔考克斯医生让我靠近轮床并站在艾罗身边,艾罗完全一动不动地静止躺在床上,我无法确定她是生还是死。其他几个身穿白大褂的人站在床的另一边,我猜测他们也是医生。他们已经在艾罗的头部、手臂和胸部连接了两片监测装置。以我受过的外科护士培训经历判断,我认为其中一个设备是用来探测大脑电波活动的脑电图机(EEG machine)。另一个设备是我认为毫无用处的一个普通的生命体征监测仪,而艾罗拥有的并不是生物躯体。

威尔考克斯医生向我解释说,他已经对艾罗实施了一系列“轻微的”电击疗法,企图将她慑服足够长的时间,以使我们的军方对这一情况进行评估,并决定下一步对艾罗的措施。

他让我尝试与艾罗进行心灵感应交流。

我进行了几分钟的尝试,可是并没有感知到任何来自艾罗的信息。我甚至无法感知艾罗是否仍然存在于这个躯体中!

“我认为你很可能已经将她杀死了”,我对这位医生说。

威尔考克斯医生对我说,他们会继续观察艾罗,而且我可能在稍后被要求返回,并再次尝试与艾罗建立沟通。


第十五章
对我的审讯

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


第二天早上,我在四名军警的护送下,从宿舍被带到了会谈房间。艾罗的厚坐垫椅子已经被搬出了房间,取而代之的是一张小桌子和几把办公椅。有人要我坐下来等待接受他人接见,几分钟过后,威尔考克斯医生同一位身穿普通西装的男士一起走进房间,此人介绍自己是John Reid(约翰·里德)。

威尔考克斯医生向我解释说,里德先生在我上司的邀请下,从芝加哥乘飞机来到这里,并对我用测谎仪进行测试!我对这种交待的吃惊反应是显而易见的,在我有可能对任何事情说谎的暗示之下,威尔考克斯医生注意到我明显地受到了惊吓并遭到了侮辱。

虽然如此,里德先生还是在我椅子边的桌子上开始设置他的测谎仪,于此同时,威尔考克斯医生用一种平静的口吻继续解释说,这个测试结果将对我的自我保护方面进行管理。由于所有与这个外星人会谈的过程都是通过心灵感应进行的,而且艾罗也拒绝了去阅读并证实记录内容的准确性,这意味着记录内容中所包含陈述的事实与准确性,都完全取决于我个人单方面的陈词。因此,从“专家们”的主张来看,意思是他自己,除了使我通过服从于一种殴打测试和心理检查进行测定的方式之外,他们没有任何其它可靠的方法去检验记录内容的准确度,无论记录的内容是否应该受到重视,他的语气表达得很清楚,“或者就当作一个单纯女子妄想说大话的行为,以消除顾虑!”

里德先生用一根橡胶管缠绕在我的胸部前后,同时还包括在我的上臂缠着的血压计袖带。然后,他在我的双手和手指表面放置了一些电极,他解释说,他在会谈过程中将表现得非常客观,因为他已经彻底在科学性的审讯中通过了培训。这种培训目的应该是使他的审讯从人类的过失中获得解脱而已。

里德先生向我解释说,针对他和威尔考克斯医生将向我所提问题的反应,实际的心理变化过程将通过一个小型仪表盘传达出来。仪表的读数将在桌上仪器旁边的曲线图纸中被跟踪记录,纸上的相似曲线图将由里德先生与威尔考克斯医生“专家”的协助下,进行关联与解释,以决定我是否一直在说谎。

里德先生与威尔考克斯医生以一系列无伤大雅的问题开始,而在关于我与艾罗的会谈方面,则进入了一种更直截了当的审问形式。

以下是我回忆起的问题:

“你叫什么名字?”

“马蒂尔达·欧’丹奈尔·马克艾罗伊”,我回答。

“你的生日是哪天?”

“1924年6月12日”我说。

“你的年龄是?”

“23岁”。

“你在哪里出生的?”

“加利福尼亚,洛杉矶”,我说。
(以此类推的问题。)

“你会使用心灵感应交流吗?”

“不会,我从来都无法与任何人这样做,除了艾罗。”我说。

“你向速记员陈述的内容中有任何伪造的情形吗?”

“没有”,我回答。

“你是否有意无意地虚构了任何你与艾罗之间传达的信息呢?”

“没有,当然没有了”,我说。

“你在有意地试图欺骗任何人吗?”

“没有。”

“你在试图阻碍这个测试进行吗?”

“没有。”

“你的眼球是什么颜色?”

“蓝色”。
“你是天主教徒吗?”

“是的。”

“你会在天主教堂的忏悔室中对你的教区牧师讲述与对基地速记员诉说的同样的故事吗?”

“是的。”

“你在试图向我们隐瞒什么吗?”

“没有,什么都没有。”

“你相信这个外星人与你交流的每一件事吗?”

“是的。”

“你认为你自己是一个容易受骗的人吗?”

“不是。”

像这样风格的提问持续进行了一个多小时,终于,我脱离了测谎仪的连接线,被允许回到我的宿舍,而且依旧由军警看守着。

后来,到了下午,我回到了会谈房间,这一次桌子的位置被一张医用的轮床替换了。威尔考克斯医生这次由一个护士陪同,他让我躺在这张床上,他说他被要求向我提问与测谎过程中由我回答的同一系列的问题。

然而,这一次我所回答的提问,是在能使人吐露实情的麻醉药(“truth serum”)作用下进行的,也就是众所周知的硫喷妥钠,作为一个受过培训的护士,我很熟悉这种巴比妥酸盐的药物,因为它有时侯被用作麻醉剂使用。

威尔考克斯医生问我是否对这样的测试存有异议,我告诉他说,我没有什么可以隐瞒的。我无法记起关于这次会谈的任何事情了。由于那些使我头昏眼花药物的作用,导致我虚弱得无法行走,所以我猜想当我回答完这些提问的时候,就被那些军警们护送回宿舍了。不管怎样,那晚我睡得非常安宁。

由于我在那之后没有被再次提问过问题,因此,显然这些盘问没有获得任何可疑的结论。谢天谢地,在余下的时间里,我可以独自留在基地了。



第十六章
艾罗起程了

(马蒂尔达·欧’丹奈尔·马克艾罗伊的自述)


在威尔考克斯医生使艾罗“丧失能力”后又过了3个星期,这期间我继续留在基地,主要限于我的宿舍中。我每天一次被护送到艾罗的房间,我猜测威尔考克斯医生和其他人仍然在继续监视着躺在床上的艾罗。每一次我进入房间,都被要求尝试再次与艾罗进行交流,而每一次都没有任何反应,这样让我感到极度的悲伤,时间一天天地流逝,我对艾罗的“死”越来越确信与不安,如果“死”是一个合适词汇去描述这情形的话。

每天,我都重新阅读我与艾罗交谈的记录,寻找一种可以提醒或帮助我重新建立起与艾罗交流的线索。我仍然保留着那个纸袋与那些等待艾罗签字的记录内容副本,直到今天,我都不明白为何没有人曾提出过要我归还它们。我猜想,他们可能是在所有受刺激的过程中忘记了记录副本的事情。我并没有主动提出归还它们,在我呆在基地的全部时间里,我一直把那些记录副本藏在床垫的下面,而且自那时起,就一直将它们保留在我的身旁。你将是第一个看到这些记录内容的人。

由于艾罗的身体不是生物学躯体,除非它发生移动,否则医生无法探测该躯体的生死状态。当然,我知道艾罗作为一个现在-成为者如果没有在意识上赋予这个躯体生机,那么它将不会移动。我向威尔考克斯医生这样解释好几次了,而每一次他只是给我一个领情的微笑作为回应,拍拍我的胳膊让我再继续尝试。

在第三个星期结束时,威尔考克斯医生告诉我将不再需要我参与此工作了,因为军方决定将艾罗转移至一个更大更可靠的军事医疗机构,那里具备更好的设备去应对这样的情况。他没有提任何有关这个机构的所在地的信息。

那是最后一次我看到艾罗的替身。

第二天,我接到由(空军)参谋长Twining签署的书面命令,那个命令说我已经完成了对美国军队的服务,正式地撤销了我更进一步的任务职责,而且,我将获得光荣退伍以及充裕的军人养老金。我也将被军方重新安置,并给予一个新的身份和相匹配的档案。

伴随这些命令而来的,还有我收到的一份要求我阅读并签名的文件,这是一封保密宣誓文件,文件中的文风充满了“法律术语”,可是,其要点十分清楚,就是要我永远不与任何人讨论有关我在军队服役期间,看到的、听到的或经历的任何事情 -- 背叛美利坚合众国的行为将遭受死亡的惩罚。

作为处理结果,除了我将受到由政府实施的来自政府的保护之外,还被纳入了联邦政府的保护程序之中。换句话说,只要我依然保持安静,就可以一直活着!第二天早上,我被送到一架小型军用运输机上,飞往一个重新安置的目的地。在短期内穿梭了几个特定区域之后,我的行程最后终止在了格拉斯哥(Glasgow),在蒙大拿州的佩克堡附近。

在我被安排登上运输机的前一天晚上,我躺在床上沉思整个的事件,想知道对我和艾罗究竟发生了什么,就在这时,我突然听到了艾罗的“声音”,我在床上直起上身坐了起来,并打开了床头柜上的灯!我在几秒钟内疯狂地环顾着房间四周,接着,我认识到了那就是艾罗,这位现在-成为者。她的身体并没有同我呆在这个房间里,当然,也没有必要这样做。

她说“你好!”。她想法的语气显得平和、友好,那是艾罗,不会错的,我甚至都没有丝毫的怀疑!

我用思想传递说,“艾罗?你还在这里吗?”她说她还在“这里”,可是并没有在地球上的某个躯体中,当医生和军警们在会谈房间中对我们动手时,她已经返回到她在同领地的岗位上了。得知我现在很好,而且将被平安无恙地释放,她很高兴。

我想知道她是怎样从他们那里逃脱的,我曾担心过艾罗可能遭到了他们使用电击设备的损害,艾罗说她在电击处理之前得以脱离身体,从而避免了电流运行通过身体。她想让我知道她很安全,不用我担心。我感到非常安慰,至少可以这样说!

我问艾罗,我是否将再也见不到她了,艾罗的回答使我恢复了信心和勇气,我们都是现在-成为者,我们不是物理的躯体。而现在,她已经在时空中将我定位了,我们可以一直保持沟通。艾罗希望我一切都好,我与她之间的交流暂时结束了。


来自马克艾罗伊夫人邮递的稿件


编辑注释:下列通信的内容单独地装在一个信封中,封面上写着“最后再阅读它”的字样,它连同原始的信件、会谈记录以及其它解释的笔记内容,都装在了我所收到来自马克艾罗伊夫人的信封中。下面就是通信的内容:


回溯至1947年所发生的事情,这个信封中其余的资料就是该故事的最终结局。然而,就在政府将我安排在最后重新安置的目地的几个月后,我仍然继续与艾罗定期地进行交流。

自从罗斯威尔坠毁事件发生起,这种情形已经整整持续40年了,而且自那时起,我之所以能够通过心灵感应的方式与艾罗交流的一个原因是:我是曾经丢失军队中的3000名成员之一。通过同领地的安奴纳奇任务(Annunaki Mission)以及他们使用的“生命之树”探测仪,作为这些努力的结果,现如今,所有丢失军队的成员们都已在地球上被确定了方位。

通过我与艾罗的交流,我已经恢复了一些我在地球度过的8000年里的记忆,对比长长的过往经历,其中大部分记忆并不是特别重要的,但是,它已经变成了使我作为一个现在-成为者自我意识与能力恢复的一个必要的垫脚石。

我还可以记起一些在同领地远征军中生活过的模糊的回忆碎片。我在那里也是一位护士,在大多数情况下,我一直都一次又一次地以护士的形象出现在不同的时代中。我之所以一直坚持做护士的原因,是因为这一行对我来说很熟悉。我很喜欢去医治人的工作,工作对象同样还有那些同领地中生物种族的成员们,与哺乳动物比较而言,他们的身体看上去更像是昆虫,尤其是他们的手。即使那些替身有时候也会需要进行一些修补。

由于我回忆起了关于我更多的过去,因此我认识到我的生命将在未来中存在,来世不仅存在于过去,它也存在于未来,所以从这一点意义上讲,我仍然无法彻底返回同领地。正如所有其他的现在-成为者们一样,我被判入这个叫做地球的活生生的地狱中接受永久的监禁,直到我们能够使“旧帝国”的强制滤网失效为止。

由于我将不会把我的生物躯体保留很久,我强烈地意识到,过不了多久,我就会通过“旧帝国”的记忆缺失处理过程被重新回收,然后附着在另一个婴儿的身体中从头再来 –- 不携带任何从前的记忆。

正如你所了解的,同领地远征军已经花了数千年的时间去解决这个问题。艾罗说过,尽管同领地已将所有丢失的军队将领和队员全部定位,可是,若想成功地释放他们,还是要依靠这些已经留在地球上的现在-成为者们。由于这并不是同领地远征军在这个星系的首要任务,因此同领地中心指挥部在当前不能授权任何职员或资源去实施“救援任务”。

所以,如果地球上的现在-成为者们想逃离这座监狱,那么,可以这么说,这将是一种“内线的工作”。囚犯们将不得不找出使他们自己逃脱的办法,在地球过去的10000年中,已经发展了各式各样的方法使现在-成为者们恢复记忆和才能,可是,迄今为止,没有任何一个被认为是持续有效的解决办法。

艾罗提到,最重大的突破是在2500年前由乔达摩·悉达多做出的,然而,由佛陀最初传授的教导与技能,都在千年之后被涂改或遗失了。他的哲学中所包含的实用技能被不正当地用到了机械式的宗教仪式中,从而被神职人员们当作一种控制或奴役的自我服务的工具使用。

然而,另一个重大的进展在最近发生了,有一位熟知的同领地远征军太空站指挥官,曾经在“旧帝国”舰队中担任了重要的工程师和军官的职位。大约在10000年前,由于他领导了一场反抗“旧帝国”政权的兵变活动,因此变成了一名“贱民”被判决来到地球。这位工程师曾在数千年前,接受了高级科学即兴创作理论的培训。这个人已经将他的专长用于帮助同领地解决当前明显无法解决的丢失军队成员的救援任务中,同样也针对了在地球上的现在-成为者们。

他与协助他的妻子对现在-成为者们的记忆构成方法,经过仔细观察和实验分析之后,发现现在-成为者们不但能够从失忆症中复原,而且还能重新获得已丧失的能力。二人一同发现并开发了他们曾经使记忆恢复的有效方法。他们最终将这些方法编辑成了法典,这样其他人就能够安全地进行练习,并应用到他们自己和其他人身上,这个过程不会被“旧帝国”的思想控制运作者们察觉。

他们的研究过程还显示出,现在-成为者们能够同时占据并操控一个以上的躯体 -- 在那以前,一直都认为这样的情况仅限于同领地的官员们。

有一个实例反映了这样一位工程师,他的某个前世是苏莱曼一世。他的助手是一位从奴隶身份提升的后宫婢女,后来成了他的妻子,他们二人统治着奥斯曼帝国。同时,她也寄居在另一个身体中,并以伊丽莎白女王的身份统治着自己的帝国,作为英格兰女王,她从未结婚,因为她已经嫁给了奥斯曼帝国的最高统治者(Sultan)。

在后来的某次生命轮回中,他化身为塞西尔·罗兹(Cecil Rhodes)。就在他作为塞西尔·罗兹生活的时候,她又一次成为了一位女王(Princess Catherine Radziwill),这一次是在波兰。同样,她对晚年的罗兹进行的追求并未成功。不管怎样,在接下来的一世里,他们再次重逢,并结婚成家,在他们的生命中又一次顺利地工作在一起。

在这种现象中发现了其它几个值得注意的例子,比如,精炼钢铁的方法是由同一个现在-成为者所寄居的两个身体同时发明的。其中一个人生活在肯塔基州,名叫Kelly,另一个是住在英国男子,名叫Bessemer,他们都在同一时间想到了同一种处理方法。

另一个例子是电话的发明人,亚历山大·格拉汉姆·贝尔,而且,电话在同一时期也被其他几个人发明了,其中包括埃利萨·格雷(Elisha Gray)。对该电话的构想是在世界各地的几个地点同时产生的。这样巨大的能量和才干,在进行复杂研究工作的同时,可以在几个所处地点不同的身体上进行运作,这些都是由某一个单独的现在-成为者所完成的!

感谢这些意外的发现,同领地已经能够使丢失军队中的某些现在-成为者,在一种有限制的、兼职的原则下,返回到尚未废弃的工作职责中。比如,目前在地球上占用着生物体的两位年轻女子,同一时刻还在任职同领地远征军在小行星带太空站的通讯交换机操作员,这些操作员负责在同领地远征军与同领地总部之间传达通讯的信息。
最近,同时继续生活在地球上的我,已经能够恢复我在同领地远征军的一些自己的工作职责了。然而,这并不是一个轻而易举的任务,而且只能在我的生物躯体处于睡眠状态的时候才可以进行。

得知我们可能不必永远地停留在地球上,这让我非常非常地高兴!逃脱的希望是存在的,这不仅仅针对那些丢失的军队成员,而且还有许多地球上其他的现在-成为者们。

不管怎样,所有的现在-成为者们都可以通过这个信封中所透露的信息,更进一步地认识到在地球上的真实境遇,这也是为什么我会把这些信件与访谈记录发送给你的原因,我想让你将这些文件资料公开发表,我想让地球上的现在-成为者们可以有机会了解,究竟地球上实际在发生着什么样的事情。

我敢肯定,大多数人并不会相信这些,因为这似乎太不可思议了,没有任何一个“通情达理的”人会相信其中任何一个字。不管怎样,生活在这个监狱星球电子操控的幻觉中,它仅仅对某一个记忆被清除并以虚假信息代替的现在-成为者来说,感觉好像是“难以置信”的事情。我们一定不要让表面上无法相信我们所处境遇的想法,阻碍了我们去勇敢面对它的真实性。

坦白地说,“动机”与事实本身并没有任何的关系,根本不需要什么动机,因为事物就是它们本来的样子。如果我们不去面对我们所遭遇的现实状况,我们就会永远停留在“旧帝国”的控制之下!“旧帝国”现在遗留下来的最强悍的武器,是我们关于他们对所有地球现在-成为者们所作所为的愚昧无知。怀疑与保密,是他们拥有的最有效的武器。

将信封中的记录内容作为“顶级机密”进行分类的政府情报机构,只不过是由那些通过“旧帝国”监狱运作者隐蔽的催眠指令进行管理的现在-成为者们所组成的,他们并不比无意识的机器人们强多少。他们是看不见奴隶主的无知的奴隶 -- 以及所有更多甘愿成为奴役他人的奴隶的人。

地球上大部分的现在-成为者们都是好的,正直的,有才能的生命:艺术家们,管理者们,天才们,自由的思想家们,以及没有伤害任何人的革命家们,真的。除了对那些关押他们的人犯罪者们,他们不对任何人构成威胁。
他们一定要认识到“旧帝国”记忆缺失处理与催眠指令的运作活动,他们应该去回忆起他们的前世。实现这些的唯一办法是去传递信息,互相配合以及进行抵抗。我们最好去告诉其他人,而他们最好去公开地进行相互讨论。传递信息是对抗保密行为与压制活动的唯一有效的武器。

这就是为何我请求你去讲述这个故事的原因,请将这些访谈记录的内容尽力分享给更多的人,如果地球上的人们被告知当前真实的处境,那么他们可能会开始回忆,他们是谁,以及他们曾来自何方。

现在,我们可以开始自我释放了,用言辞去实施援助。我们又可以自由了,我们可以再次成为我们自己了。也许,在我们永恒的未来中,我会以某一个身体或不需要身体的状态,亲眼见到你。


祝所有人都好运,

马蒂尔达·欧’丹奈尔·马克艾罗伊


-- 马克艾罗伊夫人提供的资料结束 --
(译者结语)

我曾在一年前翻译了《地球史上最震撼的访谈》。比较而言,这一部官方专访的记录内容,应该可以称为“星系史上最震撼的访谈”。这些迟到了60年的消息,经历了某些应该算是必要的转变过程。希望看完这些以后的你,在不久的将来,能够明白自己从哪里来,要往哪里去…


英文版原文推荐阅读网址如下:

1、http://www.bibliotecapleyades.ne ... /alieninterview.htm


2、http://books.google.com/books?id ... &q=&f=false

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(个人认为,此文可以关注一些终极问题的想法尝试延伸,就如一个点的四面八方,不要情绪上爱或恨,不要情绪上喜欢或厌恶的存在,才有其自身的自由存在,不过这点在比较思维和一切为身边环境的用概念中,通常会进行必要的定义而失去独立自由存在的感觉)

[ Last edited by zzz19760225 on 2016-5-20 at 13:09 ]
作者: zzz19760225     时间: 2016-5-19 19:22    标题: 此篇被证伪

爱因斯坦最神秘预言:科学的终极归宿是佛教
2016年05月12日 06:44
来源:凤凰佛教综合

6363人参与 571评论


爱因斯坦(资料图)

编者按:佛教诞生后的两千多年历史上,主要传播在东方世界,近代以来,伴随着人类文明的广泛交融和科学技术的发展,佛教在西方引起了广泛的兴趣和认同。许多地位显赫的人要么是佛教徒,要么是佛教的赞同者。其中世界公认的人类史上最伟大的科学家爱因斯坦在自传中讲到,他不是一名宗教徒,但如果他是的话,他愿成为一名佛教徒。那么科学发展的未来方向会是什么呢,佛教与科学对宇宙的认识又有什么异同呢,佛教与科学最终会发生怎样的交集呢,面对这个事关人类文明未来命运的议题,世界最顶级的科学家又有过怎样的预见与看法,本文为我们提供了一个非常重要的启示。

爱因斯坦说:“如果世界上有一个宗教不但不与科学相违,而且每一次的科学新发现都能够验证她的观点,这就是佛教。”“如果有一个能够应付现代科学需求,又能与科学相依共存的宗教,那必定是佛教。”“佛学这种直觉的智慧,是一切真正的科学动力。世界上如果有什么真正的宗教的话,那就是佛教。”“未来的宗教是一种宇宙宗教。它将是一种超越人格化神,远离一切教条和神学的宗教。这种宗教,包容自然和精神两个方面,作为一个有意义的统一体,必定是建立在由对事物的——无论是精神,还是自然的——实践与体验而产生的宗教观念之上的。佛教符合这种特征。”“空间、时间和物质,是人类认识的错觉。”

佛教宇宙观

英国著名天体物理学家斯蒂芬.霍金向全球网民提出了一个问题:“在一个政治、社会、环境都很混乱的世界,人类如何走过下一个100年?”这位著名的物理学家悲观论调来自于人类现有的科技水平和可怕的环境危机,他认为目前毁灭地球的危机正在不断积聚,人类必须找到新家。其实,如霍金之类的科学家很多,他们大都认为地球人是宇宙的孤儿,而且必须迁移。果真如此吗?让我们看看佛教的宇宙观吧,也许他会给我们带来莫大的启示。

佛教的宇宙观与基督教的上帝造世界、地心说、日心说截然不同,尽管现在科学早已打破以基督教为首的宗教枷锁昂然前行,但是佛教的宇宙观与现在科学地发现越来越吻合,并对未来的科学宇宙观具有重大的指导意义。

佛教称我们通常所说的银河系为娑婆世界,并早在现在天文学发现银河系有10亿颗恒星之前就已断定,娑婆世界(银河系)是由10亿个小世界组成,每个小世界都包含一个太阳和一个月亮。同现在天文学的推测和肤浅认识不同,佛教对银河系(娑婆世界)的认识相当完备,譬如,认为银河系由三千大千世界组成,即娑婆世界(银河系)由一千个大世界组成,每个大世界由一千个中世界组成,每个中世界又由一千个小世界(相当于一个太阳系)组成,这就是三千大千世界,总计有10亿个小世界。



佛教“小世界”图解(资料图)

佛教对小世界的认识与我们通常所说的太阳系有所不同,通常我们认为包括地球在内的九大行星都是围绕着太阳转的,太阳是太阳系的绝对中心。佛教宇宙观里,小世界的中心不是太阳而是须弥山,太阳与月亮都在须弥山的半腰旋转。地球被称为南赡部州(或阎浮提),与之对应的还有三大部州——北俱卢州、东胜神州、西牛贺州,分别分布在须弥山的南北东西四个方向。

佛教对外星世界的认识

现在科学至今尚未证实地球之外还有没有人类,好像人类是宇宙的孤儿似的。假使宇宙中有人,仅凭地球人的能力是很难发现和证实的,我们的飞行器不仅至今尚未飞出过太阳系,连对太阳系本身的探索也仅仅处于皮毛阶段。而佛教早就断定,宇宙之中充满人类,不仅如此,娑婆世界(银河系)10亿个小世界中也都有人,而且我们的这个小世界里包括地球在内的四大部州都有人类生存,其中北俱卢州人寿命达到几乎恒定的1000岁。既然在太阳系人类相互之间近在咫尺,为何那三大部州的人类我们至今未能发现?他们居住的星球到底叫何名字?难道是时空折叠或多维空间使我们相互隔离?还是存在着什么特殊的宇宙屏障?其实何止三大部州及其人类我们没能发现,就连须弥山我们也未找到,须弥山到底何物?星球?黑洞?反物质?暗物质?特殊场?



现代科学描述的太阳系(资料图)

现在科学描述的包括地球在内的九大行星相对太阳的运行轨迹都是椭圆,根据相对运动原理,太阳相对于地球的运动轨迹自然也是椭圆。我们总认为月亮是围绕着地球转的,且其轨迹亦是椭圆。为什么我们看到的太阳系星体运动轨迹总是椭圆?这一点可以根据佛教的宇宙观得出清晰的答案。佛教认为,四大部州相对须弥山的位置是固定的,只有太阳和月亮围绕着须弥山旋转,四大部州在须弥山的基部,太阳和月亮在须弥山的腰部,如果太阳和月亮绕须弥山做圆形运动,它们相对于地球的运动轨迹自然就是椭圆的。

整个银河系总计有10亿个小世界,每个小世界都有四大部州,每个部州都有人类。那么其中有没有科技水平远超过地球的呢?他们能否率先发现地球?根据佛教经典的描述,所有小世界对应部州的人类状况是相似的。也就是说,银河系中有10亿个北俱卢州,所有北俱卢州人的寿命都是1000岁;银河系中也有10亿个地球(南赡部州),这10亿个地球的文明程度和科技水平也是近似的。所以说,我们没有发现他们,他们也未发现我们,其他地球上的人类也如我们一样在苦苦寻找着宇宙中有人的证据!

佛教宇宙观告诉我们,我们在宇宙中并不孤单,我们不是宇宙的孤儿,我们的科技还极其有限,有限到连近在咫尺的同类都无法发现。

佛教对生命层级的认识

在佛教宇宙观里,不仅银河系里到处充满着人类,而且宇宙生命的形式也不止人类和动物。比人类高级的生命叫天(即通常所说的天神),比人低一级但比动物高级的是阿修罗(即通常意义的鬼),比动物还低级的是饿鬼和地狱,这就是佛教通常所说的六道生命。其中,天的层次较多,从下至上依次为——四天王天、忉利天、须焰摩天、兜率陀天、化乐天、他化自在天、梵众天、梵辅天、大梵天、少光天、无量光天、光音天、少净天、无量净天、遍净天、福生天、福爱天、广果天、无想天、无烦天、无热天、善见天、善现天、色究竟天、摩醯首罗天、非想非非想处天等。

提到鬼神(即阿修罗或天、鬼等六道众生中除人道与畜生道之外的众生),人们的第一反应就是斥之为迷信高呼曰无或者信其有之却顶礼膜拜。前者为唯物主义者,总以为人死如灯灭,生命轮回之说纯属虚妄;后者即通常的唯心论者,不仅迷恋鬼神顶礼鬼神,甚至有的干脆以为人死即为鬼或神,对于轮回真谛亦不清晰。

其实,在佛教看来,生命是由灵魂及其载体(肉身)构成,六道生命因其载体不同而迥异。在六道中,与人的生命载体相似的只有动物和地狱,但人、动物、地狱生命也因其生存环境和肉身结构成分的差别而不同,地狱生命因在地下而难知难见,只有动物才与人类朝夕相伴互相关注。除此之外,天、阿修罗、饿鬼的肉身与人类大大不同,如果说人与动物的肉身物质是阳性的话,那么天、阿修罗、饿鬼的肉身物质即为阴性,这就是为什么我们看不见鬼神而鬼神却能看见我们的缘故。

由上可知,人死并不立即为鬼神,而仅是灵魂脱离了肉身。当这个游离的魂魄与其他生命载体的胚胎相遇时,就会成为其他生命,与人的胚胎相遇就会再度为人。可见,人死后的灵魂能够与鬼神胚胎结合的仅是其中的一小部分,人死不一定为鬼神!

既然佛教承认鬼神存在,那么会不会如小说影视作品描述的那样为祸人间呢?不然。佛教认为,生命在六道间轮回,轮回的根源就是因果报应,广植善缘者就会为天为人次为阿修罗,恶缘多者则为动物、饿鬼,最差者入地狱。鬼神因其肉身为阴性物质,因而便拥有人所不易拥有的阴性功能,能在一定程度上察知因果报应和轮回之事,所以,即便他们不思为善也不会轻易敢于为恶,宇宙无情的生命轮回法则令其生畏。但是,这不意味着他们对于阳性物质的生命没有影响,正如人与动物关系极为密切一样,阳性生命和阴性生命之间也是相互依存和作用的,只不过阳性生命无法察觉而阴性生命心知肚明罢了。一般认识上,天神都是善的,鬼都是恶的。事实上,天神虽善却并不轻易为善,因为他们还要及时地享受天福和天乐。鬼虽恶却不敢轻易为恶,因为他们的福慧比人要差,人身上的阳性力量对其有较大的牵制。同鬼神察知部分因果不敢轻易为恶不同,人由于缺乏阴性功能对宇宙生命的轮回法则无法直观地感受觉知,因而常常放浪形骸忘乎所以,在宇宙六道生命里,反而人类为恶最甚,这就是所谓的无知者无畏吧!

六道生命都以我们生存的世界为寄存根基,我们的世界是娑婆世界,也就是银河系。同现在科学确认的星系星体有生有灭一样,佛教早就完整描绘了娑婆世界生灭循环的轨迹。在佛教宇宙观里,其基本的时间单位是“劫”,劫有大劫、中劫、小劫之分,一个大劫包含四个中劫,一个中劫包含二十个小劫。一个大劫就是一个世界的生命历程,它包含“成”(形成过程)、“住”(形成后的持续留存过程)、“坏”(损坏老化的过程)、“空”(空空荡荡一无所有的时期)四个中劫过程,其中“住”这个中劫是唯一的有人和动物生存的时期,我们目前正处于“住”这个中劫的初始。所以说,佛教认为,任何一世界都要经历“成、住、坏、空”的循环演变过程。

佛教对宇宙时空的认识

佛教对时间的计量是以人的寿命为参照的,在佛教宇宙观里,一个小劫包括一个减劫和一个增劫,所谓减劫就是人类平均寿命是依次递减的,所谓增劫自然是指人类寿命依次递增。佛教认为,人类寿命每一百年平均或增或减一岁,目前我们就处于“住”中劫第一小劫的减劫之中,也就是说我们人类寿命的现在总趋势是递减的。佛教还认为,娑婆世界人类所能达到的最高平均寿命为8万4千岁,最低平均寿命为10岁,也就说我们人类平均寿命递减至10岁时就会反弹,转而进入寿命依次递增的增劫之中。人类寿命从平均8万4千岁一路衰减到10岁,然后再递增至8万4千岁,其间所经历的时间即为一个小劫。

每个大劫的终了,都要经历或者火劫或者水劫或者风劫的不同毁灭方式。火劫的毁灭度最小,只能从地狱一路燃烧至色界初禅天天;水劫的毁灭度大些,但仍比风劫小,只能最高淹没至色界二禅天;风劫的毁灭度最高,连色界的三禅天也一并吹坏。这样,我们娑婆世界要经历56个火劫、7个水劫和最后一个风劫总计64个大劫才会彻底地破坏掉。

那么,人类到底是如何起源的呢?在佛教宇宙观里,既非天神创造,亦非生物进化,而是由光音天的天神们演化而来。话说娑婆世界的形成过程已近尾声,大地甘泉密布、醇香甜美,光音天的天子们周身光明,驰骋游戏于天地之间。他们终究禁受不住大地甘泉香味的诱惑,慢慢地痛饮起来。因为他们阴性身体里摄入了越来越多的阳性地味物质,身体便不断沉重,光明不断退失,慢慢地就再也飞不起来了。由于地质的演化不断持续,所食地味也愈来愈醇厚,消化吸收完毕后终于有渣滓和废水出现,为了方便废物的排放,他们的身体下部裂开并出现了前后二阴。由于前阴的裂变差异,出现了男女的区别,男女彼此好奇摸索并相互进入对方的身体,便有了人类初始的淫欲。淫欲的滋长导致了胎生繁殖的出现,人类于是便正式出现。这就是佛教的人类起源说。

[责任编辑:于发文 PFO005]
标签:佛教 世界 科学

[ Last edited by zzz19760225 on 2016-5-20 at 13:17 ]
作者: zzz19760225     时间: 2016-5-19 19:24
"心无挂碍,无挂碍故"出自那本佛经
宗教
专业回答
职业健康 2012-03-10 13:25
应该是心经啊。

般若菠萝蜜多心经
观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界,无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦集灭道,无智亦无得。以无所得故。菩提萨埵,依般若波罗蜜多故,心无挂碍。无挂碍故,无有恐怖,远离颠倒梦想,究竟涅盘。三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多,是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提萨婆诃。

【般若】 这是梵文,我国名为大智慧。因为中国文字难尽其义,所以仍用原文,并且尊重这几个字,所以不译。这个般若,全是说心的妙用。上自佛,下至众生,无不由此而成佛道,了生死,度苦厄。论其性体,是不生不灭的金刚;论其相貌,却是无形无状的实相;论其妙用,乃是不可测知的圆通神妙。这个般若,是人人有分的,佛和众生都是平等的;不过佛是开了般若慧,众生是有而不开,被无明所蒙住了。至于般若两个字,解释却有许多字,当云“通达世间法出世间法,融通无碍,恰到好处,而又不执取诸法的大智慧。”才能尽其义。因为世间法人事等等,都是佛法。佛是觉义,能觉悟世上一切人情世故。尽了人道,才可成佛。总之,入世出世,只是一心,颠倒烦恼,贪嗔痴迷,是六道众生的心;如能空净自在,不固执,便是佛菩萨的心。所以离世法,便没有佛法;离了般若,只有作孽受苦厄的分了。
【波罗】 此言彼岸;因为有个度字,所以假定一条生死河,众生在苦恼的此岸,要度过到清净的彼岸,用来比喻,不是真有此岸彼岸。
【蜜】 是到的意思,是到了果位了。果位是究竟涅盘,涅盘就是清净。
【多】 是上面的意思。到彼岸之上,才是究竟。现在假分五步:第一步在此岸;第二步入流,是下了渡船了,是初发心的人,亦是初果罗汉;第三步是中流,船在河中间,如声闻缘觉;第四步到了彼岸,是十地以下的菩萨,终不是究竟;必第五步上岸,“多”舍去了船,即是舍去了法见,扫除了执心,斯是了无挂碍的等觉菩萨和佛。
【心】 心是什么?是个影子,不能说有,不能说无:所以无形段,不过是六根(眼、耳、鼻、舌、身、意)和六尘(色、声、香、味、触、法)相对起了认识,叫做六识(眼识、耳识、鼻识、舌识、身识、意识),所以是集起的。就是心同外境集合而缘起的幻影,即名幻心;心中起的道理,叫做幻法;执住个幻我成个幻见,于是成熟了,就有六道生死。但造成这个生死的是幻心,要开般若智慧了脱生死的,还是要用这幻心;成到佛(涅盘),也是用这幻心,你既然知道是幻的,那么就有幻心造成幻法,一切人事等等,六道生死涅盘,还不是一样是幻的?由此可觉本来没有生死,都是冤枉造作。既无生死,就用不着涅盘了,所以说诸法空相,涅盘生死等空华,即是此意。但又为什么分真心妄心呢?这是不得已而替初学的人说,其实心,根本不有,不可得,又分什么真和妄呢?不过幻心不能除,人事上一切的幻用不能废,所以权分真心妄心。真心是无心之心,何以叫无心之心呢?即是不起念时,而见闻觉知仍旧了了,却无分别,寂然不动的,此是真心;如一起了念,分别人事,而可以心不颠倒,亦不逐境流浪,顿然归到无心本位,此还是真心。至于念念流浪,不觉渐渐入了迷途,此名妄心,但本体勿失的。这部心经,就教你凛觉的法子,用智慧观照什么是心?什么是苦厄?又如何回归到清净寂灭无心之心的本位?所以名为般若波罗蜜多心经。
【经】 有许多意思:如“路”,指示我们回复真心之路的;“法”,一切方法;“贯”,贯通前后的义理;“契”,契合各人的机,各事的理,有这几种解释。现在二百六十个字,是文字般若,指示我们观照般若的方法;照此去做,实证实相般若的究竟,总不出众生心行中事,所以经是完全指我们自身而说的。
此经共有七个翻译,这是唐朝三藏大师玄奘所译,文是简单的,义是深奥的。虽有七译,意义是一样的。读经当重意义,不可徒在文字上死执。此经是替大乘菩萨登佛位说的,表至高无上的佛境,意境只有自己晓得,说不出的,所以叫做无字真经。并不是真的无字,愿学人自己领会自己的境界,到了如何地位;至于佛的境界,却不是二乘人或十地以下的菩萨可以测知的。我们东土人,大乘根器多而厚,所以不论男的女的,识字不识字,都喜欢读这个经;譬如人闻香,个个人知道香味好,但多半不知道是什么香;而受薰是平等的,所以不可思议。以上释题竟。
【观】 定下了心,运想那个道理叫做观。这个观,是已证到果地圆成的妙观,不是因地初修作观的观,是大自在观,般若的大机大用已经启发,心无能观,亦无所观,是能所双忘的妙观。
【自在】 是无可无不可的自在,不是自由。自由是不肯受拘束的,但环境不如你的意思,便苦了。独有自在,是到处能安,自然地不受环境所困,一切好坏随缘;乐亦不喜,苦亦不恼,知道他是本来空,自己有主宰的。这个自在,是指大自在。
【菩萨】 是菩提萨埵的简称,能自己觉悟,再能觉悟人的谓之菩萨;所以是人天的导师,为三界的善知识。三界是:(一)欲界,由人的一部分下至五道;(二)色界,指天道;(三)无色界,指禅天;总是在六道中。菩萨分在家,出家,地前,登地,十地等觉,最高是一生补处菩萨,就是佛退位后,他来接位的,如此土的弥勒佛,西方的观世音大士。这个菩萨,是指十地等觉将登佛位的大自在菩萨。
【行】 心行,心中起种种妙观妙行的大用,作种种自利利他二事业。
【深】 不是深浅的深,是不可测量的意思,圆遍广大,究竟无上的妙行。
【般若波罗蜜多】 上面已经解释过了,就说菩萨的功行,已到究竟地,登彼岸之上了。
【时】 这时字关系甚大,显明到了这个境界的时候,正是果位的时候,已经断除一切烦恼,度尽苦厄,没有挂碍的了。在下两句“照见五蕴皆空,度一切苦厄”之后的意境,点明大自在的光景,不可草草。
【照见】 朗然觉照,彻见无余的意思,是无功用的功用,毫不著意的觉照,心神会通的了。
【五蕴】 指色、受、想、行、识,这五事蕴结不分,叫做五蕴。此言心和外境相蕴合,统名曰色。一个色字,包括五个字在内,并且包括外面一切一切有相相形形色色,内面无相相思想方面都在内。外境原是色,而我的眼、耳、鼻、舌、身、意也是色;外色和内色接触了,就有个受;既受了,就要去想象他,这是想;想到了,心中一行转念,这是行;转出那知识来,就是识;所以受想行识四个也还是色,总是幻心幻起的作用,成就种种的幻法。这个五蕴,是众生造孽受苦成立六道生死的资本,但也是开般若,除习气,度苦厄,了生死的工具,也就是佛菩萨成大觉度众生的工具。同要用五蕴,只是佛菩萨能照见本空,可以善用,不被所转,众生反被所缚;是在觉不觉,明空不明空之别,不要指定为不好的东西,反生了偏见。
【皆】 统统包尽无余,就是一切的意思。不但人空,法亦空,连照见亦空,因为照见亦是五蕴,所以称皆。
【空】 世上的人,往往不明白空的道理,笼统说:空就是没有了。不知“空”有空间、虚空、空相、空义种种的分别。今分为两种:一空相,是有相的,如空屋,人满了,空相破了,所以“有”与“空”是相对的,这就是世人说的没有就是空了。经上另有十八空义,不必尽说。
至于佛经上所说的“空”,是空义,是性空,是本来空,是与一切万有相和合的,不是相对的,不是没有的,是有而空的。要明白这个空的意义,先得明白几点:所谓宇宙间一切形形色色,山河大地,日月星辰,下至一切用物、植物、动物和我的身体,都是有相相;还有我的思想、道理、人事、人情、喜怒哀乐,都是无相相;一切包括在内,总名曰色,在因地上总是空的。因为以上一切色,寻不出一件是有独立自性的。第一说有相的:拿布来比,布没有独立自性,变成为布的,须依于纱线而成;纱线不能自为纱线,必待棉花;棉花不能自有,必由种子;种子不能自种,必赖人工天时地肥等等。不必分析开来才空,在未成布成纱前,及正有布有纱时,他的本身是由众缘和合而成;因为是因缘生,所以无有实体,求其究竟相,毕竟不可得,身体亦是如此。所以一切一切,无自性,无实体,因缘生,不可得的,所以是性空。第二说无相的:拿心来说,心是什么?根本是不有,但只集起的是心。譬如夏天凉爽的席上,人睡得甜美之极,这时候便没有我,没有心;忽然蚊虫咬了一口觉得了,这觉得的便是蚊虫和我集合而起的心。此外一切都同此理,所以心也是无自性,因缘生,无实体,不可得的,所以是性空。因此物和心,无一不是空。但是有而空,是幻有的,这是性空,和一切一切分不开的;不是心物之外另有个空,也不是这个是空,那个不是空的。所以说到色,即不能离开空;说到空,就不能离开一切色。但要认明却是缘生幻有,又须切实知道这个空是因地本来空,是性空,非眼耳可以见闻,其义实空。
既决定知道一切一切是本空而幻有,那又何必执取当他是实呢!但世上一切人事,如何可废,我仍随缘应付;不是麻木无心,只是勿住,行云流水的到处自在,这才是真心空。佛说空是这个道理,世上盲目妄加批评,岂不可惜!世人果能明空,自然心勿执取,那贪得心,嗔恨心,痴迷心,自不会深入,天下没有极端的争夺了。佛法岂不是社会上最大的利益,有什么迷信可说呢!又修行人往往有口头禅,说:“莫著了空!”这是怕他执著空见,正因为他根本不曾明空,总在空有二见上作道理,格外搅扰不清了。所以明空则破色,破色则心空,这是断苦厄的第一法门!
【度】 超脱的意思,就是登彼岸之上,法见都净了也。
【一切】 包罗所有,净尽无余,凡有相无相,人我法我种种苦厄,尽包在内。
【苦厄】 身上的痛苦,心上的不安,有相无相,粗细微细,都是苦厄。其实全由心起,我果无心,苦在何处?心果无见,厄在何处?不是不知,不是不受;因为有智慧知道本来空,能够知而有若无知,受而等于不受;譬如两个人同时受苦,一个挡不住,甚至苦上加苦,因苦成病;一个却无所谓,心不著意,便无苦厄了。
以上四句判为总持分,是第一段,总三藏十二部经一切法,持无量义,亦是此经纲领。通了这四句,就明白心经宗旨了。照此做去,自然度苦厄,了生死,出三界,成佛道,绰乎有余的了。凡不明心要的人,总在文字上会,不肯从自心上会;弄得没有办法时,只好今日求佛,明日求法;下此者,求福报,求神通,死要一个有相的凭据,离佛道更远了。深入迷途,岂不可痛!
【舍利子】 佛弟子的名字,即是舍利弗;在声闻乘中,他是智慧第一。
【色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是】 首四句实是一个意思,总是说色空不二的道理。初说不异,说没有两样的,还是方便的说;后说即是,是说就是一个,不能分的,是究竟说;斩金截铁,毫无犹豫。色一个字,不单是代表五蕴,连外面宇宙万有形形色色都包在内。因为宇宙万有,就没有离了我的性海,浑同一体,尽是色;而我的受、想、行、识,是无相相,也是色。这内外两种色,都是因缘生,无自性,无实体,不可得,根本是性空。现下虽是幻有,毕竟不可得的,所以即色即空,并不是色之外另有个空。参透上面所说的空义,就知道这个意义了。所以心的形形种种,亦是五蕴流转;而色的形形种种,全似空华的乱起乱灭,如电影的一幕一幕,总是有而不可得。你莫把这四句看作玄妙,实是极普通极寻常的道理。你只认明“一切是因缘生,无自性,无实体,不可得,所以是性空”。不但色如是,受、想、行、识四蕴也如是;不但五蕴如是,宇宙万有的有相相,和下面一切法,如十八界,十二因缘,四谛法,六度万行的智得等,是无相相,一切皆复如是的性空。但是凡夫执有,所以说色不异空;二乘又执空,所以说空不异色;还有菩萨未曾会通不二的,所以说色即是空,空即是色,总是破他们的法见。倘明白法见也是本空,就了无挂碍的了。
以上七句判为色空分,为第二段,用以会通色空不二的道理。
【舍利子】 此时要点到本来上,在紧要关头了,故又呼其名而告之,是郑重的意思。
【是诸法空相】 法是什么?是心影,是心中缘起的种种道理。如果没有对象,也就没有心没有法了,所以是因缘生、生而不生,无自性,无实物,不可得,本来是空,不是造作出来的空。古人说:心生法生,心灭法灭,心既是幻,法岂是真!诸法是说一切法,就是一切心。世上的人,总是以心缘心,以法缘法,不知本空,遂当他实有,彼此固执住了,争执就此多了。这个相字,应作义字解,下面正点到不生不灭的原理。
【不生不灭】 佛经上最不容易了解的就是这一句,须知宇宙间一切一切连我的思想五蕴等等,都是不生不灭的。因为一切是:(一)不自生,如上面说布不能自生为布,是无自性的,须赖众缘和合而生。(二)不他生,不是单靠他缘,还不能离我这个布,所以也不是他生。那么是(三)共生的了?不!也不是共生,因为两面也都是缘生,两无实体,只是一个偶合,所以也不是共生。(四)不无因生,现在的假相,似乎是生,但必由因成果;没有可以成布的因,就没有成布的果。以此类推,一切一切是不生的,现在虽有相,终是生而不生的。既不生,即不灭;但现在的假相,却有个假灭,只是不自灭,如布烧成灰,布不能自烧;不他灭,虽有火烧,终不能离了布;不共灭,不无因灭,都是一个理,可以推想得到的。
【不垢不净,不增不减】 因为不生不灭,所以垢净、增减、长短、是非、好坏、来去,一对一对的都是因分别而缘生,统统是幻有不可得,所有的相,本来是空相;因世事无一不由相对而成,苦恼也由相对而立。倘知根本是因缘生,无自性,无实体,不可得,根本是生而不生,不过暂时有这个虚妄相,那又何必执为实体呢?既不执有,亦不废有;即一切法,离一切法;既此用,离此用;心如长空万里,包罗一切,自在无住,此是诸法空相的本来面目,亦即无心可心的本来面目。但众生久已不知的了,有全不知者是六道众生,半知者是二乘,知而未彻者是菩萨,都是有挂碍。所谓有五部,有此岸,有入流,有中流,有彼岸而未登岸上种种。以上五句,判为本来分,为第三段,修行人最要紧是这一点,切勿忽过。
【是故】 此是决定的口气。
【空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界】 既明白了空中的道理,那么空之中还有什么实体可得呢?这“无”字有两个解释:一是无有,是根本不有的意思。二是毋的意思。因为现在虽有幻相,但毕竟是无,毋庸执取以为实有而生法见,添许多烦恼。所以五蕴(色、受、想、行、识)、六根(眼、耳、鼻、舌、身、意)、六尘(色、声、香、味、触、法)这是十二入,再加上六识(眼识、耳识、鼻识、舌识、身识、意识)共为十八界,都是不可得;因为是缘生的,无自性的,无实体的,不可得的。然而人既有此幻身,自有幻心作用,不能断灭;佛菩萨也要用以度众生,救世间无量苦,我人正要用此以开般若,了生死,出三界,不过圣人明白本来空,所以无法执;众生迷了,遂生颠倒,这是众生的大挂碍。因为地狱众生,挂碍在具足多分贪嗔痴,鬼道挂碍于多分的贪,畜道挂碍于多分的痴,魔道挂碍于多分的嗔,人道挂碍于半分的贪嗔痴,天道挂碍于少分的贪。这贪、嗔、痴三毒,都由六根六尘六识而起,只一空字可以化除一切烦恼挂碍。化除了,当下即是菩提;所以烦恼菩提,同是这个东西。
【无无明,亦无无明尽,乃至无老死,亦无老死尽】 这是缘觉(即辟支佛,是不曾闻到佛法而借因缘觉悟的)执取十二因缘法而生挂碍,他不知道诸法空相。既说是因缘,可见是缘生不实,但伊不能明空,被法见缚住了,不得自在。那十二因缘即是:一、无明:是过去的根本烦恼,只要碰到缘就动了。缘就是转下去的意思。二、无明缘行:行是行动,做种种或善或恶的行业。三、行缘识:由于过去的行业,而起现世受胎的一念,是因认识而成为果的。四、识缘名色:在胎中已有形体而有名色。五、名色缘六入:是六根具足,可以和六尘相对的了。六、六入缘触:是出胎后对于一切有所接触了。七、触缘受:接触之后,就受苦受乐而生种种感觉。八、受缘爱:如成年以后,就有强盛的爱欲。九、爱缘取:有了爱欲,就想去取得,心去四面驰求。十、取缘有:取得就有了,是有业成就的果位。十一、有缘生:这是成立了,生生不已,转入未来。十二、生缘老死:有生就有灭,一切本是梦幻泡影,终必变灭,老死是这一段生死的果。但只是无明未灭,再来一转,生生世世转辗不已,遂有六道轮回,总是无明作祟。乃至两个字,是由无明跳至老死,中间略去十位。这十二因缘,位位都依据无明作主,不知皆是妄心幻法缘起,根本无有。尽者,极也,就是无之极也,言无亦无有也,是绝对不可得的意思。所以无明非有实体,如空中华,梦中事;梦中非无,及至梦醒,了不可得。可惜众生不能断无明,缘缘而下,无有穷期,无非是惑业苦。缘觉虽已悟到十二因缘,原是假有的一合相;但以为是定法不移,所以法见不净而生挂碍。
【无苦集灭道】 这是声闻执取四谛法,而生挂碍。苦、集、灭、道,是名四谛,就是四种重要的道理。苦是身心逼迫不安。众生身有三苦:老、病、死。心有三苦:贪、嗔、痴。后世有三苦:地狱、鬼、畜生。更有三灾八难苦、坏苦、行苦、苦苦、不知足苦、不安命苦、心无寄托苦,这是苦谛。却是三界六道生死苦果,无不由心和境集合而成,这是集谛。灭是消灭的意思,断一切苦,归到清净寂灭。因为结业既灭,则无生死的患累,这是灭谛。但要灭除那集合的诸苦,必得有个道理,道是正道;做到正道,必要助道,助其离一切苦,到涅盘乐,这是道谛。声闻执此法见以为究竟,所以分段生死,或者可了,变易生死却不易了。倘明本来空,知此四谛法,不过一时的缘生;不但是果上色空,实是因上色空,不必执取,便无挂碍了。
【无智亦无得】 这是菩萨的挂碍。菩萨执取六度万行诸法,以为确有智慧可得,有众生可度,有佛可成,心中不免具此波罗蜜的行相,微细的法见不曾净,所以不到究竟涅盘地。从前阿难问佛如何是烦恼地狱种性?佛说行六波罗蜜行是烦恼地狱种;如我能布施,因见他人不肯布施而生厌恶,是烦恼地狱种;我能持戒等等,因见别人不能持戒等等,心生厌恨,是烦恼地狱种。这就是弥陀经上说的见浊,是名染法,染糊涂了。况且有智无智,都是幻心作用,分别为二。同是性空,更有何法可得?世尊昔在燃灯佛所得佛授记,成无上菩提,世尊当时并不取以为胜,因为知道性空!实无少法可得,不过名为菩提而已。所以菩萨必到法无我的时候,才是挂碍净尽。
【以无所得故】 这是总结一句,极言上面五蕴、十八界、十二因缘、四谛法、六度智得一切本空,仔细推求,实无所得。以上十三句判为法用分,为第四段,说空了之后,般若法用自然启发,也不受法缚了。
【菩提萨埵】 简称就是菩萨,此指已登佛位的明心菩萨,又名开士、大士;又萨埵译为精进勇猛,堪以荷担如来事业的人。
【依般若波罗蜜多故】 他因为依自性的金刚般若,能够超登彼岸的缘故,所以有下面实证的受用。我们应该知道修行不是图利,更不能图名,名利是生死最毒的药;名利的心不死,永无出头的日子。因此因地要正,总要在自性上打算,老老实实,真参实究,决不要在神通奇特,出语玄妙上求,丝毫挡不住生死的。菩萨尚不能离开般若,何况我辈,离了般若之外,更有何法?这是成佛的根本条件,肯向这条法上走的,才是有智慧的人,此生决可成就。
【心无挂碍】 这个心,是毫无挂碍,人空法空,寂灭轻安的大自在心,视世间出世间一切一切皆量等虚空,无有边际,包罗万有,了无挂碍。心且不有,挂碍何依?苦厄安在?
【无挂碍故,无有恐怖,远离颠倒梦想】 心里既是净空无见,白天没有想象,夜间自无乱梦,正如千眼千手,圆照十方,岂有颠倒?凡人恐怖,先有一个得失心,就是有我的果,正是六道生死的种性。如能心空法空,登于佛位,两个生死已了。菩萨再来世间,是大悲愿力,不是业力,自然没有恐怖,颠倒梦想,都远离了,到了生灭灭已,寂灭为乐的境界了。
【究竟涅盘】 这涅盘是清净的意思。二乘人是有余涅盘,不是究竟;这究竟涅盘是佛位,名为无余涅盘,连涅盘亦不可得。所谓成了佛,也没有成佛的法见。本来涅盘是对生死说的,既本来没有生死,亦安有涅盘,不过同是个假名罢了。这是菩萨的果德。
【三世诸佛】 无论现在佛,过去佛,未来佛,统包括三世一切诸佛,不问已成未成,都是一体平等。须知释迦弥陀是果上佛,我和六道众生是因上佛,性自平等,所以不可自弃,也不可轻人。
【依般若波罗蜜多故,得阿耨多罗三藐三菩提】 三世诸佛,也无不由此法门而得无上菩提。一切大智慧,无不由自性佛母所生,生是启发的意思。这个得,正是无得之得;必得心中了无所得,然后本来的面目斯得。此时无人,无我,无众生,无寿者,寂然不动,而妙用恒沙,由此启发,这是佛的果德。阿耨多罗是无上,三藐是正等,三菩提是正觉;就是无上正等正觉,是言佛的意境。你想连佛也不能离此法门,众生岂可自外,另觅途径,岂非颠倒!所以不自求而他求,都是因地不正,适以自误!
以上十句判为果德分,为第五段,是说到果德地位,一切挂碍才算净尽,才是究竟涅盘,都赖观空成就,并无别法。又以上可算是上半部心经,专说此法无实。下面再翻身过来说个无虚,金刚经说:“此法无实无虚。”要人不要执实,也不要执虚,正显般若无住的妙用。若再深一层讲,心既不有,法于何依?既没有法,更谈不到无实无虚的了。所以说,涅盘生死等空华。
【故知般若波罗蜜多】 以下是转入无虚,点明一知字的妙用。这知字是灵照觉知,表明悟后的意境,仿佛是转而为有;不知这知字也是法,也是性空,一时的缘生,暂时的法用,即是知而无知,生而不生;所以不明无生的道理,就不能证知真空的道理。前说一空字,是般若的体;此说一知字,是般若的用。所以表般若的至德,无可形容,无可言表;至此言语道断,心行处灭;惟有神会,惟有赞叹,正是冷暖自知的时候。
【是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚】 这六句是赞叹的辞句。咒是密意,以决定如是曰咒,如军令严速曰咒。以无所不包谓之大;以无所不通谓之神;以无所不照谓之明;以无可比对无可再加谓之无上;以毕竟平等谓之无等等;空不偏空,有不著有,于寂灭无住的性体中,能启发恒沙妙用。六祖云:何期自性本不生灭,本不动摇;何期自性能生万法。前为无实之体,此为无虚之用;故能除一切苦,真实不虚。你想世上的人,没一个人没有挂碍的痛苦,哪一个人能离了佛法,佛法又何曾迷信呢!
以上七句判为证知分,分第六段,要亲证才知这个境界,不是靠文字可以得知的。所以得知的必须要真参实究,从自性上用功,经是不过借来考证罢了。总之,心通才是最大神通;但心不空就不能通,不通就不能明,不明则一切智慧被无明所覆,不能启发。这一分是说心到了真空的境界,自然有许多力量;不是有苦再除,却使一切苦厄无所依附,根本无苦厄的了。
【故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提萨婆诃】 梵咒本来不许翻译的,因为怕持的人着了解释,反而添知见,心乱了。但此经是自利利他的,终不能忘记众生,离了大悲本愿。姑将咒义略述一二:揭谛揭谛,是说度过去呀!度过去呀!波罗揭谛,是向彼岸度过去呀!波罗僧揭谛,是彼岸大家度过去呀!菩提萨婆诃,是速速证到菩提呀!以上六句判为秘密分,为第七段,只有自己知道,没法出口的意思。
佛说的三藏十二部,总是说个心,这心经是说心内精华。大凡人有七个心,每每自己不知道的,那六个是六道心,每日流转勿停;忽而天道心,忽而人道心,又忽而三恶道心,总是无主的逐境流浪心。下等的人,并且不知道什么是叫做心,中等的人才知道善心恶心的分别心,上等人是多有向上的心,可以得人天的好果。还有第七个心是空心,是无上的心,是无住的心,是有主的心,是清净自在的心;这个心不是修证到是不会知道的,连二乘人和权乘菩萨也不会知道的。佛说:微生虫到处可去,只是火里不能去。众生的心到处可缘,只是不肯向般若上去,就是不知道那第七个心。这个心是出世的心,明了这个心,去成佛就不远了。众生在此岸,是六个心,超登彼岸,便是那第七个无心的心,正是毫无挂碍的心了。但人不从六个心上下手,就不能出世,要从烦恼上参透,挂碍上打开,方可成佛。譬如人已落在泥坑里,必要从泥里拔出来,所以世法正是出世的资粮。人先要明白烦恼是什么?还是我的六个心
分享本回答由社会民生分类达人 盛红升认证

[ Last edited by zzz19760225 on 2016-5-20 at 15:01 ]
作者: zzz19760225     时间: 2016-5-19 19:24
采莲江上
初级庄家11
256楼
我们叫它一粒沙。
但它不叫自己粒或沙。
它就这样存在着,没有一个系统、特别、 短暂、永久、不确或切合的名字。
它不需要我们的顾盼,我们的触摸。
它不感到自己被觉察和触摸。
它掉落在窗沿这一事实, 只是我们的、而非它的经验。
它掉落在任何事物上也是如此,并不证明了它已经掉落,或仍在掉落。

从窗口可以观看到很好的湖景
但是湖景本身是无法观看自己的
它存在于这个世界,没有颜色和形状,没有声音,没有味道,也没有痛苦。

湖底对自己是无底的, 岸对自己也无岸。
它的水对自己也是不湿不干的。
它的波浪也不感到单一或个别。
这些波浪在既不小也不大的石头周围 ,
对自己听若无闻的轻声细语,轻声细语。

而这一切都是在一个本身没有天空的天空下发生的
太阳在那里一点也不沉落地沉落,一点也不隐藏地隐藏在一朵非自愿的云团背后。
风费力地拖着它,没有任何理由,只不过是吹罢了。

一秒过去,又一秒,第三秒。
但是这只是我们的三秒。
时间像一个带着急件的信使飞驰着。
然而那只不过是我们的比喻。
人物是捏造的,急促是虚拟的,
一切讯息与人无涉。



2011-06-04 11:27
回复

[ Last edited by zzz19760225 on 2016-5-20 at 15:06 ]
作者: zzz19760225     时间: 2016-5-19 19:25
才智一二三四
云心梦曦4

让所有的“无”一起开放

世界从来就不老实,宇宙从来都不会按照特定的逻辑轨道来运行。所谓“道生一、一生二、二生三、三生万物”,只是对世界生发程序的一种抽象,而那些调皮捣蛋的万物们,从来都不会按着人所能理解的规则,有条不紊地依次出现。
万物由“无”生成,所有的“无”都会密谋许久。他们潜心积攒自己的能量;精心设计自己与其他“无”的关系;他们在一个绝对之“无”的统一领导下,保持着罕见的齐心协力;他们会约定,在一种统一的瞬间,让所有的“无”一起绽放。那个璀璨的宇宙,在瞬间就呈现出了全部的“有”的状态。
那些“无”们认为,按照“道生一,一生二”的这种逻辑一步步行走,烦冗的程序会让他们难以忍受。世间所有的“无”一起绽放,宇宙自身和所有的“无”,才能获得痛快淋漓的体验。
那些精微的小“无”,生产上帝粒子;那些稍大点的“无”,生成中子、原子;那些体积更大的“无”,负责变换出细胞和星系;那个最大的“无”,担负迸发出宇宙的重任;而居于首领地位的“无”,负责万物的协调,并将灵魂这种东西,配备给所有以物质状态存在的“有”的聚集体。
如果“无”不在同一时间内绽放,世界就会产生倾斜感;如果万物只是一步步生成,四维时空就会将宇宙膨胀得十分浪费。
学会让世间所有的“无”一起绽放,我们会感到,所有凝固的逻辑关系,都是我们的手下败将,所有大大小小的世界,我们都可以在每个当下,把他们照得通亮。
爱的最高境界是不爱或非爱 “爱”这个字,已成为许多宗教手中的玩具。仿佛不把“爱”置于最高点,就无法证明自己可爱;不让“爱”在自己的理论体系内穿行,就无法证明自身拥有造物主的高远。而爱的最高境界,却是不爱或非爱。
“爱”是一个词汇。像所有词汇一样,万物一旦被硬化成声音、文字,就必然将宇宙中与此相关的部分凝聚在一起,无论聚集的时空多么宽广,与这个词汇不同的部分,都会被排除在外,而让世界形成分割状态。
爱一旦出发,就必然有方向感。无论我们感觉自己拥有何其宽广的爱,也只能在人的整体意念中的一侧,而自己觉知感的另一侧,必然会被遗漏。
爱的意念一旦形成,立刻会呈现“有”的状态。任何“有”都比“无”更肤浅,任何“有”都是“无”这种根基生长出的枝桠。即使是号称大爱的爱,也比存留在“无”之中的爱,渺小无数倍。
爱一旦被持有,就暗含着一个持有者;爱一旦显形,在逻辑上就会还原为“我爱”。而“我”这种意念,恰是真我的反叛者,“我”这个字,正是捆绑了真我的绳索,囚禁了真我的牢笼。爱,停留在“我在爱”的层面上时,就不可能是爱的最高境界。
爱的念头一旦闪现,“恨”也会顺势形成。虽然我们自认为只有爱没有恨,但只是我们尚未觉察而已,或在潜意识中不予觉察。而且即使我们不形成恨,我们持有的有形的爱,也会让周围的第三方、第四方,因爱而成恨。
爱的最高境界,是不爱和非爱。不爱,是没有方向感的爱,就是爱宇宙内外、前后、左右的整体;非爱,是弥散在“无”之中的爱,是只有在恨形成后,为了覆盖恨,才不得不启动的爱。
不爱,绝不是冷漠;非爱,绝不是没有爱,而是比大爱还大的爱。
恨无法被消灭,只能用爱来覆盖 恨无法被消灭,不是因为恨拥有巨大的力量,爱没有消灭恨的本事。而是只有让恨存在,爱才有能体现出自己的对应物,才能证明自己的存在价值。
恨越强大,爱的自我体验越深刻,覆盖恨时,越能觉知到自身的宽广和神圣。
面对庞大的恨,爱既不感到为难,也不感觉恐惧,当然更不会感到庆幸。而只是专著于让自己变得更大,以把世间的这种恨覆盖得更严密,以不让恨进行无法控制的喷发。
要相信,爱永远比恨有更高的站位,永远不会让恨最终翻盘。
恨是一种能量聚集状态,恨一旦聚集就会显形,就会变得质量更大,因而,必然向下方聚集。犹如玻璃杯中浑浊的污水,正因为污垢不断向下沉淀,在整杯水中,原来貌似并不存在的清澈之水——即爱的这种东西,才会逐渐显现,并最终实现对污垢——即恨的覆盖、埋葬、超越和管教。
无论一个人或人间有多少恨,我们都要坚信,宇宙所设定的程序是以慈悲、善良和爱,这些最基础元素为逻辑起点的。有时候,我们需要让恨凝聚、呈现出来,以便让原始之爱体现出,所拥有的超凡能量。
做爆炸出宇宙的熟练工 如果感到这次爆炸出的宇宙质量不高,就需要重新聚集能量,来爆炸出一个新宇宙。
低质量的宇宙,或者体态不够圆满,或者中间的内容不够充分,或者外表欠缺光滑,或者在此宇宙中我们念头的流动,难以达到痛快淋漓的状态。此时,这个宇宙就可归于废品的行列。就需要我们精心组织、巧妙安排,用新爆炸出的物美价廉的宇宙,来取代那个有病的宇宙。
所谓爆炸出新宇宙,绝不应像我们在本次物质世界中,采取类似于手榴弹和原子弹那样的爆炸方式。那种粗陋浅薄的爆炸,绝对是对高档爆炸行为的亵渎。那种由小到大扩充空间的笨拙形式,可笑至极;那种伴随着声响和热能的邪恶过程,浪费巨大。高档的爆炸,无声无息、清新透明,瞬间就能从无极小到无限大,都采取那种同时全方位展开的模式。
熟练操作高档爆炸的程序,是任何一个制造新宇宙者的基本功。
爆炸出新宇宙,并非是什么崇高而神圣的行为,并非是一个难以掌控的高档动作,与一个熟练的钳工、车工和司机,并无本质区别。只要能经常一次次地爆炸出新宇宙,即能熟能生巧,即可功到自然成,而顺利成长为,能创新出新宇宙的熟练工。
做一个随时能爆炸出新宇宙的熟练工,对自己有诸多好处。就像有三窟的狡兔,在一个窝里呆得不耐烦时,能在另一个窝里放置好自己的身体;在这个家中面临危险时,可随时逃之夭夭,在另一个洞穴里,吃喝玩乐或生儿育女。
我们在老旧的宇宙中如果呆得烦不胜烦,如果感到壮志难酬,就可随意创造一个与此宇宙完全相反的新宇宙,并在这个新家中,飞翔无度或沉思不尽。
总之,必须要让这个新宇宙,呈现出万事顺遂的状态。而只有让自己成为能爆炸出新宇宙的熟练工,我们才能随时可以,进入到这种超级美妙的局面里。
把自己催眠成神 我们所认为的自己,绝非是真正的自己,更不是可将自己提升为造物者的自己。
我们最残酷的庸俗,就是将自身的神性去除,自己把自己密封在残酷的沉沦里。让天上的神仙为我们着急,让地上的花朵为我们惋惜。而我们只有通过对自己的深度催眠,让自己恢复应有的神圣,人间现有的伤痛才能被逐渐治愈。
把自己催眠成神,那个“神”并非是创世寓言和童话中的那些伪神,也不是高高在上的为宗教进行教化的工具,那些所谓神,仅是寄托了人类情感和愿望的想象体。我们所催眠成的神,是指在无限量的人类活动细节中,能找到自己远超过常人的外在表现。譬如博尔特之与男子百米、乔丹之与篮球、杰克逊之与音乐、爱因斯坦之与物理学……我们在任何一个微观项目上成为如神如圣的人,都能体验自己,确实是那个能与造物主归于一体的人。
人间的所有成功者,都必然是自我催眠大师。由别人来催眠,最多只能让灵魂游弋于浅薄的轮回空间。只有自己学会为自己进行深度催眠,那个蕴藏在最高处的神圣之力,才能与人间的自己相贯通。由别人来催眠,只能在短暂的催眠期间才能获得灵魂成长,学会自我催眠,每天的24个小时就都能为灵性灌注强大的能量。
人生的核心问题是选择。所有错误的选择,都应是为最终的那个正确选择的剔除对象,而用自我催眠的方式,能更快地找到那条唯一的正确人生之路。在我们将自己催眠成神的过程中,能清晰地发现,如果是行进在错误的道路上,我们如何努力,也无法让自己进入深度祥和状态,即难以实现与上帝为我们分配的那种独特本性的有效共鸣。只有当我们拨正了正确的人生方向后,灵魂的最高舒适才能瞬间显现,我们感觉将自己催眠成神的这项任务,才仿佛可以轻松完成。
在找到自己究竟是什么神之后,将自己催眠成神的过程,会充满喜悦和幸福,会满怀对老天的无限感恩,会觉得“爱”这个字,已无法表达干净自己对人间和世界的热情。
找到把自己催眠成神的正确道路,有许多技巧。而最高的技巧,是对寻找行为的放弃。最好的选择方式是不选择;最深的理性境界是无理性。在深度自我催眠之后,自己和整个世界会融合成一个合一的透明体,任何觉知都已彻底消散,任何物质都仿佛不复存在。此时,我们的念头经常不知不觉、自动到达的地方,就是能让我们成神的地方。
把自己催眠成神,是我们成神的唯一道路。因为心灵和身体的先后次序,永远是前者在先。
把自己催眠成神,是让生命配称为生命的必须,更是任何一个人,对所居社会的一种责任。
重点是别让念头聚堆儿 念头是人的主旋律,构成着人的本性。
那些大师们,念头永远都不会聚堆儿,并能把念头本身的体积,分割得小之又小。
念头覆盖在任何事物上,就等于和此事物本身一样大。无论此事物体积多小,只要是眼睛可见的东西,都会是大到病态的东西。念头本身的体积大,是念头最严重的聚堆儿现象。
将念头变小,是首要工作。要在想象中,为念头进行分割手术,从狂躁的情绪到最深处的来源,从大城市的意象到最核心的自我,从眼前的事物到分子和原子,从中子或电子再到超弦和上帝粒子,然后让念头小到宇宙爆炸的那个奇点,并将此奇点想象成是新的宇宙,那么创造此宇宙奇点的还会有另一个更小的奇点。我们让念头骑在奇点的奇点这匹骏马上,现实宇宙空间的任何障碍就会瞬间消失,念头本身才能彻底地干净利索。
别把干净利索的念头,放置在自己身上,自己这种东西,对念头来说是个邪恶的磁场;别让此念头,围绕在某种伤痛上,因为疗伤对于此念头,绝对是大材小用;别让此念头,拥有任何方向感,因为方向在宇宙中,应是一个永垂不朽的笑话;也别让此念头,堆积在某种概念周围,即使是像“爱”这样的好词,堆积了太多念头之后,也会走向爱的反面;更别让念头,遵循任何定义或者公式,任何公式中的甲=乙,都只能形成两堆念头的臭垃圾堆。
生命没有境界这回事,并非像想象的一层一层阶梯式的模样。即使在最底层,一旦克服了念头的聚堆儿现象,宇宙的所有大门和窗户,就都会被立刻打开。
我们以对自己的定义来进行自我设限 接受教育的过程,就是给周围世界进行定义的过程。定义的目的,在于让精神站立得更安稳,在于不会让自己感到不舒服的漂浮感抓住自己。而当自己给世界的定义系统变得硬化时,自我心灵也就停止了生长。
无论给万物戴上怎样的帽子,万物都会不美不丑;无论给身边的事物奉送怎样的定义,这些事物都会不增不减。可一旦我们回头定义自己时,自己则肯定不会增加,并一定会被减少。
定义是十分粗暴的精神动作,等于用思维的砍刀去将世界修剪成我们认为它应该成为的样子。去劈砍世界时,世界会含笑地沉默不语;去劈砍自我时,自我会怅然地麻木不仁。
我们所拥有的叫“自我”的这个东西,在所有方面都呈现着无限状态。我们将这种无限粗暴地修剪为有限的过程,反而会变成我们生活的最终目标。
“自我”是无限的。在许多方面,我们所认为的有限,之所以确实变成了有限,在于我们使用的是有限的工具和方式。当我们找到了通向无限的途径,所有我们认为的有限,就都会在瞬间转化为无限。
我们用复杂、高级的交叉定义法,大规模地消灭让自己通往无限的所有可能;我们用深藏在潜意识中并不清晰的隐形定义法,扼杀了自我无限成长的所有幼芽。
宇宙赠与我们的飞扬无度的无限可能,就这样被我们自己以自我定义的方式,用教育和自我教育的自觉性,清除得一干二净。
每个瞬间都要创造一种新的逻辑关系 我们感觉是生活在空间和时间里,但本质上,却是生活在各种逻辑关系中。所感觉到的空间和时间本身,其实就是内在逻辑关系的一项特定内容。
决定着我们生活全部内容的逻辑关系,可有无数种分法,如内在的精神逻辑关系、外在的行为逻辑关系、情感逻辑关系、理性逻辑关系等等。引导着我们前进的念头,就穿行在茂密逻辑关系的原始森林中。
我们对绝大多数逻辑关系都无察觉,都会感到天经地义、就该如此。别人羞辱我们,我们就该用生气来反应;得到一笔意外的小财,就该用高兴和暗自兴奋的心态来处理;看到美女或帅哥,就应该启动兴奋来适时应对。这些只是粗大、明显的逻辑关系程序,更多的是不易察觉的极细微的逻辑反应方式。我们如能跳出逻辑之外,对自身常见的逻辑反应程序进行清晰考察,自己一定会哑然失笑。
所谓进步,就是要创造新的逻辑关系。在潜意识中,要用思想显微镜进行全面观察;在情感领域,要对每一丝情绪波动的逻辑程序,进行精细的抽丝剥茧;在行为层面,要找到每个惯性行为后面的思想逻辑基础。
所谓创造新人生,就是要全面创新人生内的所有逻辑关系。逻辑关系更新得越快,我们人生所展现的新颖性会越强。
我们要在每个瞬间都时刻警觉,以发现残破、可笑的旧逻辑关系,并创新出新的逻辑关系。
神不是一种存在物,而是一种存在方式 无论是上帝、佛、还是真主,他们都可统称为神。
如果我们去呼唤神,会毫无用处。神不可能以任何我们所臆想的实体方式来到身边,因为神不是任何物,而只是一种方式。如果我们的思维方式与他们的存在方式不相共振,我们喊破了喉咙,他们都不会翩跹而至。
说神是一种方式,其实也极其勉强,因为用“方式”这两个字,根本表达不出他们包容和拥有的万分之一。
神是一种格局。比所有的大都大,比所有的小都小。而且对“大”和“小”这些字眼,每一位神都会不屑一顾。
神是一种包含。包含物质和灵魂的一切;动态和静止的全部;将自己缩小与放大的整个过程;体验者和体验对象的所有内容。
神是一种矛盾的同在。靠吞食至深至广的矛盾这种粮食,神才能不断成长,没有了任何矛盾的任何一方,神也就停止了呼吸和心跳。
神在方式上,有一种不可遏制的向外的取向,就是向整个宇宙空间的每个角落中,都去柔和地放射叫“爱”的这种射线。正如人向内在的自我行走到极限处,就必然会转变为向外的态势,也就等于转化成了“神”。
神不会到达任何地方,因为他们早已就在任何地方。犹如我们从未离开过一个地方,也就无所谓再到达这个地方。神从未离开过我们,也就无所谓再到达我们。
我们不可能让神来,只能到神那里去。我们不可能以任何方式呼唤来神,替我们解决问题,只能以神的方式来自行解决。而解决的过程,就等于是神的抵达过程,因为神本身就是一种存在方式。
寻找在现实中能和我们发生共鸣的人 生命是一种频率。思维,展现的是微频率;每一天、每一时刻的抉择,是频率的中观显现;而命运呈现的起伏,是频率的放大化。
在生活中,肯定有与我们频率相近的人,虽然数量会很少。渴望并认为能讨好所有人的人,是将自我频率搅拌得混乱不堪的人;为前途而绝望的人,是不相信在此生中一定会有共振者的人。
放大生命的过程,就是用四射的频率,找到一个个共鸣者,并将其相互连接的过程。
寻找能与我们共鸣的人,其技巧在于弃数量而重质量。瞬间形成的大众共鸣者,来的快去得更快。能保质保量地操作共鸣者,能细腻地深耕共鸣者,让每个与我们共鸣的人能以传销的方式倍增,我们最终所赢得的共鸣者,才会如江似海。
影响力就是共鸣力。获得超凡的共鸣力,更要有超凡的意志。在发出自我频率时,要让此频率变得清晰而纯粹;要确保此频率就是独一无二的自己的频率;要找到发出此频率的最深源头;要将整个生命的能量都凝聚于此种放射行动,以获得超凡的力度和持久性。
当我们找到了在本次生命中大多数与我们能发生共鸣的人,现实社会所使用的成功、富贵等概念,就会显得极其粗俗不堪。
溜达在生与死的中间地带 总是活在生里,时间一长,就会显得单调。但我们一旦要活在死里,再进入生里,就会很困难。所以,我们一定要找个两全其美的法子,就是要善于溜达在生和死的中间状态,在生死之间游刃有余,在既非生也不是死的模棱两可之地,把生死痛快地把玩一番。
在生死的中间地带,我们可以回头把生看得很透彻,把以前我们活在生里时所做的一切愚蠢之事,都分门别类地自嘲一番。我们在这里,可以眺望一下死的本质,并通过将生与死接连起来,使我们在生中,就能克服掉对死的所有恐惧。
在生与死的中间地带,我们要通过来来回回的溜达,收获一些美妙的状态。在生死之间,风景独好;在生死之地,清香缭绕。我们只要来过这里一次,人间所有如天堂般的美景,就都会对我们丧失吸引力,因为在生死之间所能体验到的美妙和动人心魄,是人间的任何风景都无法提供的。
最神奇的事物,一般都存在于各种状态的中间地带,这是宇宙的普遍规律。例如在水和空气相交接的水面上,既滋养了众多的浮游生物,又是鱼和鸟等生物生存的关键之地。例如*************,一定要选在三省交界的关键部位,依靠“三不管”的特征,以逐渐壮大自己。同理,我们只有在生和死的中间地带,才能找到壮大自我的最佳方式。
溜达在生和死的中间地带时,心态一定要平静,不能像要完成某项任务一样,用急匆匆的脚步来丈量生死间的距离。既然是溜达,就要把时间抛置于脑后;既然是散步,就要把感觉和心情完全打开。
我们在生死的中间地带随意溜达时,也要注意两者的边界。如果不敢突破生的界限向死靠拢,这种溜达就会失去意义;如果走到死的深处回不来,这种溜达也会面临危险。只要我们能把握好中间地带的恰当边界,并经常在此随意溜达,我们就会成为生和死都无法管住的人,就会成为所有神鬼,都对我们无能为力的人。
黑暗比光明的体积更大 万物在分配比例时,类似事物的比例往往十分接近。在分配黑暗与光明的体积时,这一特性也十分明显。
我们从肉眼可以看见的太空可知,未被恒星照亮的区域,要远大于星星们所点缀的空间;我们看不见的暗物质、暗能量,也要远大于显物质世界。这个比例犹如身体的表面积与双眼所占面积的比列,如果整个皮肤代表黑暗,双眼代表光明,其他事物中黑暗与光明的比例,也都大致相同。
黑暗比光明的体积大这么多,并非是造物者的安排失误,而是由黑暗和光明各自的功能所决定的。比如我们置身于黑暗之中,真正可怕的不是黑暗有多大,而是前面有没有光。只要有极小体积的光在前方照耀,我们内心的需求就会得到巨大满足。此时,我们的身体是否被黑暗覆盖,已显得微不足道,因为光明无需为整个身体提供服务,只要通过眼睛来点亮心灵即可。
如果周围全是光明,刚开始时可能会感觉欢心鼓舞,但时间一长,就会感到了无生趣,更会因为干扰睡眠而对光明充满抱怨。
更关键的是,身边的光明是对方向的一种干扰。光明的最大价值是指引方向,深处黑暗时只要有一点光明,指引方向的功能即可以发挥得淋漓尽致,但如果我们本身就处于光明之中,指引方向的那个光明就必须变得更光亮,就极易会刺伤我们的眼睛。我们身处的所在光明度越强,越容易找不到方向,眼睛所受的伤害也会越大。
我们在生活中,如果感到周围百分之九十九的空间都充满黑暗,也无需抱怨,因为这是世界安排的正常比例。那处百分之一的事物所提供给我们的一丝光明,就是我们前行的指南,如果人为地用外力将我们周围的世界灌满光明,那个造物主安排的灯塔,必然会丧失指引的功能。
一个民族如果身处黑暗,也不要沮丧和沉沦,因为这是世界得以前行的正常状态。我们只要能在百分之一的微小空间内看到一点点光明,就要让其把我们的整个心灵照得通亮。此时,我们身边的整个黑暗,就都转化成了向光明前行的动力。
必须把自己活成一种芬芳 必须把自己,活成一种无边界的芬芳,这是我们对自己的最高责任。
不以芬芳的方式存在,大地上的嗅觉,就会沉睡不醒;我们在这个宇宙中,就缺少停留的价值;由于世界对我们的不屑一顾,我们也难以与其进行更深刻的对话。
必须把自己活成一种芬芳。把自己活成了芬芳,我们才能对得起,春风的辛苦劳作,阳光的无私奉献,雨露的倾心关怀,造物主的精心设计。
生活是肥沃的泥土,把自己活成一种芬芳,等于是将泥土,升华为一种光芒。任何生命,都是大地和灵魂的转化器,把自己活成一种芬芳,才能完成命运给自己设定的,神圣的转化任务。
我们以芬芳的形式,把自己呈现给整个世界,就是要让这种芬芳,进行无边际的弥漫。
将芬芳奉献给所有石头的缝隙,这种香气,能丈量出整个大地的距离。让这种香气能穿越所有时间来招蜂引蝶,我们自己的名字,才能安坐在人类的文字里。
把自己活成一种芬芳,要启动心灵最深的程序。造物主总是把生命的香气,暗藏在这个生命的最深处,想把自己活成一种芬芳,不在自己的最深处开花,绝无可能。
把自己活成一种芬芳,不是一蹴而就能完成的任务,不是三天打渔两天晒网,就能磨练出的功能。让每个瞬间,都呈现开花的状态;让自己所居住的每个空间,都被灵魂打扮成天堂的模样;让与我们接触的每个人,都因为欣喜而向世界开放了嗅觉。我们把自己活成芬芳的目标,才有可能最终实现。
我们必须把自己活成一种芬芳,这既是造物主赋予给我们的一种技能,也是我们为更好地呈现世界,所肩负的神圣使命。
让自己保持不痛苦是一门尖端技术 今天,我们要排除干扰,开始练习一门尖端技术——学会让自己保持不痛苦。
刻苦练习写作的人,要停一停;全力以赴去钻研权力的人,要歇一歇;气喘吁吁地扛着财富行走的人,要放一放;手忙脚乱地想摆布世界的人,要听一听世界正在告诉我们什么。我们以上的所有技能,都全部是普通的技能,而如何让自己保持身心不痛苦,才是一门真正高贵的技术。我们放着真正有价值的技术不学不练,反而醉心于貌似有用的小儿科游戏,自己总是被各种各样的痛苦所骚扰,就不应对生活有任何抱怨。
让自己保持不痛苦,绝对是一门尖端技术。身体中类似于心肝脾胃的小系统数量众多,任何一个环节有微小的纰漏,身体的痛苦都会如期而至;由理想、自尊、情感等多个小系统组合成的心灵大系统,哪一部分出现异常,整个心灵都会倍受煎熬;同理,人的灵魂系统更加庞大复杂,自身境界与世界的任何一次碰撞,都会让灵魂呈现鼻青脸肿的痛苦状态。
在身体和心灵的中间层,变幻不定;在心灵与灵魂的结合部,奥妙无穷。要在自己和世界间同时保持横向和纵向的所有部分都顺畅运行,绝非易事,极端困难。此种全面的操作技巧,那种高难的尖端技术,不下铁杵磨成针的硬功夫,绝对无法修炼完成。
向外操作世界,貌似能得到快乐和幸福。而真正的快乐是无烦恼;最大的幸福是不痛苦。所以,我们要改变一下运作自己的方向,从今天就开始锤炼,让自己永远保持身心灵不痛苦的,这门最尖端技术。
觉醒会变成心中的蜜 一个未觉醒的人,和一块石头并无本质区别。他们将自己封闭在死寂里,将灵魂扼杀在麻木里,将属于人的固有的灵气,密封在称为“生活”的瓶子里,他们即使能得到阳光的照耀,也会把阳光扭曲成黑暗的模样。
所有未觉醒的人,犹如一块块石头,让人间呈现着乱石岗的状态。
觉醒,是一个人所能做出的最美的生命动作。那种让石头开花的怦然声响,会让造物的神灵们满怀欣喜。
岁月渴求着石头们开花,比渴求着让自己成为永恒更为迫切;天空们俯首凝视着一块块石头觉醒成花朵的模样,比自己诞生出无数个瑰丽的星辰,更感到惊喜。
最关键的是,每个像石头一样觉醒了的人,都能品尝到藏在自己心灵中的最美的蜜。为了获得这种甜蜜,即使觉醒把我们这块生命石头爆裂得四分五裂,也是绝对值得的事情。
觉醒者,就是那些从物质中挣脱出来的人,因为能以心灵的状态运行,就在飞中让自己穿越成了上帝;觉醒者,就是那些从恨中解放出来的人,并能让爱的光芒,照亮自己身体里每个原子的人;觉醒者,就是从奴隶状态中升腾出来的人,既不会在一棵草前飞扬跋扈,也不会在上帝面前卑躬屈膝;觉醒者,就是那些从身体皮囊的懒惰中飞奔而出的人,每一个当下,都能用行动让自己价值的大盘走势,变得牛气冲天。
觉醒,等于打开了自己的生命封印。造物主把我们密封成石头,是为我们获得打开时的快感而设计的。我们在石头状态下所品尝的一切痛苦,都是为觉醒后所获得的更大惊喜而准备的。
在觉醒这件事上,连上帝都无能为力。我们自己不让自己觉醒,就绝对无法体验和证实,自己就是上帝的这个真理。
开放,是生命最美的动作 开放,从种子的梦想悄然启动开始;开放,从生命意志的伸展腰肢开始。
开放,绝不是仅对开花的瞬间的描述和礼赞。其实,在那颗种子生成时,那种生命盛开的幻梦,就已清晰地掩映在了宇宙的屏幕上。那个开花的瞬间,只是生命开放的最后一道程序。那种真正的生命梦想大开放,比表象化的开花,要宏大和深沉得多。广义地理解开放,才是抓住了开放的本质;从精神角度理解开放,开放才拥有更深的意义。
种子的梦想,就是要靠伸展的枝干,支撑起一片独特的天空,以送给那片蔚蓝色的存在以价值;种子的意念,就是要结出更多的种子,并通过这完美的生命循环,为时间创造意义;种子的意志,就是要通过开放性地接纳一切必要元素,而让大地体验,自己就是造物主本身。种子这种为世界拓展空间、时间和造物感的整体行动,才是生命开放的真正内涵,也是生命最美的动作。
“开放”的最佳途径,恰是这两个字颠倒位置所组成的新词汇,即“放开”。种子放开自己那个颗粒状的身体,梦想才能最终破壳而出;放开对身边泥土的眷恋,生成的新种子才有更宽广的生存空间;放开“自己是如此伟大”的这种狭隘判断,自身的开放其实就是世界本身在开放的寓意,才能最终得以体现。如果放不开此类约束自己的意念,开放动作本身就会变得残缺不全。
开放,是生命最美的动作。每个人,其实都是一粒种子,同样,我们以放开的心态去生活,才能实现最深邃的开放。
急躁的人都活在“小”里 所有急躁的人,都是被时间这条绳子捆住的人。思想变得扭曲;情绪变得拥挤;空间变得琐碎;世界变得模糊。所有急躁的人,都因为让自己卷曲在“小”里,而失去了和灵魂的联络。
所有急躁的人,都是用身体来对抗整个世界。大地的按部就班,蕴含着饱满的节奏;世界的不急不躁,充满了神秘的气息。身体越急躁,心灵越难以嗅到季节的味道;身体内的情绪反应越大;直觉越难以听懂风云踩在大地上的声响。
所有急躁的人,得到的都是令其更急躁的事。
急躁的人都活在“小”里,但这种“小”还都是眼睛能看见的小,并不是真“小”。如果能活在精微中的精微里,由于拥有毫无阻挡的穿透力,也等于是活在“大”里。
无论是活在精微里还是活在“大”里的人,都能以不急躁的心态,和不急躁的世界进行着深刻对话。只有那些活在中庸状态的“小”里的人,才是总被急躁所控制的人。
活在“大”里的人,永远不急躁。他们知道定数,也知道哪些定数能更改,哪些定数不能更改。那些活在精微里的人,更是不急躁的人,这既因为精微与博大相通,更因为精微能在生死之间随便串门。
所有活在急躁里的人,如果讨厌急躁给自己带来的痛苦,就要让自己从普通的“小”里走出来,要么变得比小更博大,要么变得比一般的“小”更精微。
踏上今生的巅峰之路 每个人的一生,都会被安排一种独一无二的巅峰,等待此人在用双脚征服之后,能与天空进行一次最深刻的对话。
命运为每个人安排的这座巅峰,都会在辽阔中耐心等待。等待她的主人来认领,等待双方触碰到一起时,共同为宇宙贡献出,某种新鲜的色彩和旋律。
所有的巅峰,都是如此寂寞,绝不像生活在人间的那些主人们,忙碌得仿佛十分饱满。即使云彩和阳光把这个巅峰打扮得分外妖娆,没有主人的认领,这个巅峰,也等于没有配备灵魂。那些在人间忙碌着的每一个人,目的都是想爬到人间的更高处,但绝大多数人,都会因为找不到自己的巅峰,而终生匍匐在人群里。
我们要丢弃那些没头没脑的慌乱和繁忙,我们要毫不犹豫地从属于别人的土丘上走下来,来到属于自己的巅峰的脚下,而真正踏上今生的巅峰之路。
对自己巅峰的浪费,等于浪费的是全部生命;对自己巅峰的疑虑,等于是对造物主是否聪明的怀疑。
这个巅峰之所以是仅属于我们的巅峰,并非是由高矮和所处位置等因素决定的,而是由安排在我们身体内的独特能力来确定的。我们被安排是那种直觉,能很快找到通往这个巅峰的最便捷之路,而世间除我们自己之外的任何人,都会在这座大山里,迷乱地旋转一生。
无需和别人比拼高度,我们今生只需拥有,仅属于自己的生命巅峰。珠穆朗玛峰确实高,但泰山之巅,却更显惊艳。每一座峰顶的状态,都别具一格。既可以由巨石来劈开天空,也可能如长白山天池一样,向上帝奉献一滴泉水。
那些登上了今生巅峰的人,就是离自己的生命源头最近,而感到最幸福的人。
巅峰和巅峰之间从来不会打仗,永远不会像山脚下的沟壑一样,总是痛苦地纠缠在一起。那些孤傲的仅属于自己的巅峰,会理解世间所有的巅峰,正如那些用今生整个生命去抵达独属于自己的巅峰的人,他们对“人”这个字,总会有和造物主相同的理解深度。
每句话都应是向上的光芒 我们在人间生成的每句话,都会横向地排列的在纸上或映现在电脑屏幕上。但每句话的意念和内容,却不应横向地运动,而都应像太阳的一束光芒一样,从地球竖立着向星空放射。
人是生产智慧光芒的一种生灵,语言是翻译人的念头的一种物化存在。人类在地球上所放射的思想光芒,要比太阳所有的光芒,都走得更远。如果人所说的话只能从左到右,从大地到海洋,即使行进得无比遥远,这些话也只能变成缠绕地球的蚕茧。
太阳的一束束光芒,从不环绕太阳自身一圈圈旋转;人类用一句句话所锻造出的智慧光芒,也必须像阳光一样射向星空和宇宙的深处。
每一句话都是一束光芒,由一句句话组合成的每篇文章,都是这束光芒的一次次能量叠加。人类的智慧光芒所以会比太阳之光走得更远,就在于能进行多级火箭式的叠加。并最终能让地球上的一束束光芒,刺透到宇宙之外。
地球和宇宙间所有的智慧生灵,是连接在一起的发光钨丝。我们不是对手,而是更高远境界的伙伴。地球的智慧之光,犹如是宇宙之灯的一小段钨丝。整个宇宙的这只灯泡能否被长久点亮,就要看地球钨丝能否勇担其责。因为整段钨丝只要有一处断裂,这个宇宙灯泡就都会作废,本次宇宙,就可能成为一个可怜的废品。
人间的每篇文章,都应是地球射向星空深处的一束光芒。既要发端于人间,又要能到达至仙境。只能在人间横向着行走,对世界就帮助不大;只让文章在星际外运行,这束光芒也会失去根基。只有既发端于人间,又能射向宇宙之外,这篇文章的效能才能发挥到极致。这也是宇宙这只灯泡,对人类整体智慧的最大期许。
溜达在生与死的中间地带 总是活在生里,时间一长,就会显得单调。但我们一旦要活在死里,再进入生里,就会很困难。所以,我们一定要找个两全其美的法子,就是要善于溜达在生和死的中间状态,在生死之间游刃有余,在既非生也不是死的模棱两可之地,把生死痛快地把玩一番。
在生死的中间地带,我们可以回头把生看得很透彻,把以前我们活在生里时所做的一切愚蠢之事,都分门别类地自嘲一番。我们在这里,可以眺望一下死的本质,并通过将生与死接连起来,使我们在生中,就能克服掉对死的所有恐惧。
在生与死的中间地带,我们要通过来来回回的溜达,收获一些美妙的状态。在生死之间,风景独好;在生死之地,清香缭绕。我们只要来过这里一次,人间所有如天堂般的美景,就都会对我们丧失吸引力,因为在生死之间所能体验到的美妙和动人心魄,是人间的任何风景都无法提供的。
最神奇的事物,一般都存在于各种状态的中间地带,这是宇宙的普遍规律。例如在水和空气相交接的水面上,既滋养了众多的浮游生物,又是鱼和鸟等生物生存的关键之地。例如共(同)产(生)党开展游击战的根据地,一定要选在三省交界的关键部位,依靠“三不管”的特征,以逐渐壮大自己。同理,我们只有在生和死的中间地带,才能找到壮大自我的最佳方式。
溜达在生和死的中间地带时,心态一定要平静,不能像要完成某项任务一样,用急匆匆的脚步来丈量生死间的距离。既然是溜达,就要把时间抛置于脑后;既然是散步,就要把感觉和心情完全打开。
我们在生死的中间地带随意溜达时,也要注意两者的边界。如果不敢突破生的界限向死靠拢,这种溜达就会失去意义;如果走到死的深处回不来,这种溜达也会面临危险。只要我们能把握好中间地带的恰当边界,并经常在此随意溜达,我们就会成为生和死都无法管住的人,就会成为所有神鬼,都对我们无能为力的人。
练习把宇宙耍得很精彩

当一般的兵器已无法满足虚荣心的需要,当人间所流行的大词,只仿佛是思维的玩具,此时,宇宙这件东西,就可以拿来耍一耍,已证明我们自己,思维足够强健,勇气足够超人。
把宇宙拿来耍一耍,绝不是什么难事。宇宙温柔、乖巧的特征,在被我们耍弄一番之后,会得到充分体现。
越大的东西越空;越虚的东西越轻;越虚张声势的东西,敢于玩耍他的人越少。所以,一旦把挥舞宇宙作为自己进行训练的日常科目,我们就会感觉,耍弄宇宙这件事,干得有点晚了。
我们所追求的“天人合一”,目标正确而方法有误。当我们把心态放得过低,好像有求于天时,天就会立刻摆起臭架子,对我们不理不睬。当我们让灵魂升腾得远超过天的高度时,天就会反过来有求于我们,而充满与我们合一的渴望。
那个盛满云彩和风雨的蓝天,只是小天;那个叫宇宙的大点的家伙,才是大天和老天。我们在谋求天人合一的时,对这个“天”的对象也要有所考察,不能怀着“摘到篮子里的都是菜”的不负责任心态,只让小天霸占着天的位置,来和我们交换,来与我们合一。那样,我们自己的身价,就会大幅降低。只有把宇宙这种大天挥舞起来、耍弄起来,并最终与其形成合一的状态,我们生命的价值,才能得以最终体现。
以往的人所采用的“天人合一”的方式,同样是愚蠢而笨拙。仿佛双方安静地相处在一起,通过静态的渗透和弥漫,就能到达最终的合一。而实践证明,此种方式的效率惨不忍睹,能合一的人屈指可数,合一所需要的时间,有时竟长过了人的生命。我们只有创新出动态的合一方式,天人合一的境界,才有大规模推广的可能。
动态的合一,就是要把宇宙本身变成一把剑,或把他揉捏成,你愿意耍弄的任何一种玩具。然后,以“心中有剑”这一剑客的最高境界,来把宇宙挥舞得虎虎生风。通过长时间的刻苦练习,我们的整个身体与挥舞的剑影,会形成一个美满的“圆”,此时,我们就能得到,最深刻的天人合一境界。
在打开自己的动作里充满着不可名状的大舒服

打开,是充满神奇的动作;打开自己,是注满神圣的行为。
世界让我们凝聚成自己的目的,就是让我们再打开自己,以体验与整个宇宙的高度融合和完全等价。打开自己,已不只是一种动作,而是替整个宇宙完成的一种开花的运动。
要打开自己的身体。让细胞向礼花一样绽放,犹如相互红移着的星系,替宇宙完成大爆炸的体验。而且,我们让细胞放荡得越彻底,世界对我们的谢意会越深。
要打开自己的大脑。大脑自身的愚蠢,不是用“愚蠢”这个词能深刻表述的。大脑是捆绑自己的绳索,是让巨轮无法启程远航的锚。大脑像个毫无自知之明的暴君,我们不从大脑中脱逸而出,星空对我们就总是毫无意义。
要打开自己的感觉。感觉是心灵的日常活动领域,就像边界模糊的国家公园,感觉会让我们时常忘记,我们是在感觉之内还是在感觉之外。对感觉的感觉,是自己能收到的最珍贵礼物;感觉一层层脱去了所有的感觉,是打开感觉的必要步骤;进入宇宙之外的无感觉状态,是打开感觉的最终目标。
要打开自己的觉知。即使是对整个宇宙的反视,觉知都会赫然存在。游戏觉知这种庞然大物,比从前后左右各个方向摆弄宇宙要艰难得多。
既居于清醒状态,又让整个世界和自己变得踪迹全无、清澈一片,是打开自己这种动作的最后目的。
打开打开,不打不开。对于身体、大脑、感受、感觉、觉知这些低贱之物,要进行毋庸置疑的否定和毫不留情的打击。打垮了它们,才解放了自己;否定了它们,才拥有了全部。
在彻底打开自己的动作里,包含着不可名状的灵魂快感。在打开自己的动作之后,语言已毫无存在必要。在此种状态下所获得的大舒服,不是世间的所有小舒服和中舒服之合,能等价得了的。
生长是很简单的事

生长是极其简单的事,所有必要的条件,造物主都早已为我们准备齐全。
我们无须为自己创造一个太阳,太阳早已悬挂在那里。它一定会向我们发送温暖的阳光,不需要我们发出请求,更无须支付任何费用。
我们的生长需要大地的支撑,但请放一百个心。我们不可能悬浮在空中,因降落不到大地上而发愁。降落的地点可能有好有坏,但不降落的概率,却是零。
我们需要某种春风的吹拂,春风的强度可能有所不同,但我们丝毫无须恐惧春天不会到来。因为制止春天,阻止我们和春天相遇,是神都做不到的事。
越是我们生长必需的东西,越是一定会为我们准备妥当的东西。我们只要有生长的意愿,生长绝对是轻而易举之事。
生长一点都不难。太阳会帮我们提升脚下的水分,只要自己能打开身体脉络的“开关”就行;大地中的所有养分,都会跟随水分子自然地向我们汇聚,只要我们申明需要什么就行;我们的身材,会随着无数细胞的叠加自然地挺立,只要我们别太急躁就行;蜜蜂们会把我们的花粉传递给爱恋者,只要我们能让自己开放就行。
生长绝对是一件简单的事,只要我们能不过度关注生长之外的东西。比如愤怒地报怨,脚下的土地为什么显得比别人贫瘠?头上的阳光为什么不24小时地照耀不停?天上的星星为什么对我如此冷淡?旁边的石头为什么无需生长?……如果我们能忽略所有此类问题,我们的长大、开花、结果,就是一件极简单的事。
生长是极简单的事,只要我们不总是想把自己扭曲成别人。如果我们是苹果的种子,结出苹果,就是毫不费力的事。而我们之所以感到生命是如此艰难和痛苦,其实就在于,我们羡慕香蕉更长、艳羡草可以长得更矮,而拒绝成为苹果这件事上。
生长是极其简单的事,而命令自己不生长,却难上加难。
重点是别让念头聚堆儿

念头是人的主旋律,构成着人的本性。
那些大师们,念头永远都不会聚堆儿,并能把念头本身的体积,分割得小之又小。
念头覆盖在任何事物上,就等于和此事物本身一样大。无论此事物体积多小,只要是眼睛可见的东西,都会是大到病态的东西。念头本身的体积大,是念头最严重的聚堆儿现象。
将念头变小,是首要工作。要在想象中,为念头进行分割手术,从狂躁的情绪到最深处的来源,从大城市的意象到最核心的自我,从眼前的事物到分子和原子,从中子或电子再到超弦和上帝粒子,然后让念头小到宇宙爆炸的那个奇点,并将此奇点想象成是新的宇宙,那么创造此宇宙奇点的还会有另一个更小的奇点。我们让念头骑在奇点的奇点这匹骏马上,现实宇宙空间的任何障碍就会瞬间消失,念头本身才能彻底地干净利索。
别把干净利索的念头,放置在自己身上,自己这种东西,对念头来说是个邪恶的磁场;别让此念头,围绕在某种伤痛上,因为疗伤对于此念头,绝对是大材小用;别让此念头,拥有任何方向感,因为方向在宇宙中,应是一个永垂不朽的笑话;也别让此念头,堆积在某种概念周围,即使是像“爱”这样的好词,堆积了太多念头之后,也会走向爱的反面;更别让念头,遵循任何定义或者公式,任何公式中的甲=乙,都只能形成两堆念头的臭垃圾堆。
生命没有境界这回事,并非像想象的一层一层阶梯式的模样。即使在最底层,一旦克服了念头的聚堆儿现象,宇宙的所有大门和窗户,就都会被立刻打开。
每个瞬间都要创造一种新的逻辑关系

我们感觉是生活在空间和时间里,但本质上,却是生活在各种逻辑关系中。所感觉到的空间和时间本身,其实就是内在逻辑关系的一项特定内容。
决定着我们生活全部内容的逻辑关系,可有无数种分法,如内在的精神逻辑关系、外在的行为逻辑关系、情感逻辑关系、理性逻辑关系等等。引导着我们前进的念头,就穿行在茂密逻辑关系的原始森林中。
我们对绝大多数逻辑关系都无察觉,都会感到天经地义、就该如此。别人羞辱我们,我们就该用生气来反应;得到一笔意外的小财,就该用高兴和暗自兴奋的心态来处理;看到美女或帅哥,就应该启动兴奋来适时应对。这些只是粗大、明显的逻辑关系程序,更多的是不易察觉的极细微的逻辑反应方式。我们如能跳出逻辑之外,对自身常见的逻辑反应程序进行清晰考察,自己一定会哑然失笑。
所谓进步,就是要创造新的逻辑关系。在潜意识中,要用思想显微镜进行全面观察;在情感领域,要对每一丝情绪波动的逻辑程序,进行精细的抽丝剥茧;在行为层面,要找到每个惯性行为后面的思想逻辑基础。
所谓创造新人生,就是要全面创新人生内的所有逻辑关系。逻辑关系更新得越快,我们人生所展现的新颖性会越强。
我们要在每个瞬间都时刻警觉,以发现残破、可笑的旧逻辑关系,并创新出新的逻辑关系。
我们以对自己的定义来进行自我设限

接受教育的过程,就是给周围世界进行定义的过程。定义的目的,在于让精神站立得更安稳,在于不会让自己感到不舒服的漂浮感抓住自己。而当自己给世界的定义系统变得硬化时,自我心灵也就停止了生长。
无论给万物戴上怎样的帽子,万物都会不美不丑;无论给身边的事物奉送怎样的定义,这些事物都会不增不减。可一旦我们回头定义自己时,自己则肯定不会增加,并一定会被减少。
定义是十分粗暴的精神动作,等于用思维的砍刀去将世界修剪成我们认为它应该成为的样子。去劈砍世界时,世界会含笑地沉默不语;去劈砍自我时,自我会怅然地麻木不仁。
我们所拥有的叫“自我”的这个东西,在所有方面都呈现着无限状态。我们将这种无限粗暴地修剪为有限的过程,反而会变成我们生活的最终目标。
“自我”是无限的。在许多方面,我们所认为的有限,之所以确实变成了有限,在于我们使用的是有限的工具和方式。当我们找到了通向无限的途径,所有我们认为的有限,就都会在瞬间转化为无限。
我们用复杂、高级的交叉定义法,大规模地消灭让自己通往无限的所有可能;我们用深藏在潜意识中并不清晰的隐形定义法,扼杀了自我无限成长的所有幼芽。
宇宙赠与我们的飞扬无度的无限可能,就这样被我们自己以自我定义的方式,用教育和自我教育的自觉性,清除得一干二净。
目的,总是以最隐秘的方式伤害自我

自我最本质的力量,就弥散在与世界最精细的契合里;最强大的能力,就隐藏在自我就是世界本身的这种认知中。而目的在使自己凝聚成力量的同时,也会把世界这个整体病态地分割成不同部分。当以“我”为主导的目的一旦形成,自我就会和世界本身形成分割、分离状态,最伟大力量的源头就会被立刻截断。
右脑比左脑要高远、精微和伟大得多。而所有目的,都生发于人类左脑,是对别人的艳羡、对身体的屈从、对流行概念的认同等一系列病态心灵的混合物。那些堪称目的的东西,大都是将生命坠向下方的东西,都是将灵魂物化成粗大之物的东西。
无目的的人生,是茫然的人生;被目的所羁绊的人生,是悲惨的人生。学会在有目的和无目的之间随意转换,学会将目的通过右脑升华为世界本身,叫目的的这种东西,才能真正给人带来益处。
那些死不瞑目的人,绝大多数是被目的玩死的人。
那些创世者们永远在交换着巨大的能量

那些创世者们,游戏就是工作,工作就是交换能量。交换能量就是将自己特殊形式的爱送给对方,并将另一种纯洁透明的慈悲接纳于怀中。
那些创世者们沉默不言,充满关爱,相互抛织着时空这种玩具。他们不断拉伸、膨胀,不断浓淡、明暗着自己的身体。他们把存在当做一场表演,把别人当做另一个自己,把创造作为必不可少的呼吸和脉搏,把吞吐自我作为生长的能源。
创世者们就是这样,一会游弋出地狱,一会幻化出天堂,并在相互演示的过程中,给予彼此以方向感。
创世者们的本质就是能量。精微和粗大已毫无意义;前进和后退已毫无区别;独立与组合已毫无差异;创世与说话已形同一体。
那些创世者们磅礴地交换能量的过程,本质上就是自我在舞蹈的过程。

真正的爱,都储存在大脑之外

大脑是爱的牢笼,只有灵魂中的灵魂跳跃出大脑之外,让爱分散于宇宙的一切细节之中,爱才有称为爱的资格。
大脑对另一颗大脑,有感同身受的功能;灵魂对宇宙的全部细节都能进行同频的感同身受,爱才回到了自己的家。前者证明了人理解人的能力,后者体现了人容纳宇宙的能力。
爱一旦生发于大脑,就会被捆牢在人本身——即人生存的地球空间。让爱这种精灵般的念头从右脑飞出,与全部造物主的所有动作契合为一体,爱才前行在了正确的方向上。
真正的爱都在大脑之外,是从四周向我们自身集中的过程。如果我们持有的是把凝聚在大脑中的爱向外弥散的意念,爱就走向了歧途。
大脑所储存的爱,只是爱的变种,质次价高、虚张声势。那些弥散在大脑之外很难用爱来称呼的东西,才是真正的爱。
爱不是我们寻找来的,而是我们招唤来的;不是我们生发出的,而是我们引进的。
让我们的灵魂率领身躯穿行于宇宙内外,感到既不需要任何润滑剂,也没有任何障碍感,这种行为本身所表演出的,才是爱的最佳存在形式。而我们端坐在自己的大脑里,自我高尚出的任何所谓的爱,常常是真正的爱,恰好反对的东西。
我们自己都未被爱打开,就不可能把真正的爱,奉献给世界。

[ Last edited by zzz19760225 on 2016-5-20 at 15:26 ]
作者: zzz19760225     时间: 2016-5-19 19:27
一位网友的生活账单:在北京月薪1万过成啥样?

相信有很多人都漂在北京、上海等一线大城市,你有没有算过一年要花多少呢?以北京为例,今天就来看看一些好友的真实花费。
  月生活成本计算:
  租房:在三、四环附近,一室一厅全配,最少需3000元。 水、电、煤气、宽带、有线电视、卫生管理费约300元。
  交通费:大部分公交、地铁,偶尔打车,比如周末,或者赶上下雨、下雪,加班很晚的情况,平均一下算200元。
  吃饭:对于22个工作日:早餐5元,午餐15元,晚餐做饭的话15元。
  对于四个周末来说:出去吃饭喝水看电影,按照一天150元计算,算600元。
  水果、超市零食:一周至少80块吧,看看现在水果酸奶的价格,算300元。
  月饮食方面生活成本计算小计:(5+15+15)×22+600+300=1670元。
  服装鞋子:这个按照每个月300元计算,很低了吧。
  日常品费用:买书、日常用品,比如洗衣粉、牙膏、洗发水、卫生纸之类,最低算100元。
  手机费:100元,非常省了。
  交友费用:没有女朋友的,和同学同事,一个月至少也要600块吧!有女朋友的至少要1200元吧,取个折中的900元。
  旅游:一年就算三次短途吧,一次住宿路费吃饭买东西至少600元,摊每月算150元。
  特殊日期:包括一些生日、情人节、圣诞节、结婚、生孩子等等礼物,一个人至少要300元吧,按照一年2000块左右来计算,月均摊为200元,够低了吧。
  给父母:按照最低标准500元,也就仅仅意思一下。就算不给,你也总得买点东西。
  以上总计:
  3000+300+200+1670+100+300+100+900+200+500+150=7420元。固定支出后,每个月剩余7454.3-7420=24.3元
  24.3元!!
  基本上月月光了。

-----------------------------------------------------------------------------------------------------------------------------------
一个小白领的生活账单

长江商报消息 今年8月CPI同比上涨6.2%,与7月同比上涨6.5%的数据相比,涨幅有所回落,这也是4月份以来国内CPI涨幅首次回落。但相比前几年6.2%的涨幅已经高得“离谱”了。

28岁的朱莉已经是一个两岁孩子的妈妈,两三年前她从不关心CPI是什么,但连续高涨的物价,这个硬邦邦的经济数字已经深深地融入到她的生活中,每个月9号她都会习惯性地看新闻,关注CPI的涨幅。

朱莉清楚的记得,2008年8月份CPI同比上涨4.5%,2009年8月同比下跌1.2%,2010年8月同比上涨3.5%。

虽然今年8月CPI涨幅有所回落,但感觉并不明显,“该涨的还在涨,感觉像温水煮青蛙。”朱莉说,CPI每次上涨时她都期望不要再涨了,感觉生活越来越困难了。本报记者 田立平 杨金金

100块钱少买40个鸡蛋

“现在一碗热干面都涨到3.5元了。”朱莉笑着说,她读大学时吃过最便宜的热干面是7毛钱,估计再也吃不到这么便宜的热干面了。朱莉的小孩已经2岁,夫妇俩属于白领阶层,年收入10万左右,但三年来工资不涨物价涨的现实困扰着他们,孩子、房子、车子让他们备感压力。

2008年8月,CPI同比上涨4.9%,连续4个月出现回落,那时,朱莉刚刚大学毕业在一家小公司上班。“热干面1.7元一碗,豆浆5毛一杯,茶叶蛋5毛一个。”朱莉那时候月工资2000元,吃热干面都觉得贵,为了省钱,她有时候早餐只买一个鸡蛋和一杯豆浆。

朱莉的小孩现在2岁,小孩最喜欢吃蛋糕。2008年时,一块比较好的蛋糕才2元钱,如果有肉松则是2.5元,现在肉松的至少要4块钱,涨幅60%。“周末,一家五口随便叫份早餐,都要30块钱。”朱莉说,现在吃鸡蛋都觉得奢侈,周末早餐更多的是自己动手,煮面条、煎鸡蛋、自己磨豆浆。

其实这种感觉并不是朱莉所独有,在一家国企上班的赵琳也深有同感。赵琳以前吃水果从不在意价格,想吃就买,现在什么便宜买什么,今年香蕉便宜,平时也只能买几根香蕉打打牙祭。以前炒一盘番茄炒蛋,放三个鸡蛋,现在多吃凉拌西红柿,一个鸡蛋就是一块钱,还是省省给小孩吃。但即使是这么节省,现在每个月的花销和两年前相比,也超过了一半。

“钱变得不值钱了,以前100块钱可以买26斤鸡蛋,现在只能买20斤了,一斤鸡蛋8个,相当于一百块钱少买了四十多个。”赵琳说,每次买菜逛到猪肉摊位上,都很犹豫,买还是不买?

据了解,2007全年CPI同比上涨4.8%, 2008全年CPI上涨5.9%。而到了2009年全年CPI比上年下降0.7%,这一小幅度的回落让不少人觉得到2010年通胀肯定会得到更大幅度的缓解,而据统计,2010年CPI年度涨3.3%。今年,CPI高位盘旋,7月甚至上涨6.5%,通胀压力仍然很大。

要存钱太难了

今年以来朱莉开始记账,她最吃惊的是日常生活消费占了多半。“我没想到会有这么高。”朱莉指着今年8月份的账单说,日常消费竟然是5802.5元。

“8月16日,我们买菜花了78元钱。”朱莉说,花了将近八十块,却没买到啥好菜, “据说8月份菜价都有下跌,但我没感觉到。”她指着账本上的菜价说,16日,五花肉16元/斤,黄菇鱼24元/斤,鸡蛋5.1元/斤,豆角涨到2.2元/斤,香菜都6元/斤。”朱莉的小孩刚两岁,家中又有老人,所以基本每天都会买肉,一个月下来,她仅菜钱就花了1800多元。

另一笔不小的开支则是小孩的花销。“喝什么牌子的奶粉,用什么牌子的玩具,穿什么质量的衣服······”朱莉从怀孕时就到处逛论坛、看帖子、加入妈妈QQ群、找海外代购。最后 ,她请人从香港代购某品牌奶粉,每罐加邮费250元左右,小孩一个月吃四罐。除了奶粉,营养品、婴幼儿用品、沐浴露、洗衣液、尿不湿,这些价格都不菲。

小孩除了吃喝穿,每个月还要花1500元请保姆,奶粉至少1000元,买婴幼儿用品500元,不生病的情况下,每个月至少要3000元。好在朱莉一家住的是父母的老房子,没有房贷,这让他们轻松不少。

朱莉说,物价不断上涨,目前对生活的质量影响不是很大,但生活习惯已改变了很多,想存钱实在是太难了。

“只能尽量节俭开支,出门不开车、不打的,尽量多坐公交。”朱莉说,2008年,她工资2000元,每月能存800元,现在工资3000多元,每个月都不够花。朱莉夫妇俩一个月工资有8000多,但每个月能存下2000就不错了。

【微账本】

朱莉的账本清晰地记录了近3个月的支出情况:(水电、交通、通讯、礼金、逛街等都不在此列)

6月生活费2400元

买猪肉20次、鸡鸭4次、鱼8次,奶粉4罐,下馆子4次

7月生活费2740元

买猪肉18次、鱼6次、鸭子和鸡各13次,奶粉4罐,吃火锅2次

8月生活费5802.5元

买猪肉16次、鱼7次,牛蛙2次,鸭子3次,鸡子1次,冰激凌2箱,奶粉4罐;小孩生病住院一次;请客2次

【管中窥豹看物价】


(价格均来自武汉市价格信息网)

类别        6月        7月        8月
猪腿肉均价        13.62元/斤        14.47元/斤        14.5元/斤
鸡蛋均价        4.95元/斤        4.83元/斤        5.02元/斤
鸡肉均价        8.75元/斤        8.74元/斤        9.05元/斤
鸭肉均价        9.63元/斤        9.45元/斤        9.59元/斤
蔬菜均价        2.56元/斤        2.53元/斤        2.27元/斤
本报记者 周雯

【专家评说】

被动接受不如主动应对

物价上涨的压力短期内无法减轻,那么怎么才能让CPI的增长对自己生活的影响降到最低,这才是老百姓最关心的。现在,在不少QQ群里,不时有人发布团购的信息,包括大米、食用油、时令蔬菜等都成为团购对象,以此来降低购物成本。

此外,一些银行理财专家也建议,现实生活中有很多家庭消费是完全可以规划的,通过消费计划来减少不必要的支出。交通银行首席经济学家连平则指出,虽然涨幅有所回落,但物价实际水平并没有明显下降,CPI同比增速回落主要是食品项目同比出现回落,8月份食品CPI同比增速为13.4%,相对于上个月的14.8%出现明显下滑。

连平建议,市民可以制定每月用于生活支出的上限,将一定比例的工资收入当做生活支出,同时减少每月购物的次数和数量,按照实际需要购物等。

作为一个普通消费者来说,一定要做好长期打算,除了要勤俭节约,合理调整家庭消费支出外,更重要的还是要形成投资理财习惯,用这些理财的收益来减轻目前的物价压力。

【市场调查】

鸡蛋突破10元大关

“现在一小坨肉,都要卖很久。” 武昌虎泉集市上一猪肉摊老板笑着说,以前一拿一大块肉的“大方”顾客现在越来越少。

“称10块钱的瘦肉。”在摊前,记者正好遇上了前来买肉的王婆婆,肉摊老板利索地从摊前挂着的一块后腿肉上,切下了薄薄的一块,一称12.5元。

“现在的肉太贵了,10多块钱的肉只够炒一个青椒炒肉”。王婆婆感叹说。

记者从该市场上了解到,昨日,猪瘦肉价格为16.5元/斤,五花肉14元。

猪肉价格的涨势还未“消停”,鸡蛋则大有接棒之势。

“5月起,鸡蛋价格就开始涨,现在红皮鸡蛋每斤都要5.2元。”在武昌虎泉集市上做了3年鸡蛋生意的张老板说,5月鸡蛋每斤是4.5元,现在每斤价格在5.2元到5.8元左右。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一个80后的生活账单,会火!

米:早稻,30kg*2。2元=66元
  油:杂牌油5l*2 55元/壶*2=110
  盐、味精:3元
  菜:18。5元/天*30天=550元(内容:青菜3元/斤商贩会少称,只有7两左右,够一天的。17元/500g*200g 7元 萝卜2元 菜芯(菜肉)3。5元 蛋1。2元两个 紫菜2元
  电费:170元
  理发:男20元 女80 一个月一次不多吧?
  房租:900元
  孝敬双方父母平均每月:400元(包括给父母买衣服等东西,虽然都下岗了,但是他们都在做零工,身体也还好,不用我们担心他们没饭吃)
  日用品:清洁剂,香皂,洗衣粉,衣服,毛巾,牙刷牙膏,宝宝用杂物等物品购置平均每月500元(包括过年衣服)
  奶粉:450元两罐
  尿不湿:1。5元/片*5片/天*30天=225元
  宽带电话:250元
  零用:200元左右

  老婆生产时医生拿需拆线药线用却说是不用拆的,消毒不到位导致感染不说,几次去医院说伤口恢复的很好,直到我发现黑色线头剪下来一段拿去问医生,医生说那个不是可吸收线才知道。侧切伤口疼痛时间整整一个月。
  去医院花钱真的是不眨眼。自己身上的石头不敢和家人说。
  就希望身体健康,因为80后的我确实伤不起。

  今天去买菜,发现较一个星期前价格都涨了好多.
  问商贩,告知曰:油价涨了那么多,我们不涨价就得亏本了.
  昨天去帮朋友买电脑砍价,发现本市(小市)和30公里外的市区(大市)价格相比本市同产品要贵很多,3000元的笔记本要贵150元左右,问之,回曰:油价都涨那么多,运输过来成本就高了.

  刚刚去买了米回来和半个月钱价格比也多了1.00元/千克,问之,店家回答曰,油价涨了.并好心提醒,多备点,今天进的货价格又涨了.
  我没车,我不管什么油价涨不涨,可现在怎么你一涨价什么都涨了?
  柴米油盐是我们生活的必须品。

  我没房子住,租吧,你出房产税,这不,房租涨了.

  我没车用,搭车吧,你涨油价,这不,运输费用一高,不只车搭不起了,饭都吃不起了。
  我就想问问,我天天工作13小时,没有假期不说(有假期就该扣我工资了),工资哪天可以涨?一个月3500的工资,家里老小要养活,你们帮我算算,我要怎么生活?

  3500的工资在我周围是大多数人拿的工资,甚至很多人只有2000-3000的工资,4000以下工资的顶起来吧!
  因为我们都一样是伤不起的80后。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
80后“孩奴”妈妈晒百万账单:你还敢要孩子吗?

说来惭愧,已经是2010年,才在网上看了纪念杰克逊的《thisisit》,关闭视频后,脑子里始终是迈克的那首beatit,只是歌词变成了: “我们本来都是一个个天使,从小就是好好学习天天向上,天生不是孩奴,天生不是房奴,我们全部都是,被逼的!被逼的!”

    对,没错,老娘今晚上很郁闷,要来坛子里喷一喷!那个潇洒的80后小资消失了,现在是你看到的是一个背着孩奴标签的80后妈妈,我不再去电影院看热映的电影,我不再去健身房塑造迷人的身材,我不再悠闲地走在王府井大道上,我不再惬意的品尝咖啡。曾经的一切都随着那套新房的到手、那个小宝贝的降生灰飞烟灭。
  
    不,更早,在我们决定要买房、决定要宝宝的那一瞬间,我就已经告别了。
  
    “小孩没娘,说来话长”借着脑子里始终回响的旋律,老娘就从头晒一晒作为80后典型代表的我从决定要小孩开始后的账本,不,更早,从我出生开始,我要为80后平反,我要为80后申张!
  
    下面的段子,不知道大家熟悉不熟悉,也不知道你们(相信坛子里80后居多)读完后有什么感觉,我是感叹了又感叹,唏嘘了又唏嘘,真知音啊,还是战友!。
  
    夫80后者,初从文,未及义务教育之免费,不见高等学校之分配,适值扩招,过五关,斩六将,本硕相继,寒窗数载,二十六乃成,负债十万。觅生计,背井离乡,东渡苏浙,南下湖广,西上志愿,北漂京都,披星戴月,秉烛达旦,十年无休,蓄十万。楼市暴涨,无栖处,购房金不足首付,遂投股市,翌年缩至万余,随抑郁成疾,入院一周,倾其所有。病无果,因欠费被逐院门。寻医保,不合大病之规,拒付,带病还。友怜之,送三鹿奶粉,饮之,卒。
  
    当然,老娘好一些,离卒还远得很,但是先成书奴,再成房奴,紧接着又成了孩奴!下笔千言,离题万里历来是我的强项,抱歉,抱歉,实在是感慨万千,不得已多发泄了两句。好了,现在开始晒账本,晒晒我的从房奴到孩奴的惨不忍睹的血泪史。
  
    2006年,房价已经开始发飙,同时发飙的是我老公的父母,他们疯狂的催促我们结婚,老公是孝子,而且是忠厚的孝子,要是现在评选24孝的话,我毫不犹豫的把票投给他,他的理念是:以顺为孝。所以父母要结婚,那就结婚了。当然了,我爸妈也没少催促。结婚要有地方住啊,于是我家再加上他家砸锅卖铁(当然,没有那么惨)凑了20万首付,买了现在的房子,到现在每个月还有2000左右的房贷要还,往后看,发现还有十几年背着这座新时代的大山。
  
    房子买了要装修,装修的时候,我对此一窍不通,在网上查资料,在坛子里问东问西,大部分洁具买了澳斯曼,主要还是受到了“心随水动”这样一种境界所触动,确实工作压力也大,谁不想享受到自由放松的生活啊,现在下班后回到家里能体味这种感觉也是非常不错的,需要一颗自由的心,让自由精神引导我们,在生活中寻找休闲的空间;客厅里铺的是兴辉石立方玻化砖,主要是看起来像水立方,有一种玉质神韵,很吸引人。家电多数是海尔,家具、床上用品等很快地搞定,总的来看,给两三处家居卖场和厂家创了不少收。好不容易装修好能住了,于是结婚。噼里啪啦的鞭炮,嘻嘻哈哈的亲友,热闹一天后,突然累的不想动弹,本以为尊父母之命结婚后,我还能过几年二人世界,不想紧接一道指令让我瞬间从新婚的天堂坠入了“孩奴”的地狱。
  
    公婆说自己身体不好了,想尽快抱孙子,新时代24孝的老公自然是以顺为孝,而新娘子的我也只能从命。当然了,我爸妈也是劝来劝去的。
  
    决定要孩子,才发现结婚前凑活装修的房子实在是不太行,没有儿童房,装修选择的涂料也不适合小孩子住,而且一些材料估计也没牌子,不放心。没法子,重新上网查,重新问东问西,最后找了3A爱宝贝涂料,专门针对小孩子的纯环保漆,大家都说用这个放心,好像有几条很关键的技术标准,就这个完全符合,所以现在有孩子的家庭基本都用这个,当然也就比一般的普通漆贵一点。这样也放心一些,一切都为了小宝宝,一切都为了未来。不过现在还比较庆幸,幸好那时候把房子买了,不然到去年,房价又涨得稀里哗啦的,高不可攀了。我在想,如果不要小孩的话,这套房子再卖出去,估计还能赚不少钱,起码可能在50万以上。不过,最后一想,还是不折腾了。
  
    对,要说账单,上面连第一次装修,加上为了孩子进行的环保装修总共花了差不多5万,此时,我和老公婚前的小金库已经光光如也。
  
    万事俱备,只欠东风,还好,老公比诸葛亮差不了多少,东风很快就来了,我的郁闷也来了。妊娠反应,工作、乘车,种种身体的不方便我就不说了,单说花费。
  
    怀孕到分娩
  
    检查:
    一个人300左右,300×2=600元(夫妻都要检查),
    怀孕3个月时,在医院建卡,检查一次费用将近100元,另需要一次交付验血费用800元;
    怀孕四五个月时,检查一次30元;
    怀孕5个月以后需要每个月检查一次,每次二三十元;
    怀孕六七个月时要做一次B超,花费30元左右;
    怀孕八九个月,每周检查一次,每次20元左右。
    加上其他检查住进医院前至少花了3000元。
  
    补品:
    怀孕的前2个月开始补充叶酸,这个倒是不贵,花费大约200元
    怀孕期间的各种费用:日常食补就不计算了,只说额外支出的费用。从怀孕的第3个月开始喝孕妇奶粉,大约1300多。
  
    生产:
    因为老公的一句话,老娘义无反顾的享受了撕心裂肺的顺产,什么话:顺产的孩子抗挫折能力强。还好顺产花费较少,各项费用加在一起,差不多花费 4000多元钱。
  
    其它:
    孕期服装费:2套防辐射服550+670=1220元。其他孕妇装800左右
  
    为了节约开支,怀孕的前5个月除了偶尔打车出门外,基本都做公交车,从5月以后到现在宝宝3个月大的打车费用一共用了2000左右。
  
    宝宝出生后:
  
    衣:
    衣服没花多少钱,朋友和亲戚送了很多,只用了200左右。主要的消费是纸尿裤。我们白天给宝宝用尿布,晚上才用纸尿裤,一天2-3片,一片 1.8元。
  
    食:
    说到食,我又要骂该死的三鹿,当然也包括当时查处三聚氰胺的所有黑心厂家,因为他们造成的恐怖影响,我选择奶粉的时候,基本不敢考虑国产的,一罐900克的奶粉最少也要一百多,一个月至少两三罐,现在流行的各式各样让婴儿脑部发育均衡的奶粉价格更高,为了咱们自己的娃不输在起跑线上,节衣缩食也要为孩子买好奶粉。
  
    住:
    前面将的采用爱宝贝涂料装修、卫浴装修和客厅、卧室装修之类就不算了,除此之外,婴儿床980,床垫600,床围480,浴盆100,安全座椅2000。
  
    行:
    老娘当年陪着老公千里迢迢的时候,也没混上个专车,倒是咱的娃虽小,现在已经有了自己的专车了,婴儿车1000。
  
    其它:
    奶嘴、奶瓶300左右,各种玩具学习用的小道具一共2000左右
  
    上面这些都是能想起来的,想不起来的更多了,至于花了多少,有心的筒子们,自己按计算器吧,我看着都心里慌慌的。明天就让老公买彩票去,说不定中了大奖也就不再为这些事情烦恼。
  
    这是看的见的花销,看不见的花费更多了,怀孕后,公司允许提前一个小时下班,但是工资和工作时间挂钩,此外,检查、不舒服,都需要请假,又是损失。
  
    还记得宝宝刚出生的时候皱皱的,有点丑,却看不够~~~~~~(不想抒情了,因为为了儿子,再苦再累也值了,儿子健康长大,老娘哪怕再孩奴多少年,都心甘情愿)
  
    现在孩子快3岁了,马上要上幼儿园,打听了一下,托费2000一个月,饭费400,杂费20,此外还有才艺费,这个飞那个费,算了,我不敢算了!!!!
  
    据网上的人说,培养孩子到18岁,要想不让孩子不受苦,至少要准备100万,对,就是说我们要卖掉一栋房子,可是老娘哪有房子卖啊。
  
    5555,不想这些烦心事了,幻想一下吧,假如不要孩子,不做房奴孩奴,我这100万干什么啊?旅游?看看名山大川,买个好车子?跟老公开车上下班外加周末游;还是开个公司去实现创业理想?还是干其他的?最终还要回到我的蜗居,玩乐?喧闹一场后,最终留下的还是一夜空虚。看来,还是要个孩子好一些,18岁的时候,儿子就是一个不折不扣的小帅哥了,那时候挎着他的肩膀去逛街,比和老公逛街,拉风多了。
  
    “被逼的,被逼的!”旋律有点淡了,说出来,心里忽然空了,当着房奴、孩奴,虽然累点,不过到头来,还是快乐要多一点。累并快乐着,不扯了,下去给宝宝讲故事去了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一张人惊心的婚姻账单

艺术交流:www.artdafen.net
  
  无论你是妻子还是丈夫,或者是男孩女孩,都希望你能很用心地看看这个“让人惊心的感情账单”:
  
  14年前那个风雨交加的夜晚,我众叛亲离,跟着深爱的你到深圳做了打工妹。贫穷的你落榜后除了生病的母亲、衰弱的父亲和那半间破瓦屋,就剩下我了。记得当初来深圳打工的路费用的也是我做一个月民办老师的工资。我所受的苦都是为了今生能与你长相守。
  
  或许,我的眼光不错,你是很棒的。10年后的今天,当我家所有的人松了一口气,原谅我没嫁错郎的时候,有了车、有了别墅的你却在直言不讳地对我说,你找到了“心灵知音”,如果我愿意解除婚姻的话,财产、孩子都给我;否则你背叛我,我不能有怨言。
  
  我笑了,说3天后给你答复。
  
  3天后,我开列了一张婚姻的清单给你过目:
  
  1.婚姻10年,你穿旧了3套睡衣,穿坏了4双拖鞋,踏破了21双皮鞋.破的皮鞋最多,因为你在外面挣钱所花的时间多,所以会有“心灵知音”看上成功的你。
  
  2.婚姻10年,我穿旧了10套睡衣、穿烂了11双拖鞋、踏坏了16双皮鞋。
  
  我穿破的拖鞋和皮鞋都多,是因为我照顾家和孩子的时间比你多,在外面和你并肩战斗的时间也不少,因此操劳的我成了没有新鲜感的“黄脸婆”。
  
  3.婚姻10年,常青树的你升值X倍,离婚后,从深圳排到杭州那么多的美女等着“成功人士、成熟有品位”的你挑选。
  
  4.婚姻10年,青春快逝的我贬值了1万倍;实话实说,离婚了我再婚的机会是1%,年老的我看不上,和我年龄相近的男人,除非太差,一般的男人是不愿意娶一个带着孩子的中年女人的。
  
  5.婚姻10年,繁忙的你只烧过26次饭给我吃。
  
  6.婚姻10年,忙碌的我一年365天,日日三餐,做好饭给你吃。
  
  7.婚姻10年,生一个孩子,我用了10个月,养、育、教了10年。
  
  8.婚姻10年,生一个孩子,你用了10分钟,给了他一个姓。
  
  9.婚姻10年,我和你父母和睦相处,没有一句高声的话语。
  
  10.婚姻10年,你一直不肯原谅爱女心切的我的父母,没有叫过一声爸爸妈妈。贫穷时你说我爸爸妈妈不会应答你,你坚决不肯叫;有钱后说不再怕他们了而不叫。难道你愿意自己女儿在能够选择的时候去选择贫穷吗?希望女儿富足,这是人之常情呀!
  
  亲爱的,如果你看了上面的婚姻总结,能够用眼睛看着我说离婚的话,我成全你的心愿。你什么时间跟我说都可以,我答应和你离婚。
  
  只是,我等了你一年,你都没有再提离婚这件事。变得早回家、勤炒菜、会拖地的你不是将功赎罪吧?或许,因为,有良心的人居多,所以这世界上还是房子比监狱多!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
晒晒“春节账单” 这个春节你究竟花了多少钱?

春节刚刚过去,不少人晒出了自己的春节账单。动辄数千上万的花费,让不少人感叹春节俨如遭遇了一场“劫案”。专家指出,春节“团圆”意义最重要,不要为金钱和面子所累,更别让过年成为负担。

没万元难过年 已婚人士压力大

“每逢春节被吸金”, 路费、红包、压岁钱、年货礼品、同学聚会……一连串的账单让人尤其是已婚人士直呼春节成“春劫”。

“过年是花钱的大头,尤其对于我们已婚人士来说。”山东淄博的小王表示,今年春节她给双方父母红包2000元,压岁钱300元,年货礼品2000~3000元,路费300元左右,同学聚会500~1000元,总花费近1万元。

“工资增长赶不上物价上涨,过年一下子花出去我和老公一个多月工资。”小王向记者感叹,过年真像是遭遇了一场“劫案”。

家在山西、在北京工作的已婚80后白领小丽也向记者展示了她的春节账单:往返路费800元,给双方父母红包4000元,给爷爷奶奶红包3000元,弟弟妹妹压岁钱1000元,再加上其他花费,也差不多花了1万元。

“过年某种程度上是一种负担。”小丽说,“忙了一年回到家还得干活,这年过得特别累,身心俱疲,什么时候能把年取消了就好了。”

不少受访者对记者表示,没有万元难过年关。一项9963人参与的网络调查显示:14.3%的人表示自己的过年花费在1万元-2万元,7.3%的人花费在2万元以上,38.0% 的人在1000-5000元,26.4%的人在5000-10000元。

绕不开的“人情”和“面子” 人情世故成负担

在上述调查中,网友“快乐神仙4479”留言说:“小孩望过年,大人怕过年,过年要花钱,一年钱不多,用钱项目多,入少出去多,急的没话说。”网友“Passerby--过路人”则感叹:“春节过不起,辛辛苦苦攒一年,春节一过回到解放前。”

近年来,人们回家过年的费用不断增加,压岁钱数目更是“水涨船高”,越来越高昂的花费让不少人感叹“过年成了过钱”,而这无奈的背后往往是“人情”和“面子”这两个绕不开的关键词。

“别人给你家孩子1000元,你给别人家的总不能比这少啊。”家在湖南的小张表示,之前亲戚之间给孩子的压岁钱都是一两百元,但不知不觉,现在压岁钱涨到至少500元,甚至一两千元,一个年过下来光压岁钱就五六千元。

在北京工作的单身女士刘小姐回家期间遭受不少“红色炸弹”的“袭击”。由于几个同学在春节期间结婚,她送出的“份子钱”就有3000元,再加上给爸妈的1万元红包,以及4500元的压岁钱,刘小姐的过年花费超过了2万元。

“人情要搞好”“红包少了丢面子”,在这样的心理下,很多人互相攀比,甚至不惜忍着“肉疼”送出一笔不菲的红包数目,如此一来,人情世故也就成为了很多人的负担。

趁过年联络感情,社交费用预计在5000元以上

8在西安工作的80后刘亮在一家超市买水果,“得多准备一些,除了自己家吃,还要送朋友。”他说,“预计花费比去年多出4000元,大概在11000元。”

刘亮是西安南郊一家网络公司的策划组长,去年工作比较辛苦,但人脉和渠道都拓展开了,收入大幅上涨,因此打算要购置更多、更丰盛的年货犒劳自己和家人。除了给自家准备过年物品,还有很重要的一点,就是为同事、好友准备过年串门礼品,大多是礼盒类年货,“新认识了不少朋友,大过年的,少不得装些货物在汽车后备箱里备着,随时送人”。

刘亮认为,年轻人就应该广交朋友,而社交花费占比最大头也很正常。按照前几年的习惯,每年好朋友中要有一位承办聚会,今年轮到了他。除了请吃饭,还要唱歌、看电影、开车出去玩,光社交费用预计在5000元以上。

80后叶先生是一家金融公司的主管,他认为,“趁年味应该拉拢下人情,准备了3000元左右,打算给下属买些礼品意思一下”。

开车回老家过年,仅油费就得2000元

70后刘先生夫妻两人的老家都在外地,准备开车回家过年。他计划先回老家咸阳,和父母在一起全家团聚过除夕和初一,初二去外省的妻子老家拜年,初四再返回咸阳,来不及喘口气,赶忙走访老家的亲戚。拜完亲戚回来,上班时间也要到了,再赶回西安,拜访西安的亲朋好友。这样来来回回地跑下来,油费就将近2000元。

“多亏了春节期间高速免费,不然过路费也得花上千元。”刘先生说。过年走亲访友,免不了送礼。刘先生粗略算了算,妻子老家大概有10家亲戚,自己老家也有七八家,每家按100多元估算,礼品就得花费2000多元。“亲戚多,每家都有小孩,红包自然少不了。”刘先生说,这一项下来少说也得2000元。

刘先生说,一家三口的衣服花费3000元,过年食品饮料瓜果2000元,小孩玩具特产等杂费1000元,算下来刘先生一家春节得花12000元。这一下子就花掉了刘先生夫妻俩一个多月的收入。

同样,在西安工作的80后李先生和妻子打算回山东老家过年,往返机票早就预订了,虽然买的特价机票,但也花了近6000元。他粗略估计了一下,加上其他费用,过年总计花费大概在13000元。“到了老家还要拜访亲戚,开车也很耗油,这个费用还没算呢。”他说。

80后李女士家中亲戚也很多,礼品的花费至少也在1万元左右,再加上给自己家添置年货等,轻轻松松花掉几个月的收入。

“花得太多了,一个春节花掉年收入三分之一”

记者采访过程中发现,有市民在感叹,“只一个春节,真的花得太多了,花了去年收入的三分之一”。

60后李斌是西安一家企业的高管,去年公司效益不理想,收入下降严重,平均每月收入6000多元。加上妻子和儿子每月各3000元,全年家庭收入14万元。

他预计过春节全家三口人花费45000元,过个年花了全年收入的三分之一,不过李斌的心态比较轻松,“没办法,过年就是要花钱,一年就这一次,这钱省不掉”。最大一笔开销是给家里每人换个苹果手机,再添置点家用小电器,这个花费15000元。

每人一身新衣服,购衣服一万元。购置食品饮料5000元。给亲朋好友娃娃发压岁钱3000元。从除夕的年夜饭开始,初五前每天宴请亲友都在饭店招待,每桌七八百元,总共5000元。杂费2000元。儿子大学刚毕业,春节前就去了上海旅游,花费5000元。

孝敬父母不可少,有市民给父母1万元红包

85后王女士在西安一家媒体工作,“其实收入并不高,但自从上班后,每年过年我都会给父母包红包,这几年都是1万元”。王女士说,这个春节,给老公、父母和自己各买了一套新衣服,花费近6000元,“给父母包红包是最大的一笔支出,但我觉得是应该的,而且也是多年形成的习惯”。

80后叶先生也表示,打算给夫妻双方父母各五千元红包,“还有其他的礼品,比如给丈母娘家买了一套抽油烟机,花了近5000元。还给自己父母各买了一个手机,花费近7000元。”但叶先生表示,“自己收入还可以,压力也不大”。

70后刘先生则说,虽然给父母准备了过年费,但父母常常并不接受。父母总说自己有钱,花不了多少,其实是体谅到儿女的生活也不容易。父母渴望的不是儿女给了多少钱,他们只是需要陪伴,常回家看看。

别为金钱和面子所累 莫让过年成为负担

有钱没钱,回家过年。社会学专家认为,春节期间,一家人“团圆”的意义最重要,不要为金钱和面子所累,更别让过年成为负担。

北京大学社会学系教授夏学銮在接受中新网记者采访时表示,“随着经济发展和收入提高,人们兜里有钱了,红包自然也‘水涨船高’。此外,由于部分人存在攀比、炫富和爱面子的心态,亲戚朋友间你给我两百,我给你五百,如此来回转圈,红包越来越厚,这种心态其实是不可取的。”

值得注意的是,与内地过年派压岁钱越来越阔绰不同,香港春节期间传统习俗是派发“利是”。“利是”数额不大,一般都是10元、20元港币,重在讨个吉利,重在祝福和心意,派发者和收受者都没有很大负担。

夏学銮认为,这种攀比的风气不改变,每个人都会苦不堪言。过年过节,不需要也不应该给那么多钱,应该量力而行。中央自“八项规定”出台以来屡作表率,普通民众也应该效仿,主动摈弃陈风陋习。

专家表示,不少人的春节账单中,孝敬父母的占很大一部分。这些人希望回到老家在父母面前有所表现,也包含着子女对亲情的亏欠,这就会给自己增加很大压力。与其这样,平时就应该常回家看看。
----------------------------------------------------------------------------------------------------------------------------------------
市民晒春节账单 60后至90后齐吐槽:一周回到“解放前”(图)

2016-02-19 11:25:32来源:南方网作者:陈珍我有话说(1人参与)
关键字: 春节 高女士 李阿姨 包红包 80后 蔬菜 情人节礼物 解放前 90后 孩子买 字号减小字号增大
摘 要: 虽然俗话说,“有钱没钱,回家过年”,可过年买年货、走亲访友、包红包、朋友聚会……样样都得花钱。过年到底花了多少钱?钱都花在哪儿了?昨日上午,记者通过调查发现,大部分市民的春节账单在数千元,有些市民的花销高达上万元。一些市民表示,辛辛苦苦攒了近一年的工资,一周回到“解放前”。


  据济宁晚报消息,虽然俗话说,“有钱没钱,回家过年”,可过年买年货、走亲访友、包红包、朋友聚会……样样都得花钱。过年到底花了多少钱?钱都花在哪儿了?昨日上午,记者通过调查发现,大部分市民的春节账单在数千元,有些市民的花销高达上万元。一些市民表示,辛辛苦苦攒了近一年的工资,一周回到“解放前”。

  60后李阿姨:购置年货花销不大,主要花在走亲访友买礼品上

  “今年过年没花多少钱,总体算下来一共花了三四千块钱吧。”今年55岁的李阿姨说,她有一个女儿,现在女儿已经成家。退休后李阿姨平时在家带小外孙,过年时只有她和老伴两个人,置办年货一共就花了几百块钱。

  “其实买肉和蔬菜花不了多少钱,对我们来说,过年花销主要在走亲访友买礼品上。此外,小外孙现在8个多月了,因为是第一次过年,给小外孙包了一个1000块钱的红包。”李阿姨告诉记者,“我和老伴儿的退休工资一共4000多元,过年差不多花了一个月的工资。”

  70后王先生:一圈亲戚走下来,光红包就发了近5000元

  今年40岁的王先生告诉记者,他现在是上有老下有小,一过年礼金、压岁钱就要发个遍。“现在孩子压岁钱最少200元,老人300元,一圈亲戚走下来,光红包就得准备近5000元。”

  “其实我们这个年龄段的人最不喜欢过年,过年就是花钱。”王先生告诉记者,仔细算一算,今年春节置办年货、买礼品他差不多花了一万元。“我一个月工资4000多元,这样一个春节花了我近三个月的工资。”王先生调侃说,“‘春节’就是‘春劫’啊!”

  80后高女士:添新衣、选购情人节礼物,花了两个月工资

  “春节在婆婆家过的,家里几乎不用我们花钱。”今年33岁的高女士在高新区一家公司上班,因为年货都是公公婆婆买,高女士过年的主要花销是给自己和孩子买衣服。“年前给孩子买衣服花了小一千,又给自己也买了件衣服,这就花了两千多块钱。”高女士说,春节期间,几次朋友聚会也花了近1000元。

  “今年大年初七遇上了情人节,我和老公买了一对戒指作为礼物。”高女士说,算下来,这个春节一共花了4000多元,是她两个月的工资。

  90后小两口:发红包、给长辈买礼物,攒了一年的工资所剩无几

  24岁的小王和小张去年结婚成立了自己的小家庭,婚后他们享受着二人世界的甜蜜,妻子怀孕后,他们也深刻体会到了父母养育自己的不易,小张和小王打算送给双方父母一份礼物。“父母也不缺钱,春节前半个月我们就在研究送什么礼物,想来想去,还是给他们每人买件衣服吧。”妻子小王告诉记者,买衣服平均每人花了1500元,加上自己买衣服和鞋子,一共花了近一万元。

  “不算不知道,一算吓一跳,这个春节给小侄子和爷爷、奶奶的红包共2000元,加上朋友聚会吃饭,一共花了将近两万块钱,攒了一年的工资花得差不多了。”小王说。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的生活费清单列表,看了有同感的么?

发表于: 2014-06-21 10:33| 24781人阅读  58人回复| 只看楼主 | 倒序查看

今早来上班肚子超级饿,在楼下吃了一碗三鲜粉。掏钱的时候才发现前几天刚取的200元又只剩一张绿皮了,这钱怎么就是不够花呢?我感觉我什么都没有买,也没有乱用啊。这不得不让我来小小的算个账了。

我呢工作2年半,现在月收入2800元左右,从事的是网络方面的工作,不算太辛苦,反正上班基本都是8小时对着电脑,至今单身。你们细细看好我的账单,看看我们有没有共同语言,沟通下。

1、租房。因为不是赣州本地人,所以自己还得租房子住。我住在开发区,大学城附近,虽然每天上班有点远,可是房租还算比较便宜了,环境干净500元。每个月再加网费、水电费(夏天开空调),一个月下来700左右。
2、饮食。上班的时候早饭一般平均在4元左右,不管是吃包子或者油条豆浆还是拌粉,中午饭在公司叫快餐,便宜点的沙县10元(其实叫快餐吃不饱)。晚上我基本就是回住处吃饭,那边小吃比较多,吃个盖浇饭12元。宵夜一般我还是吃的(我胃口比较大),但都是吃泡面了,3元。这里我就算正常日26天,其余4天开小灶。29×26=754
3、零食什么的吃的也很少了,男生么基本不吃什么零食。但饮料消费是有的,虽然不会天天喝,但平均两天一次饮料还是有的,每次消费2元。15×2=30
4、我唯一庆幸的就是我只喝酒不抽烟,喝酒自己一个人也不会埋头喝。但是一个月家里还是会丢着几听的。这个月刚好恰逢世界杯,这不是就有得喝了。就算50吧。
5、上下班做公交车,每天2元。2×26=52
6、周末一般就是打游戏、打篮球。还好附近学校有免费的篮球场,和基友一起,然后晚饭一般也就是开个小灶下馆子。一个月也得有2次左右是我请客,一次免不了200元。2×200=400
7、打的费。男生嘛,偶尔的也会因为睡过头了,所以一个月有几次我都得打的去上班,平常开发区的的士都是收价10元钱的。最多的就是2次,10×2=20
8、人际消费,刚刚打球的基友已经算一部分了,另外的就是有些做表面功夫的人际消费,虽然我觉得这钱花的有点冤枉,但也没办法。毕竟有些时候人家请了你,你也得还回去不是。而且,男人总不能像女生一样窝在家里啊,基本的交际还是要有的,平均240元。
9、电话费。我一般的电话费不高,好在是我单身。现在是人越长越孤独了,想打电话吹牛的人也没有,一个月就除了套餐100多,就是给家里打打电话的,我也觉得好少。
10、生活用品,包括衣服裤子。我不爱买衣服,平均两三个月才会买一次,还得看是不是没穿的了,男生不爱逛街,尤其我最讨厌买衣服裤子的,觉得麻烦死了。夏天对我来说更好,穿个短袖短裤的也就可以了。最近买了条短裤88,内裤15,总103元。
11、临时有什么的额外消费,比如去哪里旅游或者我回一趟家也得给父母一点钱。这个月回家一趟,来回车费66,时间太赶,这个月没给父母钱,买了点东西140,总的花费206。

综合:
700+754+30+50+52+400+20+240+100+103+206=2625元。
这还没算有时候的生病感冒,以及来不及的意外。比如拖鞋坏了、洗漱的没了、想吃水果了,看看我的消费清单都是每天都很实用的吧。我还是个屌丝,没那么多的应酬和什么活动之类的,每个月的工资都这样所剩寥寥了。

我是每个月的基本月光的了,也不知道这工资或者生活还有什么奔头。电影院都很少去,连KTV都是几月没有去过了。我到很想问问,有没有人觉得我很败家?自己一个人都会生活成这样,以后怎么找女朋友?

我现在的计划是准备购锅碗瓢盆,自己开伙,毕竟我还是有一点点好厨艺的。这样应该也能省下一笔钱了,就是买菜那些麻烦点。无所谓了、另外就是期望涨工资了,虽然希望不大。

现在是越看这个清单越恐怖,生活费果真是生活、费!感慨万千啊!
-----------------------------------------------------------------------------------------------------
现在大学生的钱包你伤不起啊——一个大学生汇报的生活费账单
来源: 李楚琦的日志
妈妈您看。生活费就这么没了
吃饭:
早餐:豆浆1.5元,夹饼2.5元。4乘以30等于120元!补充:贵的不敢吃……、
午饭:6元……想吃饱加3元!(贵的不敢吃)
晚饭:6元……想吃饱加3元!(贵的不敢吃)
平均每天15元,午饭加晚饭共计15乘以30等于450元!
晚上饿了吃包泡面,涨价了2.5元!平均每月15次共计15乘以2.5等于37.5元!
共计120+450+37.5=607.5元!
生活:
牙膏+牙刷+肥皂+洗衣粉+洗发水+沐浴露+洗面奶=80元
卫生纸+洗澡+电费+打印课件+学习用具=55元
话费50元!
共计185元!
吃饭加生活共计807.5元!
附录:以上统计必须满足以下条件 :
1.坚决不生病不吃药!
2.坚决不买任何衣服!
3.坚决不和牛奶饮料,不吃鸡腿鱼类不喝茶!
4.坚决不离开学校,任何节假日不回家,坚决不接待任何同学朋友!
5.坚决不请客不送任何人礼物!
6.坚决不缴纳任何集体费用!
7.坚决不买任何书!
8.坚决不理发!
9.坚决爱惜手机电脑不损坏不维修!
10.坚决不

...
-----------------------------------------------------------------
2016年娶媳妇价目表曝光 吓到你肝颤!经济型都要79万

2010——2015年  

六万八(顺发)  

八万八(发发发)  

十万(十全十美)  

2016年  

三金一钻(由于人民币新旧程度不同、约合人民币2万左右)  

一个单元楼,外加一动不动(一动,10万元以上的小轿车;不动:100平米以上的房子)  

而当今,不管是城里的还是农村的,首先问:城里有房子吗?    

七十年代  

结婚时只用了半斗米;    

八十年代  

爸爸娶妈妈时只用了半头牛;  

21世纪  

而到我们这一辈娶媳妇时却要了父母半条命    

有相关数据显示,  

男性人口将大幅超过女性,  

到2016年超出女性人口30%以上。  

依据此数据,  

今后娶上老婆将作为成功男人的标志。  

那么,  

分分钟吵着要娶妹纸的骚年们,  

你们口袋里面的钱准备好了吗?  

来看看网友纷纷晒出的三款结婚成本,  

从几百万到几十万,总有一款适合你!  

经济型    

1.房屋一套:以均价2500元计2500x80平=32万。  

2.精装修:100平米,计10万。  

3.家电及家具:8万。  

4.轿车:以代步车为标准,计10万。  

5.彩礼:8万。  

6.结婚照0.8万,衣服0.8万,首饰3万,总计4.6万。  

7.婚庆:0.5万。  

8.办喜酒:以酒店30桌为标准,包括自带酒、烟、糖,计1000x30=3万。  

9.海南度蜜月:平均每人费用1万元为标准,计1x2=2万元。  

10.从谈恋爱到决定结婚这段时间:包括出去吃饭、买礼物、娱乐、旅游、送女友父母节日礼品等,平均每月以1000元为标准,谈一年1000x12x1=1.2万。(不需要每个月都这么多,暂按1万计)  

共计79.3W啊,同志们~  

不过下面这个网友的数据,  

振奋人心  

节俭型    

1.房屋一套:买房子2500x80平=24万。  

2.简装修:90平米,计5万。  

3.家电及家具:5万。  

4.轿车,以代步车为标准。(暂时不需要,等以后攒钱自己买)  

5.彩礼:5万。  

6.结婚照:0.5万,送婚纱一套。  

7.婚庆:0.3万。  

8.办喜酒:以大姨鸭子店20桌为标准,菜金+糖+烟酒,计1000x20=2万  

9.国内蜜月:约1万元  

10.从谈恋爱到决定结婚这段时间:包括出去吃饭、买礼物、娱乐、旅游、送女友父母节日礼品等,平均每月以500元为标准,谈一年500x12x1=0.6万。  

这可是城里的最低标准了哦!  

可俺是农村的  

俺就这样办  

环保型    

1.房屋:自家的房子翻盖或盖个新房,10万。  

2.简装修:简单的拾捣拾捣计1万。  

3.家电及家具:2万。  

4.电动车:0.2万。  

5.彩礼:10万。  

6.结婚照:0.3万。  

7.婚庆:不需要。    

8.办喜酒:自己做饭或包桌的300-500元之间,按20桌,400x20=0.8万  

9.国内蜜月:去啥旅游,也就在城里逛逛,0.5万。  

10.从谈恋爱到决定结婚这段时间:包括出去吃饭、买礼物、娱乐、旅游、送女友父母节日礼品等,平均每月以200元为标准,谈一年200x12x1=0.24万。

[ Last edited by zzz19760225 on 2016-5-24 at 12:36 ]
附件 1: 1.png (2016-5-23 23:40, 122.92 K)


附件 2: 2.png (2016-5-23 23:41, 121.17 K)


附件 3: 3.png (2016-5-23 23:41, 203.56 K)


附件 4: 4.png (2016-5-23 23:41, 167.34 K)


附件 5: 5.png (2016-5-23 23:42, 168.29 K)



作者: zzz19760225     时间: 2016-5-19 19:28
国产游戏的造梦者 回忆那十六年来的独立游戏 [复制链接]
小篱

版主
Rank: 7Rank: 7Rank: 7
串个门加好友打招呼发消息       
电梯直达
跳转到指定楼层 1楼
发表于 2015-11-9 16:13:57 |只看该作者 |倒序浏览
国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  文/罗培羽

  中国独立游戏的历史较短,但却有了不少作品。本文以时间为顺序揭开那些年中国独立游戏的面纱。

  每一个游戏都是梦想与智慧的结晶!

  “独立游戏”是近几年才流行起来的词,而“自己制作的游戏”来源已久。从十多年前程序员写的小玩儿,到如今使用游戏引擎开发的炫酷产品,中间穿插着技术的不断变革。那些有幸在浪潮中留下印记的人们,他们的故事见证了我国独立游戏的发展历程。

  第一位独立制作者已无从可考。在互联网普及之前,即使成功完成游戏作品,也缺乏途径将之传播给大众。许多独立游戏制作者淡漠在人们的视野中。独立游戏的发展史客观上紧随着技术的更新换代和游戏市场的开拓。1998年,中国门户网站开始兴起,真正意义上的开始了大众网络时代,独立游戏也得以广泛传播。

  1999年 技术探索时期

  游戏开发首先是个技术活,其次才是创意活。起初国内多数的独立游戏开发者是程序员或是计算机相关专业的大学生。开山之作应该算是1999年成都金点工作室的《圣剑英雄传:英雄救美》。它不但是一款完整的游戏,而且是个开源的游戏,不少游戏开发人员的学习之路,就是从学习这款游戏的源代码开始的。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  softboy(汪疆)是圣剑英雄传的主要开发人员,他目睹了国内外游戏的巨大差距而产生制作这款游戏的冲动。经过反复的思量,softboy发现以现有的条件,制作出一款超越《仙剑》的RPG大作无疑是天方夜谭,于是退而求其次,把制作圣剑英雄传当作是一场实战演习,并且记录下整个游戏的制作过程,分享给网友。由于公开源码,这款制作周期不到两周的游戏(第一版)迅速在游戏开发爱好者中传开,时至今日,依然有人想起。

  成都金点工作室是一支业余网络开发团队,在团队成员大学毕业之后,各自分道扬镳,世间也就再没有《圣剑》的消息了。2004年,softboy创办游戏公司成都锦天科技,并于2007年被盛大收购。团队里的sea_bug(林德辉)创建了GameRes游资网,至今为国内最大的游戏开发者交流平台之一。

  另一个很有名气的作品是2001年发布的《北京浮生记》,作者郭祥昊是北漂的博士。因为北漂的辛酸,他决定做一个游戏来反映外地人在北京拼搏的故事。作为白天上班晚上创作的打工一族,创作的激情让郭祥昊忘记疲劳。每天下班后他在出租屋里编写游戏,几乎每晚都忙到后半夜,一个星期后,《北京浮生记》的第一个版本诞生了。发布后的游戏迅速在互联网上传开,当月即攀升至新浪网迷你游戏下载排行榜的第三位,至今共拥有25万用户。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  郭祥昊并不满足于《北京浮生记》所取得的成绩,他放弃国企优厚的待遇一头扎进游戏圈,并于2008和2012年分别做了《方便面三国》和《大明浮生记》两款页游。

  这个时期的独立游戏大有程序员练笔的韵味,总体开发周期短,美术简陋。随着经验的积累,游戏开发资料越来越丰富,一些开发库也得以应用。从此,程序员不再需要关心图形显示、内存管理等底层实现,游戏开发的门槛随之降低。

  2004年 游戏库时期

  2004年,一款民间FPS游戏《梦幻战争2》在方顺一人手中诞生。虽然游戏时长只有一小时,但对于民间开发者来说已经很了不起。2003年,23岁的方顺因为工作不顺利辞职在家,之后足不出户死磕VB,在经历三款失败作品之后,使用VB + TV3D开发的《梦幻战争2》诞生了。

  一次方顺在电子市场找到了《梦幻战争2》的盗版光碟,盗版商立刻不遗余力地推荐,并介绍画面赶超《半条命2》云云,他欣然“受骗”,一古脑儿买下三盘。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  TV3D是一套三维游戏开发库,能够结合vb开发3D游戏。然而业界普遍崇尚c++而鄙视浅显易懂的vb。只使用VB的方顺难以找到一份理想的工作,而且方顺过于执着个人看法,鄙视商业网游,由此他与游戏业界有些隔阂。但方顺从未放弃理想,2014年,《梦幻战争3》在他手中诞生。

  2006年,还有一个叫“游戏之家”(梁辉)的业余开发者也在制作FPS游戏,他的作品叫《五星勋章》,《五星勋章》也使用VB+TV3D开发。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  由于缺乏美术资源,民间独立游戏大多使用商业游戏素材,所谓独立只是程序和创意上的独立。

  2006年左右 RM时代

  国内一些游戏爱好者也热衷于游戏开发,但他们没有技术积累,伴随着这一需求,国外一些不需要太多编程的游戏制作工具逐渐流行起来。rpg maker是最早得到广泛使用的游戏制作软件之一。2005年,清华大学在校学生柳晓宇建立了一个业余游戏网站66RPG,此后战胜竞争对手幻想森林,成为国内最大的rpg maker网站。以rpg maker为代表的开发工具几乎无入门门槛,不少中小学生也成为了独立游戏的开发者。

  国产单机游戏普遍品质低下,加上盗版市场的打击,此时的国产单机市场萎靡不振。一些游戏爱好者痛心疾首,想以自身之力改变现状,并为之付出心血。

  2006一款仙剑同人游戏《灵儿续传》在66rpg发布,作者Rainyfly(姚云翔)是仙剑的忠实粉丝,高三那年,他决心做一款关于灵儿的同人游戏,来弥补仙剑一中灵儿与逍遥没有在一起的遗憾。他只用了一天时间就写好了《灵儿续传》的剧本,然后乘高考结束后的暑假,用rpg maker完成了这款同人游戏。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  Rainyfly曾感慨道“做同人游戏最难的是坚持,毕竟大部分事情都是自己一个人在做,完全凭热情坚持下去,是一件很难的事。”后来Rainyfly在韩国攻读计算机工程硕士,毕业后在韩国A2X GAMES从事游戏开发工作。

  除了rpg maker,game maker,2dfm 也是容易入手的游戏开发工具。《东东的不死传说》是一款使用2dfm制作的真人格斗游戏,从2006年到2009年共花费3年业余时间开发完成。主要开发者是江西恐龙(张强)。当年江西恐龙就职于广州一家软件公司,在一次偶然的机会接触到了2DFM,花费几天研究这款软件之后,他突发奇想的想要制作一款真人格斗游戏。于是说干就干,随即约上好朋友王东担任主角,开始了制作这款真人格斗游戏的历程。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  这款游戏共拍照1.8万张,参与人数高达40多人。2008年江西恐龙就职于网龙(17173),并于2012年跳槽到腾讯参加《炫斗之王》《天天炫斗》《魔龙与勇士》的开发。

  rpg maker,2dmf只适合制作特定类型的游戏,虽然简单易用,但灵活性受到限制。flash作为一款强大的动画编辑软件,只需不复杂的编程,便能做出游戏。2002年成立的小游戏网站4399和2003年成立的7k7k客观上促进了flash小游戏的传播,不少优秀的flash独立游戏被人们所接受。

  发布于2006年的《金庸群侠传2》是flash小游戏的代表作之一。它由24岁的半瓶神仙醋(郭磊)借用智冠知名大作《金庸群侠传》的名字,用四个月零散时间创作完成。半瓶神仙醋后来于2009年推出《金庸群侠传3》,2011年推出商业页游《冒险王》。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  另一款有名的flash游戏是发布于2007年的《闪翼拳皇》,它是闪翼工作室的代表作,也算得上是国产flash格斗游戏的代表作。创始人梦旅人(吴雁)年少爱好拳皇,后来接触flash,在大学期间(2006年,24岁)做了被玩家称为“史上最强格斗flash”的拳皇梦幻之战,也就是闪翼拳皇的前身。

  后来他越做越兴奋,一发不可收拾,并在2007年创立自己的游戏工作室闪翼(FLASHWING)。2010年到2011年,闪翼游戏积累了11亿的访问量,取得不小的成绩。闪翼团队也在2011年创立公司(北京星游互动科技有限公司),经历从Flash单机游戏到网页游戏再到移动游戏的发展之路。

  魔方网的记者曾问梦旅人怎样看待IP(知识产权,品牌)时,他理解的IP是“爱”,因对动漫人物的“有爱”而进行二次创作。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  但是国产单机游戏的萎靡不振,也限制了独立游戏的发展(正如上面所举的游戏大多没有原创品牌)。游戏开发者却有着永无止境的追求。

  2008年 品牌时代

  始创于2004年的柱子工作室对国产三国品牌的建设功不可没。《三国全面战争》是2005年寒奔在游侠论坛发起,经过二十多个版本的更迭,成为了一个在颇有名气的国产三国品牌。柱子的作品被德国pcgame网站评论为世界上最好的5个全战mod之一,央视主持人王涛也参与游戏的配音工作。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  谈及柱子的历程,柱子现任负责人wmh1980感慨良多:“仅凭一腔挚爱中华文化的热诚而无偿付出,尚在MOD领域勉力维持的柱子总算是侥幸存活,可是日后该何去何从?确实是柱子应当思考权衡并付诸探索实践的命题。”。

  与大部分业余游戏制作团队一样,柱子99%的成员并非从事游戏行业,也难逃学业、工作及生活的压力,组内人才来了一批又走了一批。笔者曾就“业余游戏制作团队如何维持和发展”这个话题与柱子成员探讨,大体得出如下结论。

  1、不断更迭的团队成员:业余团队不外乎都是铁打的组织流水的成员,每个成员的精力都极其有限。于是统筹人员不仅需要关注现役成员的工作,还要为成员的更迭和传承做准备。

  2、选择有受众基础的题材:最好选择有受众基础的题材(如三国是长盛不衰的历史题材),在人员招募和作品推广会有相对优势。

  3、不断迭代游戏素材:先使用网上素材,在版本更迭中再逐渐替换成原创素材。循序渐进,可以提高成功率。

  日本流行的ACG文化在国内却很小众。2000年水雨月冰璃(崔闻,2010年大学毕业)成立ACG同好组织蓝天使工作组,2005年开始尝试各种游戏作品。2008年发布的《刻痕》成为国内原创推理悬疑解谜游戏的始祖,也是国内第一个以R15作为GALGAME标准的游戏。刻痕系列还是国内第一个参加中国国际动漫节的非商业游戏作品。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  作为制作人,冰璃负责游戏的策划、编剧和程序,还参与了部分美术和音乐工作。2008年9月蓝天使制作组发布《刻痕2》,2009年又推出新作《刻痕3》,目前蓝天使制作组已经开发了十多部游戏作品。《刻痕3》与二次元杂志《二次元狂热》合作销售,又在漫展上发售,据说截至2014年11月,《刻痕3》各版本销量达到数十万套。虽然盈利水平只够抵消成本,这个成绩尚无其他国产ACG游戏能达到。

  《圈角匡叉》杂志评论道“以现在的眼光来看能坚持到现在所有作品免费发布的蓝天使本身就算是一个不大不小的奇迹,现在同人展上那些比蓝天使推出的游戏无论是剧情,还是规模都小很多很多的部分国内同行,以同人和爱的名义进行价格不低的贩售一些实在是很粗糙的游戏,确实从一个侧面反映出当今社会的急功近利,与那些急功近利的社团相比,也能看出蓝天使制作组作为一个前辈级的社团有着它该有的魄力。” 目前,冰璃在完美世界公司担任游戏设计师。

  国产独立游戏普遍难以盈利,2010年发布的《雨血之死镇》是第一款成功商业化的国产独立游戏。《雨血之死镇》是由原清华大学建筑系学生(2007年大学毕业,后就读美国耶鲁大学)Soulframe(梁其伟)独立制作的全原创图像阴冷风格武侠rpg作品,开发周期超过3年。2010年发布英文版后在rpgmaker制作圈内广受好评,影响力也逐渐渗透到普通玩家群中。游戏在欧美各大独立游戏平台发售,以每套6至10美元的价格售出2万多套,RPG点评类网站rpgfan为此作打出8.8分。《雨血之死镇》也成为国内原创独立rpg的扛鼎之作。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  《见证》描述道“虽然只是一款100多兆的小游戏,发行商仍以专业标准对待它,在用户体验方面,提出不计其数的细节改动。例如,某个图标看不清,某场战斗难度太大,某处需要加入提示。游戏的操作被改为全鼠标,并增加了操作指南及版权声明。正是这些细致入微的要求,将《雨血》由一款业余同人作品,打磨为一款真正的商业作品。梁其伟对此印象深刻,反观国内:“不要说独立游戏,甚至大厂商都有可能随便拿来一些素材,拼凑一番。”

  2011年,梁其伟毕业后回国创业。之后获得天使投资成立北京灵游坊,又由GAMEBAR代理发布《雨血2:烨城》(2011年)和《雨血前传:蜃楼》(2013年)。后来获得网易数百万美元融资,开发雨血手游《影之刃》(2014年)。

  傲雪小组的《小贩大战城管》曾经引起了强烈的新闻效应,独立开发者并非单纯自娱自乐或娱乐大众,他们还试图借助游戏表达更深刻更严肃的社会主题。《小贩大战城管》和《钉子户大战拆迁队》正是国内独立游戏开发者在这方面的尝试。这两款游戏已经超越了普通游戏的范畴,成为了2010年9、10月间的网络现象,无数网民通过游戏找到了宣泄现实愤怒的窗口,这也立刻引起了外媒与当局的关注。据称傲雪小组后来还接到东方卫视《东方直播室》节目组的邀请参加一期主题为“城管与小贩”的节目录制,但由于政府宣传部门反对,最终未能施行。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  Rpgmaker作为一款游戏开发软件,有过辉煌。作为国内最大的业余游戏论坛之一的66RPG不停的探索转型之路。2011年在上海创办公司,开发《姜太公的小岛》、《少侠一炷香》等游戏,但都没有多大起色。2012年转战北京,并在2013年发布 《永夜幻想曲》。《永夜幻想曲》是一款通过网络发售的战棋游戏,虽然销量惨淡,但无愧国产良心之作。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  营造独立游戏品牌并非容易之事,正如柳晓宇所述:

  1、独立游戏要面对画面党的挑剔,玩家会将游戏和国外大作(如将永夜幻想曲与同期的鬼泣5作比)做对比,因此恶评如潮。

  2、独立游戏没有品牌效应,海外大作大多有破解,单机游戏基本无法收费。

  目前,66RPG开发了《橙光文字游戏制作工具》,并持续运营。

  2012年 引擎时代

  随着玩家欣赏水平的提高,早期独立游戏简陋的画面再也不能满足玩家胃口。精美的画面需要极大成本,游戏大作再也不是一个人花几个星期就能完成的事情。

  独游作者摸着石头过河,一步步探索。2010年,一支业余游戏制作团体苍穹天阙工作室成立,着手开发3D仙侠类RPG大作《仙凡之谣》。随即得到媒体关注,游侠网、游讯网都为之制作专区,也迅速召集一大批粉丝。不过由于网络组织过于松散,加上开发难度太大。经过一两年的停滞,2014年《仙凡之谣》负责人卢阳(卢阳飞)发表了《仙凡之谣正式终止制作,祭奠我们那些年追逐的梦想》的帖子,其中道尽网络团队的艰难。

  “一次次的不切实际修改调整游戏规模,一次次的不求现实要求网上的大家做出一些商业水准的作品。在游戏制作整个流程中,我们经历过多次挫折,到现今,已无力再以网上合作的这种形式继续的走下去” “《仙凡之谣》的创始人及技术骨干,已基本全部进入社会工作,一方面业余时间的不足难以支撑游戏的持续开发;另一方面,网络团队最大的劣势之处便是执行力以及凝聚力,没有强制力约束,没有对应实际的奖惩机制,而极容易形成制作无法合围之势。”不过无论游戏是否完成,开发者都能从中得到锻炼。2012年卢阳在广州四三九九担任游戏策划,目前在幻嘉网络任策划部经理一职。

  业余开发团队存在如下几个劣势:

  1、松散,多数团队通过网络组织,难以保证开发进度。

  2、专业性低,大部分团队由学生组成,缺乏实战经验。

  3、不切实际,因为缺乏经验,做出超大规模的规划,导致无法完成。

  大多数成功作品有如下特征:

  1、适当的游戏规模,根据团队能力而制定的开发计划才能够得以落实。

  2、骨干力量有一定水准,团队核心人员都是能够独当一面的人。

  3、程序或美术作为负责人

  正如bhot在帖子中说到的“民间项目不用搞那么大条,关键是要做出东西来,而不是搞多大”“策划最好就是项目带头人自己做,并且他也负责游戏的整体程序,其他都是美术,民间团队制作往往会缺美术。”

  虚幻3、Unity等引擎因能够帮助开发者制作炫酷的游戏产品而受到青睐。2014年10月,一款由民间团队共耗时一年半制作完成的仙剑同人游戏《仙剑5前传之心愿》发布,成为第一款3D仙剑同人。该作采用Unity引擎开发,并一举打破仙剑惯有的回合制战斗,开创了仙剑即时战斗模式,游戏达到游侠网单类下载排行第四名。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  新浪游戏的采访说到:如果说“燃”是同人游戏制作者必备的“技能”之一,耐得住寂寞就成为了他们必须具备的另一项基本功。这种因热爱而起的行为,却不能只靠热情就斩获成功。“心愿”团队里的成员大多在游戏公司工作,事实上,他们的日常工作并不轻松,“一边工作一边做这款游戏,我们经常是朝九凌晨一的节奏。”但即便如此,他们仍然会为了这个既带不来收益,又随时可能面临失败的作品腾出自己宝贵的时间与精力。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  团队成员唳玥(林雪)是仙剑的资深玩家。2009年初,她在论坛上看到一个名为“风中之尘”的玩家发帖说准备开发一款《仙四外传:回到起点》的同人游戏,特向全体仙剑玩家招募剧本。之后的两个月,她每天12小时坐在电脑前,最终完成了30万字的剧本。大学毕业后,唳玥进入了一家网页游戏公司,负责剧本创作。在《家用电脑与游戏》的采访中她说“离我的梦想还很远”“梦想是有朝一日加入仙剑研发团队,为仙剑系列尽一份自己的力。”

  2012年唳玥接受笔者的邀请,参与《仙剑5前传之心愿》的开发,尽管有一定的经验,但开发一款完整的游戏绝非易事。正如新浪游戏的采访所述:即便心愿团队里拥有数名开发经验丰富的游戏老将,产品失败的阴霾也仍旧笼罩着每一个人,最初受罗培羽邀请而来的成员们,大概也只是希望将这款游戏的完成度推进到百分之百,作者之一的吾辈名妖坦言“心愿制作之初,并未做太过长远的打算,完成便是最终目标,也未想过接触得越久反倒越是放不下。”

  以完成项目为目标,符合时间和精力都很有限的网络团队的实际情况。但也因为未做长远打算,作品完成后容易出现后继乏力的境况。

  另一款有突破性意义是游戏作品是2013年成功在国内众筹的游戏《微观战争》,它是第一款在国内众筹平台完成众筹的游戏(筹集69116元)。2010年,范芃和陈智龙“不为拯救中国游戏,只想用心做一款自己爱玩的游戏。”而创作《微观战争》。范芃读了三年研究生后(2013年)在上海的游戏公司工作,白天忙于公司的游戏,下班回到住处,八点多,开始做自己的游戏,每天忙碌到深夜一两点,有时候做梦还在琢磨游戏的事。范芃无奈地说 “有一种精神分裂的感觉。”

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  《微观战争》获得第四届独立游戏节最佳技术奖,但在寻求资本的道路上遇到不少阻碍。与范芃交谈的投资人认为,虽然《微观战争》完成度较高,但盈利模式不明晰,而且没有固定开发团队,投资风险太大。

  到目前为止,国产独立游戏商业化道路有以下几种:

  1、国外发售(雨血)

  2、寻求代理平台(雨血2、雨血前传)

  3、众筹(微观战争)

  4、刊物附带销售和漫展贩卖(刻痕)

  《仙剑5前传之心愿》和《微观战争》都使用unity3d引擎,而2014年发布的FPS游戏《战火风暴》是近年来使用虚幻3引擎制作的优秀作品。作者飞燕群岛(曾贤成,生日1996年)是一名中专学生,毕业于广西工艺美术学校,2012年8月他在游民星空发出了首支预告视频,起初作为学习交流的一段演示视频,在公布到各大游戏网站后取得了众多玩家不错的反响,在与玩家交流反馈修改后并在2013年年初发布了《战火风暴》的DEMO版本,经过近2年的独自开发,2014年的5月游戏终于完成并发布正式版。截止到2015年1月1日,《战火风暴》正式版的下载量达到6万余次。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  目前(2014年8月)飞燕群岛参与东莞黑洞科技《决战2042》的开发。

  另一款成功商业化的游戏是2015年由完美世界代理的《将死之日》。《将死之日》是ORAP工作室的三名成员利用业余时间开发的基于虚幻引擎的射击游戏。三年前,深圳某小区里的三个上班族BigDaddy(策划、程序),G Paine(美术)和Edward(音乐音效)走到一起,从最初几个小时的业余时间到每天长达16小时的工作,从粗糙的游戏版本到97个国家的app store 推荐再到如今国内大牌游戏公司完美世界的代理,可算是节节高攀。

国产游戏的造梦者 回忆那十六年来的独立游戏 ...

  独立游戏团队模式因为人员精简、效率较高等优点,在商业游戏公司也得到应用,如网易在2013到2014年间成立数十支10人以内的小团队,独立开发,择优发行。其中《乱斗西游》就由一支只有6-8人的团队(不包括美术团队)开发20个月完成。

  那些热衷于独立游戏开发的人们,多数不是为了钱,也鲜有获得高额收益。本质上跟报纸上常报道的那些热衷于自己造汽车、造飞机的中国农民们一个性质,为了兴趣,为了理想,值得尊敬。

  后记:

  作者于2015年1月开始起草该文,经3个月时间的收集资料和写作,第一版本于2015年4月发表于新浪知游戏频道,文章名《16年的长度 记录中国独立游戏》,此后继续完善和修改,于2015年11月投稿于游戏陀螺。文章由@罗培羽 起草,经 wmh1980 、飞燕群岛、卢阳飞等人论证和补充。

  相关阅读:我与独立游戏:中国独立游戏发展史(长篇)

via:游戏陀螺

声明:游资网登载此文出于传递信息之目的,绝不意味着游资网赞同其观点或证实其描述。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
我与独立游戏:中国独立游戏发展史(长篇)
发布者: sea_bug | 发布时间: 2014-3-28 16:51| 评论数: 6
  编者按:本文按照时间排序,讲述了作者从初识游戏到成为一名独立游戏开发者的故事。对作者而言,这是一部他与独立游戏之间的编年史,也是一部从2008年至今——关于作者自己、关于独立游戏圈的回忆录。你想知道这一路他到底经历了些什么吗?

【回忆的第一天】

  前言:

  标题之所以叫《我与独立游戏》,而不是《独立游戏与我》,大概是因为独立游戏并不认识我。事实上,我也并不能说自己完全认识独立游戏,我所看到的只是冰山一角罢了。在本文中,大家将看到一个玩家到一个创作者的转变过程。其中百味陈杂,不一而足。总之,这是一场关于我的,我们的,既艰辛又扯淡的喜剧。

  接触独立游戏之前:

  所谓接触独立游戏,指的是接触“独立游戏”这个特定的概念之前。

  我,88年生,自小玩掌上游戏机、小霸王、电脑,但并没怎么接触过街机和PS2。在1999年之前,我主要是在电脑室(网吧)玩,去一趟也就是玩半小时,玩得并不多。虽然也玩大富翁4,英雄无敌3等等单机多人游戏,但玩得最多的并且对我影响最深的,始终是即时战略游戏,像红警95、98,帝国1、2,红警2,沙丘2000,魔兽2,星际等。

  在这些游戏中,我玩的最多还是星际。最早的时候,看到别人在网吧里玩星际就觉得他们好牛逼,因为当时星际的英文菜单极其复杂。那时我用人族打电脑,被电脑推了,但半小时后照旧幸福满满地离开,也许往后我再也无法体会到那种幸福了。

  在1999年买了电脑后,我的大部分时间便都耗在了星际上。偷偷玩电脑游戏什么的,相信不少人也体验过,那种情怀实在难以言表。当时我还在用64k的网玩星际的玩家自制地图来着,那会最早接触了TD等小游戏。

  我没玩生化、仙剑、剑侠这样的游戏,我猜这些游戏可能不是我的菜。但后来我才知道,之所以不爱,是因为没玩。很多游戏,当你真正去玩了,很容易就会喜欢上。

我与独立游戏:中国独立游戏发展史(长篇) ...

  等到魔兽争霸3出了之后,我上手也是非常快的,和小伙伴对打也是以一敌多。过了几年,那台13G+128M的电脑就再也跑不动这个游戏了。

  因为我不泡网吧,所以石器和传奇也没玩。只是听到别人说传奇里有个人叫“太子丹”还是什么太子的很厉害,有把屠龙要人民币4000多还是8000多。他们玩得火热的CS,我也是在CS火了很多年之后才玩的。

  至于玩到的其他游戏,多是游戏店里买的盗版合辑,里面往往有各种游戏。我还记得最早买的碟子里有“星际”和“唐伯虎点秋香”。

  这些都是大学之前的事情了。

  上大学后,就和同学去网吧联机了。记得大家都在玩魔兽的常规战、3C、CS;当Dota在我们之间流行起来的时候,我们就只玩Dota了。

  于是,Dota就从06、07年,一直伴随我到今天(开发游戏的期间不玩)。记得我开始玩的时候,版本号还是6.38吧?

  直到08年,我开始接触独立游戏。

  之所以要说这些和“独立游戏”无关的事情,很大程度为了后文的铺垫。不同的人有不同的游戏史,大家曾经接触的一切,都自始至终影响着这个人。也影响着他对游戏,乃至对独立游戏的态度。

  初识独立游戏:

  有一回老妈告诉我,有个叫VeryCD的网站可以下很多东西,于是我就黏上面了。我不大喜欢逛论坛,因此很少去大妈或者游侠。在网络上接触到各式各样的内容很大程度是经由VeryCD,那地方,盗版资源云集。

  至于玩盗版,那是自幼就开始的;下载盗版,也是习以为常的事(后来观念倒是改变了)。

  那时我正好没有电脑,又不上课。我有个同学叫代钦夫司机(同学绰号)的天天上课,他的电脑就被我霸占了。一来玩Dota,二来下载各种奇奇怪怪的游戏。

  我在VeryCD上叫做“眼皮上的幸福”,那个名字来源于自己写的一首黑暗的小诗。

我与独立游戏:中国独立游戏发展史(长篇) ...
《蜡笔物理学》

  那会儿,我被一款刚接触的游戏折服了,这款游戏名为《蜡笔物理学》。当时玩通没有我已经不记得了,我只知道我玩得很爽,内心为之一震。毕竟,长期接触那些传统游戏的我,哪儿见过这样的游戏?

  自从知道了这个游戏属于独立游戏之后,我又找到不少独立游戏,都很别致、很有趣,我逐渐也对独立游戏产生了感情。在2008年那会儿,能搜到的独立游戏实在屈指可数,不仅游戏找不到几个,相关新闻也根本没有。

  后来我发现一个个人网志,博主叫Snake2020,他在网志记录了很多独立游戏。我惊讶于他到哪儿弄来这么多国外独立游戏的,尤其爱的是他对独立游戏的执着。不得不说,在独立游戏领域,他/她是我的启蒙者。

  有此启蒙后,便一发不可收拾,用google搜independent game 都是家常便饭。当年我们都用independentgame这个词,直到2010年,才知道用indie game更贴切。

我与独立游戏:中国独立游戏发展史(长篇) ...
《蓝莓花园》

  2009年独立游戏节大奖颁给《Blueberry Garden》(蓝莓花园) 的时候,我第一时间拿到手并将其破解分享出来。这个游戏,在我的游戏排行中绝对排名前五,后来在IndieRoyal里买到的时候特开心。蓝莓花园的风格,尤其视觉风格独具一格,音乐也是美得无可方物,后来我弹钢琴特意练了里面的音乐。这款游戏对我以后做游戏影响很大,特别是审美观方面。

  由于我在VeryCD上发的这些帖子充斥着广告,又不能被加精也上不了首页。于是我决定脱离VeryCD,搞一个自己的网站。

  此后一年,我经历了退学复读,直到又考上一所新大学,才在那个间隙真正开始做游戏。在这之前,我已经建立了QQ群,也在寒假确立了网站的名字: 独立星球;网站的域名 indepla.net,这是 independent和planet的合成词,群则一直由一个在VeryCD认识的好伙伴维持着。

我与独立游戏:中国独立游戏发展史(长篇) ...
《血径迷踪》

  同期,我还玩到了《The Path》(血径迷踪),如蓝莓花园般对我影响至深。巧的是,这款游戏也在IndieRoyal中买的,而不是在IndieHumbleBundle。其艺术表达乃至电影感以及一些抽象的部分,令我非常难忘,对我的影响不亚于蓝莓花园。

  不少游戏当初还是未完成品,虽然有些人觉得完成了的不如半成品更有意味,比如Dyson,成品名为《Eufloria》(真菌世界)。

  具体不多介绍了,网上都能找到这些游戏。值得一提的是,在刚刚介绍的游戏中有两款是中国人开发的,一款名为《小熊回家》,另一款则是《云》(作者为陈星汉,新浪微博:@Jenova陈星汉)。陈星汉的作品颇具风格,作品中透露着其个人的魅力。一个游戏人具有的一致性,在他身上颇能体现的。

  那时,我接触的仅仅是独立游戏,并没接触过独立游戏人。因此,一切都仅仅局限在有限的能够搜索到的范围内。对那时的我来说,挖掘游戏是一种喜悦。发现新游戏,乃至找到某游戏的安装包,都能给我带来至高无上的满足。

  这个阶段持续到了我离开那所大学为止。之后的2009年中旬至2010年中旬,我暂时脱离网络,暂时脱离独立游戏这个世界。

【回忆的第二天】

  建立独立星球:

  三年半之前,在我再次高考结束后的那几个月,用来做网站是再好不过了。不过,当天堂告诉我建站程序的时候,我迷糊了很久。因为我觉得要不就是在线建站,要不就是线下建站,建站程序是个毛。经历了尝试、放弃、再尝试的过程,我发现那些建站程序其实是有不少优点的。

  最后,我将目标锁定在phpwind和discuz上。那会儿discuzX1.0有BUG,而且phpwind官方很热情,于是我就选phpwind啦。

  当时怀着很大的热情去做这个站,但这样的日子过了大约一年左右,我便出现了神经衰弱的症状。虽然朋友们也在努力,不过我是急性子,我要看到效果,于是整个过程就变成了热血夹杂着痛苦。不过无论怎样,独立星球还是基本建起来了。

我与独立游戏:中国独立游戏发展史(长篇) ...
现在的LOGO

  对于竞争对手这回事,2010年时我在网上搜索独立游戏相关网站,找到一家用WordPress建的网站,与我的站同名,同样也是在做独立游戏(网址:http://www.myonlystar.com)。这个网站是伴随独立星球很长时间的一个站。

  发展独立星球:

  网站建好了就要发展,发展就需要有用户入驻。我把群里的旧部呼喊来大家一起搞,更新资源啊什么的;另外我每日照常到处挖新的独立游戏,然后发到VeryCD上,附加一下星球的链接,也算广告宣传了。虽然这种运营方式很有效,但在这日复一日玩游戏发游戏的过程中我慢慢“变质”了。

  游戏玩的多了就变得不好玩了,也很难找到让我眼前一亮的游戏,不过我照常发啊发,发星球也发VeryCD。我会监控星球的一切数据,虽然毫无意义。在那种迫切之中,我失去了很多,人也神经衰弱了。我既不会php,又不会html,也不会ps,于是就用一个notepad++在搞,但是居然被我抗下来了。

  上文提到的myonlystar不慌不忙的发展着,我逐渐和他建立了联系。

  这些图是曾经两个版本的独立星球。

  与myonlystar合作与决裂:

  当时我不会SEO,因此当我用“独立星球”作为关键词搜索时没法搜到我的网站。我想,既然myonlystar和我一样都做独立游戏,于是我便将他设定为我的“战略合作伙伴”。说到过程,起初也是我去联系的他,大家都挺友好的。不过合作并不成功,于是我就放弃了这一块,回过头来自己做门户。

  那时我与myonlystar的关系其实还没僵,我总找他一起去打war3常规战,2v2,我们总赢。当你和你的亦敌人亦朋友的一同合作时,有种奇特的感觉,那是段美好的日子。不过最终还是崩了,我不记得具体情况,总之关系是越处越僵。最终我们从合作者变成了敌人,不过我不恨他,我能够理解他的做法。我与他所向往的不是同一个目标,他想做网站,我的目标则是独立游戏。

  后来由于“独立星球”一词再起纠纷,我便将网站更名为IN星球,这里面也有和他彻底脱离关系的想法。

  折腾独立星球:

  所谓折腾,就是各种改版。要知道用户形成习惯后,天天变并不好。不过我可不在乎,于是一直改改改,新用户流失了,老用户也在流失。

  我也做错过一些事,记得曾经有个ID叫做opera的,虽然他言辞激烈,但经常提出建议意见。可是我那会儿懒,很多建议我没精力去采纳,就把他给气走了。类似的事情还有许多,那些热心的热情的,总被我所辜负。

  我也建立过用户QQ群,那更是折腾。建立过很多,但是群水了,于是解散。这个套路延续了很多年,很多人被踢或随着群的解散而流失。

  那时我总很希望有人一起搞,于是到处拉人,但收效甚微。

  结识国内独立游戏开发者:

  国外独立游戏玩多了,发现也就那么回事儿,国内情况又如何呢?产生了这个想法之后,我没事儿天天在网站上找各种国内的独立游戏开发者。找的很辛苦,可是却没找到一个。我当时就希望他能把自己的项目搬星球来,我给弄个版块,大家交流交流。

我与独立游戏:中国独立游戏发展史(长篇) ...
《微观战争》

  没记错的话,2010年8月,我找到了这个由饭盆与龙哥负责的项目,叫做《微观战争》。不过认识多年后,我都只认识前者,传说后者潜伏在星球,不知道什么时候才会浮出水面的。

【回忆的第三天】

  最初结识国内独立游戏开发者(二):

  认识了微观战争团队并拉来入驻星球后,感觉这样的模式挺好。于是到处挖掘国内做独立游戏的人。不过当时“独立游戏”这个概念在国内依旧处于萌芽阶段。虽然已经有几十上百万人通过VeryCD接触到了独立游戏,但依旧还是少数,因此对他们的搜寻可以说非常不易。

  那时,我认识了一批早期国内做独立游戏的人,包括做《机械之刃》的晃悠,这个游戏最后通过微博找到了合作者,并将于2012年6月登陆苹果市场。

  微观在2012年获了IGFChina的最佳技术。

我与独立游戏:中国独立游戏发展史(长篇) ...
《极限防御》

  还有做《极限防御》的cspok,这是一款奇特的塔防游戏,当年他一边做,我们一边玩,玩得不亦乐乎。但几个月之后,他消失了。

我与独立游戏:中国独立游戏发展史(长篇) ...
《死兔》

  还有地狱 ,他在2008年左右做了一款游戏叫做《死兔》,应该算作操作解密类游戏,但也有人说它是反向扫雷类型的。他是一名物理教师,平时追究是很忙的,以致死兔二到现在都没被开发出来。

  还有很多游戏最终是坑了的,那才是绝大多数国产独立游戏的命运。

  雨血:

  独立星球早期定位更偏向于玩家,因此论坛上为开发者们建立的版块,本来很大程度面向其玩家的。还有一些特别建立的板块,像尼特的故事,无尽森林,Toribash及雨血等。

我与独立游戏:中国独立游戏发展史(长篇) ...
《雨血》

  这里说说雨血,这款游戏也是国人做的,当时他在论坛的ID是Soulfram,那时还在国外读书。不过他并不大来星球,所以实际上交流并不多。他总是很忙,在QQ群上也不大说话。那会儿我们还开过一次特别会议,与其说会议,不如说聊天。我们认识的所有国内核心独立游戏开发者在QQ群上专门找时间聊了一顿,得出的结论是独立游戏在国内发展的惨淡。

  我还记得,雨血1是我玩通的第一个RPG游戏。

  独立游戏节:

  独立游戏在国内开始爆发也是在这个阶段。从2008年产生萌芽,到2010年的深入发展,再到2012年的家喻户晓,不得不说这个过程很大程度上是被国外独立游戏的蓬勃发展所带动起来的。

我与独立游戏:中国独立游戏发展史(长篇) ...

我与独立游戏:中国独立游戏发展史(长篇) ...

  因此,国外的独立游戏节IGF就是这么一个非常好的平台,早期能玩到的最好的独立游戏,基本都是这里的入围或获奖作品。类似的比赛还有不少,但它始终是其中含金量最高的一个。

  遗憾的是,独立游戏节中几乎看不到中国人的影子。

  独立游戏节·中国:

  作为国内唯一的面向独立游戏的比赛,它更有中国逻辑,也更具中国国情。该会议和游戏开发大会·中国一起举办,入围独立游戏能够在现场获得展示,因此很多独立游戏人以此作为沟通碰头的契机。

【回忆的第四天】

  独立游戏节·中国(二):

  知道这个游戏节之后,我就开始联系历届获奖者,毕竟此时所知的国内独立游戏开发者,依旧是少数中的少数,能多认识到一个,总是好事。该游戏节于2009年时举办了第一届,因此已知作品并不多,我通过溟灭DONOVO(第一届)和CrossOut(第二届)认识了leon还有此间兔。当年的前者在做新游戏;后者在椰岛(一家做手游的独立游戏团队 )则帮助我参加了第二届游戏节活动。

我与独立游戏:中国独立游戏发展史(长篇) ...
溟灭

  2010年时,我联系到了《ZoneLink》的作者(因为这个游戏的作者不是yuri)和《The White Laboratory》的创作者yuri。

我与独立游戏:中国独立游戏发展史(长篇) ...
CROSSOUT

  那年去上海,却是一个奇特的机缘。当时网站开始没几个月,但独立星球已经小有名气。 举办活动的官方联系到我,但由于当时我和myonlstar共享网站名造成了一些误会。

  从网站诞生到2010年的11月份大概只经过了几个月的时间,由于每天超级投入,我以最快的速度汲取知识。逐渐地,接触的作品越来越多,自己的想法也越来越多。在去参加游戏节的火车上,我萌生了一个游戏的构思,那个游戏就是后来的《井》。关于这款游戏,虽然后来完成的作品和当初的设计相差胜远,但至少基本的操作和视觉风格设计是一致的。

  在上海参加第二届游戏节时,我也没太认识多少人,就是各种看看学学,但也收获不少。当时作为一个玩家的我真的是什么都不懂,也因此收获颇多。

  这段时间正是手机游戏开始猛发的时候。手游,也正是独立游戏开发者的天堂。独立游戏在中国的发展,尤其是从这个时候开始突飞猛进,抑或是神奇起来的。

  关于手游:

  我对手游不仅无爱,甚至有种抵触感。

  手游,由于其平台限制导致游戏单一;入门简单又导致渣作泛滥、同质化现象严重;这些因素都让我很难对其产生好感。我又并非手游从业者,因此能够以一个旁观者的身份审视着手游圈的一切。和早先接触PC端上的独立游戏时每每都能获得的新奇感受相比,心理落差极大,让人难以将这些“独立游戏”与真正的独立游戏相提并论。
我与独立游戏:中国独立游戏发展史(长篇) ...

  虽然有很长一段时间我都在抵触手游,但不得不承认的是,手游确实超级适合某些特定类型的游戏,比如RPG、宠物养成。

  此后,许多开发者自诩为独立游戏开发者,他们带上了独立游戏这么个帽子,却并不做具备独立游戏精神的作品。

  也正是从这时起,“独立游戏”在国内变得广为人知,并逐渐泛滥恶俗起来,此时的独立游戏已经不具备我个人赋予其的一种精神了。早在2008年,在美国独立游戏节上已经有人提出,说当今的不少独立游戏特别商用,反倒某些3A游戏更具有独立的精神。这不得不让我反思,我曾经迫切追求的“独立游戏”,是否已经变成泡沫,淹没在糟糕的环境之中?

  长期以来,我还拿“手指在屏幕上油腻腻很恶心”当做借口,偶尔想想也蛮可笑。或许以后我也做手机游戏呢,不过,我是不会奔着钱去的。

【回忆的第五天】

  游戏制作工具:

  我还没开始做游戏的时候,就开始考虑游戏制作工具这个事儿了。在开始做游戏前,我一直在纠结,究竟用什么工具做游戏好呢?

  选工具,我有2个原则:一来是工具强大,二来是上手容易。从自己用代码写,到使用游戏引擎;从GameMaker到Construct2到UDK、CryEngin、Unity 等,我总希望找到一款合适的一劳永逸,也因此折腾来折腾去,但始终没入门。又因为我不单想自己想做游戏,更希望一些从未做过游戏的人能加入到游戏创作中来,所以我迫切希望找到这么一款上手容易且又足够强大的工具,能让不会代码的朋友迅速入门。

  但事实验证了我这种想法是错误的,即通过降低门槛来扩大业余创作游戏的群体。 当2012年我自己真正开始做游戏之后才逐渐发现,一来做游戏绝对不会容易上手,二来工具其实是浮云。从“不做游戏”到“做游戏”,在这个变化过程中游戏制作工具其实是无足轻重的。无法破除阻碍的人,也是无法完成游戏的人。真正做游戏的,永远是少数。

我与独立游戏:中国独立游戏发展史(长篇) ...

  经过对比,我最终的选定了Unity。作为视觉党的我,认为其界面及组织形式相当符合是个人的审美情趣及操作习惯。

  所以说,“适合独立游戏开发者的游戏引擎”,本质上并不存在。存在的,只有适合做独立游戏的人。

  EGP与World of Goo:

  说到《World of Goo》,可能有很多人都很熟悉这款游戏,我个人也是极爱的。这个游戏的原型是《Tower of Goo》的原型,相信很多人都不陌生。开发者在网上发布了这个游戏的开发过程,我翻译过这篇文章:《“粘粘世界”非一日之成》,大家可以搜一搜。

我与独立游戏:中国独立游戏发展史(长篇) ...

  通过《World of Goo》我又了解到EGP,即Experimental Gameplay Project,这是我最早接触到的一个网络在线GameJam。虽然我并不曾参加过,但我总是关注着这个活动,因为我认为这样的活动能极大程度地扩展人们的创造力。一堆人在一起围绕一个共同的主题,想着各种天花乱坠的游戏点子,并尝试着实现出来。

  我的“想”也是从那会儿开始的。很长一段时间,我没事儿就自个儿想游戏,从周遭的事物中,从接触到的点点滴滴,以及那些突然遇到的刺激里,这些点子或许可以称之为灵感。我形成了一种思维,即从万事万物中源源不断获得创意点子的思维,并将之保持为一种习惯。

  我现在也在尝试,让更多人加入到这种思维中来。即便不做游戏,能想游戏始终是第一步,至少我就这么过来的,别人也未必不能以此为历练。

  其他独立游戏网站:

  除了IN星球外,国内外独立游戏网站其实挺多。部分网站并不单一针对独立游戏,而是建立在某种文化基础上,做着具有独立游戏性质的游戏,比如一些同人论坛,个人网志等。在星球底部的链接处依旧保留着曾经的一些站,但很多网站却已变成了遗迹。

  独立游戏包:

我与独立游戏:中国独立游戏发展史(长篇) ...

  最早接触,也是品质最高的独立游戏包就是Humble Indie Bundle。我之所以重视,是因为它非常便宜了,我并不是很迫切的想去玩新出的独立游戏。其他的包嘛,之前也有提到 Indie Royal使我买到了最爱的两款游戏来着。虽然频率高,量多,但如今其作品整体水准常常并不能使我有多少购买欲。

  《北京浮生记》:

我与独立游戏:中国独立游戏发展史(长篇) ...

  顺便提一下当年接触到的一款经营类独立游戏——《北京浮生记》。这款游戏是十多年前出的,可见中国独立游戏其实很早就有了。实质上,我认为早期的所有游戏都是独立游戏,像仙剑啊剑侠啊都算。如今独立游戏这个概念异军突起,一是由于独立游戏节的促进;二是因为渠道的发展;三是因为手游这个平台的带动。

【回忆的第六天】

  自我修炼:

  在2010年设计《井》之后,我就已经将游戏的美术风格确定为国画了。那会儿总有人告诉我,可以用各种手段模拟国画风格。但我还是认为,不亲自接触国画,如何能利用好这个风格的精髓? 因此我在2012年正式开始学习国画。

  我的思想就是,万事必亲历。即使做不到,也必须做完全的准备,敷衍自己,或是敷衍别人,都是极不负责的。也因此,我不太赞同多国人做国外文化体系下的游戏,一是因为他们对国外文化理解不深;二是因为他们比较浮躁,难以细心钻研,所以做出来的东西往往牛头不对马嘴。总之我只做有把握的,把握不了的干脆不弄,免得贻笑大方。

我与独立游戏:中国独立游戏发展史(长篇) ...
像素画(图片来自网络)

  除此之外,当我遇到感兴趣的人或事时也会进行尝试,比如说像素画。

  在音乐方面,我在北航时就学了笛箫与小提琴;在厦门大学时又学了吉他钢琴,虽然不入流,但总算是种不错的娱乐。 有人就说,我修的技能点太多了,我不以为然。时间本来就是用的,经过的一切都是人生。人生在世上,不就是经历其整个人生么?总觉得很多人,把时间看得很重,认为当下应当为未来做打算。 什么是浪费生命?每天考虑明天,为明天而努力才是浪费生命。“今朝有酒今朝醉”是对享受人生最好的诠释,这句话并非完全告诉人们放弃明天,而是说人们可以时时刻刻享受今朝。 有人说我没挣钱,这个问题嘛,等有一天我不上学了,自会证明人们的无知。我总是以自己的方式,以自负中体现的自信,无视他人来着。 因为我自己的路子就这么慢慢走,又何必急呢?

  独立游戏人与精神:

  做游戏的多半是业内人士,做艺术游戏或者做着玩的毕竟是少数。我将做独立游戏的人分为以下几种:

  1、学生做游戏作业;
  2、民间做游戏做着玩;
  3、做Flash 游戏发相应网站吃广告的;
  4、做手机独立游戏的,以面向苹果为主;
  5、创业型个个体户,做电脑或者主机游戏的;
  6、有公司有投资的专业的游戏开发小团队。

  “独立游戏 ”,其词本意区别于商业游戏。在经历了词义被误用等起伏之后,“独立游戏”褪去光环,逐渐还原出本来面目,变得更真实更无可厚非。而虚无缥缈的“独立游戏精神”,恐怕以别的方式来概括或诠释更贴切,我们又何必纠结于一个关键词呢。

  渠道与平台:

我与独立游戏:中国独立游戏发展史(长篇) ...

  像PC,PS,iPhone等平台我就不赘述了,这里主要说说其他平台渠道。Steam平台专门开了个独立游戏分类,还有Desura的诞生,让大众通过这些渠道就能接触到数量众多的独立游戏包。此外,独立游戏节、独立游戏盛典以及GameJam等大会极大的促进独立游戏的发展。各类平台的重视很大的改善了“小众”的局面,逐步使“独立游戏”从小众走向了大众,不过这仅仅是国外的情况。

  关于传播盗版与做资源:

  早期的星球也是传播了盗版游戏的。直到我认为这是个问题,就组织了一次投票,大家一致投票拒绝盗版,于是盗版游戏就彻底从星球灰飞烟灭了。

  在VeryCD上做源及推荐新游戏也进行了很久,不过现在也不做盗版了,只做免费独立游戏资源。 做资源做了很多年,后来就只是为了宣传星球而做,特别功利,这点很糟糕。我发现一旦你所做的事情沦为一种工具后,就不会再有爱,而只会有迫切的痛苦。


(GameRes注:不知道这里原文为什么少了第七天)


【回忆的第八天】

  独立短片、猫窝和品赏艾尼墨:

  独立游戏,是Indie的一个方面。Indie包括多种艺术创作娱乐,譬如独立动画、独立电影等。

  独立动画这个词并不常见,因为除动画电影的番外篇之外,几乎所有的动画短片尤其创意动画短片和实验动画短片都是独立动画。 如今大家能看到的微电影基本也都属于独立电影范畴。我这里主要要说的就是独立短片了,包括动画和电影。

  如今大家可以在youku、土豆尤其国外的vimeo及youtube上看到非常多的优秀独立短片,实质上,游戏和电影短片在表达上有相当多的共性。就我个人而言,如今的游戏创作受到了不少短片影响。

  我简单说说曾经经历的两个国内的站吧。

  猫窝:

  曾经有个独立网志性质的网站叫做猫窝(cat-nest.com),站长是个叫老猫的基督徒。他在这个网站会分享一些音乐,动画短片,还有个人的博文。在06年之前我从未看过创意短片,初次接触那些极具创意的短片时,极受震撼。甚至当时,我的梦想就是做动画。后来,老猫将自己奉献给主了,网站也便停掉了。我们也曾想恢复猫窝,但最终没成功。

我与独立游戏:中国独立游戏发展史(长篇) ...

  猫窝去后,也是10年左右,我见到了这个AnimeTaste http://animetaste.net/ ,介绍非常多的好东西,网站也超级简洁美观。内容也做得非常好,总之就是完美的表现。但是,我也不知何时我不再大量看动画短片了,虽然每每能获取无数的感动。不过我总归会记得,那些永驻于我心中,影响着我的过往。

  甘井子传说:

  这个游戏也是VeryCD上见着的,它也是中国独立游戏史上光辉的一笔,不过,该游戏属于同人游戏。

我与独立游戏:中国独立游戏发展史(长篇) ...

  独立游戏贴吧:

  由于吧里人员杂乱以及过于小众的原因,独立游戏贴吧一直萎靡不振。

  我也曾担吧主,不过由于自己搞网站,所以对贴吧贡献屈指可数,吧主要还是由自由的少年负责着。不过最近情况略有好转,虽然免不了“水量丰富”的特质,但这总归是好事。不过我总觉得目前贴吧多多少少在走着一些我走过的老路,前途并不明朗。想把贴吧真正发展起来,难度恐怕比搞独立网站还大。

  此外,贴吧也逐渐从玩家吧转化成为了制作吧。

  同人游戏:

  很多人不理解同人游戏,我也是如此。 同人游戏是典型的文化背景下的聚集圈,虽然同人的实质在于共同志向,但更多的被理解为一种衍生形式。实际上,我们能玩到的非常多同人游戏,都是原创作品。几乎所有同人游戏,实际上也都是独立游戏。

我与独立游戏:中国独立游戏发展史(长篇) ...

  但是独立游戏和同人游戏这两个概念往往会被区分开,主要还是文化上的差异主体。 独立游戏这个概念来源于欧美,因此接触到的独立游戏主要是欧美游戏。而同人游戏大都是日漫文化的衍生作品。也就是说,我们现在的独立游戏和同人游戏,是建立在两种文化背景下的;虽然双方有着共同的精神,但是由于文化差异,导致双方基本毫无交集。

  如果将同人游戏也算在独立游戏范畴,那中国的独立游戏行业的发展还是颇为繁荣的。66RPG、萌动世界等网站非常欣欣向荣,作品产出也非常大,质量很高。前文中提到的雨血最早也发自66,应属于同人游戏范畴。
  
  但要说用词以及认可问题,就很复杂了。所以呢,如今的情况是,大家相互之间虽逐步有些相互认识,但是不会过多交流。必然,文化不同即是道不同不相为谋,不可强求的。傻乎乎地搞大圈子大融合,才是没有文化毁灭世界的表现来着。

我与独立游戏:中国独立游戏发展史(长篇) ...
同人游戏(图片来自网络)

  不过这样也挺好,依习惯的独立游戏人和同人游戏人之间,仿若朋友般惺惺相惜来着,有点那种味道的感觉。具体关于同人游戏嘛,大家可以问微博上的@中文同人游戏 。毕竟作为圈外人的我,多少认识理解上还是有偏差的。他曾有个网站,但最终没了,稍后会提到些具体原因。那个网站,曾经是最接近独立游戏的同人游戏圈了。

  ex2D及其开发者:

  这是一个Unity的2D插件,具体也不多介绍。这里我想说的是他的作者们——arasAya和南塔斯,他们是我早期认识的人中既能做插件又能做游戏的人,也是很猛了。

  从独立星球到IN星球:

  我的星球从独立星球一直到IN星球,改名换姓抛弃掉了一切,域名也一并变了。还有我的网名,改为Diestr,QQ也抛弃了。

我与独立游戏:中国独立游戏发展史(长篇) ...

  除去这些变化,IN星球逐步明确了自己的路线,如网站不再主面向玩家,转向开发者等主要发展策略。

【回忆的第八点五天】

  上海、北京游戏制作节GameJam:

  虽然椰岛也有做过内部小规模的GameJam,但GameJam对于国人来说始终算是比较陌生。

  7月,椰岛和中文同人游戏,在北京上海两地同步举办了GameJam,通过48小时游戏创作时间来开拓独立游戏人的视野。类似形式的活动在国外风风火火传承了多年,但在中国,这倒是第一次。实际上,中国还有类似的游戏马拉松活动,只不过名气不大罢了。

  那次活动相当成功,虽然参加者多是游戏业内人士,但对独立游戏而言具有一定促进作用。在这里,开发者们更加接近独立精神了。

  第一次IN星球聚会:

  2011年,我照例去参加了IGFChina,当时我认识了不少人,而此时以星球为基础的圈子也逐步形成起来,于是我决定借机在上海搞一次成员聚会。这次活动主要是由棉花准备的,棉花当时只有12岁。聚会准备在了一个静安别墅,地方不大,但足够用。

  2011年11月11日,我们一起举办了这场聚会。

我与独立游戏:中国独立游戏发展史(长篇) ...

  以上是聚照,部分人提前走了,没在合照中出现。

  照片中间傻笑的是此间兔,他左后的人是免费打工仔,最左的是棉花,还有一些对不上号的朋友。参加聚会时新人居多,学生占多数,其中还有根本没开始做游戏的人,因此话语权就被此间兔和免费打工仔长期霸占,我们只能在一边听,依旧有很多内容听不懂。

  有机会还是会让他俩讲讲过去与现状的差异,以及有钱时说的话和没钱时说的话。职业独立游戏人大都比较现实。

  乐途静安照面:

  我们一群人都住在乐途静安,下面有个大厅被我们强势霸占。

我与独立游戏:中国独立游戏发展史(长篇) ...

  除参加聚会的朋友,还有别的朋友一起。其中就有被带来的米可可,她披头散发、穿个拖板鞋翘着脚在沙发上玩板子,那样子太性感了。还有中文同人游戏及他的伙伴 xt3000,中文同人游戏还拿出了他黑色的录音笔采访星球黑历史来。后来黄天晓还拿出桌游玩来着,名叫Life Boat。他之前也做了好几个游戏了。

  走访武汉:

  暑假来学校前就有空到处走走,于是决定去武汉逛逛,因为饭盆和大鸟在那儿。

  我先去找的饭盆,那会子貌似在追战地三。

  后来又到武汉另一个区去找大鸟,当时大鸟还在自个儿的团队做凹裤子二,自个儿偷偷做了叫做《像素五月哭》的游戏。他有两台电脑,但他的蜗居让我感受到了独立游戏人的艰辛与坚持,不少搞独立游戏的人都是从这个阶段过来的。

  与他们面对面,又让我更深的认识到了独立游戏人的现状,当然也增进了自己对游戏的理解。

  独立游戏节·中国(三):

  这一年,椰岛的《啪啪英雄》获奖了,大型肉食鸟的《PixelMayCry》获奖了,ex2d团队的《超级拍拍羊》获奖了。

我与独立游戏:中国独立游戏发展史(长篇) ...

  我在现场见到了椰岛团队的大多数人。由于大型肉食鸟获奖了,于是棉花请大鸟去搓了一顿。

【回忆的第九天】

  独立游戏杂志:

  国外一直都有电子版独立游戏杂志,但这些杂志大多面向技术开发人员。后来网络越来越发达,纸媒越来越萎缩。再后来就很难见到有价值的文章了。我不指望媒体能提出不指望媒体能提出,他们无非就转转新闻,翻译翻译别人的文章,然后就没有然后了。那些贴着“独立游戏”标签的文章,其实质往往不尽然。

我与独立游戏:中国独立游戏发展史(长篇) ...

  时代在变,只有跟得上时代的人才是时代的获胜者。

  QQ群与QQ:

  2011年时,星球还有很多QQ群,那些群大都很水,主要以玩家为主。那时我搞网站什么的弄的焦头烂额,于是群氛围很难维持。群一旦水掉就没什么真实价值了,于是我就倾向于把群解散。

  于是,解散-重建-解散-重建。

  真正要运营好一个QQ群需要投入大量时间,稍有疏忽群就水掉了。真正的好群,需要极高的管理,也不是说没有,只是不常见。

  那时,针对独立游戏的群也是有不少的,或面向玩家的或面向开发者。 因此我认为群只适合人与人相识相交,而不适合通过群讨论出结论或者达成合作什么。

  不得不说,现在最熟识的人也是当年玩群时认识的。星球最早建立不也是在群成员基础上的么?因此QQ群也有其自己的价值。

  同样,QQ也是工具,不能过度依赖。类似的,还有新浪微博。

  真正要说中国独立游戏人的圈子,我指倘若有一个圈子的话,实质就是构筑在新浪微博上的交际网——QQ群很局限,而且很不精美;微博,即能即使交流,又很大程度进行了内容分享及讨论。圈子,正是那些独立游戏玩家和开发者共同构筑的交际网。没有任何一个地方,能比这里更聚合了。

  拼命玩游戏与在线游戏:

  借此机会再说说在线游戏吧,这里说的是以传统Flash游戏为主体的游戏了(不包括页游)。

  大家对以下这个网站也许并不陌生:

我与独立游戏:中国独立游戏发展史(长篇) ...

  国内并没有类似网站,但国内至少有WanGa.me这种站,也算对国内玩家负责。这些在线游戏,无论是Flash还是Unity,绝大多数都是独立游戏开发者创作,其中不乏优秀作品的。不过貌似大部分大型Flash游戏,如《机械迷城》,一般以单机游戏方式发售。

我与独立游戏:中国独立游戏发展史(长篇) ...

  区域认同与圈子:

  “区域认同”这个词儿是我编的,是说针对一个人在网络常驻地的自我认同。就比如说我上星球,也上百度贴吧,但我会认同自己是星球人,不是贴吧人。大概就是这个意思。

  我认为早期接触容易形成第一认同,比如说对于国内Unity论坛,我最认同的还是Unity盛典。

  再说圈子,其实在12年,我做了这么一张图,来描述我所认识到的国内情况:

我与独立游戏:中国独立游戏发展史(长篇) ...

  实际上并不存在所谓的独立游戏圈子,只存在一些形式上的交流圈和一些文化共识圈。如果细分为玩家圈和开发者圈的话,国内其实是不存在独立游戏玩家圈的。而独立游戏开发者,也应区分为商业和非商业这两方面,共同的圈子并不存在。

  “独立游戏”一词起源于和“商业游戏”对立的一种商业模式。但由于定义范围,使独立游戏可以具备商业性质。如今国内的绝大多数独立游戏人,实际上是商业独立游戏人。

  虽然大圈子并不存在,但局部的圈子是存在的,部分小圈子还有扩大的潜质和趋势。不过无论如何,一切都是乐观的,因为有你我他这些人的存在,特别是正在读这句话的你。

【回忆的第十天】

  独立游戏节·中国(四):

  把2011年的IGFChina说完吧,这里补充一些内容。

  陈星汉发表了一篇关于游戏的演讲,记得他提出一个关于开发游戏可发挥的观点。

我与独立游戏:中国独立游戏发展史(长篇) ...

  那年在这个酒吧里举办了独立游戏展。我不会喝酒,去了之后很尴尬,但见着不少熟面孔,包括陈星汉和单隽。

  艺术游戏与Sero:

  其实早在我还在搬游戏的时候,就发现了这个相册:

我与独立游戏:中国独立游戏发展史(长篇) ...

  我联系了作者Serotonin,但没得到回应。2012年,他来星球驻扎。Serotonin是个游戏人,主要制作艺术游戏。

  要说艺术游戏与一般游戏不同之处在于:一般的游戏偏重娱乐,艺术游戏则更重视视觉艺术感。此外表达方式上也并不仅仅注重娱乐一个方面,就比如说下面这个游戏:

  《干他娘的狼人》这个游戏的全方面都非常剽悍,其成就在我看来已经是一种巅峰表现。

我与独立游戏:中国独立游戏发展史(长篇) ...
《干他娘的狼人》

  之后,我逐渐接触到不少国外艺术游戏,对游戏的认识又有加深。开启了新方向,我自身也是受益匪浅。

  在国内,作为独立游戏的分支,艺术游戏更是小众中的小众。即使有人做,也仅限于海外国人,因此国内艺术游戏这个领域几乎等于零。

  我开始做游戏:

  当12年彻底停止做搬运工之后,我也真正下决心开始逐步搞搞游戏了。

  其实我个人最重要的突破是在程序方面,虽然早先也看了点Unity3D的教程什么的,但实战性几乎没有,于是我决定边做游戏边学。实际上,真正的突破口来自于别人的帮助,我一有问题就问龙哥,没问题也可以问龙哥,于是折腾折腾着,游戏就逐渐可以玩了。虽然游戏断断续续花了好几个月才完成,但整个游戏都是我自己设计、建模、照相、做贴图、录音频、写代码。做了很多,学了更多。

  也正是因为有了这个开始,才会有余下的一切。

我与独立游戏:中国独立游戏发展史(长篇) ...

  到了2012年底, 我就已经作了好多款游戏了,还有不少实验作品。即使别人觉得不咋样,但至少于我都是欣慰骄傲的。

【回忆的第十一天】

  山头的供求:

  虽然星球人来人往,但总是少数人的“山头”。这主要是由供求关系导致——一个地方能提供什么?人们需要什么?举例来说,倘若有一个网站提供别人不提供的优秀独立游戏下载,那么就能够聚集很多玩家。倘若一个地方不提供游戏希望有很多玩家,那么就需要其他手段吸引大家,他们凭什么会来这里?星球虽有标榜,但除了提供一个交流场所外什么都没有。

我与独立游戏:中国独立游戏发展史(长篇) ...

  如今大家虽然知道“独立游戏”的概念,但并没有一个“独立游戏网站”能形成一个独立游戏人的圈子,这对发展起不到促进作用。像国外,就有IndieDB、TigSource发展很不错的网站。于是,当我开始考虑星球能提供什么的时候,我才静了下来。也不再折腾星球,平平静静的度过了最近两年多的时光。

  现在所谓的独立游戏网站已经很少了,只有局部的QQ群和weibo为那些标榜独立游戏人的人提供着共同交流的区域。

  产业链的促进:

  独立游戏在国外发展态势好的原因,主要是由于国外存在一个完善健康的产业链。如今大家看到的很多独立游戏,都是完完全全的商业游戏。独立游戏在这么多年的深入人心的同时,也逐渐褪去了其光辉的形象,流露出一种世俗的外在来。但也因此,有了钱,有了产业链,才有更多人投入这个领域。

  国内早期的产业链是建立在Flash游戏网站之上,当时国内做Flash的独立游戏人的目标市场其实是国外,因此国内玩家不大认识他们。到了2012年,随着手游的兴起,加入到手游创作中的新人不少,转型做手游的老人也很多。当他们脱离大公司搞起小团队的时候,就算独立游戏人了。

  这些“非独立”的存在对中国独立游戏产业链的晚上有着极大的推动作用。

  台湾地区:

  据我所知,台湾地区和大陆的独立游戏人交流并不多。个人感觉他们那儿的发展比大陆好很多。由以下两个网站可知:獨立遊戲開發者分享會(面向开发者),K島DB桑板區獨立遊戲(面向玩家)。

我与独立游戏:中国独立游戏发展史(长篇) ...

  海外国人:

  做独立游戏的海外国人对国内独立游戏发展的推进比较有限,原因有两点。一来他们的主要交流对象是外国人,二来他们接受的教育、文化受国外影响很深。就像陈星汉,他受到国外文化的影响较大,他做的游戏也基本是面向外国人的。后来,他最多回国做做演讲。但值得庆幸的是,和他保持密切交流的少数人,正在推动中国独立游戏的发展。

  中国独立游戏的势头:

  众所周知,如今中国的单机产业链基本是停滞态。目前中国最发达的游戏种类是网游、页游与社交游戏,当然也有近年发达起来的手游。这种发展趋势对中国独立游戏乃至中国游戏业都是好的。这种来自于内在的力量,那种暗流汹涌的波澜,总有一天会冲破沉睡的大地。

  独立游戏节·中国(五):

  2012年的IGFChina,是星球去的人数最多的一次。因为星球入围作品比较多,《微观》、《大叔》都入围了,此外还有新来星球的《鱼》等。到这个时代,能见到的中国独立游戏作品已经非常多了。

我与独立游戏:中国独立游戏发展史(长篇) ...

  当然还有《飞刀》,也有sero。微观团队,我们也是第一次在这边见面的吧,照例大家也聚聚聊聊。这一年就直接现场聚了,没专门找地方。我们这些在游戏业边缘甚至还没入行的人,搞搞独游,没事儿又交流交流,多少还是好的。

  独立游戏之夜:

  这一年依然搞了这么个活动,也还是去年的那个酒吧,我依旧不太会玩。

【回忆的第十一点五天】

  Eddy紫与大骨:

  Eddy紫是个游戏,于2011年发布正式版,作者是大谷,不仅会码会画还会钢琴,多才多艺。

我与独立游戏:中国独立游戏发展史(长篇) ...
《Eddy紫》

  上海GameJam和厦门GameJam:

  2013年初的GlobleGameJam又开幕了,椰岛继续在上海搞,同时也尝试了线上活动。

  我也想在在厦门搞,最终在厦门单独弄了个GameJam,不过来的人不多,之前报名的南塔斯大牛最终也没来。

  我搞些杂碎儿:

  到了2013年,我琢磨着写了个 零基础课堂 的游戏玩。我也希望拉一些不会做游戏的朋友来,不过大都失败了。 网站也并不太需要花费力气了,然后就自个儿继续修炼。

  大家都在继续做游戏:

  最近一年多两年,大家也继续做游戏啊做游戏。上面是我后来做的,又是进步又是成就。别人的游戏也越来越多,简直琳琅满目,新认识的独立游戏人也越来越多。游戏、游戏人,这些都逐渐成为组成我生活不可或缺的部分。

  《井》:

  于2013年9月,我用了约5个月完成了《井》,这是一款水墨画+古琴配乐的中国风独立游戏。

我与独立游戏:中国独立游戏发展史(长篇) ...

  当时带着这个作品去参加了IGFChina,但没入围。后来又参加了中国优秀游戏人制作评选大赛,拿了个最佳创意。参加IGF也没入围。后来到了2014年3月6日,我参加了Art Video Games in China展览的联展,最后我在FreeBnudle中发现了我的游戏,这也算我人生极大的成就。

  独立游戏节·中国(六):

  2013年,除南瓜先生在《地球冒险》外无入围IGFChina,于是那年星球没聚会。

我与独立游戏:中国独立游戏发展史(长篇) ...
《地球冒险》

  北京行:

  上面提到中国优秀游戏人制作评选大赛 ,其中有一个奖项是面向独立游戏的,奖金不少,还不扣税,完全足以抵挡来回路费。是继IGFChina之外又一个大家可以参加的比赛。

  然后我去北京领钱,先搞了个小型的星球聚会,后来又去见了大谷,也去了灵游坊(雨血的基地)。

  众筹:

  随着国外众筹网站的兴起,国内的众筹也逐渐发展起来。棉花有一些失败的案例不多说,成功的案例有Kickstarter上的“傲逆”和追梦上“微观”。这也算是新兴的独立游戏之路吧。

我与独立游戏:中国独立游戏发展史(长篇) ...
“傲逆”

  发售平台:

  Steam平台或者先上绿灯(青睐之光),这些都是单机游戏的方向。这方面国内案例也不多,个人了解的如下:

  此外还有Desura平台,另有雨血1在海外也有英文版发布。

  2013年至今:

  星球嘛,下半年会有大变革吧,不过现在说不准。

  进入2013年,我也逐渐成熟起来。在天真的外表下多了一些理智。

  当然,我也会继续努力,为了过去、现在与将来的梦想,为了中国独立游戏事业,付出自己的绵薄之力。
  

《我与独立游戏:中国独立游戏发展史》全篇完
======================================

  参考链接:
  IN星球: http://inpla.net
  独立的力量 —— 独立游戏精彩作品五十赏:http://inpla.net/thread-1258-1-1.html
  关于国内独立游戏的一代点点思考:http://inpla.net/thread-4961-1-1.html
  作者的主页:http://inpla.net/pengbitao.html
  粘粘世界非一日之成:http://inpla.net/thread-3147-1-1.html
  原帖链接:http://inpla.net/thread-7294-1-1.html


-----------------------------------------------------------------------------------------------------------------------------------------------------------
我做的穿越南宋统一世界的游戏,大家看看咋样?只看楼主已收藏回复

萧萧阿
白丁1
本游戏已经完结,一共22个结局,其中4个主线结局,碰到选择题时请多存档.


看一个平民如何在南宋末年那个动荡不安,金戈铁马的年代,揭竿起义
扫荡群雄 凭借其超人的智慧,无敌的勇气, 建立帝国, 击败强敌,一统天下的。


地址,点进去就能玩 http://tieba.baidu.com/p/3291712 ... p;cid=0#57358797564

如果显示游戏不存在刷新一下就行了


大家觉得好玩的话请去游戏里回复,投票,收藏哦







你穿越到了一个傻瓜身上



这里是重要分歧点,第一个是名臣路线,第二个是造反路线



因为穿越引发蝴蝶效应,成吉思汗更加强大
















现在新增葵花宝典剧情








现在更新了武侠模式










送TA礼物
回复举报|1楼2014-09-29 17:03
热门推荐  
image
如果一生可以重来 我希望回到俩年前
如果可以重来我希望回到...
622image
近五年百名华语男演员电影成绩排行榜
(从2011.5.12至今)因...
780image
《超级女声》谁能挺进全国20强
时隔十年,《超级女声...
189image
葫芦姐妹MV首发,转发赢大奖
【前言】 当我们遇到贴...
9999+

大皇帝
别选了,今晚怎么也该本姑娘了! 玩了这个游戏,我就是她的皇上!


萧萧阿
白丁1
现在正在制作极度yy的高达路线,不喜欢可以跳过,不影响其他线路














收起回复举报|2楼2014-09-29 17:03

萧萧阿
白丁1
由于受到奸人的迫害游戏被编辑删了,大家去这里下载,下载版本,玩过的玩家请发表一下玩后感,我这游戏算哪门子18x!!!!!!!!!!!
电脑版下载地址http://pan.baidu.com/s/1o65aTvk
安卓版下载地址http://pan.baidu.com/s/1dDlGzOP


收起回复举报|来自Android客户端8楼2014-10-16 22:44

[ Last edited by zzz19760225 on 2016-5-24 at 22:52 ]
作者: zzz19760225     时间: 2016-5-19 19:29
超级打字马达 活跃  [辽宁省大连市网友]
看得见,瞄的准,打的着!!!
133  回复举报
--------------------------------------------
(狠准快。武概念的一個範圍)
----------------------------------------------------------------------------------------------
[转载]【开卷有益】:影响计算机算法世界的——十位大师  此博文包含图片        (2016-05-22 17:09:21)转载▼
标签: 转载        
原文地址:【开卷有益】:影响计算机算法世界的——十位大师作者:
[转载]【开卷有益】:影响计算机算法世界的——十位大师
1、伟大的智者——Don E.Knuth,中文名:高德纳


[转载]【开卷有益】:影响计算机算法世界的——十位大师


(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来,不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》更是被誉为算法中“真正”的圣经,像KMP和LR(K)这样令人不可思议的算法,在此书比比皆是。难怪连
Bill Gates都说:“如果能做对书里所有的习题,就直接来微软上班吧!”



对于Don E.Knuth本人,一生中获得的奖项和荣誉不计其数,包括图灵奖,美国国家科学金奖,美国数学学会斯蒂尔将(AMS Steel
Prize),以及发明先进技术荣获的极受尊重的京都奖(KyotoPrize)等等,写过19部书和160余篇论文,每一篇著作都能用影响深远来形容。
Don
E.Knuth也被公认是美国最聪明的人之一。当年他上大学的时候,常写些各种各样的编译器来挣外快,只要是他参加的编程比赛,总是第一名,同时也是世上少有的编程达到40年以上的程序员之一。他除了是技术与科学上的泰斗外,更是无可非议的写作高手,技术文章堪称一绝,文风细腻,讲解透彻,思路清晰而且没有学究气,估计这也是《计算机程序设计艺术》被称为圣经的原因之一。

2、首席算法官Udi Manber


[转载]【开卷有益】:影响计算机算法世界的——十位大师


世界上还有如此奇怪的职位?但是对于Amazon乃至Google来说,这一点也不奇怪。Udi
Manber,这位前Amazon的“首席算法官”,现在是Google负责工程事务的副总裁。他研究WWW的应用程序、搜索以及隐藏在这背后的算法设计。在此期间,他与其他人共同开发了Agrep、Glimpse和Harvest等Unix上的搜索软件。1998年,Udi成为了Yahoo!的首席科学家。2002年,Amazon创造性地给了Udi“首席算法官”的职位,和Udi为Amazon的“SearchInside
the Book”搜索项目所做的工作相得益彰。



Udi还因为他所著的Introduction to Algorithms——A Creative
Approach而被大家称道。

3、谦逊的长者——Edsger Wybe Dijkstra


[转载]【开卷有益】:影响计算机算法世界的——十位大师


1930年出生于荷兰阿姆斯特丹,2002年逝世于荷兰纽南。他在祖国荷兰获得数据和物理学学士,理论物理博士学位,2000年退休前一直是美国Texas大学的计算机科学和数学教授。以发现了图论中的最短路径算法(Dijkstra算法)而闻名于世,1972年因为ALGOL第二代编程语言而获得图灵奖。“Go
To StatementConsidered
Harmful”(EWD215)也是被广为传颂的经典之作。除了科学研究之外,他最喜欢做的事情就是教学,被人称作“一天教学24小时”的教授。



且不说Dijkstra算法对计算科学,网络科学发展的深远影响,单从他在1972年获得图灵奖时的演讲“The Humble
Programmer”就不得不肃然起敬,在获得计算机科学中至高无上的奖项时,Edgs Wybe
Dijkstra仍然称自己不过是一个谦逊普通的程序员,何等胸襟,




4、运筹学大师——George Dantizig


[转载]【开卷有益】:影响计算机算法世界的——十位大师


可谓是由父亲一手培养出的天才。George的父亲是俄国人,曾在法国师从著名的科学家Henri Poincar
e。他曾经这样回忆自己的父亲:“在我还是个中学生时,他就让我做几千道几何题……解决这些问题的大脑训练是父亲给我的最好礼物。这些几何题,在发展我分析能力的过程中,起了最最重要的作用。”



在伯克利学习的时候,有一天George上课迟到,只看到黑板上写着两个问题,他只当是课堂作业,随即将问题抄下来并做出解答。六个月后,这门课的老师
——著名的统计学家Jerzy
Neyman——帮助他把答案整理了一下,发表为论文,George这才发现自己解决了统计学领域中一直悬而未决的两个难题。



George后来在运筹学建树极高,获得了包括“冯诺伊曼理论奖”在内的诸多奖项。他在Linearprogramming and
extensions一书中研究了线性编程模型,为计算机语言的发展做出了不可磨灭的贡献。天妒英才,他于2005年5月13日去世。

5、推动时代前进的人——James Cooley


[转载]【开卷有益】:影响计算机算法世界的——十位大师


(1926-)美国数学家,哥伦比亚大学的数学博士,以他所创造的快速傅立叶变换(FFT)而著名,不能不说是意义极其重大,FFT的数学意义不光在于使大家明白了傅立叶(Fourier)变换计算起来是多么容易,而且使得数字信号处理技术取得了突破性的进展,对于现在的网络通信,图形图像处理等等领域的发展与前进奠定了基础。Fourier变化的意义在于将电能变为了工业的命脉,而FFT的意义更是在于他推动了整个社会信息化的进程。在
IBM研究中心中主要从事数字信号处理的研究一直到1992年退休,同时他还是IEEE的数字信号处理委员会的成员。1980年获得ASSP’s
Meritorious Service Award,1984年获得ASSP Society Award以及IEEE
Centennial Medal。

6、FORTRAN 之父——John Backus


[转载]【开卷有益】:影响计算机算法世界的——十位大师


早年在Hill
School学习的时候因为讨厌学习,成绩一踏糊涂而不得不在暑假补课。1943年他在父亲的要求下到维吉尼亚大学学习化学,随后参军、照顾头部受伤的伤员、在医学学校学习治疗,可是最后又都放弃了。不过还好,战后Backus进入纽约哥伦比亚大学学习数学,并于1949年毕业。在毕业前夕,他跑到了麦迪逊大街的IBM计算机中心参观。事情凑巧,和导游聊天的时候Backus谈到自己正在找工作,在导游的鼓励下,他和中心一位主管的面谈,成为了一名IBM?的程序员。



在IBM,Backus的才华得到了施展,发明了人类历史上第一个高级语言——FORTRAN。接着,又提出了规范描述编程语言语法的BNF。这位当年的“差生”终于被整个计算机世界肯定——美国计算机协会于1977年授予John
Backus图灵奖。

7、实践探索先锋——Jon Bentley


[转载]【开卷有益】:影响计算机算法世界的——十位大师


1974年获得了斯坦福大学的学士学位,1976年获得北卡罗莱纳大学的硕士和博士学位。毕业后在卡耐基梅隆大学教授了6年计算机科学课程,1982年进入贝尔实验室。2001年退休后加入了现在的Avaya实验室,他还曾作为访问学者在西点军校和普林斯顿大学工作。他的研究领域包括编程技术、算法设计、软件工具和界面设计等等。



他写作过三本编程书籍,其中最著名的就是涵盖从算法理论到软件工程各种主题的Programming
Pearls(《编程珠玑》),这其实是他发表过的文章的合集。在这些文章里,Jon从工程实现的角度出发,为程序员们提供了一个个艰难问题的解决方案,犹如一颗颗闪闪发亮的珍珠。Bentley的珍珠超出了可靠工程学的范畴,利用他的洞察力和创造力为那些恼人的问题提供了独特而巧妙的解决方案。

8、Pascal之父——Nicklaus Wirth


[转载]【开卷有益】:影响计算机算法世界的——十位大师


如果说有一个人因为一句话而得到了图灵奖,那么这个人应该就是NicklausWirth,这句话就是他提出的著名公式“算法+数据结构=程序”。这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“E=MC^2”——一个公式展示出了程序的本质。



Nicklaus
Wirth,1934年出生于瑞士,1963年在加州大学伯克利分校取得博士学位。取得博士学位后直接被以高门槛著称的斯坦福大学聘到刚成立的计算机科学系工作。在斯坦福大学成功的开发出Algol
W以及PL360后,爱国心极强的Nicklaus
Wirth于1967年回到祖国瑞士,第二年在他的母校苏黎世工学院他创建与实现了Pascal语言——当时世界上最受欢迎的语言之一。后来他的学生
Philipe Kahn毕业后和Anders Hejlsberg(Delphi之父)创办了Borland公司靠Turbo
Pascal起家,很快成为了将Borland发展成为全球最大的开发工作厂商,这一切都不得不说要归工于PASCAL语言的魅力。PASCAL已经影响了整整几代的程序员,Nicklaus
Wirth的思想还将会继续指引现在和以后的程序员前进的方向。

9、算法的讲解者——Robert Sedgewick


[转载]【开卷有益】:影响计算机算法世界的——十位大师


是普林斯顿大学的计算机科学教授。他还是Adobe Systems的一名主管,也曾作为访问学者在Xerox
PARC、IDA和INRIA工作。他在斯坦福大学获得博士学位。他的著作包括Algorithm in C、Algorithm in
C++、Algorithm in Java等系列书籍,这些都再版多次。“没有人能够将算法和数据结构解释得比Robert
Sedgewick更清楚易懂了!”很多读过他著作的程序员这样说。



目前Robert正在研究算法设计、数据结构、算法分析等方面的基础理论。他善于通过数学方法评估和预测算法性能,设法发现算法、数据结构的通用机制,例如使用逼近方法寻找更快速更高效的算法。另外,他还将算法和图形学结合起来,例如使用可视化方法评估算法效率,算法的图形化模拟,用于出版物的高质量算法表现方法等等。

10、计算机领域的爵士——Tony Hoare


[转载]【开卷有益】:影响计算机算法世界的——十位大师


1934年出生于英国,1959年博士毕业于俄罗斯莫斯科国立大学,获得语言机器翻译专业学士学位。1960年发布了使他闻名于世的快速排序算法(Quick
Sort),这个算法也是当前世界上使用最广泛的算法之一。



Tony Hoare在取得博士学位后,就职于Elliott Brothers,领导了Algol
60第一个商用编译器的设计与开发,由于其出色的成绩,最终成为该公司首席科学家。从1977年开始,Tony
Hoare博士任职于牛津大学,投身于计算系统的精确性的研究、设计及开发。因其对Algol
60程序设计语言理论、互动式系统及APL的贡献,1980年被美国计算机协会授予“图灵奖”。



1999年在牛津大学退学后,Tony
Hoare博士被微软剑桥研究院聘请担任高级程序员,从事微软剑桥研究院研究生成果的工业化应用的工作,以及协助其它研究人员进行服务于软件产业及用户的长期基础研究项目。2000年因为其在计算机科学与教育上做出的贡献被封为爵士。



(来源:《程序员》
     
  作者:范凯 & 马林)

http://mp.weixin.qq.com/s?__biz= ... zAHJ1ru9LJRnQ20e#rd

[ Last edited by zzz19760225 on 2016-5-25 at 15:48 ]
作者: zzz19760225     时间: 2016-5-19 19:32    标题: 正则表达式

正则表达式
    编辑

正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎,还有java语言自带的。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

中文名
    正则表达式
外文名
    Regular Expression

别    称
    正规表示法、常规表示法
代码简写
    regex、regexp或RE

目录

    1 起源
    2 概念
    3 引擎
    4 符号
    5 速记理解技巧

    6 替换技巧
    ▪ 实例目录
    ▪ 应用实例
    ▪ 验证URL
    7 零宽断言

    8 负向零宽
    9 启示
    10 教程

起源
编辑
正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。
在1956 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。
之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作《Mastering Regular Expressions (2nd edition)》(中文版译作:精通正则表达式,已出到第三版)中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。
自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。Perl的正则表达式源自于Henry Spencer编写的regex,之后已演化成了pcre(Perl兼容正则表达式Perl Compatible Regular Expressions),pcre是一个由Philip Hazel开发的、为很多现代工具所使用的库。正则表达式的第一个实用应用程序即为Unix中的 qed 编辑器。
然后,正则表达式在各种计算机语言或各种应用领域得到了广大的应用和发展,演变成为计算机技术森林中的一只形神美丽且声音动听的百灵鸟。
以上是关于正则表达式的起源和发展的历史描述,如今正则表达式在基于文本的编辑器和搜索工具中依然占据着一个非常重要的地位。
在最近的六十年中,正则表达式逐渐从模糊而深奥的数学概念,发展成为在计算机各类工具和软件包应用中的主要功能。不仅仅众多UNIX工具支持正则表达式,近二十年来,在WINDOWS的阵营下,正则表达式的思想和应用在大部分 Windows 开发者工具包中得到支持和嵌入应用!从正则式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和发展,WINDOWS系列产品对正则表达式的支持发展到无与伦比的高度,几乎所有 Microsoft 开发者和所有.NET语言都可以使用正则表达式。如果你是一位接触计算机语言的工作者,那么你会在主流操作系统(*nix[Linux, Unix等]、Windows、HP、BeOS等)、主流的开发语言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。
概念
编辑
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
引擎
编辑
正则引擎主要可以分为两大类:一种是DFA,一种是NFA。这两种引擎都有了很久的历史(至今二十多年),当中也由这两种引擎产生了很多变体!于是POSIX的出台规避了不必要变体的继续产生。这样一来,主流的正则引擎又分为3类:一、DFA,二、传统型NFA,三、POSIX NFA。
DFA 引擎在线性时状态下执行,因为它们不要求回溯(并因此它们永远不测试相同的字符两次)。DFA 引擎还可以确保匹配最长的可能的字符串。但是,因为 DFA 引擎只包含有限的状态,所以它不能匹配具有反向引用的模式;并且因为它不构造显示扩展,所以它不可以捕获子表达式。
传统的 NFA 引擎运行所谓的“贪婪的”匹配回溯算法,以指定顺序测试正则表达式的所有可能的扩展并接受第一个匹配项。因为传统的 NFA 构造正则表达式的特定扩展以获得成功的匹配,所以它可以捕获子表达式匹配和匹配的反向引用。但是,因为传统的 NFA 回溯,所以它可以访问完全相同的状态多次(如果通过不同的路径到达该状态)。因此,在最坏情况下,它的执行速度可能非常慢。因为传统的 NFA 接受它找到的第一个匹配,所以它还可能会导致其他(可能更长)匹配未被发现。
POSIX NFA 引擎与传统的 NFA 引擎类似,不同的一点在于:在它们可以确保已找到了可能的最长的匹配之前,它们将继续回溯。因此,POSIX NFA 引擎的速度慢于传统的 NFA 引擎;并且在使用 POSIX NFA 时,您恐怕不会愿意在更改回溯搜索的顺序的情况下来支持较短的匹配搜索,而非较长的匹配搜索。
使用DFA引擎的程序主要有:awk,egrep,flex,lex,MySQL,Procmail等;
使用传统型NFA引擎的程序主要有:GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;
使用POSIX NFA引擎的程序主要有:mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);
也有使用DFA/NFA混合的引擎:GNU awk,GNU grep/egrep,Tcl。
举例简单说明NFA与DFA工作的区别:
比如有字符串this is yansen’s blog,正则表达式为 /ya(msen|nsen|nsem)/ (不要在乎表达式怎么样,这里只是为了说明引擎间的工作区别)。 NFA工作方式如下,先在字符串中查找 y 然后匹配其后是否为 a ,如果是 a 则继续,查找其后是否为 m 如果不是则匹配其后是否为 n (此时淘汰msen选择支)。然后继续看其后是否依次为 s,e,接着测试是否为 n ,是 n 则匹配成功,不是则测试是否为 m 。为什么是 m ?因为 NFA 工作方式是以正则表达式为标准,反复测试字符串,这样同样一个字符串有可能被反复测试了很多次!
而DFA则不是如此,DFA会从 this 中 t 开始依次查找 y,定位到 y ,已知其后为 a ,则查看表达式是否有 a ,此处正好有 a 。然后字符串 a 后为 n ,DFA依次测试表达式,此时 msen 不符合要求淘汰。nsen 和 nsem 符合要求,然后DFA依次检查字符串,检测到sen 中的 n 时只有nsen 分支符合,则匹配成功!
由此可以看出来,两种引擎的工作方式完全不同,一个(NFA)以表达式为主导,一个(DFA)以文本为主导!一般而论,DFA引擎则搜索更快一些!但是NFA以表达式为主导,反而更容易操纵,因此一般程序员更偏爱NFA引擎! 两种引擎各有所长,而真正的引用则取决与你的需要以及所使用的语言!
符号
编辑
(摘自《正则表达式之道》)
正则表达式[1]  由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
元字符
       
描述
\
       
将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。
^
       
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$
       
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*
       
匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”,但是不匹配“bo”。*等价于{0,}。
+
       
匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?
       
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
{n}
       
n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,}
       
n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m}
       
m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
?
       
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
.点
       
匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
(pattern)
       
匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
(?:pattern)
       
非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
       
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
       
非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
       
非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)
       
非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。这个地方不正确,有问题
x|y
       
匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“(z|f)ood”则匹配“zood”或“food”。
[xyz]
       
字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]
       
负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z]
       
字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.
[^a-z]
       
负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
\b
       
匹配一个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B
       
匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx
       
匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
\d
       
匹配一个数字字符。等价于[0-9]。
\D
       
匹配一个非数字字符。等价于[^0-9]。
\f
       
匹配一个换页符。等价于\x0c和\cL。
\n
       
匹配一个换行符。等价于\x0a和\cJ。
\r
       
匹配一个回车符。等价于\x0d和\cM。
\s
       
匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S
       
匹配任何可见字符。等价于[^ \f\n\r\t\v]。
\t
       
匹配一个制表符。等价于\x09和\cI。
\v
       
匹配一个垂直制表符。等价于\x0b和\cK。
\w
       
匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
\W
       
匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\xn
       
匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。
\num
       
匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
\n
       
标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
\nm
       
标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
\nml
       
如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un
       
匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。
\p{P}
       
小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。
其他六个属性:
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符。
*注:此语法部分语言不支持,例:javascript。
< >        匹配词(word)的开始(<)和结束(>)。例如正则表达式<the>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
( )        将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
|        将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+        匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
?        匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
{i} {i,j}        匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字
最简单的元字符是点,它能够匹配任何单个字符(注意不包括换行符)。假定有个文件test.txt包含以下几行内容:
he is arat
he is in a rut
the food is Rotten
I like root beer
我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。命令
grep r.t test.txt
在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。正则表达式r.t匹配一个r接着任何一个字符再接着一个t。所以它将匹配文件中的rat和rut,而不能匹配Rotten中的Rot,因为正则表达式是大小写敏感的。要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。正则表达式[Rr]能够同时匹配R和r。所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。
要想匹配行首的字符要使用抑扬字符(^)——有时也被叫做插入符。例如,想找到text.txt中行首"he"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的he。
有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出方括号中时,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情形(也就是the和she),可以使用:[^st]he。
可以使用方括号来指定多个字符区间。例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]* 匹配一个字母后面接着0或者多个字母(大写或者小写)。当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等价。但是要注意元字符+ 并不是所有支持正则表达式的程序都支持的。关于这一点可以参考后面的正则表达式语法支持情况。
要指定特定数量的匹配,要使用大括号(注意必须使用反斜杠来转义)。想匹配所有10和100的实例而排除1和 1000,可以使用:10\{1,2\},这个正则表达式匹配数字1后面跟着1或者2个0的模式。在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\{3,\} 将匹配至少3个连续的0。
例1
将所有方法foo(a,b,c)的实例改为foo(b,a,c)。这里a、b和c可以是任何提供给方法foo()的参数。也就是说我们要实现这样的转换:
之前 之后
foo(10,7,2) foo(7,10,2)
foo(x+13,y-2,10) foo(y-2,x+13,10)
foo( bar(8), x+y+z, 5) foo( x+y+z, bar(8), 5)
下面这条替换命令能够实现这一魔法:
:%s/foo(\([^,]*\),\([^,]*\),\([^,)]*\))/foo(\2,\1,\3)/g
让我们把它打散来加以分析。写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。第一个参数是用这个表达式来识别的::\([^,]*\),我们可以从里向外来分析它:
[^,] 除了逗号之外的任何字符
[^,]* 0或者多个非逗号字符
\([^,]*\) 将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它
\([^,]*\), 我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。
正是指出一个使用正则表达式常见错误的最佳时机。为什么我们要使用[^,]*这样的一个表达式,而不是更加简单直接的写法,例如:.*,来匹配第一个参数呢?设想我们使用模式.*来匹配字符串"10,7,2",它应该匹配"10,"还是"10,7,"?为了解决这个两义性(ambiguity),正则表达式规定一律按照最长的串来,在上面的例子中就是"10,7,",显然这样就找出了两个参数而不是我们期望的一个。所以,我们要使用[^,]*来强制取出第一个逗号之前的部分。
这个表达式我们已经分析到了:foo(\([^,]*\),这一段可以简单的翻译为“当你找到foo(就把其后直到第一个逗号之前的部分标记为\1”。然后我们使用同样的办法标记第二个参数为\2。对第三个参数的标记方法也是一样,只是我们要搜索所有的字符直到右括号。我们并没有必要去搜索第三个参数,因为我们不需要调整它的位置,但是这样的模式能够保证我们只去替换那些有三个参数的foo()方法调用,在foo()是一个重载(overloading)方法时这种明确的模式往往是比较保险的。然后,在替换部分,我们找到foo()的对应实例,然后利用标记好的部分进行替换,是把第一和第二个参数交换位置。
正则表达式语法支持情况
命令或环境
       
.
       
[ ]
       
^
       
$
       
\( \)
       
\{ \}
       
?
       
+
       
|
       
( )
vi
       

       

       

       

       

                                             
Visual C++
       

       

       

       

       

                                             
awk
       

       

       

       

                
awk是支持该语法的,只是要在命令
行加入 --posix or --re-interval参数即可,可见
man awk中的interval expression
       

       

       

       

sed
       

       

       

       

       

       

                                    
delphi
       

       

       

       

       

                

       

       

       

python
       

       

       

       

       

       

        √        √        √        √
java
       

       

       

       

       

       

                                    
javascript
       

       

       

       

       

                

       

       

       

php
       

       

       

       

       

                                             
perl
       

       

       

       

       

                

       

       

       

C#
       

       

       

       

                         

       

       

       

速记理解技巧
编辑
.
       
[ ]
       
^
       
$
四个字符是所有语言都支持的正则表达式,所以这个四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会蒙,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了:

  等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符
  ?等价于匹配长度{0,1}
  *等价于匹配长度{0,}
  +等价于匹配长度{1,}
  \d等价于[0-9]
  \w等价于[A-Za-z_0-9]。
常用运算符与表达式:
  ^ 开始
  () 域段
  [] 包含,默认是一个字符长度
  [^] 不包含,默认是一个字符长度
  {n,m} 匹配长度
  . 任何单个字符(\. 字符点)
  | 或
  \ 转义
  $ 结尾
  [A-Z] 26个大写字母
  [a-z] 26个小写字母
  [0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
  , 分割
  .
  
  分割语法:
  [A,H,T,W] 包含A或H或T或W字母
  [a,h,t,w] 包含a或h或t或w字母
  [0,3,6,8] 包含0或3或6或8数字

  语法与释义:
  基础语法 "^([]{})([]{})([]{})$"
  正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"
  
  ?,*,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(?:)(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。
  初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

  
  实例:
  字符串;tel:086-0666-88810009999
  原始正则:"^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$"
  速记理解:开始 "tel:普通文本"[0-9数字]{1至3位}"-普通文本"[0数字][0-9数字]{2至3位}"-普通文本"[0-9数字]{8至11位} 结束"
  等价简写后正则写法:"^tel:\d{1,3}-[0]\d{2,3}-\d{8,11}$" ,简写语法不是所有语言都支持。
替换技巧
编辑
实例目录
【1】 正则表达式应用——替换指定内容到行尾
【2】 正则表达式应用——数字替换
【3】 正则表达式应用——删除每一行行尾的指定字符
【4】 正则表达式应用——替换带有半角括号的多行
【5】 正则表达式应用——删除空行
【6】 正则表达式应用——实例应用
应用实例
【1】正则表达式应用——替换指定内容到行尾
原始文本如下面两行
abc aaaaa
123 abc 444
希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg”
即上面的文本最终替换为:
abc efg
123 abc efg
解决:
① 在替换对话框,查找内容里输入“abc.*”,替换内容输入为“abc efg”
② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮
其中,符号的含义如下:
“.” =匹配任意字符
“*” =匹配0次或更多
注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。
【2】正则表达式应用——数字替换
希望把
asdadas123asdasdas456asdasdasd789asdasd
替换为:
asdadas[123]asdasdas[456]asdasdasd[789]asdasd
在替换对话框里面,勾选“正则表达式”复选框;
在查找内容里面输入“([0-9])([0-9])([0-9])”,不含引号
“替换为:”里面输入“[\1\2\3]”,不含引号
####备注####:查找([0-9]+) 替换:[\1] 更简单通用些
范围为你所操作的范围,然后选择替换即可。
实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例
上面重复使用了“[0-9]”,表示连续出现的三个数字
括号用来选择原型,进行分组,替换时要用
“\1”代表第一个“[0-9]”对应的原型,“\2”代表第二个“[0-9]”对应的原型,依此类推
“[”|“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\1\2\3其它”,则替换结果为:
asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd
功能增强:
如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 ...
大家根据需要定制
相关内容还有很多,可以自己参考正则表达式的语法仔
【3】正则表达式应用——删除每一行行尾的指定字符
因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现
比如
12345 1265345
2345
需要删除每行末尾的“345”
这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下
解决:
在替换对话框中,启用“正则表达式”复选框
在查找内容里面输入“345$”
这里“$”表示从行尾匹配
如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串
a. 选择要操作的行
b. 编辑-格式-删除行注释
c. 在弹出对话框里面输入要清除的行首字符,确定
【4】正则表达式应用——替换带有半角括号的多行
几百个网页中都有下面一段代码:
<script LANGUAGE="JavaScript1.1">
<!--
htmlAdWH('93163607', '728', '90');
//-->
</SCRIPT>
我想把它们都去掉,可是找了很多search & replace的软件,都是只能对“一行”进行操作。
EditPlus 打开几百个网页文件还是比较顺畅的,所以完全可以胜任这个工作。
具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找
“<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH('93163607', '728', '90'.);\n//-->\n</SCRIPT>\n”
时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意字符标记替代,即半角句号:“.”。替换内容为
<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH.'93163607', '728', '90'.;\n//-->\n</SCRIPT>\n
在替换对话框启用“正则表达式”选项,这时就可以完成替换了
补充:
对( ) 这样的特殊符号,应该用\( \)来表示,这也是很标准的regexp语法,可以写为
<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH\('93163607', '728', '90'\);\n//-->\n</SCRIPT>\n
【5】正则表达式应用——删除空行
启动EditPlus,打开待处理的文本类型文件。
①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。
②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。
③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。
直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有空格符。
(1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出文本中一行的行首。
(2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。
(3)按一下空格键,添加空格符。空格符是空行的一个组成成分。
(4)选择“制表符”,添加代表制表符的“\t”。
(5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。
(6)选择“换行符”,插入“\n”,表示回车符。
④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。
【6】 正则表达式应用——实例应用
1.验证用户名和密码:("^[a-zA-Z]\w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位;
2.验证电话号码:("^(\\d{3,4}-)\\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx;
3.验证手机号码:"^1[3|4|5|7|8][0-9]\\d{8}$";
4.验证身份证号(15位或18位数字):"\\d{14}[[0-9],0-9xX]";
5.验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$") ;
7.整数或者小数:^[0-9]+([.][0-9]+){0,1}$
8.只能输入数字:"^[0-9]*$"。
9.只能输入n位的数字:"^\d{n}$"。
10.只能输入至少n位的数字:"^\d{n,}$"。
11.只能输入m~n位的数字:"^\d{m,n}$"。
12.只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
13.只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
14.只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。
15.只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
16.只能输入非零的负整数:"^\-[1-9][0-9]*$"。
17.只能输入长度为3的字符:"^.{3}$"。
18.只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
21.验证是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。
22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。
23.验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
24.验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"10"~"12"。
25.验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。
26.获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?
评注:可用来匹配大多数年月日信息。
27.匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
28.匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
30.匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
31.匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
33.匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10 000 开始
34.匹配中国邮政编码:[1-9]\\d{5}(?!\d)
评注:中国邮政编码为6位数字
35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]。
评注:提取ip地址时有用
36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]
Function IsRegu(Regu,s)
'正则表达式校验
If Regu="" Then
Exit Function
End if
Dim Re,Sre
Set Re = New RegExp
Re.Pattern = Regu
Sre = Re.Test(s)
If Sre = True Then
IsRegu = True
Else
IsRegu = False
End If
End Function
tmp=" "
if (IsRegu("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",tmp )) =false then
msgbox "E-mail地址不合法 !"
FieldCheck#N=false
不同的语言(如PHP和JAVA)、相同语言的不同类库(如来自Sun的Java Regular Expression类库跟Apache Jakarta的正则表达式类库)间,用法会有所差别,在使用的时候,要注意这些差别。
验证URL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       
functionIsValidUrl(str){
varregu="^(https?://)"
+"?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?"
+"(([0-9]{1,3}\.){3}[0-9]{1,3}"
+"|"
+"([0-9a-z_!~*'()-]+\.)*"
+"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\."
+"[a-z]{2,6})"
+"(:[0-9]{1,4})?"
+"((/?)|"
+"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
varre=newRegExp(regu);
if(!re.test(str)){
return false;
}
return true;
}
参考:[2]
零宽断言
编辑
用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧:
(?=exp)也叫零宽度正预测先行断言[3]  ,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
(?<=exp)也叫零宽度正回顾后发断言[3]  ,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?<=\D)\D{3})+\b,用它对xxxxxxxxxx进行查找时结果是xxxxxxxxx
下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)
断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
负向零宽
编辑
如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:
\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。
零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。
同理,我们可以用(?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
请详细分析表达式(?<=<(\w+)>).*(?=<\/\1>),这个表达式最能表现零宽断言的真正用途。
一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容。(?<=<(\w+)>)指定了这样的前缀:被尖括号括起来的单词(比如可能是<b>),然后是.*(任意的字符串),最后是一个后缀(?=<\/\1>)。注意后缀里的\/,它用到了前面提过的字符转义,将”/“转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是<b>的话,后缀就是</b>了。整个表达式匹配的是<b>和</b>之间的内容(再次提醒,不包括前缀和后缀本身)。
启示
编辑
(1) 心中时刻保持新颖想法,尝试用各种新办法来解决遇到的问题。对于遇到的问题,在用常规的解决思路无法解决或不能很好解决的时候,可以大胆探索尝试采用新的方法或思路来解决问题,说大点就是创新!没有新思路估计今天的正则表达式还要等几百年才能露现人间。
(2) 善于学习和借鉴前人的经验和成果,UNIX鼻祖Ken Thompson是什么样子的人?是被计算机界尊称为“UNIX之父”的大师级别的人物,大师都在不断思考从其它学科、其它知识领域的工作成果,来改进自己的工作或程序,事实也证明这样做取得巨大结果和后来的深远影响是事先谁也无法预估到的,我们在做一些事情或研究的时间,是否也考虑学习大师的优秀习惯?
(3) 学好数学、英语并保持对数学、英语的兴趣,数学也是人类几千年积累的智慧结晶,学习数学知识可以培养和训练人的思维能力。看这篇文章的朋友,我想很多都是计算机相关专业的朋友,至于数学和英语对于计算机学习和发展的重要性的道理,这里就不在多说,重在实践加持之以恒!
(4) 养成独立思考的习惯。上学时候老师经常说人与动物的最大区别是人能思考。拉美洲有句关于“思考”的谚语是,不会思考的人是白痴,不肯思考的人是懒汉,不敢思考的人是奴隶。我想大家和我一样,既不愿做懒汉、奴隶,更不愿做白痴。所以相信正则分享网的朋友们一定会选择做一个“会思、肯思、敢思”的人。
(5) 当正则表达式和字符串函数都能解决问题时,一定要使用字符串函数,这样不容易出错,最重要的是字符串函数比正则表达式实现性能上要好得多。
教程
编辑
正则表达式教程chm完整版是一本详细介绍了正则表达式的电子书教程,全书共分为8个小节,详细的讲述了正则表达式的定义,各种操作符的运算优先级,全部符号解释,正则表达式匹配规则,参考文献以及相关实例等,全书简明扼要,能够很好的帮助读者们正确掌握学习好正则表达式,从而在软件编程中得到更好发挥。[4]
--------------------------------------------------------------------------

    零宽断言
    编辑

本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
零宽断言是正则表达式中的一种方法,正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。

中文名
    零宽断言
类    型
    正则表达式中的一种方法
内    容
    查找在某些内容之前或之后的东西

意    义
    指定位置应该满足一定的条件
分    类
    正预测先行断言,正回顾后发断言
实    质
    断言用来声明一个应该为真的事实

目录

    1 定义解释
    2 零宽断言
    3 负向零宽断言

定义解释
编辑
零宽断言是正则表达式中的一种方法
正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
零宽断言
编辑
用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧: 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b(?=re)\w+\b,匹配以re开头的单词的后面部分(除了re以外的部分),如查找reading a book.时,它会匹配ading。
(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如\b\w+(?<=ing\b)会匹配以ing结尾的单词的前半部分(除了ing以外的部分),例如在查找I am reading.时,它匹配read。
假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?=\d)\d{3})+\b,用它对1234567890进行查找时结果是234567890。
下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)。
负向零宽断言
编辑
前面我们提到过怎么查找不是某个字符或不在某个字符类里的字符的方法(反义)。但是如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:
\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。
零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。
同理,我们可以用(?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容。(<?=(\w+)>)指定了这样的前缀:被尖括号括起来的单词(比如可能是<b>),然后是.*(任意的字符串),最后是一个后缀(?=<\/\1>)。注意后缀里的\/,它用到了前面提过的字符转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是<b>的话,后缀就是</b>了。整个表达式匹配的是<b>和</b>之间的内容(再次提醒,不包括前缀和后缀本身)。
---------------------------------------------------------------------


正则表达式 - 教程

正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。

现在开始学习正则表达式!
内容列表

    正则表达式 - 简介
    正则表达式 - 语法
    正则表达式 - 元字符
    正则表达式 - 运算符优先级
    正则表达式 - 匹配规则
    正则表达式 - 示例


正则表达式 - 简介

除非您以前使用过正则表达式,否则您可能不熟悉此术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。

例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。通配符匹配文件名中的单个字符,而 * 通配符匹配零个或多个字符。像 data?.dat 这样的模式将查找下列文件:

data1.dat
data2.dat
datax.dat
dataN.dat

使用 * 字符代替 ? 字符扩大了找到的文件的数量。data*.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

尽管这种搜索方法很有用,但它还是有限的。通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

正则表达式的使用,可以通过简单的办法来实现强大的功能。下面先给出一个简单的示例:

^.+@.+\\..+$

继续阅读本教程将让您也可以自由应用这样的代码。
为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

通过使用正则表达式,可以:

    测试字符串内的模式。
    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
    替换文本。
    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
    基于模式匹配从字符串中提取子字符串。
    可以查找文档内或输入域内特定的文本。

例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
发展历史

正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。

随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
应用领域

目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
C# 正则表达式

在我们的 C# 教程中,C# 正则表达式 这一章节专门介绍了有关 C# 正则表达式的知识。
Java 正则表达式

在我们的 Java 教程中,Java 正则表达式 这一章节专门介绍了有关 Java 正则表达式的知识。
JavaScript 正则表达式

在我们的 JavaScript 教程中,JavaScript RegExp 对象 这一章节专门介绍了有关 JavaScript 正则表达式的知识,同时我们还提供了完整的 JavaScript RegExp 对象参考手册。
Python 正则表达式

在我们的 Python 基础教程中,Python 正则表达式 这一章节专门介绍了有关 Python 正则表达式的知识。
Ruby 正则表达式

在我们的 Ruby 教程中,Ruby 正则表达式 这一章节专门介绍了有关 Ruby 正则表达式的知识。



正则表达式 - 语法

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

    列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。
    构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:
字符         描述
\cx         匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f         匹配一个换页符。等价于 \x0c 和 \cL。
\n         匹配一个换行符。等价于 \x0a 和 \cJ。
\r         匹配一个回车符。等价于 \x0d 和 \cM。
\s         匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S         匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t         匹配一个制表符。等价于 \x09 和 \cI。
\v         匹配一个垂直制表符。等价于 \x0b 和 \cK。
特殊字符

所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符 (\) 放在它们前面。下表列出了正则表达式中的特殊字符:
特别字符         描述
$         匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( )         标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
*         匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+         匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
.         匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[         标记一个中括号表达式的开始。要匹配 [,请使用 \[。
?         匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\         将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^         匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{         标记限定符表达式的开始。要匹配 {,请使用 \{。
|         指明两项之间的一个选择。要匹配 |,请使用 \|。
限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。

正则表达式的限定符有:
字符         描述
*         匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+         匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?         匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}         n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}         n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}         m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

由于章节编号在大的输入文档中会很可能超过九,所以您需要一种方式来处理两位或三位章节编号。限定符给您这种能力。下面的正则表达式匹配编号为任何位数的章节标题:

/Chapter [1-9][0-9]*/

请注意,限定符出现在范围表达式之后。因此,它应用于整个范围表达式,在本例中,只指定从 0 到 9 的数字(包括 0 和 9)。

这里不使用 + 限定符,因为在第二个位置或后面的位置不一定需要有一个数字。也不使用?字符,因为它将章节编号限制到只有两位数。您需要至少匹配 Chapter 和空格字符后面的一个数字。

如果您知道章节编号被限制为只有 99 章,可以使用下面的表达式来至少指定一位但至多两位数字。

/Chapter [0-9]{1,2}/

上面的表达式的缺点是,大于 99 的章节编号仍只匹配开头两位数字。另一个缺点是 Chapter 0 也将匹配。只匹配两位数字的更好的表达式如下:

/Chapter [1-9][0-9]?/



/Chapter [1-9][0-9]{0,1}/

*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的章节标题。该文本在您的文档中如下:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。

/<.*>/

如果您只需要匹配开始 H1 标记,下面的"非贪心"表达式只匹配 <H1>。

/<.*?>/

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。
定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。

正则表达式的限定符有:
字符         描述
^         匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$         匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b         匹配一个字边界,即字与空格间的位置。
\B         非字边界匹配。

注意:不能将限定符与定位点一起使用。由于在紧靠换行或者字边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。

若要在搜索章节标题时使用定位点,下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首:

/^Chapter [1-9][0-9]{0,1}/

真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本。它即出现在行首又出现在同一行的结尾。下面的表达式能确保指定的匹配只匹配章节而不匹配交叉引用。通过创建只匹配一行文本的开始和结尾的正则表达式,就可做到这一点。

/^Chapter [1-9][0-9]{0,1}$/

匹配字边界稍有不同,但向正则表达式添加了很重要的能力。字边界是单词和空格之间的位置。非字边界是任何其他位置。下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现字边界后面:

/\bCha/

\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。例如,下面的表达式匹配单词 Chapter 中的字符串 ter,因为它出现在字边界的前面:

/ter\b/

下面的表达式匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt:

/\Bapt/

字符串 apt 出现在单词 Chapter 中的非字边界处,但出现在单词 aptitude 中的字边界处。对于 \B 非字边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。
选择

用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。

其中?:是非捕获元之一,还有两个非捕获元是?=和?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
反向引用

对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。

可以使用非捕获元字符 '?:'、'?=' 或 '?!' 来重写捕获,忽略对相关匹配的保存。

反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力。以下面的句子为例:

Is is the cost of of gasoline going up up?

上面的句子很显然有多个重复的单词。如果能设计一种方法定位该句子,而不必查找每个单词的重复出现,那该有多好。下面的正则表达式使用单个子表达式来实现这一点:

/\b([a-z]+) \1\b/gi

捕获的表达式,正如 [a-z]+ 指定的,包括一个或多个字母。正则表达式的第二部分是对以前捕获的子匹配项的引用,即,单词的第二个匹配项正好由括号表达式匹配。\1 指定第一个子匹配项。字边界元字符确保只检测整个单词。否则,诸如"is issued"或"this is"之类的词组将不能正确地被此表达式识别。

正则表达式后面的全局标记 (g) 指示,将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。表达式的结尾处的不区分大小写 (i) 标记指定不区分大小写。多行标记指定换行符的两边可能出现潜在的匹配。

反向引用还可以将通用资源指示符 (URI) 分解为其组件。假定您想将下面的 URI 分解为协议(ftp、http 等等)、域地址和页/路径:

http://www.w3cschool.cc:80/html/html-tutorial.html

下面的正则表达式提供该功能:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

第一个括号子表达式捕获 Web 地址的协议部分。该子表达式匹配在冒号和两个正斜杠前面的任何单词。第二个括号子表达式捕获地址的域地址部分。子表达式匹配 / 和 : 之外的一个或多个字符。第三个括号子表达式捕获端口号(如果指定了的话)。该子表达式匹配冒号后面的零个或多个数字。只能重复一次该子表达式。最后,第四个括号子表达式捕获 Web 地址指定的路径和/或页信息。该子表达式能匹配不包括 # 或空格字符的任何字符序列。

将正则表达式应用到上面的 URI,各子匹配项包含下面的内容:

    第一个括号子表达式包含"http"
    第二个括号子表达式包含"www.w3cschool.cc"
    第三个括号子表达式包含":80"
    第四个括号子表达式包含"/html/html-tutorial.html"


正则表达式 - 元字符

下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:
字符         描述
\         将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^         匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$         匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
*         匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+         匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?         匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}         n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}         n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}         m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
?         当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
.         匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern)         匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)         匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)         正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)         负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
x|y         匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz]         字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz]         负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'、'l'、'i'、'n'。
[a-z]         字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z]         负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b         匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B         匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx         匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d         匹配一个数字字符。等价于 [0-9]。
\D         匹配一个非数字字符。等价于 [^0-9]。
\f         匹配一个换页符。等价于 \x0c 和 \cL。
\n         匹配一个换行符。等价于 \x0a 和 \cJ。
\r         匹配一个回车符。等价于 \x0d 和 \cM。
\s         匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S         匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t         匹配一个制表符。等价于 \x09 和 \cI。
\v         匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w         匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W         匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn         匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
\num         匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n         标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm         标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml         如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un         匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

正则表达式 - 运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:
运算符         描述
\         转义符
(), (?:), (?=), []         圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}         限定符
^, $, \任何元字符、任何字符         定位点和序列(即:位置和顺序)
|         替换,"或"操作
字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

正则表达式 - 匹配规则
基本模式匹配

一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如:

^once

这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。

bucket$

这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)。例如:

^bucket$

只匹配字符串"bucket"。如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配。例如:模式

once

与字符串

There once was a man from NewYork
Who kept all of his cash in a bucket.

是匹配的。

在该模式中的字母(o-n-c-e)是字面的字符,也就是说,他们表示该字母本身,数字也是一样的。其他一些稍微复杂的字符,如标点符号和白字符(空格、制表符等),要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是:\t。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:

^\t

类似的,用\n表示"新行",\r表示回车。其他的特殊符号,可以用在前面加上反斜杠,如反斜杠本身用\\表示,句号.用\.表示,以此类推。
字符簇

在INTERNET的程序中,正规表达式通常用来验证用户的输入。当用户提交一个FORM以后,要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。

所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里:

[AaEeIiOoUu]

这个模式与任何元音字符匹配,但只能表示一个字符。用连字号可以表示一个字符的范围,如:

[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符

同样的,这些也只表示一个字符,这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串,比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的话,用这个模式:

^[a-z][0-9]$

尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。

前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字:

^[^0-9][0-9]$

这个模式与"&5"、"g7"及"-2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:

[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

特殊字符"." (点,句号)在正规表达式中用来表示除了"新行"之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非"新行"字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个"新行"的字符串。

PHP的正规表达式有一些内置的通用字符簇,列表如下:
字符簇         描述
[[:alpha:]]         任何字母
[[:digit:]]         任何数字
[[:alnum:]]         任何字母和数字
[[:space:]]         任何空白字符
[[:upper:]]         任何大写字母
[[:lower:]]         任何小写字母
[[:punct:]]         任何标点符号
[[:xdigit:]]         任何16进制的数字,相当于[0-9a-fA-F]

确定重复出现

到现在为止,你已经知道如何去匹配一个字母或数字,但更多的情况下,可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。
字符簇         描述
^[a-zA-Z_]$         所有的字母和下划线
^[[:alpha:]]{3}$         所有的3个字母的单词
^a$         字母a
^a{4}$         aaaa
^a{2,4}$         aa,aaa或aaaa
^a{1,3}$         a,aa或aaa
^a{2,}$         包含多于两个a的字符串
^a{2,}         如:aardvark和aaab,但apple不行
a{2,}         如:baad和aaa,但Nantucket不行
\t{2}         两个制表符
.{2}         所有的两个字符

这些例子描述了花括号的三种不同的用法。一个数字,{x}的意思是"前面的字符或字符簇只出现x次";一个数字加逗号,{x,}的意思是"前面的内容出现x或更多的次数";两个用逗号分隔的数字,{x,y}表示"前面的内容至少出现x次,但不超过y次"。我们可以把模式扩展到更多的单词或数字:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串
^[0-9]{1,}$ //所有的正数
^\-{0,1}[0-9]{1,}$ //所有的整数
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

最后一个例子不太好理解,是吗?这么看吧:与所有以一个可选的负号([-]?)开头(^)、跟着1个或更多的数字([0-9]+)、和一个小数点(\.)再跟上1个或多个数字([0-9]+),并且后面没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。

特殊字符"?"与{0,1}是相等的,它们都代表着:"0个或1个前面的内容"或"前面的内容是可选的"。所以刚才的例子可以简化为:

^\-?[0-9]{0,}\.?[0-9]{0,}$

特殊字符"*"与{0,}是相等的,它们都代表着"0个或多个前面的内容"。最后,字符"+"与 {1,}是相等的,表示"1个或多个前面的内容",所以上面的4个例子可以写成:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串
^[0-9]+$ //所有的正数
^\-?[0-9]+$ //所有的整数
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数


正则表达式 - 示例
简单表达式

正则表达式的最简单形式是在搜索字符串中匹配其本身的单个普通字符。例如,单字符模式,如 A,不论出现在搜索字符串中的何处,它总是匹配字母 A。下面是一些单字符正则表达式模式的示例:

/a/
/7/
/M/

可以将许多单字符组合起来以形成大的表达式。例如,以下正则表达式组合了单字符表达式:a、7 和 M。

/a7M/

请注意,没有串联运算符。只须在一个字符后面键入另一个字符。
字符匹配

句点 (.) 匹配字符串中的各种打印或非打印字符,只有一个字符例外。这个例外就是换行符 (\n)。下面的正则表达式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:

/a.c/

若要匹配包含文件名的字符串,而句点 (.) 是输入字符串的组成部分,请在正则表达式中的句点前面加反斜扛 (\) 字符。举例来说明,下面的正则表达式匹配 filename.ext:

/filename\.ext/

这些表达式只让您匹配"任何"单个字符。可能需要匹配列表中的特定字符组。例如,可能需要查找用数字表示的章节标题(Chapter 1、Chapter 2 等等)。
中括号表达式

若要创建匹配字符组的一个列表,请在方括号([ 和 ])内放置一个或更多单个字符。当字符括在中括号内时,该列表称为"中括号表达式"。与在任何别的位置一样,普通字符在中括号内表示其本身,即,它在输入文本中匹配一次其本身。大多数特殊字符在中括号表达式内出现时失去它们的意义。不过也有一些例外,如:

    如果 ] 字符不是第一项,它结束一个列表。若要匹配列表中的 ] 字符,请将它放在第一位,紧跟在开始 [ 后面。
    \ 字符继续作为转义符。若要匹配 \ 字符,请使用 \\。

括在中括号表达式中的字符只匹配处于正则表达式中该位置的单个字符。以下正则表达式匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5:

/Chapter [12345]/

请注意,单词 Chapter 和后面的空格的位置相对于中括号内的字符是固定的。中括号表达式指定的只是匹配紧跟在单词 Chapter 和空格后面的单个字符位置的字符集。这是第九个字符位置。

若要使用范围代替字符本身来表示匹配字符组,请使用连字符 (-) 将范围中的开始字符和结束字符分开。单个字符的字符值确定范围内的相对顺序。下面的正则表达式包含范围表达式,该范围表达式等效于上面显示的中括号中的列表。

/Chapter [1-5]/

当以这种方式指定范围时,开始值和结束值两者都包括在范围内。注意,还有一点很重要,按 Unicode 排序顺序,开始值必须在结束值的前面。

若要在中括号表达式中包括连字符,请采用下列方法之一:

    用反斜扛将它转义:

    [\-]

    将连字符放在中括号列表的开始或结尾。下面的表达式匹配所有小写字母和连字符:

    [-a-z]
    [a-z-]

    创建一个范围,在该范围中,开始字符值小于连字符,而结束字符值等于或大于连字符。下面的两个正则表达式都满足这一要求:

    [!--]
    [!-~]

若要查找不在列表或范围内的所有字符,请将插入符号 (^) 放在列表的开头。如果插入字符出现在列表中的其他任何位置,则它匹配其本身。下面的正则表达式匹配1、2、3、4 或 5 之外的任何数字和字符:

/Chapter [^12345]/

在上面的示例中,表达式在第九个位置匹配 1、2、3、4 或 5 之外的任何数字和字符。这样,例如,Chapter 7 就是一个匹配项,Chapter 9 也是一个匹配项。

上面的表达式可以使用连字符 (-) 来表示:

/Chapter [^1-5]/

中括号表达式的典型用途是指定任何大写或小写字母或任何数字的匹配。下面的表达式指定这样的匹配:

/[A-Za-z0-9]/

替换和分组

替换使用 | 字符来允许在两个或多个替换选项之间进行选择。例如,可以扩展章节标题正则表达式,以返回比章标题范围更广的匹配项。但是,这并不象您可能认为的那样简单。替换匹配 | 字符任一侧最大的表达式。

您可能认为,下面的表达式匹配出现在行首和行尾、后面跟一个或两个数字的 Chapter 或 Section:

/^Chapter|Section [1-9][0-9]{0,1}$/

很遗憾,上面的正则表达式要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字。如果输入字符串是 Chapter 22,那么上面的表达式只匹配单词 Chapter。如果输入字符串是 Section 22,那么该表达式匹配 Section 22。

若要使正则表达式更易于控制,可以使用括号来限制替换的范围,即,确保它只应用于两个单词 Chapter 和 Section。但是,括号也用于创建子表达式,并可能捕获它们以供以后使用,这一点在有关反向引用的那一节讲述。通过在上面的正则表达式的适当位置添加括号,就可以使该正则表达式匹配 Chapter 1 或 Section 3。

下面的正则表达式使用括号来组合 Chapter 和 Section,以便表达式正确地起作用:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

尽管这些表达式正常工作,但 Chapter|Section 周围的括号还将捕获两个匹配字中的任一个供以后使用。由于在上面的表达式中只有一组括号,因此,只有一个被捕获的"子匹配项"。

在上面的示例中,您只需要使用括号来组合单词 Chapter 和 Section 之间的选择。若要防止匹配被保存以备将来使用,请在括号内正则表达式模式之前放置 ?:。下面的修改提供相同的能力而不保存子匹配项:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

除 ?: 元字符外,两个其他非捕获元字符创建被称为"预测先行"匹配的某些内容。正向预测先行使用 ?= 指定,它匹配处于括号中匹配正则表达式模式的起始点的搜索字符串。反向预测先行使用 ?! 指定,它匹配处于与正则表达式模式不匹配的字符串的起始点的搜索字符串。

例如,假设您有一个文档,该文档包含指向 Windows 3.1、Windows 95、Windows 98 和 Windows NT 的引用。再进一步假设,您需要更新该文档,将指向 Windows 95、Windows 98 和 Windows NT 的所有引用更改为 Windows 2000。下面的正则表达式(这是一个正向预测先行的示例)匹配 Windows 95、Windows 98 和 Windows NT:

/Windows(?=95 |98 |NT )/

找到一处匹配后,紧接着就在匹配的文本(不包括预测先行中的字符)之后搜索下一处匹配。例如,如果上面的表达式匹配 Windows 98,将在 Windows 之后而不是在 98 之后继续搜索。
其他示例

下面列出一些正则表达式示例:
正则表达式         描述
/\b([a-z]+) \1\b/gi         一个单词连续出现的位置。
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/         将一个URL解析为协议、域、端口及相对路径。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/         定位章节的位置。
/[-a-z]/         A至z共26个字母再加一个-号。
/ter\b/         可匹配chapter,而不能匹配terminal。
/\Bapt/         可匹配chapter,而不能匹配aptitude。
/Windows(?=95 |98 |NT )/         可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
/^\s*$/         匹配空行。
/\d{2}-\d{5}/         验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/         匹配 HTML 标记。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

囧⊙●○⊕◎Θ⊙¤㈱㊣★☆♀◆◇◣◢◥▲▼△▽⊿◤ ◥ ▂ ▃ ▄ ▅ ▆ ▇ █ █ ■ ▓ 回 □ 〓≡ ╝╚╔ ╗╬ ═ ╓ ╩ ┠ ┨┯ ┷┏ ┓┗ ┛┳⊥﹃﹄┌ ┐└ ┘∟「」↑↓→←↘↙♀♂┇┅ ﹉﹊﹍﹎╭ ╮╰ ╯ *^_^* ^*^ ^-^ ^_^ ^︵^ ∵∴‖︱ ︳︴﹏﹋﹌︵︶︹︺ 【】〖〗@﹕﹗/\ " _ < > `,·。≈{}~ ~() _ -『』√ $ @ * & # ※ 卐 々∞Ψ ∪∩∈∏ の ℡ ぁ §∮〝〞ミ灬ξ№∑⌒ξζω*ㄨ ≮≯ +-×÷﹢﹣±/=∫∮∝ ∞ ∧∨ ∑ ∏ ∥∠ ≌ ∽ ≦ ≧ ≒﹤﹥じ☆veve↑↓⊙●★☆■♀『』Ψ ※ →№←㊣∑⌒〖〗@ξζω□∮〓※∴ぷ ∏卐【】△√ ∩¤々♀♂∞①ㄨ≡↘↙┗┛╰☆╮① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇丨 丩 丬丶 丷 丿 乀 乙 乂 乄 乆 乛 亅 亠 亻 冂 冫冖 凵 刂 讠 辶 釒 钅 阝 飠 牜 饣卩 卪 厸 厶 厽 孓 宀 川 巜 彳 廴 三 彐 彳 忄 扌 攵 氵灬 爫 犭 病 癶 礻 糹 纟 罒冈 耂 艹 虍 言 西                         兦 亼 亽 亖 亗 盲 凸 凹 卝 卍 卐 匸 皕 旡 玊 尐 开 木囘 囙 囚 四 囜 囝 回 囟 因 女 团 団 囤 亢 囦 囧 囨 云 囱 囫 囬 园 化 囯 困 囱 囲 図 围 抡 囶 囷 正 囹 固 囻 囼 国 图 囿 圀 圁 圂 圃 吾 圅 圆 囵 圈 幸 青 国 圌 围 园 圏 圐 圑 员 圆 圔 圕 图 圗 团 圙 圚 圛 圈 圝 圞
, 、 。 . ? ! ~ $ % @ & # * ? ; ︰ … ‥ ﹐ ﹒ ˙ ? ‘ ’ “ ” 〝 〞 ‵ ′ 〃 ↑ ↓ ← → ↖ ↗ ↙ ↘ ㊣ ◎ ○ ● ⊕ ⊙ ○ ● △ ▲ ☆ ★ ◇ ◆ □ ■ ▽ ▼ § ¥ 〒 ¢ £ ※ ♀ ♂

贴图符号大全

A、希腊字母大写 ΑΒΓΔΕΖΗΘΙΚ∧ΜΝΞΟ∏Ρ∑ΤΥΦΧΨΩ

B、希腊字母小写 α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω

C、俄文字母大写 АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ

D、俄文字母小写 а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я

E、注音符号 ㄅㄉㄓㄚㄞㄢㄦㄆㄊㄍㄐㄔㄗㄧㄛㄟㄣㄇㄋㄎㄑㄕㄘㄨㄜㄠㄤㄈㄏㄒㄖㄙㄩㄝㄡㄥ

F、拼音 ā á ǎ à、ō ó ǒ ò、ê ē é ě è、ī í ǐ ì、ū ú ǔ ù、ǖ ǘ ǚ ǜ ü

G、日文平假名 ぁぃぅぇぉかきくけこんさしすせそたちつってとゐなにぬねのはひふへほゑまみむめもゃゅょゎを

H、日文片假名 ァィゥヴェォカヵキクケヶコサシスセソタチツッテトヰンナニヌネノハヒフヘホヱマミムメモャュョヮヲ

I、标点符号 ˉˇ¨‘’々~‖∶”’‘|〃〔〕《》「」『』.〖〗【【】()〔〕{}

J、数字序号 ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ①②③④⑤⑥⑦⑧⑨⑩一二三四五六七八九十

K、数学符号 ≈≡≠=≤≥<>≮≯∷±+-×÷/∫∮∝∞∧∨∑∏∪∩∈∵∴⊥‖∠⌒⊙≌∽√

L、单位符号 °′〃$£¥‰%℃¤¢

M、制表符 ┌┍┎┏┐┑┒┓—┄┈├┝┞┟┠┡┢┣|┆┊┬┭┮┯┰┱┲┳┼┽┾┿╀╂╁╃

N、特殊符号 §№☆★○●◎◇◆□■△▲※→←↑↓〓#&@\^_

O、方块符号 ▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓▔▕◢◣◤◥☉♀♂

p、补充收集 ⊙●○①⊕◎Θ⊙¤㊣▂ ▃ ▄ ▅ ▆ ▇ █ █ ■ ▓ 回 □ 〓≡ ╝╚╔ ╗╬ ═ ╓ ╩ ┠ ┨┯ ┷┏ ┓┗ ┛┳⊥『』┌♀◆◇◣◢◥▲▼△▽⊿

[ Last edited by zzz19760225 on 2016-6-5 at 10:12 ]
作者: zzz19760225     时间: 2016-5-19 19:33
xiaoyuxyc
2015-11-30 19:42
1,触发,短接开机针(电源按钮)IO会有个3.3-0-3.3跳变信号。
2,请求上电,IO接到信号后会发出PWRBNT#信号给南桥请求上电。
3,允许上电,南桥收到PWRBNT#后发出SLP_3#信号给IO,表示允许上电
4,上电,IO 发出一个持续低电平信号给ATX电源绿线,电源输出各路主供电。
5,至此主板的硬启动完成(上电部分)
-------------------------------------------------------------------------
从零开始了解电脑之台式机硬件【主板基础篇】

    |
    浏览:179
    |
    更新:2014-08-18 11:23
    |
    标签:硬件

    从零开始了解电脑之台式机硬件【主板基础篇】1
    从零开始了解电脑之台式机硬件【主板基础篇】2
    从零开始了解电脑之台式机硬件【主板基础篇】3
    从零开始了解电脑之台式机硬件【主板基础篇】4
    从零开始了解电脑之台式机硬件【主板基础篇】5
    从零开始了解电脑之台式机硬件【主板基础篇】6
    从零开始了解电脑之台式机硬件【主板基础篇】7

分步阅读

主板基础篇
方法/步骤

    1

    主板是一部台式机的性能骨架,它将CPU,内存等性能配件有机的连接在一起。整机中主板的好坏至关重要。
    从零开始了解电脑之台式机硬件【主板基础篇】
    2

    首先我们看一下CPU接口。
    从零开始了解电脑之台式机硬件【主板基础篇】
    3

    上图中贴有“注意!”黄签的就是CPU接口。

    CPU的数据流需要经过北桥芯片。CPU接口左边的散热器下方就藏着北桥芯片。

    CPU本身也需要散热。于是CPu有自己的独立散热器。

    从零开始了解电脑之台式机硬件【主板基础篇】

    一款思民的AMD散热器
    从零开始了解电脑之台式机硬件【主板基础篇】

    装上后效果如图

    CPU的供电是玩家们关注的话题。因为现在主板对CPU供电的优劣在一定程度上反映了主板的优劣。

    从零开始了解电脑之台式机硬件【主板基础篇】

    CPU的供电模块

    平常有听到玩家所说的“N相供电”指的就是供电模块的相数。一般来说,一个相数=一个电感+1~3个电容+3个霍尔元件

    现在一般的主板都是4+1相供电,有的高端主板会远超个数字。

    为了获得更为纯净的电流,现在的主板都采用了如上图所示的全固态电容+铁素体电感(图中的黑色立方体)的组合。

    上图所示就是一个完整的8相CPU供电系统。

    CPU下面的一组接口是内存插槽

    从零开始了解电脑之台式机硬件【主板基础篇】

    内存处理的数据流也是通过北桥芯片控制的,但是现在Intel的酷睿I系列处理器都集成了北桥芯片,这样大大降低了CPU与内存进行数据交换的延迟。

    内存插槽对内存的限制性很强,不同代数的内存是不能兼容的。比如下图中的DDR2插槽和DDR3插槽的区别就很大。

    从零开始了解电脑之台式机硬件【主板基础篇】

    南桥芯片负责主板内部功能扩展区的数据传输,硬盘光驱显卡声卡网卡以及媒体和外设接口都由南桥芯片一手把控。

    北桥和南桥统称一个芯片组。一般情况下,芯片组的名字都是以北桥芯片名来命

    名的。

    南桥芯片上方就是主板的内部主功能扩展区——PCI插槽区

    从零开始了解电脑之台式机硬件【主板基础篇】

    PCI技术使得主板拥有了更强的扩展性。从上图中我们能看到一条负责媒体数据的PCI插槽,两条负责扩展端口的PCI—E 1X插槽,以及四条专为显卡而生的PCI—E 2.0 16X插槽。需要注意的是,并不是有几条PCI—E 2.0 16X插槽就能实现几显卡互联。

    由于现在网卡声卡和数据端口都集成在主板上,于是PCI槽和PCI—E 1X槽就只是个占位的角色。

    下面介绍一下主板上比较重要的数据接口和元器件

    从零开始了解电脑之台式机硬件【主板基础篇】

    上图中最右边的蓝色接口是IDE数据接口,是较早期的数据端口,主要负责硬盘与光驱的数据交换。如果IED口连接到硬盘上,此时也叫PATA接口。目前,IDE接口正逐渐被SATA接口淘汰。

    紧挨着的四个白色接口是SATA2.0接口。这是目前应用最广泛的光驱与硬盘数据接口,SATA2.0技术拥有比IDE技术更快的速度和更低的能耗。

    SATA2.0接口左边的两个黑色接口则是最新的SATA3.0接口,SATA3.0拥有几乎可以与SSD媲美的读写速度和令人骄傲的低功耗,性价比也远超SSD,收到玩家们的热烈追捧。

    图11中电容旁边的两个黑色芯片是主板中最关键的元件——Dual BIOS. 它们是整个主板的神经中枢,也是整部台式机的神经中枢。它们由独立的3V纽扣电池供电。

    最后看看主板的外置数据端口
    从零开始了解电脑之台式机硬件【主板基础篇】

    上图是一张整合主板的外置数据端口,所谓整合主板就是集成了显卡的主板
    从零开始了解电脑之台式机硬件【主板基础篇】

    一款搭载USB3.0接口的非整合主板

    现在一些主板上搭载了最先进的USB3.0接口。它的实际传输速度能达到和台式机硬盘一样的30MB/s,是USB2.0的15倍。

    USB2.0和USB3.0外观区别

    从零开始了解电脑之台式机硬件【主板基础篇】
    从零开始了解电脑之台式机硬件【主板基础篇】
    END

------------------------------------------------------------------
提问者采纳

cpu      存储器   输入输出控制系统     输入输出设备组成

运算器   存储器      控制器           输入设备、输出设备组成

.........这个就是概念置换。我这么给你分段你应该就明白了吧?都是对应的。只是叫法不一样罢了。

【从逻辑功能上看,可以分为】

控制器、运算器、存储器、输入设备、输出设备五个部分
一般地又把【运算器和控制器】合称为中央处理器(CUP)

====================================================================

分类都正确,但是正规而严谨的叫法应该是

【冯·诺依曼体系结构】

控制器、运算器、存储器、输入设备、输出设备。

提问者评价

    谢谢

分享
评论(2) | 121 2

潘占峰 | 十一级 采纳率30%

擅长: 暂未定制
-------------------------------------------------

[ Last edited by zzz19760225 on 2016-5-31 at 00:46 ]
作者: zzz19760225     时间: 2016-5-19 19:33    标题: boot分区

inux 启动分区 就是/boot吗
分享| 2009-05-15 18:20 金家寶 | 浏览 2577 次
操作系统linux

我的电脑是XP 和linux共存的
当初因没有光盘,采用的是硬盘安装linux,其中我是实现在xp下安装了grub来引导linux安装。现在硬盘空间不够用,打算删除xp所占用的空间,然后分配给linux。
但是发现在linux下/boot是挂载在/dev/hda2上的
但#fdisk -l却发现启动分区是在原XP占用的/dev/hda1上。因为启动分区在hda1中,导致我无法直接把分区空间分配给linux使用。
现在有个疑惑是启动分区和/boot目录可以在两个硬盘设备上马,那么起作用的是哪个分区上的呢,/boot/grub/fstab文件中标识的启动分区是hda2.
不解。。。。
各位朋友看看该怎么解决当前状态下分配空间的问题呢,还有就是启动分区的问题

2009-05-15 20:58 网友采纳

你的描述有点乱……

启动分区只是一个思维概念。
一般 Linux 里面启动分区表示的是含有内核的分区。
内核放在 /boot 里面,所以 /boot 被理解为启动分区。

Linux 的内核本身不能自己启动,他需要一个外部的 bootloader 程序。现在用的都是 grub (古老的 lilo 已经被废弃了)。grub 的启动,要从 IBM/PC 兼容机的启动方式说起……

忽略软盘光盘的启动,直接说硬盘,启动顺序是 BIOS -> 启动硬盘的 0 面 0 柱面 0 磁道 0 扇区(理解为硬盘的最开始就行了)里面的程序 -> MBR 程序进行二级引导程序运行 -> 系统的启动程序 -> 启动系统 。
MBR 在的这个扇区称为做 MBR 扇区。里面的东西是主引导记录(MBR 的本意),一个扇区 512 字节,这里的程序只有 446 字节,后 4*16 字节是主分区表,共 4 个位置,外加 2 字节的 55AA 标志。
真正启动计算机的东西,在这里,不过 446 字节不可能启动一个大型系统,所以这里是过渡程序,Windows 的过渡程序是寻找主分区表中被标志为“激活”的分区,启动这个分区的超级块里面的程序(类似 MBR 程序,但没有了 446 字节的限制,所以可以实现系统启动)。
GRUB 在 MBR 里面的程序是一个根据设置,直接继续启动 GRUB 后期的程序代码(stage2)。从而启动进入完整 GRUB 功能的环境,读取 Linux 内核并且运行内核。GRUB 的启动在部分阶段是不需要分区支持的,这点可以绕过很多问题。但也有很多问题……

现在说启动分区的问题:
Windows 的启动分区就是主分区表中的“激活分区”,如果你的 C 不是激活分区,那么你的 Windows 不能启动。
GRUB的特性导致了一个问题:只要能启动到 GRUB ,并且 GRUB 可以继续启动 Linux 内核,那么就不需要什么别的要求(Windows 必须有个主分区的 C 放置 NTLDR ,因为他的 MBR 程序太简单,设计理念的问题……)

所以,Linux 其实是可以不用 /boot 的。他仅仅是一个习惯传统而已。

你可以认为能启动 grub ,而且存放内核的分区,就是 Linux 的启动分区。
但 grub 和内核可以在两个不同的地方。这个时候,启动分区你最好理解为 放置 GRUB 的分区。

有关你的盘的分区容量的问题:
Linux 的 / 分区必须是 Linux 的分区类型,也就是需要格式化为 Windows 不支持的分区。你删除 XP 所占用的空间要怎么删除?这是需要重新分区的(PQ Magic 可以缩小你的 XP 分区,把腾出来的空间分一个新的分区)。所以你的 hda1 如果给 Linux ,只能格式化,或者拆分出来新的分区来给 Linux 。
但这样还一个问题:你以前的 Linux 分区如何规划的?可能这里新的分区,不能合并到你的 Linux 分区里面。

你现在可能把 GRUB 安装到 MBR 上了,但你 fdisk -l 看到的其实是 Windows 的激活分区,GRUB 启动是忽略“激活”分区的。他直接去找 GRUB 所在分区。

[ Last edited by zzz19760225 on 2016-5-31 at 23:16 ]
作者: zzz19760225     时间: 2016-5-19 19:46    标题: MBR

mbr
    (主引导记录(Master Boot Record))
    编辑

MBR,即主引导记录,是对IBM兼容机的硬盘或者可移动磁盘分区时,在驱动器最前端的一段引导扇区。MBR概念是在1983年PC DOS 2.0支持硬盘后才有的。[1]
MBR描述了逻辑分区的信息,包含文件系统以及组织方式。此外,MBR还包含计算机在启动的第二阶段加载操作系统的可执行代码或连接每个分区的引导记录(VBR)。这个MBR代码通常被称为引导程序。
由于MBR分区表的最大可寻址的存储空间只有2Tb(232×512字节)。因此,在大硬盘出现的现在,MBR分区方式逐渐被GUID分区表取代。
MBR不可能存在于不可分区的媒介如软盘等中

中文名
    主引导记录
外文名
    Master Boot Record

简    称
    MBR
成立时间
    1983年
性    质
    硬盘的主引导记录

目录

    1 分区解析
    2 注意
    3 调用参数
    4 MBR组成
    5 MBR修复

分区解析
编辑
MBR,全称为Master Boot Record,即硬盘的主引导记录。
为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。
硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为0xAA55或0x55AA,这取决于处理器类型[2]  ,如果是小端模式处理器[3]  (如Intel系列),则该值为0xAA55;如果是大端模式处理器[3]  (如Motorola6800),则该值为0x55AA。
标准 MBR 结构
地址
       
描述
       
长度
Hex
       
Oct
       
Dec
       
(字节)
0
       
0
       
0
       
代码区
       
440
(最大 446)
01B8
       
670
       
440
       
选用软盘标志
       
4
01BC
       
674
       
444
       
一般为空值; 0x0000
       
2
01BE
       
676
       
446
       
标准 MBR 分区表规划
       
64
(四个16 byte的主分区表入口)
01FE
       
776
       
510
       
55h
       
MBR 有效标志
       
2
01FF
       
777
       
511
       
AAh
MBR, 总大小: 446 + 64 + 2 =
       
512[4]
注意
编辑
MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写,如在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot来把masterboot这个小程序写到mbr里面,masterboot通常用汇编语言来编写。我们也可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。
调用参数
编辑
用INT13H的读磁盘扇区功能的调用参数如下:
入口参数:AH=2 (指定功能号)
AL=要读取的扇区数
DL=磁盘号(0、1-软盘;80、81-硬盘)
DH=磁头号
CL高2位+CH=柱面号
CL低6位=扇区号
CS:BX=存放读取数据的内存缓冲地址
出口参数:CS:BX=读取数据存放地址
错误信息:如果出错CF=1 AH=错误代码
用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区)
XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000)
XXXX:XXXX MOV CX,0001 (读0柱面,1扇区)
XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按回车键)
-G=100 (执行以上程序段)
-D 1000 11FF (显示512字节的MBR内容)
在windows操作系统下,例如xp,2003,Vista,windows7,有微软提供的接口直接读写mbr;
FILE * fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+");
char buffer[512];
fread(buffer,512,1,fd);
//then you can edit buffer[512] as your wish......
fseek(fd,0,SEEK_SET); //很重要
fwrite(buffer,512,1,fd); //把修改后的MBR写入到你的机器
fclose(fd); //大功告成
MBR组成
编辑
一个扇区的硬盘主引导记录MBR由4个部分组成。
硬盘MBR扇区 硬盘MBR扇区
·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志0xAA55或0x55AA,称为“魔数”(magic number)。如果该标志错误系统就不能启动。
MBR的结构如下表所示
字节偏移(16进制)
       
字节数
       
描述
00~1BD
       
446
       
引导代码
1BE~1CD
       
16
       
分区表项1
1CE~1DD
       
16
       
分区表项2
1DE~1ED
       
16
       
分区表项3
1EE~1FD
       
16
       
分区表项4
1FE~1FF
       
2
       
签名值0xAA55或0x55AA
具体含义如下:
(1)0x00~0x1BD:446个字节,包含一段指令,用以通知计算机如何访问分区表并定位操作系统的位置
这部分的代码会因为操作系统不同而不同,利用引导代码可以实现多重系统引导。多系统引导有两种方法可以实现:一种方法是用Windows操作系统在引导分区中设置一段代码,先加载进入用户选择系统的界面,允许用户选择要进入的系统,再进入指定的系统;第二种方法是改变MBR中的引导代码,该代码直接呈现给用户一个选择系统的界面。
(2)0x1BE~0x1FD:64个字节,4个分区表项,每个表项占用16个字节,描述一个分区,最多可以描述4个分区(这就是为什么MBR分区体系只能分成4个区【我们平时看到的分区一般可以从26个字母中选取任意多个当做分区标识(多于4个),这是因为那些分区是逻辑分区,这里的4个分区指的是主分区和扩展分区的数目,而逻辑分区是在扩展分区中划分出来的,也叫做二级、三级扩展分区。】)。
分区表项并没有顺序要求,即不要求第一个分区表项在第二个分区表项前。
分区表也不要求从第一个分区表项开始
(3)0x1FE~0x1FF:2个字节,有效结束标志0xAA55或0x55AA。如果没有这个标志,操作系统会认为磁盘没有初始化,无法正确加载磁盘的分区。
分区表参数含义(字节)
0 活动(80)或非活动分区(00)
1 2 3 起始的磁头 01 柱面 01 扇区00值
4 分区类型符 NTFS(07)FAT32(0B)扩展(0F)
5 6 7 结束的磁头 FE 柱面 FF 扇区FF值
8 9 A B 本分区之前已用扇区数
C D E F 本分区大小
虚拟MBR
即 EBR (extent boot record)扩展引导记录
其记录表项 与MBR相同 ,用于管理扩展分区上的逻辑驱动器。
MBR修复
编辑
MBR在某些情况下,如病毒或者分区操作不当会引起MBR代码段的损坏,表现的现象就是电脑启动时,屏幕出现黑底一个或几个无意义的字母闪光标或无任何提示闪光标。这种情况在确认硬盘无物理故障后,可以使用一些简单方法进行恢复。

    Dos命令
    使用任意启动盘启动到MSDOS提示符,键入命令:
    fdisk /mbr
    Diskgenius
    用启动盘,无论dos版或者pe版均可,启动diskgenius,然后选择菜单“硬盘”-“重建主引导记录”,为避免病毒残留,还可执行一次”硬盘“-”清除保留扇区“
    Windows xp命令
    xp之下,需要安装tool kit附加工具,为系统增加一个fixmbr命令行工具。执行命令之前,先将故障硬盘挂载到一台好的电脑,或者使用xp安装盘启动电脑,然后执行命令:
    fixmbr \Device\HardDisk0 此处的0或其他数字需先通过diskpart工具的list driver进行查找。
    Windows 7命令
    修复方式同xp,只是命令换成bootrec /fixmbr

[ Last edited by zzz19760225 on 2016-5-31 at 23:18 ]
作者: zzz19760225     时间: 2016-5-19 19:50    标题: GRUB

GRUB2
    编辑

GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
GNU GRUB的前身为Grand Unified Bootloader。它主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。Solaris从10 1/06版开始在x86系统上也采用GNU GRUB作为启动器。
注意:目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2。[1]

中文名
    GRUB2
简    称
    GRUB

来    源
    来自GNU项目的启动引导程序
应    用
    x86系统

目录

    1 特征
    2 安装和使用
    3 手动引导
    4 基本命令

特征
编辑
Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能:
1、模块化设计
不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除。
2、支持多体系结构
Grub 2可支持PC(i386), MAC(powerpc)等不同的体系机构,而且支持最新的EFI架构。
3、国际化的支持
Grub 2 可以支持非英语的语言。
4、内存管理
Grub 2 有真正的内存管理系统。
5、脚本语言
Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。
安装和使用
编辑
Grub 2的内核是符合multiboot标准的,因此可以在Grub中引导。
1、下载
解压到某个FAT分区的根目录,会生成/boot/grub目录,Grub 2的文件便在该目录下。
2、修改
/boot/grub/grub.cfg
这是Grub 2的配置文件,它的格式不同于menu.lst,以下是一个例子:
set timeout=20
set default=0
menuentry "Chainload First Part" {
set root=(hd0,1)
chainloader +1
}
menuentry "Load Linux at Second Part" {
set root=(hd0,2)
linux /vmlinuz root=/dev/hda2
initrd /initrd
}
如果你熟悉Grub,应该可以看明白里面的内容。要注意的是:
a、timeout, default等参数用变量来储存
d、菜单项由menuentry定义
c、第1个分区是(hd0,1)而不是(hd0,0)
d、当前支持的启动方式是chainload,linux和multiboot
3、在Grub中使用以下的命令进入Grub2
root (hd0,0)
kernel /boot/grub/core.img
boot
(hd0,0)请用存放Grub2的分区的名字来代替
4、进入Grub 2后,在菜单界面下输入 c 便可进入控制界面。
手动引导
编辑
有时候grub出现问题,不能通过启动选项启动目标操作系统,以启动一个linux为例
按c键切换到命令行模式
grub> set root=(hd0,msdos1) 设置根目录为第一硬盘的第一个分区
grub> linux /boot/vmlinuz 设置内核文件,有的linux发行版会有一个名为wmlinuz的软连 接指向真正的内核文件
grub> initrd /boot/initrd 设置initrd文件,也有可能用软连接
grub> boot 从硬盘启动
以上命令可以用tab键补全 根据实际情况有所不同
基本命令
编辑
lsmod
列表当前装载的模块
insmod mod_name
装载模块
rmmod mod_name
卸除模块
help [command]
显示帮助
ls [options] [dir]
列表目录。当不带参数时,显示的是所有的硬盘设备,带参数时,显示的是目录里的子目录和文件。
还有很多其它的命令,全部命令的列表在/boot/grub/command.lst里:
boot cat chainloader cmp . configfile export font halt hello help initrd
lsmod linux loopback ls lsmod module multiboot play reboot rescue rmmod
search set source terminal terminfo [ unset vbeinfo vbetest videotest
可以用help来看具体的用法
注意:
a、很大一部分命令都在模块里,如果输入时显示找不到命令,只需要用insmod 装载相应的模块就可以了。
b、你可以定制内核,使所需的命令包在其中。
从代码中编译:
1、用cvs取得源代码
2、当前的Grub2代码中有一个bug,使得启动后不会显示grub.cfg中的菜单,有一个补丁,在:
扩展阅读里
要使用该补丁,请进入grub2的目录,然后:
patch -p1 < grub2-menu.diff
这里假设grub2-menu.diff放在grub2目录下
3、./configure
然后
./make
4、定制内核
./grub-mkimage -d . -v -o core.img fat pc
core.img是内核的名字,fat和pc是加入内核的模块。常用模块有:
fat: 支持 fat 文件系统
ext2: 支持 ext2 文件系统
pc: 支持主分区和扩展分区
help: help命令
ls: ls命令
除了当前分区的文件系统的模块外,其它的都可以用insmod在进入grub2后才转载
5、把core.img, boot.img, diskboot.img, *.mod, fs.lst, command.lst
抄到某一分区的 /boot/grub目录下,然后编写配置文件grub.cfg

参考资料

        1.    GNU GRUB - Documentation  .GNU[引用日期2014-07-16]



------------------------------------------------------------------

GRUB
    锁定

本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。
GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

外文名
    GRUB
全    称
    GRand Unified Bootloader

类    别
    操作程序
适用范围
    计算机

目录

    1 基本功能
    2 引导过程
    ▪ 装载记录
    ▪ 装载Grub
    ▪ 装载系统
    ▪ 设备名称

    3 文件系统
    4 接口
    ▪ 菜单接口
    ▪ 命令接口
    5 命令
    6 手动启动

    7 例子
    ▪ 安装wingrub
    ▪ 安装grub
    ▪ 软件使用
    ▪ 编辑menu.lst

基本功能
GNU GRUB 和GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux。
在X86架构的机器中,Linux、BSD 或其它Unix类的操作系统中GRUB、LILO 是大家最为常用,应该说是主流。
Windows也有类似的工具NTLOADER;比如我们在机器中安装了Windows 98后,我们再安装一个Windows XP ,在机器启动的会有一个菜单让我们选择进入是进入Windows 98 还是进入Windows XP。NTLOADER就是一个多系统启动引导管理器,NTLOADER 同样也能引导Linux,只是极为麻烦罢了。
在PowerPC 架构的机器中,如果安装了Linux的Powerpc 版本,大多是用yaboot 多重引导管理器,比如Apple机用的是IBM PowerPC处理器,所以在如果想在Apple机上,安装Macos 和Linux Powerpc 版本,大多是用yaboot来引导多个操作系统。
因为X86架构的机器仍是主流, 所以目前GRUB和LILO 仍然是我们最常用的多重操作系统引导管理器。
引导过程
由硬盘启动时,BIOS通常是转向第一块硬盘的第一个扇区,即主引导记录(MBR)。
装载GRUB和操作系统的过程,包括以下几个操作步骤:
装载记录
基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。
装载Grub
这第二引导装载程序实际上是引出更高级的功能,以允许用户装载一个特定的操作系统。
装载系统
如linux内核。GRUB把机器的控制权移交给操作系统。
不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。
设备名称
IDE硬盘用hd开始,SCSI硬盘用sd开头。软盘用fd开头。命名和linux不大一样。是从0算起。
(hd0,0)。表示C盘。
(hd0,4)。表示D盘。当然这里指的是(第一个逻辑分区,如果D盘也是主分区,应该写成hd0,1)
系统的第一个硬盘驱动器表示成(hd0),其上的第一个分区表示为(hd0,0),也就是说对于硬盘,采用(hdx,y)的形式来表示,x、y都是从0开始计数的,x表示硬盘号,y表示分区号。
由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。
一般机子的硬盘都是一个主分区,其余是逻辑分区。因此C盘用(hd0,0),D盘用(hd0,4)来表示。 光盘用(cd)表示,第一软驱用(fd0)表示。
文件的表示:( , ) /path/to/file
在Linux系统中,如ubuntu,(hdx,y)中的y是从1开始计数的。第一逻辑分区用(hd0,5),第二逻辑分区用(hd0,6)来表示
装置
       
Lilo
       
Grub
IDE1 master
       
hda, hda1, hda2
       
(hd0), (hd0,0), (hd0,1)
IDE1 slave
       
hdb, hdb1, hdb2
       
(hd1), (hd1,0), (hd1,1)
IDE2 master
       
hdc, hdc1, hdc2
       
(hd2), (hd2,0), (hd2,1)
IDE2 slave
       
hdd, hdd1, hdd2
       
(hd3), (hd3,0), (hd3,1)
文件系统
一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的!
接口
当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件(menu.lst)。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。 如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口。
菜单接口
在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。 添加(加在当前行后面(用[o]键),加在当前行前(用[0]键),编辑(用[e]键),删除(用[d]键)。
在所有的改变都完成后,用[Enter]键来执行这些命令,并引导操作系统。[Esc]键来放弃
命令行接口
命令接口
以下是几个常用命令:
boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一 扇区内的文件,使用+1作为文件名。
displaymem - 显示当前内存的使用情况,这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。
install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。
(警告:install命令将覆盖主引导扇区中的其他信息。如果命令被执行,那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。)
kernel - 当使用直接载入方式引导操作系统时,kernel命令指定内核从GRUB的根文件系统中载入 。
比如 kernel /vmlinuz root=/dev/hda5
Vmlinuz是内核。。它从GRUB的根文件系统载入的,如(hd0,0)。同时,后面一个选项被传给内核。它指出当Linux内核载入时,内核的根文件系统应该是位于hda5,第一个IDE硬盘的第五个分区。
命令
color - 设定在菜单中使用的颜色,
grub grub
一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black。比如:
color red/black green/blue
default - 默认项目的标题名称。如果菜单接口超时,那它将被载入。
fallback - 当这个命令被使用时,如果第一次尝试失败,那么这个项目的标题名称将被使用。
hiddenmenu - 这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。
timeout - 这个命令设定了在GRUB载入由default命令指定的项目的时间间隔,以秒为单位。
splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
title - 设定用来装载一个操作系统的一组特定命令的标题。
字符#用来在菜单配置文件放置注释。
手动启动
有时候grub出现问题,不能通过启动选项启动目标操作系统,以启动一个linux为例
按c键切换到命令行模式
grub> root (hd0,0) 设置根目录为第一硬盘的第一个分区
grub> kernel /boot/vmlinuz 设置内核文件,有的linux发行版会有一个名为wmlinuz的软连接指 向真正的内核文件
grub> initrd /boot/initrd 设置initrd文件,也有可能用软连接代替真正的文件名
grub> boot (hd0,0) 从硬盘启动
以上命令可以用tab键补全 根据实际情况有所不同
例子
这是个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
       
default=linux
timeout=10
color=green/blacklight-gray/blue
#sectiontoloadlinux
titlelinux
root(hd0,1)这里制定了grub的根。并且挂载。
kernel/vmlinuzroot=/dev/hda5内核是grub根下的vmlinuz。
并且内核载入后,内核的根是在/dev/hda5
boot
#sectiontoloadWindows2000
titlewindows
rootnoverify(hd0,0)rootnoverify就是指定根,但是不要挂载。
chainloader+1使用(hd0,0)的第一扇区来引导。
安装wingrub
在安装软件到机器中时,就直接按它默认的安装,下一步、下一步就好了
在安装过程中会出现一个Base Setup的提示窗口,ChooseDrive即是grub配置文件的存放位置,一定要选一个(一般选择第一个,提醒你注意软件的标题栏,不同的选择会显 示的不一样),如果你选择cancel,则不会有menu.lst 文件产生(这个文件很重要),Base Setup提示窗口下面的copy stage files和keep old directory不点击也可以,它们的区别就是前者把grub文件夹中的文件和menu.lst一起放在新产生的grub文件夹下,而后者新产生的 grub文件夹中只有menu.lst ,如果不点击则只会产生只含menu.lst文件的grub文件夹,都点击则是copy stage files那种情况。
安装grub
GRUB的一个重要的特性是安装它不需依附一个操作系统;但是,这种安装需要一个Linux副本。由于单独工作,GRUB实质上是一个微型系统,通过链式启动的方式,它可以启动所有安装的主流操作系统。
与LILO不同,修改GRUB的配置文件后,不必把GRUB重新安装到MBR或者某个分区中。
在Linux中,“grub-install”命令是用来把GRUB的步骤1安装到MBR或者分区中的。GRUB的配置文件、步骤2以及其它文件必须安装到某个可用的分区中。如果这些文件或者分区不可用,步骤1将把用户留在命令行界面。
GRUB配置文件的文件名和位置随系统的不同而不同;如在Debian和OpenSUSE中,这个文件为/boot/grub/menu.lst, 而在Fedora和Gentoo中为/boot/grub/grub.conf。Fedora提供了一个从/etc/grub.conf到/boot/grub/grub.conf的符号链接。
除了硬盘外,GRUB也可安装到光盘、软盘和闪存盘等移动介质中,这样就可以带起一台无法从硬盘启动的系统。
软件使用
打开wingrub程序,选择 tools菜单,然后点击Install grub ,弹出一个对话框;如下图所示:
这里面有两个方法供选择;
A) 直接单击Boot From MBR Partion ,然后单击右边的下拉菜单;选择要把Linux系统安装在哪个分区中,再单击最下边install按钮。
在下拉列表框中,如果看到(hd0,0)或者(hd0,1)等,则选(hd0,0);如果只看到(hd0,1),说明计算机硬盘的第一个分区是NTFS的文件格式,如果看不到什么下拉列表框,就使用下面的办法,
B)选择Systerm Device ,在右边的下拉列表框中,选C:然后再选中BOOT FROM 下的BOOT.INI 单选按钮,在Title 中输入mygrub ;最后在 Time OUT 中输入30;
单击Install按钮,这样grub就安装好了。
grub的配置文件在c:\grub\中(如果你的不是,则可以从wingrub的标题栏看出),配置文件名为menu.lst ,这个配置文件起到决定性作用;所以一定要编辑好。
A和B还是有一些区别,A的方法是开机就能看到所有在menul.lst中的系统;而B,则必须按一下刚才所填写的mygrub ,然后才能看到在menu.lst所提到的系统。
【个人首选B项,因为A安装的grub会覆盖掉原有的启动引导程序,即重写了MBR,而B则是把原有的引导程序修改了,加了一个启动项。如果你想安 装两个系统,Windows为主,Linux为副,那么B就可以更好的实现。当然,在安装Linux时也要注意安装程序中有一个“配置高级引导装载程序选 项”就是对grub的安装位置进行设置。
▲▲▲配置启动文件▲▲▲
运行wingrub,单击菜单中的tools菜单选择Partition List(分区列表),在这里能了解到硬盘的分区情况,比如可能看到 FAT32的分区是(hd0,1)等,要把Linux的光盘映像文件保存在fat32分区中;通过这个能知道把光盘ISO存放到(hdX,Y)了,也能知 道(hdX,Y)所对应的Windows分区是C,是D,还是E。
配置启动文件的过程如下:
1]先找一个FAT 32的分区,把下载下来的ISO直接放到分区的下面,不要放在任何目录中,这个分区里也不要存放其他文件。
2]在这个分区中,再新建一个文件夹,命名为linux,从下载的第一张Linux系统安装ISO文件isolinux中抽取 vmlinuz 和 initrd.img 两个文件,放到linux目录中: 注意只放这两个文件,不要再存放其他内容,如果放进其他的内容,有可能出现安装程序中途退出的情况。
注意:抽取文件可以使用WinRAR软件,另外,输入文件夹时文件夹名是小写;在输入menu.lst 文件名时,要用半角英文,标点之类的全是半角;title root kernel initrd 全是小写的英文;如果文件夹或文件名输入出错,在安装时安装程序会提示找不到文件。
编辑menu.lst
Menu说明 Menu说明
当打开menul.lst 时,可能里面已经有内容了,比如有个 timeout 10 ,如果没有则可以自己写上(这是开机等待进入系统的时间,为时10秒)。
root [开机根目录 / 所在的磁盘代号]
kernel [开机档案的所在地完整档名] [root=/dev/硬盘代号]
范例:
1
2
       
root(hd0,0)
kernel/boot/vmlinuz-2.4.19-16mdkroot=/dev/hda1
设定上面就是这样而已!所以,开机完毕之后,请将您的 kernel 文件名称(完整档名)与开机的根目录所在的磁盘代号记忆一下,那么下次就可以手动设定开机设定项目呢!但如果是 windows 方面的设定时,那就直接使用 chainloader 这个项目即可,有点像这样:
chainloader [硬盘代号] +1
范例:
1
2
3
4
5
6
       
chainloader(hd1,0)+1
titleWindowsXP#计算机中已经安装了windows系统,用来启动windows的,这四行代码如下所示。
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
menu.lst 文件的配置引导说明,通过menu.lst ,可以配置 Linux的启动和引导:也可以引导已经安装好的Linux系统。语法结构有以下的四条,举例如下:总共有两个书写格式,任选其一;
格式一:最简单:
1
2
3
4
       
titlefc4install
root(hd0,1)
kernel(hd0,1)/linux/vmlinuz
initrd(hd0,1)/linux/initrd.img
title 行是在在开机时所看到的菜单,显示的就是 fc4install ,它要加在 title 的后面。title是必须保留的,它是grub的语法的标签,可以在title 后面写入想要添加的东西,这是可以自己定义的,比如 title fc4setup也是可以的。
root (hd0,1) 行使用 root开头,然后加一个空格,至于用户把vmlinuz和initrd.img 放在哪个分区了,可以打开 wingrub,单击tools菜单选择partioinlist (分区列表),在打开的对话框中查到。
kernel 命令行以kernel 开头,然后加一个空格,并在其后给定vmlinuz文件存放路径,这个命令行的作用是告诉计算机将使用(hd0,1)分区下的linux目录中的kernel 内核来启动;
initrd 行和 kernel 行类似;主要用于指明安装的文件放在哪个分区和哪个目录中,即在该命令后指定文件的安装目录。
基本的说明已经在上表当中了,这里需要在说明的是关于 default 开机档的计算。如果今天我有四个开机设定档,那么 default 算的是什么呢?就是『排序』啦!假如我底下依序出现的设定档 title 分别是 linux, linux-test, windows, failsafe 的话,那么开机的时候, grub 的选单就会显示:
1
2
3
4
       
linux
linux-test
windows
failsafe
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要调整开机时后的选单顺序,就在 /boot/grub/menu.lst 修改一下他们的顺序即可!
格式二:比较麻烦一点:理解着看吧;
1
2
3
4
5
       
titlefc4install
root(hd0,1)

kernel/linux/vmlinuzroroot=/dev/hda2
initrd/linux/initrd.img
title 这行就是我们在开机时,所看到的菜单 ,显示的就是 FC4install ,要加在 title 的后面,title是必须保留的,是grub的语法的标签 ,我们可以在title 后面写我们想要加的东西,这是自己可以定义的,比如 title fc4setup也是可以的;
root 这行,在本例中是 root (hd0,1),这行就是我们打开 wingrub,点tools =》partioinlist (分区列表) 中查到的;我们通过这个知道我们把解压出来的 vmlinuz和initrd.img 所处的分区和路径;比如我的机器,我查到的是 (hd0,1),对应的Windows FAT 32分区是D,事实上,我的确把四个光盘映象都放在了 (hd0,1),也就是win中所看到的D盘; 并且我同样也把提取出来
vmlinuz 和initrd.img 放在了(hd0,1)中的linux目录中; 不知道自己存放提取出来的内容放在哪个分区了,就用 打开 wingrub,点tools =》partioinlist (分区列表) 中查看;
kernel 这行;注意在 kernel后面有个空格,接着写 vmlinuz所处的位置 ,在哪里呢?在 /dev/hda2,这个/dev/hda2是怎么来的?是由(hd0,1)而来的,如果您的显示的是 (hd0,2),那root=/dev/hda3,明白了吧,就是(hdX,Y)中的Y+1=Z,就是/dev/hdaZ ,再举一例:比如我们把提出来的vmlinuz 和initrd.img 放在了 (hd0,5)的linux 目录中,这时应该写 root=/dev/hda6 ;
有可能有的弟兄说,我放在了 (hd1,6)的分区,这怎么办?这个也不难,我们这里面的所提到的 (hdX,Y),中的X可能是0 、1、2等 ,所以对应的是 hdaZ ,hdbZ,hdcZ ,如果您看到的是(hd1,6) ,所以对应的是/dev/hdb7 。
initrd 这行,原样搬上就好;
完整menul.lst 应该如下:在这之中,引导Linux的,有两种写法,都在里面,哪种都是可以启动引导安装的;
这是第一种写法
1
2
3
4
5
6
7
8
9
       
timeout10
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
titlefc4install
root(hd0,1)
kernel(hd0,1)/linux/vmlinuz
initrd(hd0,1)/linux/initrd.img
这是第二种格式的写法
1
2
3
4
5
6
7
8
9
10
       
timeout10
titleWindowsXP
root(hd0,0)
makeactive
chainloader+1
titlefc4install
root(hd0,1)

kernel/linux/vmlinuzroroot=/dev/hda2
initrd/linux/initrd.img
编辑好后,就可以进入引导安装,此时,如果系统仍然产生错误,例如出现找不到文件之类的提示。就需要查看文件存放路径是否正确,如果能够引导进入安装,则 需要选择ISO映像所存放的FAT32磁盘的分区,然后按Enter键执行安装。
在安装过程中,以下的几个情况是要注意的:
1、在FC4的安装过程,安装分区时要自定义,不要让系统自动分区;要自己指定Linux 安装到哪个分区。我们可以在用windows分区工具,分出两个空白区,一个要大一点,最好是10G 以上,另外一个是内存的两倍(对于小内存的机器来说,大内存的机器分上512M 就行了;在安装时,我们要把大的分区用来装系统,点一下那个分区,出现挂载点,选择/ ,然后格式化成 ext3或者 reiserfs 等文件系统;把小一点的分区格式化成swap ,这是Linux的交换区;
当然如果您有未用过的空白区,不用windows分区工具来分也行,在安装过程中,可以用linux的分区工具来划分,点几下鼠标就行了;这是对RH 和/FC 或者 的安装来说的,Madrake 也一样;
2、对于有些系统版本要把ISO抽取出来都放在一个目录中才能进行,比如Slackware 发行版;
3、看到大家反馈的情况,有的弟兄说中途退出与放ISO的分区的下有中文目录或者中文文件有关;如果找不出问题所在,就把ISO放在一个FAT32的空白分区上。
【安装成功后,只用保留文件名为GRLDR的文件,即可实现用Windows引导程序引导Linux。】
▲▲▲安装Fedora▲▲▲
重新启动电脑,就可以启动菜单,选择Fedora的安装启动选项进行安装。

-------------------------------------------------------------------

iamdebugman 网络管理与维护 网络部网络管理与维护
2015-05-09 17:12

步骤如下:

  a  进入grub的命令模式。进入grub界面后按C键进入命令行界面。

  b  先熟悉一下grub  的一些命令 grub>help

  c  熟悉一下cat命令

  d  root指令来指定/boot所在的分区

  e  kernel指令来指定linux的内核,及所在的分区

  f  用initrd命令来指定initrd文件

  g  boot引导系统


cat命令的用法


cat指令是用来查看文件内容的,有时不知道Linux的/boot分区,以及/根分区所在的位置,要查看/etc/fstab的内容来得知, 这时,就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容;注意要学会用tab键命令补齐的功能;

grub> cat (     按tab 键会出来hd0或hd1之类的;

grub> cat (hd0, 注:输入hd0,然后再按tab键;会出来分区之类的;

grub> cat (hd0,6)

Possible partitions are:

   Partition num: 0,  Filesystem type unknown, partition type 0x7

   Partition num: 4,  Filesystem type is fat, partition type 0xb

   Partition num: 5,  Filesystem type is reiserfs, partition type 0x83

   Partition num: 6,  Filesystem type is ext2fs, partition type 0x83

   Partition num: 7,  Filesystem type unknown, partition type 0x83

   Partition num: 8,  Filesystem type is reiserfs, partition type 0x83

   Partition num: 9,  Filesystem type unknown, partition type 0x82


grub> cat (hd0,6)/etc/fstab 注:比如我想查看一下 (hd0,6)/etc/fstab的内容就这样输入;


LABEL=/                 /                       ext3    defaults        1 1

/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0

/dev/shm                /dev/shm                tmpfs   defaults        0 0

/dev/proc               /proc                   proc    defaults        0 0

/dev/sys                /sys                    sysfs   defaults        0 0

LABEL=SWAP-hda1         swap                    swap    defaults        0 0

/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,

managed 0 0

主要查看/etc/fstab中的内容,主要是Linux的/分区及/boot是否是独立的分区;如果没有/boot类似的行,证明/boot和 Linux的/处于同一个硬盘分区;比如上面的例子中LABEL=/ 这行是极为重要的;说明Linux系统就安在标签为LABEL=/的分区中;


如果您的Linux系统/boot和/没有位于同一个分区,可能cat (hd[a-n],y) 查到的是类似下面的;


LABEL=/                 /                       ext3    defaults        1 1

LABEL=/boot             /boot                   ext3    defaults        1 2

root (hd[0-n,y) 指令来指定/boot所在的分区;

其实这个root (hd[0,n],y)是可以省略的,如果省略了,要在kerenl 命令中指定;前面已经说过 (hd[0-n],y) 硬盘分区的表示方法的用途;主要是用来指定 /boot所在的分区;


eg:


grub> root (hd0,0)

kernel 指令,用来指定Linux的内核,及/所在的分区;

kernel 这个指令可能初学者有点怕,不知道内核在哪个分区,及内核文件名的全称是什么。不要忘记tab键的命令补齐的应用;

如果已经通过root (hd[0-n],y) 指定了/boot所在的分区,语法有两个:

如果/boot和Linux的/位于同一个分区,应该是下面的一种格式;

kernel /boot/vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=/dev/hd[a-z]X

如果/boot有自己独立的分区,应该是;


kernel /vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=/dev/hd[a-z]X


在这里 root=/dev/hd[a-z]X 是Linux 的/根所位于的分区,如果不知道是哪个分区,就用tab出来的来计算,一个一个的尝试;或用cat (hd[0-n],y)/etc/fstab 中得到Linux的/所在的分区或分区的标签;


grub> kernel /boot/在这里按tab键;这样就列出/boot中的文件了;

Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369

_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK memtest86+-1.55

.1 xen-syms xen.gz


grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/  

   [Linux-bzImage, setup=0x1e00, size=0x18e473]

注解: root=LABEL=/ 是Linux的/所在的分区的文件系统的标签;如果您知道Linux的/在哪个具体的分区,用root=/dev/hd[a-z]X来指定也行。比如下面的一行也是可以的;


grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7

也可以把/boot所在的分区的指定 root (hd[0-n],y)这行省掉,直接在kernel 中指定/boot所在的分区;所以就在下面的语法;


如果是/boot和Linux的根同处一个分区;

kernel (hd[0-n],y)/boot/vmlinuz ro root=/dev/hd[a-z]X

比如:

grub>kernel

如果是/boot和Linux所在的根不在一个分区;则是;

kernel (hd[0-n],y)/vmlinuz  ro root=/dev/hd[a-z]X

grub> kernel (hd0,0)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7

   [Linux-bzImage, setup=0x1e00, size=0x18e473]

或下面的输入,以cat 出/etc/fstab内容为准;


grub> kernel (hd0,0)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/

   [Linux-bzImage, setup=0x1e00, size=0x18e473]


initrd 命令行来指定initrd文件;


grub> initrd /boot/initrd在这里tab 来补齐;

grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img

   [Linux-initrd @ 0x2e1000, 0x10e685 bytes]

如果/boot是独立的一个分区,应该是如下样子的语法;比如下面的;


grub> initrd /initrd在这里tab 来补齐;

grub> initrd /initrd-2.6.11-1.1369_FC4.img

   [Linux-initrd @ 0x2e1000, 0x10e685 bytes]



boot 引导系统;

grub>boot

下面是在我机器上的命令:

grub> cat (hd0,0)/etc/fstab

# This file is edited by fstab-sync - see 'man fstab-sync' for details

LABEL=/                 /                       ext3    defaults        1 1

/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0

/dev/shm                /dev/shm                tmpfs   defaults        0 0

/dev/proc               /proc                   proc    defaults        0 0

/dev/sys                /sys                    sysfs   defaults        0 0

LABEL=SWAP-hda1         swap                    swap    defaults        0 0


/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0


grub> root (hd0,0)

Filesystem type is ext2fs, partition type 0x83


grub> kernel /boot/在这里按tab补齐,全列出/boot所有的文件;

Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4  

memtest86+-1.55.1 xen-syms xen.gz


grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/  

   [Linux-bzImage, setup=0x1e00, size=0x18e473]


grub> initrd /boot/在这里按tab补齐

Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK

memtest86+-1.55.1 xen-syms xen.gz


grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img 注;输入intrd文件名的全名;

   [Linux-initrd @ 0x2e1000, 0x10e685 bytes]


grub> boot

-------------------------------------
GRUB 学习笔记

论坛上关于 GRUB 的贴子不少,但很多都是讲怎么安装而已。这篇文章是我通过翻译 info grub

并动手做实验总结出来的,增加了一些平常不太常见的内容。如有错误,敬请指正。同时由于 info

grub 的内容太多,对部分内容没有进行翻译,希望各位热心人能够补充!!!

btw :为了方便大家阅读,还提供了 pdf 版本下载,就位于该层底部。



**************************************************************************************
注 :该文章参考了如下内容 :

A)官方文档 :http://www.gnu.org/software/grub

B)grub info 文档

作者 :ailms <ailms{@}qq{dot}com>

版本 :v1

最后修改 :2007/03/09 02:04
**************************************************************************************




目录
1、GRUB 基础

2、命名习惯

3、安装 GRUB

4、GRUB 接口

5、GRUB 常用命令

6、保护 GRUB 设置

7、GRUB 和 stage 文件

8、GRUB 常见错误信息

9、制作 GRUB 引导软盘

10、使用 GRUB 通过网络引导操作系统

11、把配置文件嵌入到 GRUB 中

12、总结

13、个人建议



一、GRUB 基础

1.1 GRUB 简介

“boot loader”是计算机启动后第一个运行的软件。它负责加载一个操作系统的内核,并把控制权交给内核。内核则负责剩下的初始过程。

GRUB 一个很重要的特色就是灵活性;GRUB 可以识别文件系统和二进制格式的内核,所以你可以加载任何操作系统,而不需要记录内核在

磁盘上的物理位置。

1.2 GRUB 的现状

我不打算介绍 GRUB 的发展历史,有兴趣的朋友可以自己到官方站点或者执行 info grub 自行获取信息。我们着眼于 GRUB 当前的现状。

目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2。目前

GRUB Legacy 已经停止开发了,只是出于一个 bug fix 的状态,不再增加新的功能了,所有的开发都转移到 GURB 2 之上了。

1.3 GRUB Legacy 和 GRUB 2

GRUB 2 是源自于一个名为 PUPA 的项目,目的是建立下一代的 boot loader。GRUB 2 几乎是从零开始开始开发的,它和 GRUB Legacy 不

同的地方有很多,例如支持 scripts、国际化语言、动态加载模块、带有 resuce 模式等等,这些都是 GRUB Legacy 所没有的。

下面是 GRUB2 新特性的介绍 :(原文请参http://www.gnu.org/software/grub/grub-2.en.html

a)支持脚本语言,例如条件判断,循环、变量和函数

b)图形接口

c)在运行时动态加载需要的模块,而不是在 biuld 的时候指定加入那些模块(静态)

d)可以移植到不同的架构上

e)国际化语言。包括支持非ASCII的字符集和类似 gettext 的消息分类,字体,图形控制台等等。

f)实际内存管理。使得 GNU GRUB 更加具有可扩展性

g)针对文件系统、文件、设备、驱动、终端、命令、分区表、 os loder 的模块化、层次化、基于对象的框架

h)跨平台的安装,允许从另外一个架构上安装 GRUB

i)支持 rescue 模式,可用于系统无法引导的情况。stage 1.5 被取消了

j)修复 GRUB Legacy 设计上的错误,同时又保持向后的兼容性。

1.4 Multiboot 规范

Multiboot 规范是在 boot loader 和 kernel 之间的一个协议,用于统一各种引导操作系统的方法。Linux 和 BSD 目前并不支持该规范。

1.5 可用资源

GRUB 的 homepage http://www.gnu.org/software/grub/grub-legacy-faq.en.html

info grub

1.6 旧版 GRUB(GRUB Legacy)的功能特色

a)识别多种可执行格式,支持 “a.out” , ELF, symbol tables)

b)支持 non-Multiboot 内核。主要是FreeBSD、NetBSD、OpenBSD、Linux。

c)支持加载多个模块

d)支持配置文件

e)提供菜单接口。菜单项的数量并没有限制,目前版本支持数百个菜单条目

f)有一个灵活的命令行接口。如果没有配置文件存在,GRUB 会自动进入命令模式

g)支持多种文件系统格式。主要有BSD FFS”、“DOS FAT 16 、FAT32”,“Minix fs”、ext2/ext3、ReiserFS 、jfs、xfs、VSTa fs

h)支持自动解压

i)能够访问任何已经安装的设备上的数据

j)Be independent of drive geometry translations (这个不知道怎么翻译好)
   Unlike many other boot loaders, GRUB makes the particular drive
   translation irrelevant. A drive installed and running with one
   translation may be converted to another translation without any
   adverse effects or changes in GRUB's configuration.

k)检测所有已经安装的 RAM

l)支持 LBA 模式。在传统的磁盘调用(称为 CHS 模式),存在一个限制 :就是 BIOS 无法访问在 1024 柱面。之后的内容,所以 BIOS
   
   只能访问最小 508 MB ,最大8GB 的空间。(这也就是 /boot 分区必须在 1024 柱面之前的原因)。GRUB 并不能解决全部问题,因为
     
   并没有统一的解决方法,不过 GRUB 可以检测是否支持 LBA 模式,如果支持则使用 LBA 模式。

m)支持网络引导,可以使用 TFTP 协议通过网络加载内核
        
n)支持远程终端,目前只支持串口



二、命名习惯

首先 GRUB 要求设备名被括在一个 ( ) 中。fd表示软盘,hd 表示硬盘(不区分 IDE 还是 SCSI)。其次设备是从 0 开始编号,分区也是如此,

分区和设备之间用一个 ‘,’ 分开。下面给出几个例子 :

(fd0) :表示整个软盘

(hd0,1) :表示 BIOS 中的第一个硬盘的第2个分区

(hd0,0)/boot/vmlinuz :表示 BIOS 中的第一个硬盘的第一个分区下的 boot/ 目录下的vmlinuz 文件。

如果没有指定某个分区,则表示使用整个设备,否则只使用指定的分区。


三、安装 GRUB

3.1 下载 tarball

有两种方法,一种是 rpm ;一种是 tarball 。rpm 没有什么好说的,只是 rpm –Uvh 就可以了。不过一般不会启用网络引导功能,

所以我们决定采用 tarball 的方式安装。 首先到下面的地址下载 tarball ftp://alpha.gnu.org/gnu/grub

上面有 GRUB Legacy 和 GRUB 2 ,就选择目前 RHEL AS4 用的 0.95 版本做实验。

不过在安装之前先要用 rpm –q grub 检查一下 grub 是否安装了。如果是的话,用 rpm –e grub 删除,即使你在安装时指定不安装

boot loader ,安装程序还是会安装 grub rpm 包的。

3.2 安装需求

INSTALL 文件中给出了 build 所需要的软件包条件 :

        GCC :当前版本的 GCC 应该也可以用,不过还是建议用 2.95 或者以上版本的 GCC

        GNU Make :生成 Makefiles 所用

        GNU binutils 2.9.1.0.23 或者个更高版本

        如果你想自己开发 GRUB ,还需要 Texinfo 4.0 或者更高 ,同时还有GNU Autoconf 2.5x ,GNU Automake 1.7 或者更高颁布。

3.3 参数介绍

下面我们介绍几个 configure 过程中可能用到的选项,要完整的选项列表,可以参看 INSTALL 文件和 netboot/README.netboot 文件.

a)--enable-preset-menu=FILE :默认情况下 grub.conf 和 stage2 文件是分离的,使用该选项,可以直接把配置文件嵌入到 stage2 中,
        
           这样启动时可以立即获得配置文件。对于一些嵌入式的系统来说比较有用,又或者在前面提到的没有显示器/键盘的主机有用,因为在切
           
           换显示输出到你的笔记本之前,你是看不到启动的画面的,所以执行切换显示操作也是在看不到输出的情况下进行的(切换显示之后就不会了)。
           
           通过这个选项你可以在 <FILE> 中指定启动时立即把显示输出切换到你的笔记本上了。

b)--enable-diskless :如果使用了该选项,你会得到额外的两个文件,nbgrub 和 pxegrub。接下来你需要指定网卡的驱动程序,

   netboot/ 目录下有较常见的几种 ,可以看到几种网卡可以合用一个驱动。常见的有 :



Intel Etherexpress Pro/100
--enable-eepro100

Novell NE2100 and NE1500
--enable-ne2100
        
Realtek 8139
SMC 1211
D-Link DFE530TX+ and DFE538TX
--enable-rtl8139


3Com90x
--enable-3c90x
复制代码




如果你不想那么麻烦,则按照下面的过程进行 :



./configure
make
make install
复制代码




安装结束。默认命令会放在 /usr/local/bin 和 /usrlocal/sbin 下。Stage 文件则放在 /usr/local/share/grub/i386-pc/ 目录下。

3.4 安装之后的操作

a)把 /usr/local/share/grub/i386-pc/ 目录下的所有文件统统拷贝到 /boot/grub/ 目录下。

b)接下来是创建 grub.conf ,并在 /boot/grub/ 目录下建立一个 menu.lst ,指向 grub.conf。

c)注意,这个 symbol link 在 Redhat 9 是必需的,否则启动时会直接进入命令模式,即使已经存在 grub.conf ;但在 RHEL AS4 下却不是。

d)确认 /usr/local/sbin 和 /usr/local/bin 在 PATH 变量的值中。

e)执行 grub-install /dev/hda1 把 stage1 写入到 /boot 分区的引导扇区。

   也可以执行 grub 进入 grub shell ,然后通过 root 和 setup 命令来安装 stage1 。

f)重启机器,安装过程到此结束。

[ 本帖最后由 ailms 于 2007-3-10 11:02 编辑 ]

四、GRUB 接口

GRUB 除了菜单模式,还提供了一个命令模式和 grub shell 。当系统启动并显示菜单时,按 c 键就可以进入命令模式。提示符是 grub> 。

如果你已经成功引导操作系统并登录,可以在 shell 提示符下执行 grub ,这会启动一个 grub shell。提示符也是 grub> 。

GRUB 能够象 bash 一样使用上下键来访问 command history ,ctrl-u、ctrl-k、ctrl-l 等快捷键也可以使用。想要编辑菜单,可以按下 e 键;

想要新增一空白行,可以按下 o 键(当前行之后)或者 O 键(当前行之前)。想要删除当前行,按下 d 键;ESC 键放弃当次修改并返回上级菜单。

有些命令只能在命令模式下,有些命令只能用于配置文件(菜单模式),有些命令在两个模式下都可以使用。下面我们就介绍 GRUB 常用的命令。

五、GRUB 常用命令

5.1 只能用于配置文件的命令

下面这5个命令只能出现于配置文件中,分别是 :

a)default :定义默认引导的操作系统。0 表示第一个操作系统,1表示第2个,依此类推

b)fallback :如果 default 所指定的操作系统引导失败,则默认引导由 fallback 指定的操作系统

c) hiddenmenu :用于启动时隐藏菜单,除非在 timeout 之前按下 ESC 才能看到菜单。

d)timeout :定义多少秒内如果用户没有按下键盘上的某个按键,就自动引导 default 所指定的操作系统。

e)title :定义引导项目的名称。

f)password :用于定义进入 GRUB 命令模式的密码。你还可以为每个操作系统都定义一个密码,方法是把 password 命令放在 title行之后。

    而且每个操作系统的引导密码可以不同,也可以和进入命令模式的那个密码不同,最大程度的保证 GRUB 的安全。

5.2 只能用于命令模式或者 grub shell 的命令

a)device :用于定义 BIOS 中的磁盘设备和操作系统的磁盘设备之间的映射关系。

    例如 device (hd0)/dev/hdb 把 BIOS 中的第一个硬盘相当于 Linux 的 /dev/hdb

b)serial :用于初始化一个串口设备。

    例如 :serial –-unit=0 –-speed=9600 表示初始化 COM1(--unit=0),速率为 9600 Baud

    不过 grub shell 下执行该命令会显示 “无法识别的命令”

c)terminal :用于切换显示输出。有两这个值可选 :console 和 serial 。当你把笔记本接到一个没有显示器/键盘的主机上时,执行

    terminal serial 就可以在你的笔记本上操作这台主机的 GRUB 了。执行 terminal console 把显示输出还原到该主机。

    不过 grub shell 下执行该命令会显示“无法识别的命令”

d)splashimage :用于定义启动时的背景图片。例如 splashimage /grub/splash.xpm.gz

    经过测试,发现用 tarball 安装的不支持该命令,这似乎是 redhat grub rpm 专有的。

e)blocklist :用于显示某个文件在文件系统中的位置,以 block list 的形式显示。例如  blocklist /vmlinuz

f)ca :用于显示文件内容。由于 GRUB 可以直接访问多种文件系统,所以可以用 cat (hd0,1)/etc/passwd 来在 GRUB 命令模式下查看 /etc/passwd 文件

g)root :用于指定含有 stage 文件的分区。如果有 /boot 分区,则 root device 就是 /boot 分区,否则  

   就是 / 分区。

h)rootnoverify :和 root 类似,但不会尝试挂载该分区。例如用于指定 windows 操作系统所在的分区。

i)chainloader :用于加载另外一个 boot loader ,通常是用于加载 windows 的 boot loader 。它的参数是一个 block list ,
  
    例如 chainloader (hd0,0)0+1 表示加载第一个磁盘的第一个分区的第1块,0 是开始位置(block 从0开始编号),+1 表示总共读取多少个 block。
   
    所以 chainloader 2+0 表示读取第3个block (编号为2)

j)find :可以用于在所有分区上搜索文件。注意,是所有分区,而不是某个分区。例如 find /vmlinuz 将会在所有分区上查找位于该分区的顶级目录下的

    vmlinuz文件,如果找到就打印该分区名,例如 (hd0,1)。

k)geometry :用于显示或者设置某个硬盘的 CHS 参数,同时还显示分区信息。例如 geometry (hd0)

l)halt :关机

m)reboot :重启机器

n)kernel :指定操作系统内核文件,还可以在内核文件名后加上参数。例如

    kernel /vmlinuz ro root=LABEL=/

   表示以只读的方式挂载 / 分区,且根分区设备是 label 为 / 的那个设备;也可以直接给出设备名。

o)initrd :用于指定 RAM Disk 文件,例如 initrd /initrd-2.xx.img 。

p)boot :引导 kernel 所指定的内核,对于 linux 来说,必须先加载了 kernel 和 initrd 才能执行 boot 。

q)setup :用于安装 stage1 到磁盘的 MBR 或者某个分区的引导扇区。

六、保护 GRUB 设置

下面是一个例子

password –-md5 <密码1>
timeout=30
default=0
title “redhat AS 4”
        password –-md5 <密码2>
        root (hd0,1)
        kernel /vmlinuz ro root=LABEL=/
        initrd /initrd-xxx.img
title “windows”
                password –-md5 <密码3>
                rootnoverify (hd0,0)
                chainloader +1
复制代码
        

当出现 GRUB 菜单时,必须按下 p 并输入 <密码1> 才能进入命令模式,如果选择 “redhat AS 4”并按下回车,会出现提示信息,要求输入密码,

这时应该输入 <密码2>。同样只有输入 <密码3> 才能进入 windows 系统。--md5 告诉 GRUB 后面的内容是已经用 md5 算法加密过的了。所以 GRUB

会将你输入的口令用 MD5 加密后再与之比较。你可以命令模式下用md5crypt 命令或者在 shell 下执行 grub-md5-cypt 来得出一个字符串用 MD5 加密

后的结果,再插入到配置文件中。为每个引导项目设置 GRUB 密码有好处也有坏处 :

a)好处是 :你可以禁止用户随便引导某个操作系统,即使普通用户可以接触GRUB 菜单,没有密码也没有用;

b)坏处是 :如果你一旦重启机器,就必须手工输入口令,否则会一直停在那里。如果你是在半夜远程重启某个主机的话…. Hoho

c)建议 :只设置 GRUB 密码,也就是限制用户进入命令模式,具体菜单项不设置密码。

[ 本帖最后由 ailms 于 2007-3-10 02:09 编辑 ]

七、GRUB 和 stage 文件

GRUB 含有几个 images 文件,两个基础(必需的)stages 文件(stage1和 stage2),可选的 stage(也称为 stage1.5),和两个网络引导的images 文件

nxgrub 和 pxegrub)。stage1 是用于引导 GURB 的一个必须的映象文件。通常它是被嵌入到 MBR。或者一个分区的引导扇区之中。因为 PC 的引导扇区是

512 字节,所以 stage1 也是 512 字节。stage1 的作用就是从一个本地磁盘加载 stage 2 或者 stage 1.5 。因为大小的限制,stage1 对 stage2 或者

stage 1.5 的位置进行编码,也就是说,stage1 是无法识别文件系统格式的。stage2 是 GRUB 的核心映象。它几乎处理所有的事情(除了加载它自己),

通常可以把他放在文件系统上,但不是必须的。

一旦你执行了 grub-install 安装了 boot loader ,stage1 文件就不是必须的,可以把它移动到任意位置,因为它已经被嵌入到 MBR 或者 PBR 了。

stage1和stage2 文件一般位于 /boot/grub/ 目录下,在这个目录下还有很多 stage 1.5 的文件,而且都是以文件系统格式命名的。它们的目的是在 stage1

和 stage2之间搭建一个桥梁,也就是 stage 1 加载 stage 1.5, stage 1.5 加载 stage2。stage1 和 stage 1.5 的不同之处是 stage1 无法识别文件系统,

stage 1.5 可以。因为 Stage2 太大了,无法被嵌入到某个固定的区域,而 Stage1.5可以安装在 MBR 之后的位置。

至于 nxgrub 和 pxegrub 我们在第10节才介绍。

八、GRUB 常见错误信息

我们把出错信息分成3类,stage1 阶段的、stage 1.5 阶段的、stage2 阶段。后两个可以合在一起。

8.1 Stage1 阶段可能出现的错误 :

GRUB 对于该阶段出现的错误一般是打印一个出错信息并挂起机器,除非按CTRL-ALT-DEL 重启。

a) Hard Disk Error :表示无法判读 stage 1.5 文件所在的磁盘的大小和 CHS 参数

b)Floppy Error :表示无法 stage 1.5 文件所在的软盘的大小和 CHS 参数

c)Read Error :表示无法读取 stage 1.5 文件或者 stage2 文件

d)Geom Error :stage2 或者 stage 1.5 位于 BIOS 的 read 调用可以访问的范围之外。

8.2 Stage 1.5/2 阶段可能出现的错误 :

一般会打印一个 “Error <N>“的错误信息,并根据错误的严重程度看是否继续进行。

1 : Filename must be either an absolute filename or blocklist
解释 :1号错误表示文件名格式错误。在 GRUB 中要么是以绝对路径给出文件
例子 :
grub> kernel vmlinuz root=label=/
Error 1: Filename must be either an absolute pathname or blocklist
grub>

2 : Bad file or directory type
解释 :2号错误表示命令期望的是一个普通文件,但相应文件名的对象是一个符号链接、目录、FIFO
例子 :
grub> kernel /testdir root=LABEL=/
Error 2: Bad file or directory type
grub>

3 : Bad or corrupt data while decompressing file

解释 :3号错误表示解压文件时发生错误。可能是因为这个文件被损坏了

4 : Bad or incompatible header in compressed file
解释 :4号错误表示压缩文件的头部格式不被兼容或者错误

5 : Partition table invalid or corrupt
解释 :5 号错误表示分区表无效或者被破坏。这是一个不好的预兆

6 : Mismatched or corrupt version of stage1/stage2
解释 :6号错误表示 install 命令发现 stage1 和 stage2 的颁布号不被兼容

7 : Loading below 1MB is not supported
解释 :This error is returned if the lowest address in a kernel is below
             the 1MB boundary. The Linux zImage format is a special case and
              can be handled since it has a fixed loading address and maximum size

8 : Kernel must be loaded before booting
解释 :8号错误表示执行 boot 命令之前没有先执行 kernel 命令

9 : Unknown boot failure
解释 :9 号错误表示未知的引导错误

10 : Unsupported Multiboot features requested
解释 :10 号错误表示请求 Multiboot header 所要求功能不被 GRUB 所支持。

11 : Unrecognized device string
解释 :11 号错误表示无法识别的设备字符串。
例子 :
grub> root hd0
Error 11: Unrecognized device string
grub>

12 : Invalid device requested
解释 :12 号错误表示请求的设备无效
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub> kernel /grub/grub.conf root=LABEL=/
Error 12: Invalid device requested
grub>

13 : Invalid or unsupported executable format
解释 :13 号错误表示无效或者无法识别的可执行格式
例子 :
grub> kernel /grub/grub.conf root=LABEL=/
Error 13: Invalid or unsupported executable format
grub>

14 : Filesystem compatibility error, cannot read whole file
解释 :14 号错误表示文件系统兼容性错误,无法读取整个文件

15 : File not found
解释 :请求的文件无法找到
例子 :
grub> find /grub-noexist/grub.conf
Error 15: File not found
grub>

16 : Inconsistent filesystem structure
解释 :16 号错误表示不一致的文件系统结构。可能是文件系统结构被破坏了。

17 : Cannot mount selected partition
解释 :17号错误表示无法挂载指定分区。例如 swap 分区
例子 :
grub> root (hd0,2)        这是一个 swap 分区
Filesystem type unknown, partition type 0x82        
grub> kernel /vmlinuz
Error 17: Cannot mount selected partition
grub>

18 : Selected cylinder exceeds maximum supported by BIOS
解释 :18 号错误表示选择的柱面超过了 BIOS 支持的最大能力。这通常发生在不支持 LBA 模式
的硬盘上。

19 : Linux kernel must be loaded before initrd
解释 :19 号错误表示执行 initrd 命令前必须先执行 kernel 命令

20 : Multiboot kernel must be loaded before modules
解释 :20 号错误表示执行 module 或者 moduleunzip 命令前必须先执行 kernel 命令

21 : Selected disk does not exist
解释 :21 号错误表示选择的磁盘不存在
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub>

22 : No such partition
解释 :22 号错误表示分区不存在
例子 :
grub> root (hd0,10)
Error 22: No such partition
grub>

23 : Error while parsing number
解释 :23 号错误表示参数解释错误,希望是一个数值,但参数却是其他类型
例子 :
grub> root (hda,0)
Error 23: Error while parsing number
grub>

24 : Attempt to access block outside partition
解释 :24 号错误表示尝试访问的 block 超出了分区

25 : Disk read error
解释 :25 号错误表示磁盘读错误

26 : Too many symbolic links
解释 :26 号错误表示太多的符号连接(默认最多允许5个)

27 : Unrecognized command
解释 :无法识别的命令

28 : Selected item cannot fit into memory
解释 :选择的对象无法被加载到内存中。
例子 :
[root@monitor boot]# dd if=/dev/zero of=vmlinuz-2.4.20-31.9 bs=1024 count=1 seek=1
读入了 1+0 个块
输出了 1+0 个块

[root@monitor boot]#grub
grub> kernel /vmlinuz-2.4.20-31.9 root=label=/
[Linux-bzImage, setup=0x1400, size=0xfffff200]

Error 28: Selected item cannot fit into memory

grub>

29 : Disk write error
解释 :磁盘写错误

30 : Invalid argument
解释 :无效参数
例子 :
grub> serial --noarg=0
Error 30: Invalid argument
grub>

31 : File is not sector aligned
解释 :This error may occur only when you access a ReiserFS partition by
     block-lists (e.g. the command `install'). In this case, you should
     mount the partition with the `-o notail' option.

32 : Must be authenticated
解释 :要求输入口令才能继续进行下面的操作。例如配置文件中有 password 或者 lock 命令
例子 :
password root1234
title DOS
                lock
        rootnoverify (hd0,0)
        chainloader +1

33 : Serial device not configured
解释 :33 号错误表示串口还没有配置。这一般发生在你执行 terminal serial 的时候

34 : No spare sectors on the disk
解释 :磁盘自由空间不足。可能发生在把 stage 1.5 嵌入到 MBR 之后的空间的时候。但这部分空间可能已经被分区表使用了

九、制作 GRUB 引导软盘

GRUB 不仅可以安装在硬盘上,也可以安装在软盘。有两种方式可用于创建 GRUB 引导软盘,区别在于后者带有文件系统,而前者只有

boot loader 本身。如果你误删除那些 stage 文件,后一种方式就大大有用了。

第一种 :用 dd 命令创建 GRUB 软盘

a)按照 ./configure , make ,make install 的步骤安装 GRUB

b)dd if=/usr/local/share/grub/i386-pc/stage1 of=/dev/fd0

c)dd if=/usr/local/share/grub/i386-pc/stage2 of=/dev/fd0 seek=1

d)这样就创建好一张 GRUB 引导软盘了。
复制代码


第二种 :用 grub-install 创建带文件系统的 GRUB 引导软盘           

a)同样是先安装 GRUB

b)mke2fs /dev/fd0

c)mount /dev/fd0 /mnt/floppy

d)grub-install –-root-directory=/mnt/floppy ‘(fd0)’

e)这样软盘上就会有一个 /boot/grub/ 目录,下面就是那些 stage 文件了。

f)上面的两种方法做出来的软盘都只能进入 GRUB 命令模式,你可能会觉得不爽,是否可以直接进入菜单呢?答案是可以的,只需要多一个步骤 :

g)把 /boot/grub/ 目录下的 device.map ,grub.conf ,menu.lst 统统拷贝到 /mnt/floppy/boot/grub 目录下,这样就可以了。因为之前 GRUB

    在软盘上找不到配置文件,所以自动进入命令模式,现在用它启动机器就可以直接进入菜单模式了。
复制代码


十、使用 GRUB 通过网络引导操作系统

GRUB 不仅可以从本地硬盘引导操作系统,还可以通过网络引导操作系统内核。

假使你由于某种原因,无法启动操作系统。这时你需要在别的空闲的机器上先 build 一份GRUB ,并安装到一张软盘上。

不过由于要支持网络功能,所以 ./configure 时有所不同了 :你必须指定启用网络功能,和网卡芯片的型号 :(具体参考 netboot/README.netboot 文件)。

由于测试机器的网卡芯片是 RTL-8139 ,所以加上 –-enable-rtl8139 ,整个过程就是(在别的空闲的机器上进行的) :

# rpm –e grub (删除原来的 GRUB rpm,如果没有装就不用了)
# ./configure –-enable-diskless –-enable-rtl8139 (这是故障主机的网卡型号)
# make
# make install
# cp –fa /usr/local/share/grub/i386-pc/* /boot/grub/
# grub-install /dev/hda
# mke2fs /dev/fd0        (格式化软盘,建立 ext2 文件系统)
# mount /dev/fd0 /mnt/floppy
# grub-install –-root-directory=/mnt/floppy ‘(fd0)’      
复制代码


检查 /mnt/floppy 下是否有 nbgrub 和 pxegrub 两个文件,这两个文件就是用于网路启动的。如果

没有,就从 /boot/grub/ 目录拷贝到 /mnt/floppy/boot/grub/ 目录下。切记切记!!

这样你就制作好了一张带有 stage 文件,支持网络引导,且带有网卡驱动的 GRUB 引导盘了。

接下来就是 TFTP 服务器方面的工作了 :


-)1、启动 TFTP 服务器(编辑 /etc/xinetd.d/tftp 文件,把 disalbe改为 no)。

-)2、检查防火墙配置,确保故障主机可以顺利访问该 TFTP 服务器

-)3、找出一台和故障机器具有相同内核的主机,把 /boot/vmlinuz-2.xx 和 /boot/initrd-2.xx.img 拷贝到 TFTP 服务器的 /tftpboot/boot 目录下

-)4、把这张软盘插入故障机器的软驱并用它启动机器,就会自动进入 GRUB 命令模式。

-)5、执行 ifconfig 命令将会显示下面的画面

  
         
-)6、下面开始设置 ip 信息了 :(ifconfig 命令可以分成多次执行)
         
-)7、现在网卡 ip 和 TFTP 服务器的地址都已经设置了。

  

-)8、下面设置 root device、kernel、initrd 。注意 root 括号中是 nd ,切记切记!!!

  

   当你执行 boot 时,内核将被解压并执行,一切就和往常一样。
         


补充 :如果你的网络有 dhcp 服务器,则可以直接执行 dhcp 命令来代替 ifconfig 命令获取 ip 信息

十一、把配置文件嵌入到 GRUB 中

这里介绍一种比较少见的情况。有时我们会遇到主机不带显示器/键盘,但由于某些原因需要重启主机并访问 GRUB,

这时怎么办?你可能会说用串口连接。不错,通过串口的确可以控制 GRUB ,但有一个问题,即使你把笔记本连接到该主机上,

但启动时 GRUB 并不会自动使用笔记本的键盘,又如何通过笔记本控制GRUB 呢?

GRUB 支持一个功能叫做 preset menu(预设菜单),工作原理 :

a)GRUB 检查是否启用了 preset menu 功能,如果是的话,加载 preset menu 文件(不是 grub.conf)

b)GRUB 加载 grub.conf ,这个过程是一定会执行的,不管有没有 preset menu 存在。

c)在 grub.conf 被加载后,不管 grub.conf 有没有引导项目,只要 preset menu 含有任何引导条目,都会被清掉。只有 grub.conf

    文件不可用时,preset menu 的内容才会被保留。

看到这里,我想你应该明白 preset menu 怎么用了。我们可以定义一个文件 pre-menu.conf ,内容是把显示切换到 COM1 上 ,grub.conf 则是正常的内容。

然后把笔记本接到故障主机的 COM1,启动超级终端。再启动故障主机,GRUB 会先把显示切换到 COM1 ,然后加载 grub.conf ,后面的过程就和普通情况没

有什么不同。

要使用 preset-menu ,你必须在执行 configure 脚本时指定 –-preset-menu ,例如
#./configure –-preset-menu=pre-menu.conf
# make
# make install
pre-menu.conf 文件的内容就是下面两句 :
serial –-unit=0 –-speed=9600
terminal –-timeout=0 serial
复制代码


注意,当内核开始执行时,显示也就交回给原来的主机,而不再是你的笔记本了。要解决该问题,

可以在显示菜单是进入命令模式,在 kernel 行后面加上 console=ttyS0,这样 boot 时就可以在超级终端上看到启动的信息了。

不过在 login 提示符出现时,显示输出又会回到原来的故障主机上了。这时你可以用 secureCRT 来登录了,不需要再用到超级终端了。

整体效果如下图 :(通过串口看的)



选择引导 Red Hat 9 项目 :



一旦你不想使用preset-menu了,是否直接删除 pre-menu.conf 就可以呢?

不可以。因为 pre-menu.conf 已经被嵌入到 grub 中了,这时留在硬盘上的 pre-menu.conf 文件其实已经没有用了。要象取消 preset-menu 功能,

必须重新 congfiure ,并去掉 –-enable-preset-menu 选项,再重新安装 GRUB 。

十二、总结

写了这么多,现在总结一下大概的内容

a)GRUB 是一种 boot loader ,它分成两个阶段 :stage1 和 stage2(中间可能有 stage 1.5)

b)stage1 嵌入到 MBR 或者 PBR 中,stage2 留在文件系统中。

c)build GRUB三部曲 :configure 、make、make install、

d)grub-install 和 grub shell 都可以用于安装 stage1 ,但 grub-install 功能更加强大

e)GRUB 支持菜单模式、命令模式。命令模式下的快捷键 :c、o、O、e、d、ESC

f)使用 GRUB 口令保护 GRUB 设置

g)GRUB 支持从网络引导操作系统,不过在编译时事先指定 –-enable-diskless 和网卡驱动。可惜的是,GRUB 支持的网卡驱动不多。

h)GRUB 支持通过串口来访问 GRUB 的命令和菜单模式

i)GRUB 可以把配置文件事先嵌入到 GRUB ,但删除时也需要重装 GRUB 。

十三、个人建议

当安装好操作系统后,应该做好下面几项工作

a)安装光盘(建议刻成 ISO 文件便于保存)

b)制作一张 bootdisk 用于引导操作系统

c)制作一张带文件系统的 GRUB 引导盘用于引导 GRUB,也可以自带配置文件。

d)将 MBR 或者 PBR 备份成文件

[ 本帖最后由 ailms 于 2007-3-11 20:22 编辑 ]

[ Last edited by zzz19760225 on 2016-6-18 at 05:48 ]
作者: zzz19760225     时间: 2016-5-19 19:53    标题: BIOS

每个主板都不一样 我只能告诉你大概的
Time/System Time 时间/系统时间
Date/System Date 日期/系统日期
Level 2 Cache 二级缓存
System Memory 系统内存
Video Controller 视频控制器
Panel Type 液晶屏型号
Audio Controller 音频控制器
Modem Controller 调制解调器(Modem)
Primary Hard Drive 主硬盘
Modular Bay 模块托架
Service Tag 服务标签
Asset Tag 资产标签
BIOS Version BIOS版本
Boot Order/Boot Sequence 启动顺序(系统搜索操作系统文件的顺序)
Diskette Drive 软盘驱动器
Internal HDD 内置硬盘驱动器
Floppy device 软驱设备
Hard-Disk Drive 硬盘驱动器
USB Storage Device USB存储设备
CD/DVD/CD-RW Drive 光驱
CD-ROM device 光驱
Modular Bay HDD 模块化硬盘驱动器
Cardbus NIC Cardbus总线网卡
Onboard NIC 板载网卡
Boot POST 进行开机自检时(POST)硬件检查的水平:设置为"MINIMAL"(默认设置)则开机自检仅在BIOS升级,内存模块更改或前一次开机自检未完成的情况下才进行检查。设置为"THOROUGH"则开机自检时执行全套硬件检查。
Config Warnings 警告设置:该选项用来设置在系统使用较低电压的电源适配器或其他不支持的配置时是否报警,设置为"DISABLED"禁用报警,设置为"ENABLED"启用报警
Internal Modem 内置调制解调器:使用该选项可启用或禁用内置Modem。禁用(disabled)后Modem在操作系统中不可见。
LAN Controller 网络控制器:使用该选项可启用或禁用PCI以太网控制器。禁用后该设备在操作系统中不可见。
PXE BIS Policy/PXE BIS Default Policy
PXE BIS策略:该选项控制系统在没有认证时如何处理(启动整体服务Boot Integrity Services(BIS))授权请求。系统可以接受或拒绝BIS请求。设置为"Reset"时,在下次启动计算机时BIS将重新初始化并设置为"Deny"。
Onboard Bluetooth
板载蓝牙设备
MiniPCI Device
Mini PCI设备
MiniPCI Status
Mini PCI设备状态:在安装Mini PCI设备时可以使用该选项启用或禁用板载PCI设备
Wireless Control
无线控制:使用该选项可以设置MiniPCI和蓝牙无线设备的控制方式。设置为"Application"时无线设备可以通过"Quickset"等应用程序启用或禁用,热键不可用。设置为"/Application"时无线设备可以通过"Quickset"等应用程序或热键启用或禁用。设置为"Always Off"时无线设备被禁用,并且不能在操作系统中启用。
Wireless
无线设备:使用该选项启用或禁用无线设备。该设置可以在操作系统中通过"Quickset"或""热键更改。该设置是否可用取决于"Wireless Control"的设置。
Serial Port
串口:该选项可以通过重新分配端口地址或禁用端口来避免设备资源冲突。
Infrared Data Port
红外数据端口。使用该设置可以通过重新分配端口地址或禁用端口来避免设备资源冲突。
Parallel Mode
并口模式。控制计算机并口工作方式为"NORMAL"(AT兼容)(普通标准并行口)、"BI-DIRECTIONAL"(PS/2兼容)(双向模式,允许主机和外设双向通讯)还是"ECP"(Extended Capabilities Ports,扩展功能端口)(默认)。
Num Lock
数码锁定。设置在系统启动时数码灯(NumLock LED)是否点亮。设为"DISABLE"则数码灯保持灭,设为"ENABLE"则在系统启动时点亮数码灯。
Keyboard NumLock
键盘数码锁:该选项用来设置在系统启动时是否提示键盘相关的错误信息。
Enable Keypad
启用小键盘:设置为"BY NUMLOCK"在NumLock灯亮并且没有接外接键盘时启用数字小键盘。设置为"Only By Key"在NumLock灯亮时保持embedded键区为禁用状态。
External Hot Key
外部热键:该设置可以在外接PS/2键盘上按照与使用笔记本电脑上的键的相同的方式使用键。如果您使用ACPI操作系统?鏦in2000或WinXP,则USB键盘不能使用键。仅在纯DOS模式下USB键盘才可以使用键。设置为"SCROLL LOCK"(默认选项)启用该功能,设置为"NOT INSTALLED"禁用该功能。
USB Emulation
USB仿真:使用该选项可以在不直接支持USB的操作系统中使用USB键盘、USB鼠标及USB软驱。该设置在BIOS启动过程中自动启用。启用该功能后,控制转移到操作系统时仿真继续有效。禁用该功能后在控制转移到操作系统时仿真关闭。
Pointing Device
指针设备:设置为"SERIAL MOUSE"时外接串口鼠标启用并集成触摸板被禁用。设置为"PS/2 MOUSE"时,若外接PS/2鼠标,则禁用集成触摸板。设置为"TOUCH PAD-PS/2 MOUSE"(默认设置)时,若外接PS/2鼠标,可以在鼠标与触摸板间切换。更改在计算机重新启动后生效。
Video Expansion
视频扩展:使用该选项可以启用或禁用视频扩展,将较低的分辨率调整为较高的、正常的LCD分辨率。
Battery
电池
Battery Status
电池状态
Power Management
电源管理
Suspend Mode
挂起模式
AC Power Recovery
交流电源恢复:该选项可以在交流电源适配器重新插回系统时电脑的相应反映。
Low Power Mode
低电量模式:该选项用来设置系统休眠或关闭时所用电量。
Brightness
亮度:该选项可以设置计算机启动时显示器的亮度。计算机工作在电源供电状态下时默认设置为一半。计算机工作在交流电源适配器供电状态下时默认设置为最大。
Wakeup On LAN
网络唤醒:该选项设置允许在网络信号接入时将电脑从休眠状态唤醒。该设置对待机状态(Standby state)无效。只能在操作系统中唤醒待机状态。该设置仅在接有交流电源适配器时有效。
Auto On Mod 自动开机模式:注意若交流电源适配器没有接好,该设置将无法生效。该选项可设置计算机自动开机时间,可以设置将计算机每天自动开机或仅在工作日自动开机。设置在计算机重新启动后生效。
Auto On Time 自动开机时间:该选项可设置系统自动开机的时间,时间格式为24小时制。键入数值或使用左、右箭头键设定数值。设置在计算机重新启动后生效。
Dock Configuration 坞站配置
Docking Status 坞站状态
Universal Connect 通用接口:若所用操作系统为WinNT4.0或更早版本,该设置无效。如果经常使用不止一个戴尔坞站设备,并且希望最小化接入坞站时的初始时间,设置为"ENABLED"(默认设置)。如果希望操作系统对计算机连接的每个新的坞站设备都生成新的系统设置文件,设置为"DISABLED"。
System Security 系统安全
Primary Password 主密码
Admin Password
管理密码
Hard-disk drive password(s) 硬盘驱动器密码
Password Status 密码状态:该选项用来在Setup密码启用时锁定系统密码。将该选项设置为"Locked"并启用Setup密码以放置系统密码被更改。该选项还可以用来放置在系统启动时密码被用户禁用。
System Password 系统密码
Setup Password Setup密码
Post Hotkeys 自检热键:该选项用来指定在开机自检(POST)时屏幕上显示的热键(F2或F12)。
Chassis Intrusion
机箱防盗:该选项用来启用或禁用机箱防盗检测特征。设置为"Enable-Silent"时,启动时若检测到底盘入侵,不发送警告信息。该选项启用并且机箱盖板打开时,该域将显示"DETECTED"。
Drive Configuration
驱动器设置
Diskette Drive A: 磁盘驱动器A:如果系统中装有软驱,使用该选项可启用或禁用软盘驱动器
Primary Master Drive 第一主驱动器
Primary Slave Drive 第一从驱动器
Secondary Master Drive 第二主驱动器
Secondary Slave Drive 第二从驱动器
IDE Drive UDMA 支持UDMA的IDE驱动器:使用该选项可以启用或禁用通过内部IDE硬盘接口的DMA传输。
Hard-Disk drive Sequence 硬盘驱动器顺序
System BIOS boot devices 系统BIOS启动顺序
USB device USB设备
Memory Information 内存信息
Installed System Memory 系统内存:该选项显示系统中所装内存的大小及型号
System Memory Speed
内存速率:该选项显示所装内存的速率
System Memory Channel Mode 内存信道模式:该选项显示内存槽设置。
AGP Aperture AGP区域内存容量:该选项指定了分配给视频适配器的内存值。某些视频适配器可能要求多于默认值的内存量。
CPU information CPU信息
CPU Speed CPU速率:该选项显示启动后中央处理器的运行速率
Bus Speed 总线速率:显示处理器总线速率
Processor 0 ID 处理器ID:显示处理器所属种类及模型号
Clock Speed 时钟频率
Cache Size 缓存值:显示处理器的二级缓存值
Integrated Devices(LegacySelect Options) 集成设备
Sound 声音设置:使用该选项可启用或禁用音频控制器
Network Interface Controller
网络接口控制器:启用或禁用集成网卡
Mouse Port 鼠标端口:使用该选项可启用或禁用内置PS/2兼容鼠标控制器
USB Controller USB控制器:使用该选项可启用或禁用板载USB控制器。
PCI Slots PCI槽:使用该选项可启用或禁用板载PCI卡槽。禁用时所有PCI插卡都不可用,并且不能被操作系统检测到。
Serial Port 1 串口1:使用该选项可控制内置串口的操作。设置为"AUTO"时,如果通过串口扩展卡在同一个端口地址上使用了两个设备,内置串口自动重新分配可用端口地址。串口先使用COM1,再使用COM2,如果两个地址都已经分配给某个端口,该端口将被禁用。
Parallel Port 并口:该域中可配置内置并口
Mode 模式:设置为"AT"时内置并口仅能输出数据到相连设备。设置为PS/2、EPP或ECP模式时并口可以输入、输出数据。这三种模式所用协议和最大数据传输率不同。最大传输速率PS/2 I/O Address 输入/输出地址
DMA Channel DMA通道:使用该选项可以设置并口所用的DMA通道。该选项仅在并口设置为"ECP"时可用。

Diskette Interface 磁盘接口:使用该选项可以设置内置软盘驱动器的操作。设置为AUTO时,若装有软驱,则内置磁盘控制器被禁用。若没有检测到磁盘控制器,则启用内置控制器。
PC Speaker 系统喇叭:使用该选项可启用或禁用系统喇叭
Primary Video Controller 主视频控制器:使用该选项可以在启动过程中指定视频控制器。设置为"AUTO"时若装有内置显卡,系统可以使用。否则系统将使用板载视频控制器。设置为"Onboard"时系统总是使用板载控制器
Onboard Video Buffer 板载显卡缓存
Report Keyboard Errors
键盘报错
Auto Power On 自动开机
Auto Power On Mode 自动开机模式
Auto Power On Time 自动开机时间
Remote Wake Up 远程唤醒:该选项设置为"ON"时,若网卡或有远程唤醒功能的调制解调器收到唤醒信号时,系统将被唤醒。该选项设置为"On w/Boot to NIC 时",系统启动时首先尝试网络启动。
Fast Boot 快速启动:该选项在操作系统请求精简启动时系统启动的速度。
IDE Hard Drive Acoustics Mode IDE硬盘声音模式
System Event Log 系统事件日志



-------------------------------------------------------------------
bios
    编辑

BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
当今,此系统已成为一些病毒木马的目标。一旦此系统被破坏,其后果不堪设想。

软件名称
    Basic Input Output System
开发商
    AMI、AWARD、insyde、PHOENIX、百敖(BYOSOFT)

软件语言
    中文或英文
软件大小
    1-2M

目录

    1 释义
    2 芯片简介
    ▪ ROM
    ▪ EPROM
    ▪ EEPROM
    ▪ NORFlash
    3 进入方式
    ▪ PC机进入方式
    ▪ 其它进入
    ▪ 东芝进入方式
    ▪ 联想进入方式
    ▪ 康柏进入方式
    4 主要程序
    ▪ 中断例程

    ▪ 系统设置程序
    ▪ POST上电自检
    ▪ 自检程序
    ▪ 与CMOS区别
    5 BIOS功能
    ▪ 自检及初始化
    ▪ 程序服务处理
    ▪ 硬件中断处理
    ▪ 小功能
    6 历史
    7 BIOS类别
    ▪ Award
    ▪ AMI
    ▪ Phoenix
    ▪ Insyde

    8 BIOS设置
    ▪ 标准CMOS
    ▪ 高级设定
    ▪ 属性设置
    ▪ 芯片组功能
    ▪ 电源管理
    ▪ 即插即用PCI
    ▪ 加载预设值
    ▪ 端口综合
    ▪ 激活过程
    ▪ 声音提示
    9 BIOS升级
    ▪ 目的
    ▪ 版本确定
    ▪ 方法

    ▪ 步骤
    ▪ 注意事项
    ▪ 误区
    10 系统进入故障
    ▪ win7系统无法进入bios界面
    ▪ 开机启动立马进入bios
    11 BIOS恢复出厂设置的方法
    12 BIOS的寿命
    13 新一代

释义
编辑
bios bios
BIOS这个词具有双层含义:
一、英语单词Biography的复数形式的缩写(Biography-Biographies-Bios),一般读作/'baious/。
二、在计算机领域,BIOS是 "Basic Input Output System"的缩略语,译为"基本输入输出系统",与前者读法相同。计算机在运行时,首先会进入BIOS,它在计算机系统中起着非常重要的作用。一块主板性能优越与否,很大程度上取决于主板上的BIOS管理功能是否先进。
BIOS就是计算机领域的一个重要参数(术语)。
cmos cmos
芯片简介
编辑
抠出纽扣电池可使BIOS恢复到出厂默认值 抠出纽扣电池可使BIOS恢复到出厂默认值
BIOS设置程序是储存在BIOS芯片中的,BIOS芯片是主板上一块长方形或正方形芯片,只有在开机时才可以进行设置。(一般在计算机启动时按F2或者Delete进入BIOS进行设置,一些特殊机型按F1、Esc、F12等进行设置)。BIOS设置程序主要对计算机的基本输入输出系统进行管理和设置,使系统运行在最好状态下,使用BIOS设置程序还可以排除系统故障或者诊断系统问题。有人认为既然BIOS是"程序",那它就应该是属于软件,感觉就像自己常用的Word或Excel。但也有很多人不这么认为,因为它与一般的软件还是有一些区别,而且它与硬件的联系也是相当地紧密。形象地说,BIOS应该是连接软件程序与硬件设备的一座"桥梁",负责解决硬件的即时要求。主板上的BIOS芯片或许是主板上唯一贴有标签的芯片,一般它是一块32针的双列直插式的集成电路,上面印有"BIOS"字样。
ROM
在微机(微型计算机Microcomputer System)的发展初期,BIOS都存放在ROM(Read Only Memory,只读存储器)中。ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的资料是否正确,不能再作任何修改。如果发现资料有任何错误,则只有舍弃不用。
EPROM
EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了ROM芯片只能写入一次的弊端。EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12—24V,随不同的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。
EEPROM
由于EPROM操作的不便,586以后的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM)。通过跳线开关和系统配带的驱动程序盘,可以对EEPROM进行重写,方便地实现BIOS升级。
BIOS芯片中主要存放:
●自诊断程序:通过读取CMOSRAM中的内容识别硬件配置,并对其进行自检和初始化;
● CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中;
● 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入DOS系统;
● 主要I/O设备的驱动程序和中断服务:由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强。
NORFlash
从奔腾时代开始,现代的电脑主板都使用NORFlash来作为BIOS的存储芯片。除了容量比EEPROM更大外,主要是NORFlash具有写入功能,运行电脑通过软件的方式进行BIOS的更新,而无需额外的硬件支持(通常EEPROM的擦写需要不同的电压和条件),且写入速度快。
进入方式
编辑
不同的BIOS有不同的进入方法,通常会在开机画面有提示。
PC机进入方式
Award BIOS:按“Del”键
AMI BIOS:按“Del”或“ESC”键
Phoenix BIOS:按“F2”键
acer:按“Del”键
其它进入
ibm(冷开机按f1,部分新型号可以在重新启动时启动按f1)
hp(启动和重新启动时按f2)
sony(启动和重新启动时按f2)
dell(启动和重新启动时按f2)
acer(启动和重新启动时按f2)
toshiba(冷开机时按esc然后按f1)
hp compaq(开机到右上角出现闪动光标时按f10,或者开机时按f10)
fujitsu(启动和重新启动时按f2)
绝大多数国产和台湾品牌(启动和重新启动时按f2)
东芝进入方式
适用机型:东芝笔记本
问题描述:如何进入BIOS设置界面
解决方案:
你能够通过如下2种方式进入BIOS设置界面:
1、从Windows控制面板(Satellite 17xx,30/31,3000系列机器除外)。启动“东芝硬件设置”程序,“东芝硬件设置”程序提供了一个用户友好的图形界面,以修改BIOS设置。请注意如果你更改了某些设置,必须重新启动计算机后方能生效。“东芝硬件设置”程序是预装在东芝笔记本电脑中的。他也可以作为东芝实用程序的一部分得到下载。
2、在系统执行自检过程时按住Esc键(Satellite 17xx,30/31,3000系列机器启动时按住F12键,Satellite5XXX系列无DOS模式下的BIOS设置界面,只能通过第一种方式设置)。要使用该方式,必须先关闭计算机,挂起或休眠状态均无效。首先按开机按钮开机,然后迅速按住Esc键(也可以先按住Esc键然后开机)。当系统自检结束后,将提示用户按F1键进入BIOS界面。此时按F1键即可进入BIOS。
联想进入方式
不同联想机型的笔记本,进入BIOS的热键也不同。下面笔者列出了进入ThinkPad的BIOS设置程序的相关热键:
ThinkPad 315ED
(开机后显示ThinkPad标志时按F2,进入BIOS Utility。)
ThinkPad 365X/XD系列
ThinkPad 380系列
ThinkPad 560系列
ThinkPad 600系列
ThinkPad 755系列
ThinkPad 760系列、 765系列
ThinkPad 770系列
(主机关闭时,按住F1键并打开主机。按住F1键直到出现Easy Setup的画面。)
ThinkPad 240系列
ThinkPad 390系列
ThinkPad 570系列
ThinkPad i 系列 1400
ThinkPad i 系列 1200
ThinkPad A20m,A20p,A21m,A21p,A22m,A22p,
A30,A31
ThinkPad T20,T21,T22,T23,T30
ThinkPad X20,X21,X22,X23,X24,X30,X31
ThinkPad R30,R31,R32
(启动过程中出现ThinkPad标志时,按F1键。)
ThinkPad G40,
ThinkPad R40,R40e
ThinkPad R50,R50p
ThinkPad T40,T40p,T41,T41p
(启动过程中出现“To interrupt normal startup,press the blue Access IBM button”时,按蓝色的Access IBM按钮,进入IBM Predesktop Area,在界面中选择Start setup utility,即可进入BIOS)
ThinkPad 315ED
(开机后,当看到屏幕上出现ThinkPad标志时,快速按下F2键即可进入BIOS。)
ThinkPad 365X/XD系列
ThinkPad 380系列
ThinkPad 560系列
ThinkPad 600系列
ThinkPad 755系列
ThinkPad 760系列、765系列
ThinkPad 770系列
针对上述系列的本本,可以在开机时按住F1键不放,直到屏幕上出现Easy Setup画面为止。
ThinkPad 240系列
ThinkPad 390系列
ThinkPad 570系列
ThinkPad i 系列 1400
ThinkPad i 系列 1200
ThinkPad A 系列
ThinkPad T 系列
ThinkPad X 系列
ThinkPad R 系列
(开机后,当看到屏幕上出现ThinkPad标志时,快速按下F1键即可进入BIOS。)
康柏进入方式
绝大部分康柏机器都是在开机时按F10进入BIOS设置。
适用产品:
Presario 800
Presario 1200
Presario 1400
Presario 1500
Presario 1520AP
Presario 1530SC
Presario 1531AP
Presario 1600
Presario 1700
Presario 1800
Presario 1900
Presario 2100
Presario 2500
Presario 2700
Presario 2800
Presario 2830
Presario 800XL
Presario 900
以下机型比较特殊:
ARMADA 6500
(按Fn+F3)
Deskpro EXm/EVO D300Vm
(按Delete)
bios设置界面进不去的解决方法:
故障现象:
电脑开机后进入BIOS设置程序,除了可以设置“用户口令”、“保存修改退出”和“不保存退出”3项外,其他都不能进入。
解决方法:
通常出现这种情况是因为CMOS被破坏了,执行放电处理试试。如果CMOS放电后故障依然存在,还可以尝试升级BIOS的方法,如果故障还是无法解决,那可能是CMOS存储器有问题,只要更换一下存储器就可以了。[1]
主要程序
编辑
中断例程
BIOS中中断例程即BIOS中断服务程序。它是微机系统软、硬件之间的一个可编程接口,用于程序软件功能与微机硬件实现的衔接。DOS/Windows操作系统对软盘、硬盘、光驱与键盘、显示器等外围设备的管理即建立在系统BIOS的基础上。程序员也可以通过 对INT 5、INT 13等中断的访问直接调用BIOS中断例程。
系统设置程序
微机部件配置情况是放在一块可读写的CMOS RAM芯片中的,它保存着系统CPU、软硬盘驱动器、显示器、键盘等部件的信息。关机后,系统通过一块后备电池向CMOS供电以保持其中的信息。如果CMOS中关于微机的配置信息不正确,会导致系统性能降低、零部件不能识别,并由此引发一系列的软硬件故障。在BIOS ROM芯片中装有一个程序称为“系统设置程序”,就是用来 设置CMOS RAM中的参数的。这个程序一般在开机时按下一个或一组键即可进入,它提供了良好的界面供用户使用。这个设置 CMOS参数的过程,习惯上也称为“BIOS设置”。新购的微机或新增了部件的系统,都需进行BIOS设置。
POST上电自检
微机接通电源后,系统将有一个对内部各个设备进行检查的过程,这是由一个通常称之为POST(Power On Self Test,上电自检)的程序来完成的。这也是BIOS的一个功能。完整的POST自检将包括CPU、640K基本内存、1M以上的扩展内存、ROM、主板、 CMOS存贮器、串并口、显示卡、软硬盘子系统及键盘测试。自检中若发现问题,系统将给出提示信息或鸣笛警告。
自检程序
在完成POST自检后,ROM BIOS将按照系统CMOS设置中的启动顺序搜寻软硬盘驱动器及CDROM、网络服务器等有效的启动驱动器 ,读入操作系统引导记录,然后将系统控制权交给引导记录,由引导记录完成系统的启动。
与CMOS区别
区别
由于CMOS与BIOS都跟电脑系统设置密切相关,所以才有CMOS设置和BIOS设置的说法。也正因此,初学者常将二者混淆。CMOS 是电脑主机板上一块特殊的RAM芯片,是系统参数存放的地方,而BIOS中系统设置程序是完成参数设置的手段。因此,准确的说法应是通过BIOS设置程序对CMOS参数进行设置。而我们平常所说的CMOS设置和BIOS设置是其简化说法,也就在一定程度上造成了两个概念的混淆。事实上,BIOS程序是储存在主板上一块 EEPROM Flash芯片中的,CMOS存储器是用来存储BIOS设定后的要保存数据的,包括一些系统的硬件配置和用户对某些参数的设定,比如传统BIOS的系统密码和设备启动顺序等等。
联系
BIOS是一组设置硬件的电脑程序,保存在主板上的一块EPROM或EEPROM芯片中,里面装有系统的重要信息和设置系统参数的设置程序——BIOS Setup程序。而CMOS即:Complementary Metal Oxide Semiconductor——互补金属氧化物半导体,是主板上的一块可读写的RAM芯片,用来保存当前系统的硬件配置和用户对参数的设定,其内容可通过设置程序进行读写。CMOS芯片由主板上的钮扣电池供电,即使系统断电,参数也不会丢失。CMOS芯片只有保存数据的功能,而对CMOS中各项参数的修改要通过BIOS的设定程序来实现。BIOS与CMOS既相关又不同:BIOS中的系统设置程序是完成CMOS参数设置的手段;CMOS RAM既是BIOS设定系统参数的存放场所,又是 BIOS设定系统参数的结果。因此,完整的说法应该是“通过BIOS设置程序对CMOS参数进行设置”。由于 BIOS和CMOS都跟系统设置密初相关,所以在实际使用过程中造成了BIOS设置和CMOS设置的说法,其实指的都是同一回事,但BIOS与CMOS却是两个完全不同的概念,切勿混淆。
BIOS功能
编辑
从功能上看,BIOS分为三个部分:
自检及初始化
这部分负责启动电脑,具体有三个部分:
bios bios
第一个部分是用于电脑刚接通电源时对硬件部分的检测,也叫做加电自检(Power On Self Test,简称POST),功能是检查电脑是否良好,通常完整的POST自检将包括对CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。
第二个部分是初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当电脑启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。
第三个部分是引导程序,功能是引导DOS或其他操作系统。BIOS先从软盘或硬盘的开始扇区读取引导记录,如果没有找到,则会在显示器上显示没有引导设备,如果找到引导记录会把电脑的控制权转给引导记录,由引导记录把操作系统装入电脑,在电脑启动成功后,BIOS的这部分任务就完成了。
程序服务处理
程序服务处理程序主要是为应用程序和操作系统服务,这些服务主要与输入输出设备有关,例如读磁盘、文件输出到打印机等。为了完成这些操作,BIOS必须直接与计算机的I/O设备打交道,它通过端口发出命令,向各种外部设备传送数据以及从它们那儿接收数据,使程序能够脱离具体的硬件操作。
硬件中断处理
bios
bios (16张)
硬件中断处理则分别处理PC机硬件的需求,BIOS的服务功能是通过调用中断服务程序来实现的,这些服务分为很多组,每组有一个专门的中断。例如视频服务,中断号为10H;屏幕打印,中断号为05H;磁盘及串行口服务,中断14H等。每一组又根据具体功能细分为不同的服务号。应用程序需要使用哪些外设、进行什么操作只需要在程序中用相应的指令说明即可,无需直接控制。
(二)(三)两部分功能虽然是两个独立的内容,但在使用上密切相关。这两部分分别为软件和硬件服务,组合到一起,使计算机系统正常运行。
另外需注意:BIOS设置不当会直接损坏计算机的硬件,甚至烧毁主板,建议不熟悉者慎重修改设置。用户可以通过设置BIOS来改变各种不同的设置,比如onboard显卡的内存大小。用户手上所有的操作系统都是由BIOS转交给引导扇区,再由引导扇区转到各分区激活相应的操作系统。
小功能
开机出现DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER[2]  情况
从硬盘启动的设置方法:[2]
开机时按“Del”键,进入BIOS设置,(/*也可能是按F1、Esc或者是F12,依据电脑品牌的不同来具体操作*/)
用上下光标键移动到第二项
“Advanced BIOS Features ”
按回车,在按上下光标键移动到
"First Boot drivers",
这时候把
按 "Page UP"键和“Page DOWN”
选择属性为
“HDD”或者"DISK HARD"
按F10保存后,重启就可以了。
(由于BIOS不同属性中的硬盘启动也不同。)
历史
编辑
bios bios
BIOS技术源于IBMPC/AT机器的流行以及第一台由康柏公司研制生产的“克隆”PC。在PC
启动的过程中,BIOS担负着初始化硬件,检测硬件功能,以及引导操作系统的责任。在早期,BIOS还提供一套运行时的服务程序给操作系统及应用程序使用。BIOS程序存放于一个断电后内容不会丢失的只读 内存中;系统过电或被重置 (reset) 时,处理器第一条指令的位址会被定位到 BIOS 的内存中,让初始化程序开始执行。英特尔公司从2000年开始,发明了可扩展固件接口(Extensible Firmware Interface),用以规范BIOS的开发。而支持EFI规范的BIOS也被称为EFI BIOS。之后为了推广EFI,业界多家著名公司共同成立了统一可扩展固件接口论坛(UEFI Forum),英特尔公司将EFI 1.1规范贡献给业界,用以制订新的国际标准UEFI规范。目前UEFI规范的最新版本是2.3.1,英特尔公司曾经预测,2010年,全世界或有有60%以上的个人电脑使用支持UEFI规范的BIOS产品。
BIOS类别
编辑
市面上较流行的主板BIOS主要有 Award BIOS、AMI BIOS、Phoenix BIOS三种类型,此外还有台湾出的Insyde BIOS。
Award
Award BIOS是由Award Software公司开发的BIOS产品,在目前的主板中使用最为广泛。Award BIOS功能较为齐全,支持许多新硬件,市面上多数主机板都采用了这种BIOS。
AMI
AMI BIOS是AMI公司(全称:American Megatrends Incorporated)出品的BIOS系统软件,开发于80年代中期,早期的286、386大多采用AMI BIOS,它对各种软、硬件的适应性好,能保证系统性能的稳定,到90年代后,绿色节能电脑开始普及,AMI却没能及时推出新版本来适应市场,使得Award BIOS占领了大半壁江山。当然AMI 也有非常不错的表现,新推出的版本依然功能强劲。
Phoenix
Phoenix BIOS Phoenix BIOS
Phoenix BIOS是Phoenix公司产品,Phoenix意为凤凰或埃及神话中的长生鸟,有完美之物的含义。Phoenix BIOS 多用于高档的586原装品牌机和笔记本电脑上,其画面简洁,便于操作。
Insyde
Insyde bios 是台湾的一家软件厂商的产品,是一种新兴的BIOS类型,被某些基于英特尔芯片的笔记本电脑采用,如神舟、联想。
BIOS设置
编辑
标准CMOS
(Standard CMOS Setup)
BIOS出厂默认值设置 BIOS出厂默认值设置
从主菜单选择“STANDARD CMOS SETUP”后进入“标准CMOS设置”菜单。
Date/Time:日期和时间的设置,我们可以用光标配合“Page Up”和“Page Down”依次设置成当前日期和时间。
Floppy Drive A,B: 设定软盘驱动器类型为None/720K/1.2M/1.44M/2.88M。
HDD Type(硬盘类型): Auto(自动检测)、SCSI(SCSI HDD)、CD-ROM驱动器、Floptical(LS-120大容量软驱)或是Type 1~47等IDE设备。
LBA/Large:硬盘LBA/Large模式是否打开。540M以上的硬盘都要将此选项打开(On),但在Novell Netware 3.xx或4.xx版等网络操作系统下要视情况将它关掉(Off)。
Block Mode: 将此选项设为On,有助于硬盘存取速度加快,但有些旧硬盘不支持此模式,必须将此选项设为Off。
32 Bit Mode: 将此选项设为On,有助于在32位的操作系统(如WIN95/NT)下加快硬盘传输速度,有些旧硬盘不支持此模式,必须将此选项设为Off。
PIO Mode: 支持PIO Mode0~Mode5(DMA/33)。用BIOS程序自动检查硬盘时,会自动设置硬盘的PIO Mode。
注意:当你在系统中接上一台IDE设备(如硬盘、光驱等)时,最好进入BIOS,让它自动检测。如果使用的是抽屉式硬盘的话,可将Type设成Auto,或将Primary以及Secondary的Type都改成Auto 即可。所谓Primary指的是第一IDE接口,对应于主板上的IDE0插口,Secondary指的是第二IDE接口,对应于主板上的IDE1插口。每个IDE接口可接Master/Slave(主/从)两台IDE设备。
高级设定
(Advanced Setup)
BIOS启动项设置 BIOS启动项设置
1st/2rd/3rd/4th Boot Device: 开机启动设备的顺序,可选择由IDE0~3、SCSI、光驱、软驱、 Floptical (LS-120大容量软驱)或由Network(网络)开机。
S.M.A.R.TFor HardDisk: 开启(Enable)硬盘S.M.A.R.T功能。如果硬盘支持,此功能可提供硬盘自我监控的功能。
Quick Boot: 开启此功能后,可使开机速度加快。
Floppy Drive Swap: 若将此功能Enable,可使A驱与B驱互换。
PS/2 Mouse Support : 是否开启PS/2鼠标口,若设定为Enable,则开机时,将IRQ12保留给PS/2鼠标使用,若设定为Disable,则IRQ12留给系统使用。
Password Check: 设定何时检查Password(口令),若设定成Setup时,每次进入BIOS设定时将会要求输入口令,若设定成Always时,进入BIOS或系统开机时,都会要求输入口令,但先决条件是必须先设定口令(Security窗口中的User选项)。
Primary Display: 设定显示卡的种类。
Internal Cache: 是否开启CPU内部高速缓存(L1 Cache),应设为Enable。
External Cache: 是否开启主板上的高速缓存(L2 Cache),应设为Enable。
System BIOS Cacheable: 是否将系统BIOS程序复制到内存中,以加快BIOS存取速度。
C000-DC00,16K Shadow: 此8项是将主内存的UpperMemory(上位内存区)开启,将所有插卡上ROM程序映射到内存中,以加快CPU对BIOS的执行效率。Disable:不开启本功能;Enable:开启,且可提供读写区段功能;Cached:开启,但不提供读写功能。
属性设置
(BIOS FEATURES SETUP)
从主菜单上选择“BIOS FEATURES SETUP”即进入“BIOS属性设置”菜单。此设置中第1项“Virus Warning/病毒防范”除了在安装操作系统如DOS6?xx和Windows9x/200 0/NT等的过程中须设置为“Disabled”外,其余时间应该都设为“Enabled”。
第2、3、4和5项是涉及CPU的。其中“CPU Internal Cache/CPU内部缓存”、“External Cache/外部缓存”用来管理CPU的L1 Cache和L2 Cache。如果使用赛扬(主频为2.66Ghz和300Mhz的除外)、PentiumⅡ和PentiumⅢ可全部设为Enabled。第4项“CPU L2 Cache ECC Checking/CPU二级缓存ECC校验”一般情况下设为Enabled,但使用PentiumⅡ233 、PentiumⅢ266时可设为Disabled,因为这两种CPU的L2 Cache不具备ECC校验功能,设为Enable d时反而会降低系统启动速度。第5项“Processor number feature/处理器序列号功能”用于控制早已闹得沸沸扬扬的PentiumⅢ编号(ID),中国有关部门要求设为“Disabled”。但笔者曾试过,好像Intel出口到中国的“铜矿”PentiumⅢ已经在CPU中关闭了ID,此项设置毫无作用。
另外一些是关于系统启动时的设置,其中“快速自检/Quick power on self test”可设为“Enabled”,这样系统在启动时只对内存检验一遍,而设为“Disabled”时则在启动时将对内存检验三遍,自然要慢些;至于“CPU升级日志/CPU Update Data”则按BIOS推荐值设为“Enabled”,“优先网络启动/Boot From LAN First”项用于“网卡”等启动优先设置,除联网使用外一般都设为“Disabled”;“系统引导顺序/Boot Sequence” 就是经常提到的从C盘或A盘启动设置,其中的设置选择较多,有光驱、“D:”等优先启动设置等,比较简明。注意其中从“D”盘启动是指物理D盘(即所使用的第二块硬盘)而不是逻辑D:盘。
“软驱盘符交换/Swap Floppy Drive”用于交换两块软驱的“A:”、“B:”盘符,即如果有两块软驱可以通过此项设置将事实上的“A:”改为“B:”驱等;“引导显示卡/VGA Boot From”用于设置电脑在使用双显示卡时以PCI还是AGP显卡作为启动时(即显示)的主卡,此项设置根据用户自己使用的显卡总线类型而定,另外这项在给BIOS失效的显卡重写BIOS时也有用,例如在为BIOS失效的AGP卡重装BIOS时,可另插PCI 显卡引导系统进行操作。
“引导时检查软驱/Boot Up Floppy Seek”意义明确,用户可根据自己需要分别设为“Enabled”或“Disabled”,但设为“Enabled”时,启动时软驱“吱吱”作响挺烦的。
“启动时副键盘状态/Boot Up NumLock Stating”决定启动数字小键盘状态,设为“ON”时为数字输入有效(键盘上NumLock灯亮),反之则为无效状态;“Typematic Rate Sett ing”、“Typematic Rate(Chars/Sec)”和“Typematic Delay(Msec) ”三项用于调整键盘录入速度,意义不大。
“密码使用选择/Security Option”设置有“System”和“Setup”分别是确定密码是每次启动系统(包括热启动)时都用还是仅在进入BIOS设置时才用。
“显示校正/PCI-VGA Palette Snoop”是在ISA和PCI总线上分别使用两块显示板卡(如增加了VCD/DVD解压卡)时出现色彩不正常时可设为“Enabled”试试,一般都应设为“Disabled”。“Assign IRQ For VGA”则是设置由系统自动为显示卡配置中断(IRQ),目的是在系统中安装有I SA接口的解压卡等时使用,通常应该设为“Disabled”。
“OS Select For DRAM>64MB”这项只在电脑安装使用“OS/2”操作系统时才用,因为大多数用户的电脑中多安装Win XP/7/8之类,所以应该设为“No-OS/2”。
“HDD S.M.A.R.T capability”用于开启硬盘的“故障自监测报告”功能,如果你的硬盘具备这一保护功能请设为“Enabled”,如果不具备这一功能,打开此开关也不影响系统正常运行。
“Report No FDD For WIN95”的意思是在系统启动时报告win9x没有硬盘,用户系统一般是2X以上,强烈建议设置为Disable。
最后一项“Video BIOS Shadow”用于启动后将显示卡的BIOS程序映射在内存中(开辟保留区)中,这样从理论上可以提高电脑显示速度,所以可以设为“Enabled”。
芯片组功能
(CHIPSET FEATURES SETUP)
从主菜单上选择“CHIPSET FEATURES SETUP”进入芯片组功能设置。此项设置中的具体内容因主板而异,但基本上都包括对系统硬件状态监测、CPU超温保护设置和对内存、显存状态设置等。本功能中的选项有助于系统效率的提升,建议使用默认值。若将某些Chipset、DRAM/SDRAM或SRAM部分的Timing值设得过快,可能会导致系统"死机"或运行不稳定,这时可试着将某些选项的速度值设定慢一点。  “Reset Case Open Status”和“Case Opened”项用于设置电脑机箱(开启)状态监测和报警,一般设为“No”。
“Slow Down CPU Duty Cycle”用于选择CPU降速运行比例,可分别选择“Norma l”或“79%”及其它百分比。
“Shutdown Temp?(℃/?)”用于设置系统温度过高时自动关机初始值,同时用摄氏或华氏温度表示。
“***Temp? Select(℃/?)**”项为选择保护启动温度初始值,同样使用摄氏和华氏温度表示,此处仅对CPU进行设置。
“**Temperature Alarm**”用于设置CPU过温报警,应该设为“Yes”;然后就是系统对硬件监测所采集的数据,其中有“CPU”风扇、“Power/电源”和“Panel/板”风扇的运行状态,如果是使用非原装风扇,由于没有测速功能,系统将会认为CPU风扇故障而报警,所以此时应该将其设为“No”,其它风扇报警功能也应该予以设为“No”,对于系统监测显示的CPU电压和温度等状态参数用户只能看不能修改,但对于具备超频设置功能的BIOS中将包括对CPU的内核工作电压和I/O电压的微调,这部分内容须根据具体主板BIOS内容进行设置。
其次是对内存的运行速度进行设置,“SDRAM CAS latency Time”项设为“Auto”是使系统启动时自动检测内存,然后根据内存“SPD”中的参数进行设置,这样系统工作时不会因人为设置内存运行速度过高而出错。不过如果你买的是假内存(假SPD),那么系统运行时可就要给你闹别扭了。另外也可以按具体值分别设为“2”或 “3”等,视内存质量而定,数值越小时内存运行速度越快。
“DRAM Data Integrity Mode”则用于设置内存校验,由于多数用户使用的都是不具备ECC校验功能的SDRAM,所以这项自动设为“No-ECC”。注意:若系统使用SDRAM不稳时,建议将SDRAM速度调慢。
对于“System BIOS Cacheable”和“Video BIOS Cacheable”两项的设置是允许将主板BIOS和VGABIOS映射在高速缓存或内存中,理论是可以提高运行速度,但部分电脑使用时可能有问题,所以应根据试验后设置为“Enabled”,否则设为“Disabled”,使BIOS仅映射在内存中较为妥当。
“16 Bit I/O Recovery Time”项是输入/输出16位数据的器件传输复位速度,一般可分别设为“1”至“4”等,通常数值小、速度快。
“Memory Hole At15M-16M”是为ISA设备保留15~16M之间的内存而设的,一般设为 “Disabled”。如果你的Windows启动后少了1MB内存(通过控制板中系统属性查看),那么不妨检查一下是不是这项设成了“Enabled”。
“Delayed Transaction”是为解决PCI2?1总线的兼容问题而设,理论上设为“Enab led”可使用PCI21标准卡,但如设为“Enabled”可能会出现PCI2?1设备与普通PCI和ISA设备之间的兼容问题,所以一般推荐设成“Disabled”。
“Clock Spread Spectrum”项是为了抑制时钟频率辐射干扰,但需要硬件(主板)支持,所以可根据实际情况设为“Enabled”或“Disabled”。
USB Function Enabled: 此选项可开启USB接口的功能,如没有USB设备,建议将此选项设为Disable,否则会浪费一个IRQ资源。
Passive Release: 设定Passive Release(被动释放)为Enable时,可确保CPU与PCI总线主控芯片(PCI Bus Master)能随时重获对总线的控制权。
电源管理
(POWER MANAGEMET SETUP)
在主菜单上选择“POWER MANAGEMMET SETUP”后进入“能源管理设置”菜单。
能源管理功能可使大部份周边设备在闲置时进入省电功能模示,减少耗电量,达到节约能源的目的。电脑在平常操作时,是工作在全速模式状态,而电源管理程序会监视系统的图形、串并口、硬盘的存取、键盘、鼠标及其他设备的工作状态,如果上述设备都处于停顿状态,则系统就会进入省电模式,当有任何监控事件发生,系统即刻回到全速工作模式的状态。省电模式又分为“全速模式(Normal)、打盹模式(Doze)、待命模式(Standby)、沉睡模式(Suspend)",系统耗电量大小顺序:Normal>Doze> Standby > Suspend。
Power Management/APM: 是否开启APM省电功能。“Disabled”和“Enabled”,若开启(Enable),则可设定省电功能。“PM Control by APM”的意思是将能源管理交给系统(指WIN9x)的 APM(“高级能源管理”的英文缩写),可根据用户意愿分别设为“Yes”或“No”,但交予系统管理要更好些。
Green PC Monitor Power State/Video Power Down Mode/Hard Disk Power Down Mode : 设定显示器、显示卡以及硬盘是否开启省电模式,可设定成Standby、Suspend以及Off(即不进入省电模式)。
"Video off Method”项用于控制显示器,有“DPMS/显示能源管理系统”、“亮度关闭/B lank Screen”、“关亮度并切断同步信号/V/H SYNC+Blank Screen”等三种模式可选,但其中“DPMS”节能效果最好,为推荐设置,但需符合DPMS规范的显示器和显卡支持,如果设备不符合DPMS,可再试设置成另两项。
Video Power Down Mode: 设定显示器在省电模式下的状态 :Disable: 不设定 ;Stand By: 待命模式;Suspend: 沉睡模式。
Hard Disk Power Down Mode: 设定硬盘在省电模式下的状态。(同上)
“Suspend Mode”是休眠时间设置,可将时间设在1分至1小时之间,意思是超过所设时间后系统自动进入休眠状态。如果电脑中装有CD-R/W刻录机进行刻盘时最好将设为“Disabled”,以关闭休眠功能提高刻盘成功率。
“HDD Power Down”项设置硬盘自动停转时间,可设置在1至15分钟之间,或设为“Disabled”关闭硬盘自动停转。
Standby Timeout/Suspend Timeout: 本选项可设定系统在闲置几分钟后,依序进入Standby/Mode/Suspend Mode等省电模式。
VGA Active Monitor”项用于设置显示器亮度激活方式,可设为“Disabled”和“Enabled”两种。
“Soft-off by PWR-BTTN”项确定关机模式,设为“Instant-Off”,关机时用户按下电源开关,则立刻切断电源,设为“Delay4Secs”时,则在按下电源开关4秒钟后才切断电源,如果按下开关时间不足4秒,则自动进入休眠模式,所以一般按习惯设为“Instant-Off”。
“Power LED In Suspend”项设置机箱电源指示灯在系统休眠时的状态,可设为“闪动/Bl anking”、“亮/On”和“Off/Dual”等,通常按习惯设为“Blanking”使电脑在休眠时电源灯闪烁提醒用户注意。
“System After AC Back”项设置电脑在交流电断电后又恢复时的状态,可设为“断电/So ft-off”、“开机/Full On”、“Memory By S/W”和“Memory By H/W”三项,按国内使用情况一般都设为停电后再恢复供电时电脑不自动开机,即设为“断电/Soft-off”。
“CPUFAN off In suspend”项是设置CPU风扇在系统休眠时自动停转,可根据自己的风扇(只对原配或带测速功能的风扇有效)设为“Disabled”或“Enabled”。
“PME Event Wakeup”一项不详,先按缺省设置为“Disabled”。
“ModemRingOn/WakeOnlan”用于通过网络或Modem实现远程叫醒开机的设置,只要你不使用这些功能,就都可设为“Disabled”,如果需要再设为“Enabled”。
“Resume by Alarm”项用于定时开机,设置的时间可定在每月某日(00~31)某时某分某秒( 00~23:00~59:00~59),但需要主板和其它硬件支持。
“能源管理设置”中还有“**Reload Global Timer Events**”项,这部分意思大致是对其中所列设备和网络设备以及部分系统资源(IRQ)对系统的激活是否对进入节能状态时间重新计时。
即插即用PCI
即插即用和PCI资源设置
从主菜单上选择“PNP/PCI CONFIGURATION”即可进入设置即插即用和PCI资源菜单。这项设置中“PnP OS Installed”意为安装即插即用的操作系统(自然是指WIN9x)可设为“Yes”,将PCI和ISA上的中断、DMA等资源交于操作系统管理,设为“No”时交BIOS管理。
“Resources Controlled By”项用于设置外设和板卡的资源管理,如果设为“AUTO” 交BIOS或操作系统自动管理时的设置内容很少;但设为“Manual”交用户自己管理时须设置的内容很多,此时要求用户必须具有较高的电脑应用水平,否则容易设置不当,造成设备资源使用冲突,所以一般都设为“AUTO”。当“Res ources Controlled By”项设为“AUTO”时,须设置的内容有:“Reset Configur ation Data”项是系统每次启动时将所检测硬件配置数据写入BIOS中,可分别设为“ESCD/外部设备配置数据”、“DMI/桌面管理界面”、“Both/同用”或“Disabled”,由于系统启动时不写ESCD并不影响正常运行,所以通常都设为“Disabled”,这样可能更安全些。
当“Resources Controlled By”设为“Manual”时须设置的内容除前面的几项外,还将列出系统所有可使用的IRQ和DMA资源由用户进行设置,设置时可使用“Legacy ISA”和“PCI/ISA PnP”两种状态,如果须要为ISA卡保留某一IRQ和DMA(如为声卡保留IRQ5和DMA6)时可将“IRQ -5 assigned to”和“DMA-6 assigned to”都设为“Legacy ISA”。
“Assign IRQ For USB”项是为了设置保留给USB(通用串行接口)的中断资源,如果不使用 USB设备,可设为“Disabled”。
加载预设值
第6项“LOAD BIOS DEFAULTS”和第7项“LOAD PERFORMANCE DEFAUL TS”中的内容和设置以前已经介绍过,此处不再重复。
端口综合
输入/输出端口综合设置
通过主菜单选择“INTEGRATED PERIPHERALS”进入设置菜单后(见图5),主要有:第1部分关于硬盘控制器的工作模式和状态,如果用户使用主板上IDE口联接硬盘和光驱等设备时,其中“On-Chip Pr imary PCI IDE/主板第一IDE口”和“On-Chip Secondary PCI IDE/主板PC I第二IDE口”必须设为“Enabled”,对于其中4个主、从IDE口的传输模式可根据情况设为“AUTO”、“MODE0”至“MODE4”。
第2部分“USB Keyboard support”的设置可根据是否使用USB键盘设为“Disabled”或“Enabled”。
第3部分是主板上软驱口、串、并口和PS/2等接口参数设置。其中两个串口可根据用户实际使用情况,分别对C OM1(Onboard serial port1)、COM2(Onboard serial port2)和并口(Onboard Parallel port)的具体I/O地址和IRQ参数进行设置,一般是在串口使用与其它设备出现资源冲突时进行调整。
并口的工作模式一般可分别设为“SPP”、“EPP”或“ECP”,由于“SPP”模式速度太慢,用户无法正常使用并口连接的光驱、硬盘、扫描仪等设备,所以一般不用;设为“ECP”时也可能会出现部分外设连接不正常问题,所以并口一般设为“EPP”或“ECP+EPP”模式为好。
接下来的“PS/2 Mouse Power On”和“Keyboard Power On”是用于电脑开机的,其中鼠标必须使用PS/2(即小6针圆口)。如果将“PS/2 Mouse Power On”设为“DblC lick/双击”时,即可在电脑关机后再双击鼠标左键重新开机。“Keyboard Power On”也可同样如此进行。
以下主菜单中的第9项“SUPERVISOR PASSWORD”、第10项“USER PASSWORD” 和第11项“IDE HDD AUTO DETECTION”、第12项“SAVE&EXIT SETUP”和第13 项“EXIT WITHOUT SAVING”等设置的具体内容在以前也都介绍过,所以也不再重复。由于各种主板的B IOS内容不尽相同(即使是同一公司开发的BIOS也这样),所以以上所介绍的内容仅供参考,以后在对其它主板的BI OS项目进行设置时须根据具体内容进行才可能获得比较满意的设置效果。[3]
激活过程
当BIOS激活时会先去确认CMOS中的资料是否正确。如果正确,便会将之前用户存储在CMOS的资料,加上已存或找到的硬件信息,整合成一个表格,写到内存中,也就是所谓的SMBIOS。如果发现错误,则会自动以默认值取代CMOS提供的资料。所以这份写入内存的SMBIOS表格,就是用户进入BIOS选项后,可以看到或选择的所有信息。
所有会在BIOS之前发生的操作就只有Power On,也就是按下计算机上电源开关的那一瞬间。在Power On阶段一开始,会进入BIOS的激活流程,当用户一按下电源开关,CPU会先被激活去寻找BIOS,接着BIOS会先在Flash Memory中执行,再加上CMOS中用户所喜好的设置,然后BIOS将自己解压缩到计算机的主存储器中。此时,用户若按下【DEL】键,就可以进入BIOS所提供的设置选项,从而看到所有的设置值;或是当用户进入操作系统后,操作系统就可以参考内存中的BIOS资料,访问到每一个硬件地址。
声音提示
AWARD的BIOS报警声::(AWARD已经被PHOENIX收购)
声音类型
       
表示意义
1短
       
系统正常启动。这是我们每天都能听到的,也表明机器基本没有问题
2短
       
常规错误,请进入CMOS Setup,重新设置不正确的选项
1长1短
       
RAM或主板出错。换内存试试,若还是不行,只好更换主板
1长2短
       
显示器或显示卡错误
1长3短
       
键盘控制器错误。检查主板
1长9短
       
主板Flash RAM或EPROM错误,BIOS损坏。换块Flash RAM试试
不断地响(长声)
       
内存条未插紧或损坏。重插内存条,若还是不行,只有更换内存
不停地响
       
电源、显示器未和显示卡连接好。检查一下所有的插头
重复短响
       
电源问题
无声音无显示
       
电源问题
AMI的BIOS报警声:
声音类型
       
表示意义
1短
       
内存刷新有问题
2短
       
内存同步检查错误
3短
       
前64KB内存区段检查失败
4短
       
系统计时器失效
5短
       
处理器错误
6短
       
键盘控制器8024,A20位址线错误
7短
       
处理器发生异常中断
8短
       
显卡接触不良或显存存取错误
9短
       
ROM BIOS 检查错误
10短
       
CMOS shutdown暂存器存取错误
11短
       
外部CACHE错误
1长3短
       
内存错误。内存损坏,更新即可
1长8短
       
显示测试错误。显示器数据线没插好或显卡没插牢
PHOENIX的BIOS报警声:
声音类型
       
表示意义
1短
       
系统启动正常
1短1短1短
       
系统加电初始化失败
1短1短2短
       
主板错误
1短1短3短
       
CMOS或电池失效
1短1短4短
       
ROM BIOS校验错误
1短2短1短
       
系统时钟错误
1短2短2短
       
DMA初始化失败
1短2短3短
       
DMA页寄存器错误
1短3短1短
       
RAM刷新错误
1短3短2短
       
基本内存错误
1短3短3短
       
基本内存错误
1短4短1短
       
基本内存地址线错误
1短4短2短
       
基本内存校验错误
1短4短3短
       
EISA时序器错误
1短4短4短
       
EISA NMI口错误
2短1短1短
       
前64K基本内存错误
3短1短1短
       
DMA寄存器错误
3短1短2短
       
主DMA寄存器错误
3短1短3短
       
主中断处理寄存器错误
3短1短4短
       
从中断处理寄存器错误
3短2短4短
       
键盘控制器错误
3短1短3短
       
主中断处理寄存器错误
3短4短2短
       
显示错误
3短4短3短
       
时钟错误
4短2短2短
       
关机错误
4短2短3短
       
A20门错误
4短2短4短
       
保护模式中断错误
4短3短1短
       
内存错误
4短3短3短
       
时钟2错误
4短3短4短
       
时钟错误
4短4短1短
       
串行口错误
4短4短2短
       
并行口错误
4短4短3短
       
数字协处理器错误
BIOS升级
编辑
目的
BIOS芯片都采用了Flash ROM,都能通过特定的写入程序实现BIOS的升级,升级BIOS主要有两大目的:
1.免费获得新功能
升级BIOS最直接的好处就是不用花钱就能获得许多新功能,比如能支持新频率和新类型的CPU,例如以前的某些老主板通过升级BIOS支持图拉丁核心Pentium III和Celeron,现在的某些主板通过升级BIOS能支持最新的Prescott核心Pentium 4E CPU;突破容量限制,能直接使用大容量硬盘;获得新的启动方式;开启以前被屏蔽的功能,例如英特尔的超线程技术,VIA的内存交错技术等;识别其它新硬件等。
2.修正已知BUG
BIOS既然也是程序,就必然存在着BUG,而且硬件技术发展日新月异,随着市场竞争的加剧,主板厂商推出产品的周期也越来越短,在BIOS编写上必然也有不尽如意的地方,而这些BUG常会导致莫名其妙的故障,例如无故重启,经常死机,系统效能低下,设备冲突,硬件设备无故“丢失”等等。在用户反馈以及厂商自己发现以后,负责任的厂商都会及时推出新版的BIOS以修正这些已知的BUG,从而解决那些莫名其妙的故障。
由于BIOS升级具有一定的危险性,各主板厂商针对自己的产品和用户的实际需求,也开发了许多BIOS特色技术。例如BIOS刷新方面的有著名的技嘉的@BIOS Writer,支持技嘉主板在线自动查找新版BIOS并自动下载和刷新BIOS,免除了用户人工查找新版BIOS的麻烦,也避免了用户误刷不同型号主板BIOS的危险,而且技嘉@BIOS还支持许多非技嘉主板在windows下备份和刷新BIOS;其它相类似的BIOS特色技术还有华硕的Live Update,升技的Abit Flash Menu,QDI的Update Easy,微星的Live Update 3等等,微星的Live Update 3除了主板BIOS,对微星出品的显卡BIOS以及光存储设备的Firmware也能自动在线刷新,是一款功能非常强大的微星产品专用工具。此外,英特尔原装主板的Express BIOS Update技术也支持在windows下刷新BIOS,而且此技术是BIOS文件与刷新程序合一的可执行程序,非常适合初学者使用。在预防BIOS被破坏以及刷新失败方面有技嘉的双BIOS技术,QDI的金刚锁技术,英特尔原装主板的Recovery BIOS技术等等。
除了厂商的新版BIOS之外,其实我们自己也能对BIOS作一定程度上的修改而获得某些新功能,例如更改能源之星LOGO,更改全屏开机画面,获得某些品牌主板的特定功能(例如为非捷波主板添加捷波恢复精灵模块),添加显卡BIOS模块拯救BIOS损坏的显卡,打开被主板厂商屏蔽了的芯片组功能,甚至支持新的CPU类型,直接支持大容量的硬盘而不用DM之类的软件等等。不过这些都需要对BIOS非常熟悉而且有一定的动手能力和经验以后才能去做。
版本确定
要想升级BIOS ,前提是主板上的BIOS必须是Flash BIOS(快闪存储器),普通的BIOS是不能用软件方法升级的。识别其是否是Flash BIOS可查看电脑主板的使用手册(一般的主板都采用了Flash BIOS),还可根据主板的品牌及型号,到主板生产公司的网页上查看有无该型号主板的BIOS新版本,如有,当然就可判断其为Flash BIOS。如果是原装机,应到生产整机的厂商主页去查看有无该机型的BIOS升级软件。
确定了主板BIOS可升级后,还应确定其版本号,具体方法如下:
重新启动机器,我们可看到如下几种开机画面(就在屏幕的左下角或者按del键进入察看)。如需仔细查看,可在显示这些画面时按下键盘右上角的“Pause”键。
方法
新型计算机主板都采用Flash BIOS,使用相应的升级软件就可进行升级,FlashBIOS升级需要两个软件:一个是新版本BIOS的数据文件(需要到Internet网上去下载);一个是BIOS刷新程序(一般在主板的配套光盘上可以找到,也可到Internet网上去下载)。
BIOS刷新程序有以下功能:
1. 保存原来的BIOS数据;
2. 更新BIOS数据(将新数据刻进BIOS芯片);
3. 其它功能
常见的BIOS刷新软件有以下几种:
1. AWDFLASH:Award BIOS专用的BIOS刷新软件;
2. AMIFLASH:AMI BIOS专用的BIOS刷新软件;
3. AFLASH:华硕主板专用的BIOS刷新软件;
4. PHLASH:Phoenix主板BIOS刷新软件。
步骤
以磐英3VCA主板为例,详细介绍其BIOS的升级步骤,也可供其它Award BIOS的主板升级时参考:
一、找到升级所需的软件:
BIOS的刷新程序AWDFLASH.EXE,可在主板附带的光盘上找到它,也可以到磐英BIOS下载网址下载。有些网站,是把BIOS的刷新程序和BIOS升级文件打包放在一起的;(BIOS与驱动程序更新档案)可查到3VCA的09/16/2000版本的BIOS升级文件栏中有如下信息:
EP-3VCA(3VBA2)
1.改善了使用PS2鼠标后切换到USB鼠标的稳定性
2.修改BIOS中默认“键盘开机”选项为“Enable”
3.支持网卡启动
4.修正使用ATI Rage128Pro显示卡死机的问题
5.提高使用 SDRAM 内存的稳定性
以上内容说明3VCA主板的最新BIOS版本是2000年9月16日提供的,比机器原来的BIOS增加了不少功能并解决了一些造成系统死机的 BUG,值得升级。点击694x0916.bin即可将其下载回来。注意有些BIOS升级文件是以ZIP格式压缩的,下载下来后,均应将其解压缩后备用)。
二、BIOS相关设置:
重新启动机器,进入BIOS设置,将“BIOS update”选项设定为“Enable”(某些主板应在关机后将主板上“Boot Block Programming”跳线设定在“Enable”位置),将“Virus Warning”(病毒警告)设置为“Disabled”。
三、以DOS实模式开机:
因为BIOS升级必须在DOS实模式下进行,以下三种方法可确定系统是在DOS实模式下进行:
1.用无Config.sys和Autoexec.bat文件系统启动软盘启动电脑;
2.如使用硬盘的MS-DOS6.X系统开机,当屏幕出现:“Starting MS-DOS......”时,按键跳过Config.sys及Autoexec.bat的执行;
3.如使用Win95/98开机,当出现Starting Win95/98...... 时,按键进入启动菜单,选取Safe mode command prompt only选项。
也可以使用系统启动软盘来启动机器。
四、BIOS升级:
在系统以DOS实模式开机后,将工作目录切换到AWDFLASH.EXE和升级文件694x0916.bin所在的目录下,为了下面叙述的方便,我把694x0916.bin改名为BIOS.BIN。键入:AWDFLASH,即可进入BIOS更新程序。
程序提示输入BIOS升级文件名,输入升级文件名:BIOS.BIN,敲回车。注意在此要输入升级文件的全称,即包括文件名及扩展名。
刷新程序提示是否要备份主板的BIOS文件,为了安全起见,一定要把系统的BIOS内容备份到机器上并记住它的文件名(为了方便、易记,文件名应简单为好,如存为BACK.BIN等),以便在更新BIOS的过程中发生错误时,可以重新写回原来的BIOS数据。
在“File Name to Save”框中输入要保存的文件名:BACK.BIN。敲回车后,刷新程序开始读出主板的BIOS内容,并把它保存成一个文件。
备份工作完成后,刷新程序会询问是否要升级BIOS。
选择“Y”,刷新程序开始正式刷新BIOS,最关键的时刻就在此时,在这个过程中,千万不要中途关机;另外,如果你遇上停电、死机或下载的BIOS文件不对,那你的机器就死定了。
当进度条跑到最后,刷新结束,刷新程序提示你敲“F1”重启动或敲“F10”退出刷新程序。一般是选择重开机,按DEL键进入BIOS 设置,除了设置“HDD、FDD、DATE……”外,还应选取“Load Setup Defaults”来加载系统预设值,至此,便完成了BIOS的升级工作。
再次强调,在BIOS更新过程中万万不得切断微机电源,以免造成无法开机!
注意事项
第一,何时升级。用户给电子产品作局部升级之后,发现它并未达到预期性能。如给自己电脑更换性能更强大的CPU之后,会产生蓝屏,花屏现象,而用排除法直到所有硬件替换都无效之后,则是主板出现问题。这就需要给电脑的主板刷个新的BIOS。如果主板有质量问题,或者元器件坏了,则无须升级主板的BIOS。因为主板厂商推出新版本的BIOS,针对的就是老一代主板在设计上的缺陷,而非修复它的硬件问题。
第二,升级原则。一般来说,升级主板的BIOS.原则上必须跟主板型号100%匹配才可以刷新。否则失败之后主板点不亮,开机又黑屏,会影响到它的使用寿命。同时还必须有与BIOS 对应的烧写程序和新版本的BIOS 数据文件。Award 和AMI BIOS 芯片对应的烧写程序分别为Awdflash 和Amiflash,不能混用。新版本BIOS 数据文件的数据文件一般以BIN 为扩展名。总之,BIOS 文件一定要与主板的型号严格一致。烧写程序和新版BIOS 数据文件可从主板的官方网站上下载。
第三、升级步骤。首先将 BIOS 的擦写开关置为 Enable,这可以在主板上或CMOS中设置。将机器设置为从软盘引导;升级用的数据软盘质量一定要好,不能在升级过程中出现读盘错误!最好给升级的机器配接 UPS,否则在升级过程中出现断电会损坏 BIOS,使机器瘫痪。其次启动机器进入DOS状态。升级 BIOS 必须在 DOS 模式下进行。最好是软盘启动进入纯 DOS 环境。再次,命令格式是:<烧写程序> ,如 A:\>Awdflash ODI32.BIN。升级前一定要选择保存旧版本 BIOS 的数据。升级一般需要十几秒钟。最后看机器能否正常启动,如果能够则说明升级正确。如果机器黑屏,不能启动,说明升级失败。
误区
误区一:主板BIOS升级之后,可使系统性能得到很大提升!对于BIOS来说,并不是越新越好。主板厂家对于BIOS的更新,主要用来解决主板极个别兼容性问题,并使之可以支持更多、更新的硬件产品。但对于整机性能的影响却微乎其微!
误区二:主板BIOS升级太危险了!
升级BIOS,只要方法得当,胆大心细,并且做好万一失败后的修复准备工作,应该讲还是很简单的。当然,风险肯定存在。对于一般的使用者来说,如果没有特殊原因,还是不要去冒这个险。
误区三:主板BIOS升级失败后很难修复!
即使失败了,还有很多种办法可以修复,而且,99%都能让你的主板起死回生。有一点必须事先说明,如果BIOS芯片是焊在主板上,以下方法并不完全适用。
直接恢复法
刷新失败后重启,如果发现点不亮系统,但软驱灯还一直亮,这表明BIOS芯片的BootBlock未损坏。这时,可把BIOS刷新工具和备份的BIOS文件拷到一张完好、无毒的启动软盘中,用批处理文件执行刷新。
有一些用AMI BIOS的主板,只要把备份BIOS文件改名为AMIBOOT.ROM,并将其拷入一张空的无毒软盘,然后放入软驱,启动电脑并同时按住“Ctrl Home”组合键强迫电脑进行升级操作。系统将会从磁盘中读取AMIBOOT.ROM进行升级。当听到系统发出四声“嘀”之后,就可以拿出磁盘并重启。重启后,BIOS便恢复了。
重写BIOS法
把BIOS芯片非常小心地取下,然后到电脑城或电子城中拥有专门编程器的商家,他们可以帮你重写BIOS芯片。价格一般为10~20元不等。
热拔插法
找一台具有相同型号主板的电脑,如果找不到,主板类型相近也可,最关键的一点是这两块主板的BIOS芯片的擦写电压和针脚数是相同的。然后进行热拔插修复。也有一种很另类的方法,把BIOS芯片插到网卡上,用网卡刷新工具进行刷新。
更换芯片法
如果上述方法都无效的话,只有更换主板的BIOS了。不一定要到主板厂商去更换,到电脑市场去买一块相同容量和相同类型的芯片(20~40元不等),刷上你原来的BIOS文件,一般就能正常使用了。
BIOS升级后不能用U盘装系统的解决方法
1、将BIOS恢复为默认状况:进入BIOS设置界面,在“EXIT”栏目下选择“Load Setup Defaults”。
2、在“Main”栏目下,找到并修改“F12 Boot Menu”为“Enable”,按F10键保存。
3、重新启动系统,按F12选择U盘启动,一般就能正常使用U盘安装系统了。
4、如果问题仍旧,那可能是由于U盘启动制作工具的问题了,可尝试更换一个制作工具试试。[4]
系统进入故障
编辑
win7系统无法进入bios界面
win7系统进入不了bios界面的原因:
1、没有弄清楚自己主板的品牌,启动键按错了。
2、开机时内存检测很长时间
win7系统进入不了bios界面的解决办法:
1、最主要的是先要弄清楚主板的品牌是什么
2、U盘启动可以让我们在不使用其他磁盘介质的情况下,让U盘进行临时启动。
开机启动立马进入bios
原因分析:
开机时直接进入BIOS的主要原因是主板BIOS的设置出现了问题。有些电脑的主板在设置的时候为了能够更加人性化所以加入了许多其他的功能。当BIOS的设置不正确时重启电脑就会自动进入BIOS。
bios bios
解决方案:
既然是BIOS的设置引起的,那么只需要在BIOS里面设置好就可以解决问题了。当电脑开机进入BIOS后,选择Load Fail-safe Defaults、Load Optmized Defaults、Restore Defaults等类似字样的选项,选择完毕后按下“F10”保存并退出即可。
一般来说,BIOS保持默认状态对小白用户来说是最安全的。除了启动顺序外,其它选项一般不需要更改。如果出现像这样的问题,我们就把它还原成默认状态,这样就可以继续正常使用了。[5]
BIOS恢复出厂设置的方法
编辑
方法一
1、将主板上的纽扣电池拆下,拆下之后保持15钞以上,之后再安装上去,这样就可以消除BIOS信息,然后恢复出厂设置了。
2、当然有的主板上还配置有“硬跳线”,只需要按提示用跳线帽将“2”和“3”引脚短接一下,这样也可实现消除BIOS信息功能。
方法二
1、在开机的时候,当屏幕下方出现一些信息提示如“Press DEl Enter Bios”、“Press F1 to Run Setup”之类信息之后,按DELETE键进入BIOS程序界面。
2、进入到BIOS界面之后,将光标移动到“Load Optimized Default”项,之后回车。
3、然后在弹出的窗口中选择“yes”并按回车键,就可以实现恢复出厂设置,最后按F10保存一下即可。[6]
BIOS的寿命
编辑
BIOS电池保守估计可以用30年
新一代
编辑
下一代BIOS:UEFI BIOS
一直在IT界叱咤风云的BIOS即将被UEFI BIOS淘汰,新主板将普及UEFI BIOS。微星称将三年内UEFI BIOS将取代BIOS,UEFIBIOS全称“统一的可扩展固定接口”(Unified Extensible Firmware Interface), 是一种详细描述全新类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。
若需更多有关UEFI BIOS资料,请转至百科UEFI词条查看详情。

[ Last edited by zzz19760225 on 2016-5-31 at 23:25 ]
作者: zzz19760225     时间: 2016-5-19 19:54
wangyong

manateelazycat Add benchmark to improve startup speed.


;;; ### Unset key ###
;;; --- 卸载按键
(lazy-unset-key                         ;全局按键的卸载
'("C-x C-f" "C-z" "C-q" "s-W" "s-z" "M-h" "C-x C-c" "C-\\" "C-x o"))
;;; ### Vi-move ###
;;; --- Vi式移动
(defvar vi-move-key-alist nil
  "The key alist that like vi move.")
(setq vi-move-key-alist
      '(("j" . next-line)               ;上一行
        ("k" . previous-line)           ;下一行
        ("h" . backward-char)           ;向后移动
        ("l" . forward-char)            ;向前移动
        ("e" . scroll-down)             ;向下滚动一屏
        ("SPC" . scroll-up)))           ;向上滚动一屏
;;; ### Sdcv ###
;;; --- 星际译王命令行
(defvar sdcv-key-alist nil
  "The key alist that sdcv.")
(setq sdcv-key-alist
      '(("p" . sdcv-search-pointer)     ;光标处的单词, buffer显示
        ("y" . sdcv-search-pointer+)    ;光标处的单词, tooltip显示
        ("i" . sdcv-search-input)       ;输入的单词, buffer显示
        (";" . sdcv-search-input+)))    ;输入的单词, tooltip显示
(lazy-set-prefix-autoload-key sdcv-key-alist nil "C-z" "init-sdcv")
;;; ### Toolkit ###
;;; --- 工具函数
(lazy-set-key
'(
   ("C-c ns" . notes-search)                ;便签搜索
   ("C-c nn" . notes-new)                   ;新建便签
   ("s-c o" . one-key-menu-directory)       ;目录打开菜单
   ("s-," . bury-buffer)                    ;隐藏当前buffer
   ("s-." . unbury-buffer)                  ;反隐藏当前buffer
   ("s-&" . killall)                        ;杀掉进程
   ("C-x w" . count-words)                  ;计算单词的数量
   ("C-x f" . find-file-at-point)           ;文件跳转
   ("s-f" . find-file-root)                 ;用root打开文件
   ("s-r" . find-file-smb)                  ;访问samba
   ("<print>" . save-screenshots)           ;截屏
   ("<M-s-return>" . toggle-debug-on-error) ;切换调试模式
   ("s-1" . sort-lines)                     ;排序
   ("s-2" . hanconvert-region)              ;转换简体或繁体中文
   ("s-3" . uniquify-all-lines-buffer)      ;删除重复的行
   ("s-4" . elisp-depend-insert-comment)    ;插入 `...' 注释代码
   ("s-5" . elisp-depend-insert-require)    ;插入 (require '...) 语句
   ("s-[" . eval-expression)                ;执行表达式
   ("s-\\" . artist-mode)                   ;绘制模式
   ("M-s-u" . ediff-buffers)                ;ediff
   ("C-s-q" . quoted-insert)                ;读取系一个输入字符并插入
   ("M-h" . set-mark-command)               ;Instead C-Space for Chinese input method
   ))
(lazy-set-autoload-key
'(
   ("s-*" . one-key-menu-backup-file)   ;备份资料
   )
"init-shell-command")
(lazy-set-autoload-key
'(
   ("s-R" . re-builder)                 ;可视化构建正则表达式
   )
"init-rebuilder")
(lazy-set-autoload-key                  ;快速运行
'(
   ("M-!" . quickrun))
"quickrun")
;;; ### Color-moccur ###
;;; --- 增强的moccur
(lazy-set-autoload-key
'(
   ("s-x v" . moccur-grep)              ;搜索当前目录下的文件
   )
"init-moccur")
(lazy-set-autoload-key
'(
   ("s-x g" . moccur-grep-find-pwd)     ;递归搜索当前目录下的文件
   )
"dired-extension")
(lazy-set-autoload-key
'(
   ("C-z l" . linum-mode)               ;行号模式切换
   ("M-g" . goto-line-with-feedback)    ;可视化条转行
   )
"linum-extension")
;;; ### Buffer Move ###
;;; --- 缓存移动
(lazy-set-key
'(
   ("s-J" . scroll-up-one-line)            ;向上滚动一行
   ("s-K" . scroll-down-one-line)          ;向下滚动一行
   ("M-J" . scroll-other-window)           ;向下滚动其他窗口
   ("M-K" . scroll-other-window-down)      ;向上滚动其他窗口
   ("M-<" . scroll-other-window-up-line)   ;向下滚动其他窗口一行
   ("M->" . scroll-other-window-down-line) ;向上滚动其他窗口一行
   ("C-o" . open-newline-above)            ;在上面一行新建一行
   ("C-l" . open-newline-below)            ;在下面一行新建一行
   ("C-z k" . beginning-of-buffer)         ;缓存开始
   ("C-z j" . end-of-buffer)               ;缓存结尾
   ("M-p" . go-to-next-pair-right)         ;在( ),' ', " ", [ ], { }中跳到匹配符号的右边
   ("M-n" . go-to-next-pair-left)          ;在( ), ' ', " ", [ ], { }中跳到匹配符号的左边
   ("%" . match-paren)                     ;当在括号上按 % 时, 自动跳转到与当前括号匹配的另一个括号
   ("s-g" . goto-percent)                  ;跳转到当前Buffer的文本百分比, 单位为字符
   ("M-G" . goto-column)                   ;到指定列
   ("C-M-f" . forward-paragraph)           ;下一个段落
   ("C-M-b" . backward-paragraph)          ;上一个段落
   ("C-M-y" . backward-up-list)            ;向左跳出 LIST
   ("C-M-o" . up-list)                     ;向右跳出 LIST
   ("C-M-u" . backward-down-list)          ;向左跳进 LIST
   ("C-M-i" . down-list)                   ;向右跳进 LIST
   ("C-M-a" . beginning-of-defun)          ;函数开头
   ("C-M-e" . end-of-defun)                ;函数末尾
   ("C->" . remember-init)                 ;记忆初始函数
   ("C-<" . remember-jump)                 ;记忆跳转函数
   ("M-s-," . point-stack-pop)             ;buffer索引跳转
   ("M-s-." . point-stack-push)            ;buffer索引标记
   ("s-{" . current-line-move-to-top)      ;移动当前行到最上面一行
   ))
(lazy-set-autoload-key
'(
   ("M-s" . lazy-search-menu)           ;懒惰搜索
   )
"lazy-search-extension")
(lazy-set-autoload-key
'(
   ("s-N" . move-text-down)             ;把光标所在的整行文字(或标记)下移一行
   ("s-P" . move-text-up)               ;把光标所在的整行文字(或标记)上移一行
   )
"move-text")
;;; ### Buffer Name ###
;;; --- 缓存名字
(lazy-set-autoload-key
'(
   ("s-c r" . rename-file-and-buffer)                 ;更改当前文件的名字
   ("s-c g" . move-buffer-file)                       ;更改当前文件的目录
   ("s-c n" . copy-buffer-file-name-as-kill)          ;拷贝buffer名字
   ("C-M-;" . kill-other-window-buffer)               ;关闭其他窗口的buffer
   ("s-Q" . kill-current-mode-buffers)                ;关闭与当前模式相同的所有buffers
   ("s-q" . kill-current-mode-buffers-except-current) ;关闭当前模式所有buffers, 除了当前buffer
   )
"buffer-extension")
;;; ### Buffer Edit ###
;;; --- 缓存编辑
(lazy-set-key
'(
   ("M-N" . kill-syntax-backward+)            ;向后进行语法删除
   ("M-M" . kill-syntax-forward+)             ;向前进行语法删除
   ("C-:" . comment-or-uncomment-region+)     ;注释当前行
   ("C-s-n" . comment-dwim-next-line)         ;移动到上一行并注释
   ("C-s-p" . comment-dwim-prev-line)         ;移动到下一行并注释
   ("M-s-n" . comment-part-move-down)         ;向下移动注释
   ("M-s-p" . comment-part-move-up)           ;向上移动注释
   ("C-x C-x" . exchange-point-and-mark)      ;交换当前点和标记点
   ("M-o" . backward-delete-char-untabify)    ;向前删除字符
   ("M-z" . zap-to-char)                      ;向前删除到第一个相符的字符
   ("C-M-z" . zap-back-to-char)               ;向后删除到第一个相符的字符
   ("C-/" . undo)                             ;撤销
   ("C-?" . redo)                             ;重做
   ("s-k" . kill-and-join-forward)            ;在缩进的行之间删除
   ("C-x u" . mark-line)                      ;选中整行
   ("C-M-S-h" . mark-paragraph)               ;选中段落
   ("C-S-o" . duplicate-line-or-region-above) ;向上复制当前行或区域
   ("C-S-l" . duplicate-line-or-region-below) ;向下复制当前行或区域
   ("C-S-s-o" . duplicate-line-above-comment) ;复制当前行到上一行, 并注释当前行
   ("C-S-s-l" . duplicate-line-below-comment) ;复制当前行到下一行, 并注释当前行
   ("M-SPC" . just-one-space)                 ;只有一个空格在光标处
   ))
;;; ### Rect ###
;;; --- 矩形操作
(lazy-set-autoload-key
'(
   ("s-M" . rm-set-mark)                 ;矩形标记
   ("s-X" . rm-exchange-point-and-mark)  ;矩形对角交换
   ("s-D" . rm-kill-region)              ;矩形删除
   ("s-S" . rm-kill-ring-save)           ;矩形保存
   ("s-Y" . yank-rectangle)              ;粘帖矩形
   ("s-O" . open-rectangle)              ;用空白填充矩形, 并向右移动文本
   ("s-C" . clear-rectangle)             ;清空矩形
   ("s-T" . string-rectangle)            ;用字符串替代矩形的每一行
   ("s-I" . string-insert-rectangle)     ;插入字符串在矩形的每一行
   ("s-F" . delete-whitespace-rectangle) ;删除矩形中空格
   ("s-\"" . copy-rectangle-to-register) ;拷贝矩形到寄存器
   ("s-:" . mark-rectangle-to-end)       ;标记矩形到行末
   )
"rect-extension")
;;; ### Font ###
;;; --- 字体命令
(lazy-set-key
'(
   ("s--" . text-scale-decrease)        ;减小字体大小
   ("s-=" . text-scale-increase)        ;增加字体大小
   ("M--" . text-scale-decrease-global) ;减少字体大小, 全局
   ("M-+" . text-scale-increase-global) ;增加字体大小, 全局
   ("M-=" . text-scale-default-global)  ;恢复字体大小, 全局
   ))
;;; ### Window Operation ###
;;; --- 窗口操作
(lazy-set-key
'(
   ("C-c v" . split-window-vertically)   ;纵向分割窗口
   ("C-c h" . split-window-horizontally) ;横向分割窗口
   ("C-;" . kill-this-buffer)            ;关闭当前buffer
   ("C-x ;" . delete-other-windows)      ;关闭其它窗口
   ))
;;; ### Multi-Scratch
(lazy-set-autoload-key
'(
   ("s-a" . multi-scratch-new)
   ("s-A" . multi-scratch-next)
   )
"multi-scratch")
(lazy-set-autoload-key
'(
   ("s-;" . one-key-menu-window-navigation) ;快速窗口导航
   )
"init-window")
(lazy-set-autoload-key
'(
   ("C-c V" . delete-other-windows-vertically+)   ;关闭上下的其他窗口
   ("C-c H" . delete-other-windows-horizontally+) ;关闭左右的其他窗口
   ("C-'" . delete-current-buffer-and-window)     ;关闭当前buffer, 并关闭窗口
   ("C-\"" . delete-current-buffer-window)        ;删除当前buffer的窗口
   ("C-s-7" . select-next-window)                 ;选择下一个窗口
   ("C-s-8" . select-prev-window)                 ;选择上一个窗口
   ("M-s-o" . toggle-one-window)                  ;切换一个窗口
   ("C-x o" . other-window)
   ("C-x O" . toggle-window-split)
   )
"window-extension")
;;; ### Tabbar ###
;;; --- 多标签浏览
(lazy-set-key
'(
   ("M-7" . tabbar-backward-tab)              ;移动到后一个标签
   ("M-8" . tabbar-forward-tab)               ;移动到前一个标签
   ("M-9" . tabbar-backward-group)            ;移动到后一个标签组
   ("M-0" . tabbar-forward-group)             ;移动到前一个标签组
   ("<C-tab>" . tabbar-backward-tab)          ;移动到后一个标签
   ("<C-S-iso-lefttab>" . tabbar-forward-tab) ;移动到前一个标签
   ))
(lazy-set-autoload-key
'(
   ("M-&" . tabbar-backward-tab-other-window) ;向前移动其他窗口的标签
   ("M-*" . tabbar-forward-tab-other-window)  ;向后移动其他窗口的标签
   ("M-s-7" . tabbar-select-beg-tab)          ;移动到最左边的标签
   ("M-s-8" . tabbar-select-end-tab)          ;移动到最右边的标签
   )
"tabbar-extension")
;;; ### Functin key ###
;;; --- 功能函数
(lazy-set-key
'(
   ("<f1>" . sh-show-help)                       ;elisp help
   ("<f2>" . refresh-file)                       ;自动刷新文件
   ("<f3>" . visit-tags-table)                   ;查找TAGS文件 (更新TAGS表)
   ("<f4>" . generate-gtags-files)               ;生成gtags引用文件
   ("<f5>" . emacs-session-save)                 ;退出emacs
   ("C-x C-c" . emacs-session-save)              ;退出emacs
   ("<f6>" . lock-screen)                        ;锁屏
   ("<f8>" . dired-jump)                         ;文件管理起
   ("<f9>" . list-load-path-shadows)             ;显示重复加载的库
   ("<f10>" . open-current-log-keyboard-command) ;打开命令日志
   ("<f12>" . hibernate-disk)                    ;休眠
   ("M-1" . strip-blank-lines)                   ;删除选中区域的所有空行
   ("M-2" . indent-buffer)                       ;自动格式化当前Buffer
   ("M-3" . delete-trailing-whitespace)          ;删除行末空格
   ("M-4" . whitespace-cleanup)                  ;清理空格
   ("M-5" . insert-line-number+)                 ;自动在行首添加行号
   ("M-6" . strip-line-number)                   ;删除选中区域的行号
   ("C-4" . insert-changelog-date)               ;插入日志时间 (%Y/%m/%d)
   ("C-5" . insert-standard-date)                ;插入标准时间 (%Y-%m-%d %T)
   ("C-&" . switch-to-messages)                  ;跳转到 *Messages* buffer
   ("C-7" . jump-back)                           ;返回查找符号定义前的位置
   ("M-I" . backward-indent)                     ;向后移动4个字符
   ))
(lazy-set-autoload-key
'(
   ("<f11>" . fullscreen-toggle)        ;全屏切换
   )
"fullscreen")
(lazy-set-autoload-key
'(
   ("<f7>" . one-key-menu-ui)           ;用户界面菜单
   )
"init-one-key")
(lazy-set-autoload-key
'(
   ("C-8" . find-function-or-variable-at-point) ;查找符号的定义
   )
"find-func-extension")
;;; ### Paredit ###
;;; --- 结构化编程
(lazy-unset-key
'("M-J" "M-r" "M-s" "M-;" "C-M-f" "C-M-b" "M-)")
paredit-mode-map)                      ;卸载按键
(defvar paredit-key-alist nil)
(setq paredit-key-alist
      '(
        ;; 符号插入
        ("(" . paredit-open-parenthesis)           ;智能 (
        (")" . paredit-close-parenthesis)          ;智能 )
        ("[" . paredit-open-bracket)               ;智能 [
        ("]" . paredit-close-bracket)              ;智能 ]
        ("{" . paredit-open-curly)                 ;智能 {
        ("}" . paredit-close-curly)                ;智能 }
        ("C-s-," . paredit-open-angled)            ;智能 <
        ("C-s-." . paredit-close-angled)           ;智能 >
        ("\"" . paredit-doublequote)               ;智能 "
        ("\\" . paredit-backslash)                 ;智能 \
        ;; 删除
        ("M-o" . paredit-backward-delete)          ;向后删除
        ("C-d" . paredit-forward-delete)           ;向前删除
        ("C-M-m" . paredit-forward-kill-word)      ;向前按词删除
        ("C-M-n" . paredit-backward-kill-word)     ;向后按词删除
        ;; 移动
        ("C-M-S-m" . paredit-forward)              ;向前移动
        ("C-M-S-n" . paredit-backward)             ;向后移动
        ;; 包围
        ("M-\"" . paredit-meta-doublequote)        ;用 " " 包围对象, 或跳出字符串
        ("M-[" . paredit-wrap-square)              ;用 [ ] 包围对象
        ("M-{" . paredit-wrap-curly)               ;用 { } 包围对象
        ("C-(" . paredit-wrap-angled)              ;用 < > 包围对象
        ;; 跳出并换行缩进
        ("M-}" . paredit-close-curly-and-newline)  ;跳出 { } 并换行
        ("M-]" . paredit-close-square-and-newline) ;跳出 [ ] 并换行
        ("C-)" . paredit-close-angled-and-newline) ;跳出 < > 并换行
        ;; 其他
        ("C-j" . paredit-newline)          ;智能换行并缩进
        ("M-q" . paredit-reindent-defun)   ;重新格式化函数
        ("M-s-r" . paredit-raise-sexp)     ;提取表达式, 并删除同一等级的其他表达式
        ("M-s-b" . paredit-convolute-sexp) ;嵌套表达式
        ("M-s-'" . one-key-menu-paredit)   ;Paredit 菜单
        ))
(lazy-set-key paredit-key-alist paredit-mode-map)
(lazy-set-mode-autoload-key
'(
   ("C-k" . paredit-kill+))             ;增强的 paredit-kill
paredit-mode-map nil "paredit-extension")
(lazy-set-autoload-key
'(
   ("C-M-:" . paredit-comment-list-and-newline) ;注释当前LIST并换行
   ("M-:" . paredit-close-round-and-newline+)   ;跳出 ( ) 或 " " 并换行
   ("M-?" . paredit-forward-sexp-and-newline)   ;移动到下一个表达式, 并换行
   ("M-(" . paredit-wrap-sexp)                  ;用 ( ) 包围当前对象
   ("M-)" . paredit-splice-sexp+)               ;去除包围对象的括号, 并删除空行
   ("C-S-k" . paredit-duplicate-closest-sexp)   ;复制光标处的语法块
   )
"paredit-extension")
;;; ### Thingh-edit ###
;;; --- 增强式编辑当前光标的对象
(lazy-set-autoload-key
'(
   ("M-s-h" . one-key-menu-thing-edit)  ;thing-edit 菜单
   )
"init-thing-edit"
)
;;; ### Multi-Term ###
;;; --- 多标签式的shell
(lazy-set-autoload-key
'(
   ("s-n" . multi-term)                      ;新建一个终端
   ("s-x s-x" . multi-term-dedicated-toggle) ;切换专注终端
   ("s-x s-z" . multi-term-dedicated-select) ;选择专注终端
   )
"init-multiterm")
;;; ### W3m ###
;;; --- 网页浏览器
(lazy-set-autoload-key
'(
   ("C-z C-z" . w3m)                    ;启动W3M
   ("s-W" . one-key-menu-w3m-search)    ;w3m 搜索菜单
   )
"init-w3m")
(lazy-set-autoload-key
'(
   ("C-z z" . w3m-startup-background)         ;启动W3M, 后台
   ("C-x C-z" . toggle-w3m-with-other-buffer) ;在W3M和buffer间切换
   )
"w3m-extension")
;;; ### Dired ###
;;; --- Dired
(lazy-set-autoload-key
'(
   ("<f8>" . dired-jump)
   ("C-x C-f" . find-file)
   )
"init-dired")
;;; ### Anything ###
;;; --- 快速buffer切换
(lazy-set-autoload-key
'(
   ("s-y" . helm-dwim)
   ("s-t" . helm-descbinds)
   )
"init-helm")
;; Cycle buffer
(lazy-set-autoload-key
'(
   ("M-C" . one-key-menu-cycle-buffer)  ;特定模式切换
   )
"init-cycle-buffer")
;;; ### Isearch ###
;;; --- 交互式搜索
(lazy-set-key
'(
   ("TAB" . isearch-complete)               ;isearch补全
   ("C-s" . isearch-repeat-forward)         ;重复向前搜索, 第一次可以用来搜索上一次的历史哟
   ("C-r" . isearch-repeat-backward)        ;重复向后搜索
   ("C-g" . isearch-abort)                  ;中止搜索
   ("C-w" . isearch-yank-word-or-char)      ;粘帖光标后的词或字符作为搜索对象
   ("C-y" . isearch-yank-line)              ;粘帖光标后的行作为搜索对象
   ("M-o" . isearch-delete-char)            ;删除
   ("M-p" . isearch-ring-retreat)           ;搜索历史向后
   ("M-n" . isearch-ring-adjust)            ;搜索历史向前
   ("M-y" . isearch-yank-kill)              ;从 kill ring 中粘帖最后一项到搜索对象后
   ("M-h" . isearch-yank-char)              ;粘帖光标后的字符到搜索对象
   ("M-e" . isearch-edit-string)            ;编辑搜索对象
   ("M-c" . isearch-toggle-case-fold)       ;切换大小写
   ("M-r" . isearch-toggle-regexp)          ;切换正则表达式
   ("M-w" . isearch-toggle-word)            ;切换词
   ("M-g" . isearch-moccur)                 ;moccur 当前 buffer
   ("M-G" . isearch-moccur-all)             ;moccur 所有 buffer
   ("M->" . isearch-beginning-of-buffer)    ;跳转到buffer开头并重新搜索, 搜索最前面一个
   ("M-<" . isearch-end-of-buffer)          ;跳转到buffer末尾并重新搜索, 搜索最后面一个
   ("M-%" . isearch-query-replace)          ;替换
   ("M-d" . isearch-find-duplicate-word)    ;查找重复的单词
   ("M-z" . isearch-find-duplicate-line)    ;查找重复的行
   ("C-M-%" . isearch-query-replace-regexp) ;正则表达式替换
   )
isearch-mode-map
)
(lazy-set-autoload-key
'(
   ("M-L" . isearch-to-lazy-search)     ;切换到lazy-search
   )
"lazy-search-extension")
;;; ### Help ###
;;; --- 帮助模式
(eval-after-load 'help-mode
  '(progn
     (lazy-set-key
      '(
        ("J" . scroll-up-one-line)      ;向下滚动一行
        ("K" . scroll-down-one-line)    ;向上滚动一行
        ("H" . describe-mode)           ;帮助
        ("f" . help-go-forward)         ;前一个帮助
        ("b" . help-go-back)            ;后一个帮助
        ("y" . sdcv-search-pointer+)    ;翻译
        ("<tab>" . forward-button)      ;前一个按钮
        )
      help-mode-map)
     (lazy-set-key vi-move-key-alist help-mode-map)
     ))
(add-hook 'package-menu-mode-hook
          '(lambda () (lazy-set-key vi-move-key-alist package-menu-mode-map)))
;;; ### Apt-utils ###
;;; --- Apt 管理工具
(lazy-set-autoload-key
'(
   ("s-x z" . apt-utils-search)         ;APT搜索
   )
"init-apt-utils")
;;; ### Auto-complete ###
;;; --- 自动补全
(lazy-set-key
'(
   ("M-h" . ac-complete)                ;补全当前选中的
   ("M-H" . ac-expand-common)           ;补全公共部分
   ("M-U" . ac-stop)                    ;停止
   ("M-," . ac-next)                    ;下一个
   ("M-." . ac-previous)                ;上一个
   ("M-s" . ac-isearch)                 ;搜索补全
   )
ac-complete-mode-map
)
;;; ### Flymake ###
;;; --- 及时拼写检查
(lazy-set-autoload-key
'(
   ("M-s-j" . flymake-show-next-error)  ;显示下一个错误
   ("M-s-k" . flymake-show-prev-error)  ;显示上一个错误
   )
"flymake-extension"
)
;;; ### kill-ring-search ###
;;; --- 删除环的递增式搜索
(lazy-set-autoload-key
'(
   ("M-s-y" . kill-ring-search)         ;kill ring 搜索
   )
"init-kill-ring-search")
;;; ### Help ###
;;; --- 帮助模式
(lazy-set-autoload-key
'(
   ("C-h". one-key-menu-help)           ;帮助菜单
   )
"init-help-mode")
;;; ### IRC ###
;;; --- 聊天
(lazy-set-autoload-key
'(
   ("M-U" . one-key-menu-irc-channel)   ;跳转到IRC频道
   )
"init-irc")
;;; ### Yoaddmuse ###
;;; --- Yet another oddmuse mode
(lazy-set-autoload-key
'(
   ("M-s-;" . one-key-menu-yaoddmuse)   ;yaoddmuse 菜单
   )
"init-yaoddmuse")
;;; ### Festival ###
;;; --- 语音阅读
(lazy-set-autoload-key
'(
   ("s-x r" . one-key-menu-festival)    ;语音阅读菜单
   )
"init-festival")
;;; ### Less ###
;;; --- 快速浏览模式
(lazy-set-autoload-key
'(
   ("M-s-l" . less-minor-mode)          ;打开less模式
   )
"init-less")
;;; ### Speedbar ###
;;; --- 快速访问文件和tags
(lazy-set-autoload-key
'(
   ("s-z s-z" . sr-speedbar-toggle)        ;显示/隐藏speedbar
   ("s-z s-x" . sr-speedbar-select-window) ;选中speedbar窗口
   )
"init-speedbar")
;;; ### Multiple-cursors ###
;;; --- Multiple cursors, awesome
(lazy-set-autoload-key
'(
   ("s-o" . mc/mark-all-dwim)
   ("s-j" . mc/mark-next-like-this)
   ("s-k" . mc/mark-previous-like-this)
   ("s-u" . mc/unmark-next-like-this)
   ("s-i" . mc/unmark-previous-like-this)
   ("s-Z" . one-key-menu-multiple-cursors)
   )
"init-multiple-cursors"
)
;;; ### Ace jump ###
(lazy-set-autoload-key
'(
   ("s-<" . ace-jump-word-mode)
   ("s->" . ace-jump-char-mode)
   ("s-?" . ace-jump-line-mode)
   )
"ace-jump-mode")
;;; ### Python ###
;;; --- Python mode
(eval-after-load 'python-mode
  '(lambda ()
     (lazy-set-mode-autoload-key
      '(
        ("C-S-j" . jump-to-import)
        )
      python-mode-map nil "python-mode-utils")
     ))
;;; ### Ielm ###
;;; --- Emacs Lisp 解释模式
(autoload 'ielm-map "ielm")
(lazy-set-autoload-key
'(
   ("M-s-i" . ielm-toggle)              ;切换ielm
   ("s-6" . insert-standard-date)       ;插入标准时间
   ("s-7" . insert-changelog-date)      ;插入Changlog时间
   )
"lazycat-toolkit")
(eval-after-load 'ielm-mode
  '(lambda ()
     (progn
       (lazy-unset-key
        '("M-p" "M-n")
        ielm-map)                       ;卸载按键
       (lazy-set-key
        '(
          ("C-s-p" . comint-previous-input) ;上一个输入
          ("C-s-n" . comint-next-input)     ;下一个输入
          )
        ielm-map
        )
       )))
;;; ### Man ###
;;; --- Man
(lazy-set-autoload-key
'(
   ("C-<f1>" . woman))
"init-woman")
;;; ### Predictive ###
;;; --- 英文助手
(lazy-set-autoload-key
'(
   ("M-r" . predictive-mode)            ;英文助手
   )
"init-predictive")
;;; ### Ispell ###
;;; --- 拼写检查
(lazy-set-autoload-key
'(("s-v s-v" . ispell-buffer))
"init-ispell")                         ;检查当前buffer
;;; ### Ido ###
;;; --- 交互式管理文件和缓存
(lazy-set-key
'(
   ("C-x C-f" . ido-find-file)          ;交互式查找文件
   ("C-x b" . ido-switch-buffer)        ;交互式切换buffer
   ("C-x i" . ido-insert-buffer)        ;插入缓存
   ("C-x I" . ido-insert-file)          ;插入文件
   ))
(add-hook 'ido-setup-hook
          '(lambda ()
             (interactive)
             (ido-my-keys ido-completion-map)))
(defun ido-my-keys (keymap)
  "Add my keybindings for ido."
  (lazy-set-key
   '(
     ("M-s-p" . ido-prev-match)              ;上一个匹配
     ("M-s-n" . ido-next-match)              ;下一个匹配
     ("M-s-h" . ido-next-work-directory)     ;下一个工作目录
     ("M-s-l" . ido-prev-work-directory)     ;上一个工作目录
     ("M-o" . backward-delete-char-untabify) ;向前删除字符
     ("M-O" . ido-delete-backward-updir)     ;删除字符或进入上一级目录
     )
   keymap
   ))
;;; ### IRC ###
;;; --- 聊天
(lazy-set-autoload-key
'(
   ("C-c i" . switch-to-erc)                     ;切换到IRC或自动登录IRC
   ("C-c I" . erc-nick-notify-jump-last-channel) ;自动跳转到最后收到消息的频道
   ("M-U" . one-key-menu-irc-channel)            ;跳转到IRC频道
   )
"init-erc")
;;; Elisp
(lazy-set-key
'(
   ("RET" . comment-indent-new-line)    ;自动换行并注释
   )
emacs-lisp-mode-map
)
;;; ### Wget ###
;;; --- 下载程序
(lazy-set-autoload-key
'(
   ("s-c dd" . wget-show)               ;显示下载信息
   ("s-c dh" . wget-hide)               ;隐藏下载信息
   ("s-c dq" . wget-quit-and-exit)      ;停止下载
   )
"wget-extension")
;;; ### EMMS ###
;;; --- Emacs 多媒体系统
(lazy-set-autoload-key
'(
   ("C-c p" . one-key-menu-emms)        ;播放器菜单
   ("<up>" . emms-volume-mode-plus)     ;增加音量
   ("<down>" . emms-volume-mode-minus)  ;减少音量
   ("<left>" . emms-seek-backward)      ;后退
   ("<right>" . emms-seek-forward)      ;前进
   ("M-A" . emms-pause)                 ;暂停/播放
   ("M-X" . emms-random)                ;随机播放
   ("M-Z" . emms-stop)                  ;停止
   )
"init-emms")
;;; ### Org ###
;;; --- 笔记管理和组织
(lazy-set-autoload-key
'(
   ("s-s" . one-key-menu-org-file)      ;Org 文件
   ("C-c r" . org-remember)             ;Org-remeber
   )
"init-org-mode")
;;; ### Top ###
;;; --- 进程管理器
(lazy-set-autoload-key
'(
   ("<s-f8>" . top)                     ;TOP
   )
"init-top")
;;; ### Doc-view ###
;;; --- 文档阅读器
(lazy-set-autoload-key
'(
   ("C-M-j" . doc-view-scroll-up-or-next-page+)       ;翻另一个窗口中图书的下一页
   ("C-M-k" . doc-view-scroll-down-or-previous-page+) ;翻另一个窗口中图书的上一页
   )
"init-doc-view")
;;; ### Keyboard Macro ###
;;; --- 键盘宏
(lazy-set-autoload-key
'(
   ("M-s-s" . kmacro-start-macro-or-insert-counter) ;开始键盘宏或插入
   ("M-s-d" . kmacro-end-or-call-macro)             ;结束键盘宏或调用
   ("M-s-c" . kmacro-delete-ring-head)              ;删除当前的键盘宏
   ("M-s-w" . kmacro-cycle-ring-next)               ;下一个键盘宏
   ("M-s-e" . kmacro-cycle-ring-previous)           ;上一个键盘宏
   ("M-s-a" . kmacro-edit-macro)                    ;编辑键盘宏
   ("M-s-v" . name-last-kbd-macro)                  ;命令当前键盘宏
   ("M-s-f" . insert-kbd-macro)                     ;插入键盘宏
   ("M-s-q" . apply-macro-to-region-lines)          ;应用键盘宏到选择的区域
   )
"macros+")
;;; ### WebKit ###
;; (lazy-set-autoload-key
;;  '(
;;    ("s-/" . webkit-open-url)
;;    )
;;  "webkit")
;;; ### yaoddmuse ###
(lazy-set-autoload-key
'(
   ("C-s-z" . yaoddmuse-post-library-default))
"yaoddmuse-extension")
;;; ### auto-install ###
(lazy-set-autoload-key
'(
   ("C-s-x" . auto-install-from-emacswiki))
"init-auto-install")
;;; ### expand-region ###
(lazy-set-autoload-key
'(
   ("C-=" . er/expand-region))
"expand-region")

(provide 'init-key)

[ Last edited by zzz19760225 on 2016-6-2 at 00:13 ]
作者: zzz19760225     时间: 2016-5-19 19:55    标题: EFI

CSM 编辑
CSM(兼容性支持模块)是BIOS上Boot选项里的一个下拉子项目(一些老的主板上没有此选项),与Secure Boot(安全启动)是并列项。CSM开启使得可以支持UEFI启动和非UEFI启动。若是需要启动传统MBR设备,则需开启CSM。关闭CSM则变成纯UEFI启动,且完全支持安全启动。Secure Boot(安全启动),安全启动仅适用于使用UEFI启动的操作系统。在笔记本的BIOS里,这里更多的是使用Enabled(打开)和Disabled(关闭)两个选项。在电脑自带Windows 8的情况下,Secure Boot(安全启动)默认是Enabled(打开)。从而使得CSM(兼容性支持模块)又默认是Disabled(关闭),进而导致电脑不能启动不完全支持UEFI的设备。要使得电脑能启动不完全支持UEFI的设备,就必须关闭Secure Boot,然后打开CSM。
中文名 兼容性支持模块 外文名 Compatibility Support Module

代码模块编辑
CSM是Code security module(代码安全模块)的缩写。
如TI公司的DSP芯片C2000系列,CSM是与DSP器件融为一体的代码安全特性,它禁止未授权的用户访问片内存储器——即禁止代码被复制和逆向操作。
“代码安全”一次的意思是指保护片内存储器。“代码非安全”的意思是指不能保护片内存储器——即存储器内容可以用任何模式读取。
-------------------------------------------------------------------------------------------------------------------------------------
EFI 编辑
EFI,可扩展固件接口,英文名Extensible Firmware Interface 的缩写,是英特尔一个主导个人电脑技术研发的公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案。同时,EFI也是电子燃料注入(系统) 英文名 electronic fuel injection (system) 的缩写,就是利用各种传感器检测发动机的各种状态,经电脑的判断、计算,使发动机在不同工况下,均能获得合适浓度的可燃混合气的一种系统。
中文名 可扩展固件接口 外文名 EFI 全    名 Extensible Firmware Interface 研发公司英特尔
目录
1 固件接口
▪ 含义EFI的产生
▪ EFI和操作系统
▪ EFI的组成
▪ 各部分功能
▪ EFI的发展
2 电子燃料注入
▪ 概念
▪ 工作原理
▪ 发展简史
▪ 组成和原理
▪ 主要功能
▪ 常见故障
固件接口编辑
含义EFI的产生
BIOS技术的兴起源于IBM PC/AT机器的流行以及第一台由康柏公司研制生产的“克隆”PC。在PC启动的过程中,BIOS担负着初始化硬件,检测硬件功能,以及引导操作系统的责任,在早期,BIOS还提供一套运行时的服务程序给操作系统及应用程序使用。BIOS程序存放于一个掉电后内容不会丢失的只读存储器中,系统加电时处理器的第一条指令的地址会被定位到BIOS的存储器中,便于使初始化程序得到执行。
众所周知,英特尔在近二十年来引领以x86系列处理器为基础的PC技术潮流,它的产品如CPU,芯片组等在PC生产线中占据绝对领导的位置。因此,不少人认为这一举动显示了英特尔公司欲染指固件产品市场的野心。事实上,EFI技术源于英特尔安腾处理器(Itanium)平台的推出。安腾处理器是英特尔瞄准服务器高端市场投入近十年研发力量设计产生的与x86系列完全不同的64位新架构。在x86系列处理器进入32位的时代,由于兼容性的原因,新的处理器(i80386)保留了16位的运行方式(实模式),此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。英特尔将这种情况归咎于BIOS技术的发展缓慢。自从PC兼容机厂商通过净室的方式复制出第一套BIOS源程序,BIOS就以16位汇编代码,寄存器参数调用方式,静态链接,以及1MB以下内存固定编址的形式存在了十几年。虽然由于各大BIOS厂商的努力,有许多新元素添加到产品中,如PnP BIOS,ACPI,传统USB设备支持等等,但BIOS的根本性质没有得到任何改变。这迫使英特尔在开发更新的处理器时,都必须考虑加进使效能大大降低的兼容模式。有人曾打了一个比喻:这就像保时捷新一代的全自动档跑车被人生套上去一个蹩脚的挂档器。
然而,安腾处理器并没有这样的顾虑,它是一个新生的处理器架构,系统固件和操作系统之间的接口都可以完全重新定义。并且这一次,英特尔将其定义为一个可扩展的,标准化的固件接口规范,不同于传统BIOS的固定的,缺乏文档的,完全基于经验和晦涩约定的一个事实标准。基于EFI的第一套系统产品的出现至今已经有五年的时间,如今,英特尔试图将成功运用在高端服务器上的技术推广到市场占有率更有优势的PC产品线中,并承诺在2006年间会投入全力的技术支持。
比较EFI BIOS和Legacy BIOS
一个显著的区别就是EFI BIOS是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,较Legacy BIOS而言更易于实现,容错和纠错特性更强,缩短了系统研发的时间。它运行于32位或64位模式,乃至未来增强的处理器模式下,突破传统16位代码的寻址能力,达到处理器的最大寻址。它利用加载EFI驱动的形式,识别及操作硬件,不同于BIOS利用挂载实模式中断的方式增加硬件功能。后者必须将一段类似于驱动的16位代码,放置在固定的0x000C0000至0x000DFFFF之间存储区中,运行这段代码的初始化部分,它将挂载实模式下约定的中断向量向其他程序提供服务。例如,VGA图形及文本输出中断(INT 10h),磁盘存取中断服务(INT 13h)等等。由于这段存储空间有限(128KB),Legacy BIOS对于所需放置的驱动代码大小超过空间大小的情况无能为力。另外,Legacy BIOS的硬件服务程序都以16位代码的形式存在,这就给运行于增强模式的操作系统访问其服务造成了困难。因此Legacy BIOS提供的服务在现实中只能提供给操作系统引导程序或MS-DOS类操作系统使用。而EFI系统下的驱动并不是由可以直接运行在CPU上的代码组成的,而是用EFI Byte Code(EBC)编写而成的。这是一组专用于EFI驱动的虚拟机器指令,必须在EFI驱动运行环境(Driver Execution Environment,或DXE)下被解释运行。这就保证了充分的向下兼容性,打个比方说,一个带有EFI驱动的扩展设备,既可以将其安装在安腾处理器的系统中,也可以安装于支持EFI的新PC系统中,而它的EFI驱动不需要重新编写。这样就无需对系统升级带来的兼容性因素作任何考虑。另外,由于EFI驱动开发简单,所有的PC部件提供商都可以参与,情形非常类似于现代操作系统的开发模式,这个开发模式曾使Windows在短短的两三年时间内成为功能强大,性能优越的操作系统。基于EFI的驱动模型可以使EFI系统接触到所有的硬件功能,在操作操作系统运行以前浏览万维网站不再是天方夜谭,甚至实现起来也非常简单。这对基于传统BIOS的系统来说是件不可能的任务,在BIOS中添加几个简单的USB设备支持都曾使很多BIOS设计师痛苦万分,更何况除了添加对无数网络硬件的支持外,还得凭空构建一个16位模式下的TCP/IP协议栈。
一些人认为BIOS只不过是由于兼容性问题遗留下来的无足轻重的部分,不值得为它花费太大的升级努力。而反对者认为,当BIOS的出现制约了PC技术的发展时,必须有人对它作必要的改变。
EFI和操作系统
EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。首先,它只是硬件和预启动软件间的接口规范;其次,EFI环境下不提供中断的访问机制,也就是说每个EFI驱动程序必须用轮询的方式来检查硬件状态,并且需要以解释的方式运行,较操作系统下的驱动效率更低;再则,EFI系统不提供复杂的存储器保护功能,它只具备简单的存储器管理机制,具体来说就是指运行在x86处理器的段保护模式下,以最大寻址能力为限把存储器分为一个平坦的段,所有的程序都有权限存取任何一段位置,并不提供真实的保护服务。当EFI所有组件加载完毕时,系统可以开启一个类似于操作系统Shell的命令解释环境,在这里,用户可以调入执行任何EFI应用程序,这些程序可以是硬件检测及除错软件,引导管理,设置软件,操作系统引导软件等等。理论上来说,对于EFI应用程序的功能并没有任何限制,任何人都可以编写这类软件,并且效果较以前MS-DOS下的软件更华丽,功能更强大。一旦引导软件将控制权交给操作系统,所有用于引导的服务代码将全部停止工作,部分运行时代服务程序还可以继续工作,以便于操作系统一时无法找到特定设备的驱动程序时,该设备还可以继续被使用。
EFI的组成
一般认为,EFI由以下几个部分组成:
Pre-EFI初始化模块
EFI驱动执行环境
EFI驱动程序
兼容性支持模块(CSM)
EFI高层应用
GUID 磁盘分区
各部分功能
在实现中,EFI初始化模块和驱动执行环境通常被集成在一个只读存储器中。Pre-EFI初始化程序在系统开机的时候最先得到执行,它负责最初的CPU,主桥及存储器的初始化工作,紧接着载入EFI驱动执行环境(DXE)。当DXE被载入运行时,系统便具有了枚举并加载其他EFI驱动的能力。在基于PCI架构的系统中,各PCI桥及PCI适配器的EFI驱动会被相继加载及初始化;这时,系统进而枚举并加载各桥接器及适配器后面的各种总线及设备驱动程序,周而复始,直到最后一个设备的驱动程序被成功加载。正因如此,EFI驱动程序可以放置于系统的任何位置,只要能保证它可以按顺序被正确枚举。例如一个具PCI总线接口的ATAPI大容量存储适配器,其EFI驱动程序一般会放置在这个设备的符合PCI规范的扩展只读存储器(PCI Expansion ROM)中,当PCI总线驱动被加载完毕,并开始枚举其子设备时,这个存储适配器旋即被正确识别并加载它的驱动程序。部分EFI驱动程序还可以放置在某个磁盘的EFI专用分区中,只要这些驱动不是用于加载这个磁盘的驱动的必要部件。在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT)被引入,新结构中,磁盘的分区数不再受限制(在MBR结构下,只能存在4个主分区),并且分区类型将由GUID来表示。在众多的分区类型中,EFI系统分区可以被EFI系统存取,用于存放部分驱动和应用程序。很多人担心这将会导致新的安全性因素,因为EFI系统比传统的BIOS更易于受到计算机病毒的攻击,当一部分EFI驱动程序被破坏时,系统有可能面临无法引导的情况。实际上,系统引导所依赖的EFI驱动部分通常都不会存放在EFI的GUID分区中,即使分区中的驱动程序遭到破坏,也可以用简单的方法得到恢复,这与操作系统下的驱动程序的存储习惯是一致的。CSM是在x86平台EFI系统中的一个特殊的模块,它将为不具备EFI引导能力的操作系统提供类似于传统BIOS的系统服务。
EFI的发展
英特尔无疑是推广EFI的积极因素,由于业界对其认识的不断深入,更多的厂商正投入这方面的研究。包括英特尔,AMD在内的一些PC生产厂家联合成立了联合可扩展固件接口论坛,它将在近期推出第一版规范。这个组织将接手规划EFI发展的重任,并将英特尔的EFI框架解释为这个规范的一个具体实现。另外,各大BIOS提供商如Phoenix, AMI等,原先被认为是EFI发展的阻碍力量,不断的推出各自的解决方案。分析人士指出,这是由于BIOS厂商在EFI架构中重新找到了诸如Pre-EFI启动环境之类的市场位置,然而,随着EFI在PC系统上的成功运用,以及英特尔新一代芯片组的推出,这一部分市场份额将会不出意料的在英特尔的掌控之中。

[ Last edited by zzz19760225 on 2016-6-4 at 19:54 ]
作者: zzz19760225     时间: 2016-5-19 19:55    标题: 知原

http://www.ctk3.cn/ctk3/

http://zyctk3.blogchina.com/

http://blog.kdnet.net/boke.asp?ctk3.index.html

《中华复兴方略》:大一统的思想体系

    这本书是我八年心血的结晶。我是在九二年六月份(当时正好是我的生日)开始产生属于自己的思想的,后来又经过六年的沉思,终于将它发展为包括文化观、宇宙观、历史观、社会政治学说、人生观、认知论等较为全面的哲学体系。又用了随后的两年时间才将它写出来。
    本书主要在阐明这样一种观点:自1840年鸦片战争以来的中国,是一个灾难深重的国家。在这一百多年里的中国大地上,发生了非常频繁的社会运动、政治斗争、军事冲突。而造成这场大灾难的根本原因就是,自文艺复兴后诞生的一种新型西方文化对中国冲击的结果。因此,要想“振兴中华”(这是本书书名的来历)、将中国从这场大灾难中解救出来,最根本的方法就是将中西两种文化融合起来。
    怎样才能将中西两种文化融合起来呢?笔者认为,最重要、最根本的方法就是要将中西两种文化的“哲学”融合起来。因为,哲学是文化的最核心内容,是一种文化的根本价值之所在。而本书的核心内容就是试图提出一种融合了中西两种文化的新“哲学”。
    笔者认为,中国文化的“哲学”是以社会政治哲学为其主要内容的,也就是说中国的哲学家们最关心的问题是社会政治问题;而西方文化的“哲学”则是以认知哲学为其主要内容,即西方的哲人们最关心的问题是人类的认知问题。因此笔者认为,要想将中西两种文化的“哲学”融合起来,就必须将中国的社会政治哲学与西方的认知哲学结合起来。
    事实上,这两大文化的哲学的各自的优点也正好是对方的缺点——中国文化的哲学的特点是非常关注人们的社会生活,从而发展了社会政治哲学,其缺点则是忽视了人类的认知问题;西方文化的哲学的特点是非常关注人类的认知问题,从而发展了认知哲学,并由此发展出了科学及工业文明,其缺点则是在政治哲学方面一直存在着狭隘性,没有中国社会政治哲学追求与整个宇宙融通的那种博大精神。因此,只有将中国文化的社会政治哲学与西方的认知哲学结合起来所创立的“新哲学”,才能消除双方的缺点、成为一种真正完备的哲学体系,才能更好的指导人类的生存和发展。
    那么,怎样才能将中国文化的社会政治哲学与西方的认知哲学结合起来呢?笔者在中国的社会政治哲学的根本精神中,及在本书中提出的解决西方认知哲学的一个悬而未解的根本问题的方案上找到了两者结合的切入点。
    笔者认为,中国的社会政治哲学的最根本精神是“大一统”、“大统一”的思想,这种社会政治哲学不仅主张“天下”的“大一统”、“大统一”,而且还主张人类与整个宇宙相互融通、和谐相处——体现为“天人和一”的思想。
    另一方面,西方的认知哲学中一直都存在着一个悬而未解的根本问题,那就是人类的理性(即人类认识事物的认知能力、认知功能)到底是演绎的,还是归纳的?这使得西方哲学一般可分为两大阵营——演绎主义派和归纳主义派。但是,由于单纯的演绎法和单纯的归纳法都存在着严重的缺陷,并且两者的优缺点又正好相反。因此,需要将演绎法和归纳法结合起来才能解决双方的问题。
    本书的《演绎、归纳与宇宙的统一性》和《认知论的终结》这两篇文章对这个问题作了一个完整的回答。本书用的就是中国社会政治哲学中所强调的最核心精神——“大一统”、“大统一”的思想。当然在本书中,笔者是用“宇宙的统一性”原理表述的。本书认为,人类的根本理性是归纳理性,而不是演绎理性。而保障归纳法的有效性的根本原因就是由于我们的宇宙是“统一”的。但是“宇宙是统一的”本身又是宇宙的“演绎性”的一种表现。因此,本书实际上是将演绎法归为“宇宙的理性”,而不是人类的理性。这样,本书在否定了人类的理性是演绎理性的同时,又没有否认演绎法的作用,而是将其提高到了更高的层次上。
    事实上,本书的整个哲学体系正是以“大一统”、“大统一”的思想为主杆串联起来的。本书的《系统论》一文,在于描述宇宙万物普遍存在的一种结构组成模式——“系统”所具有的特点,并着重描述了有序系统的特征,而这种有序系统实际上就很好的体现了“大一统”、“大统一”的思想;本书的《宇宙的本原及演化》一文,在于说明整个宇宙实际上就是一个可以统一为宇宙的本原(组成单位)和本源(起源)的“大一统”、“大统一”的体系;本书的《理想国》一文,在于描绘一个最具有“大一统”、“大统一”体系的国家,并认为这样的国家就是最完美、最理想的国家。本书的《演绎、归纳与宇宙的统一性》和《认知论的终结》,我们在前面已经说了,在于用“宇宙的统一性”原理解决西方的认知哲学中存在的一个最根本性问题--演绎法和归纳法的问题。而本书的其它篇章虽然一般不直接与“大一统”、“大统一”的思想相关,但它们与其它篇章是紧密相关联的,因此和其它篇章一起构成了一个统一的哲学体系。
    当然,笔者所构建的这个哲学体系是否真的融合了中西方哲学,这需要由他人来评说及由时间去证明。但有一点,笔者相信自己是绝对正确的,那就是笔者的工作方向和事业。笔者认为,由于西方文化在中国已经传播了一百多年,因此现今的中国哲人已经能够很好的理解西方哲学的基本精神了。因此,在现在或稍后的一段时间,出现一大批试图融会中西文化的哲人将是历史发展的必然。尽管他们现在很可能和笔者一样只是在默默无闻的工作。
    因此,笔者相信,即使笔者不能融合中西文化,在不久的将来也会有人做出这项伟大的事业,从而使得中国能够最终得以振兴。而本书的内容只要能给后人提供一些值得参考的经验,笔者也就感到欣慰了。
    最后,笔者在此希望所有有志于振兴中华的爱国志士们能够加入到这项伟大的事业中来!

      CTK
    2000.10.13

-------------------------------------------------------------------------------------------------
《中华复兴方略》的起源与发展
作者:知原 《中华复兴方略》 http://www.ctk3.cn/zhfx/

  我的思想主要有三大起源:一、初二时对代数的逻辑体系的领悟,这使我很早就理解了西方哲学和科学的精神,并以此为起点逐渐发展和完善了这方面的思想;二、受柏拉图《理想国》中由杰出人才治理国家思想的启发,提出了能力治国的思想,并结合社会主义的生产资料公有制观念,提出了政治公有制与经济公有制的区分,认为社会主义追求的生产资料公有制只是经济公有制,而西方的宪政民主政治体制则是政治公有制;三、受融合中西文明及社会主义思想的影响,用中国传统文化的哲学精神——大一统(宇宙统一论)思想融合西方哲学中的演绎和归纳,用中国传统宗法社会、血缘等级社会的反动——能力治国思想融合西方的民主政治(政治公有制)理论,以及社会主义的公有制思想。经过多年的思考、学习、交流,发展和完善,我觉得现在已经比较成熟了,有些已经在网上产生了比较大的影响。现简介如下,更详细的可以参看我的著作——《中华复兴方略》、《新社会主义》、《哲学思考》。



  我读初二时领悟到了代数的构建方法,我发现所谓乘法就是对许多个相同的数作加法运算的一种简约记法,所谓乘方就是对许多个相同的数作乘法运算的一种简约记法。我将加法称之谓一阶运算,乘法称之谓二阶运算,乘方称之谓三阶运算。我用一个统一的“米”字符表示运算符号,它上面加一个数字表示运算的阶数,比如,“米”字符上面加一个1表示为一阶运算(即“+”),“米”字符上面加一个2表示为二阶运算(即“×”),“米”字符上面加一个3表示为三阶运算(即“^”)。我认为还应该有比乘方运算更高的四阶运算、五阶运算乃至n阶运算。
  我将代数的这一规律称之谓“同算律”。我还发现了代数的另外两个重要构造原理:通表律和逆算律。所谓“通表律”是指,用一些通用的集合符号表示服从某种共同规律的元素符号。比如加法交换律,如果用1、2、3……等纯数字举例子表示是很麻烦的,但用a和b这样的通用形式表示却很简单:a+b=b+a,其中a和b分别表示两个自然数。所谓逆算律是指,诸如:a+b=c→a=c-b或b=c-a,a×b=c→a=c/b或b=c/a等,构造减法、开方和对数等逆运算的一种方法。
  我发现代数的基本骨架是由这三个原理构造的,当然细节部分还需总结更多的构造原理。另外,我们目前的代数只发展到了三阶运算阶段,即乘方和它的两个逆运算--开方和对数运算。还有,正运算都是封闭的,而逆运算一般是开放的,即正运算不会导致数域的扩充,而逆运算一般会导致数域的扩充。由于我认识到还存在比乘方更高的四阶运算、五阶运算等,所以我认为复数数域只是代数发展到三阶运算阶段的最大数域,随着对四阶运算、五阶运算等的认识,数域的范围也会随之而扩大。
  初二的这一领悟对我后来的许多思想产生了重大影响,这一发现使我很早就认识到代数是一门严谨的演绎体系,是可以不通过任何实践活动而仅凭我上面说的三个原理无限推演下去的。不过,我初二时自学过微积分,我意识到从我说的这三个原理中很难推导出微积分,这使我认识到这三个原理是我从现有的代数中归纳出来的,因此这种推演必然是封闭的——封闭于代数,要想使这一推演为开放的,我们就必须去归纳更多的、更基本的原理,而归纳所依赖的基本知识的产生是必须依赖于人类的实践活动,是人们从实践中总结出来的。这一认识使我后来在接触西方哲学时能很容易理解西方哲学的基本精神从而写出《演绎、归纳与宇宙的统一性》等文章。
  了解西方哲学的人应该知道,西方哲学受亚里士多德形式逻辑和欧几里德几何学中的公理方法的影响很大。亚里士多德的形式逻辑主要是研究“必然的得出”的演绎逻辑的,欧几里德几何学告诉我们,人类的知识可以从为数不多的基本原理(公理)出发,通过“必然的得出”推出各种定理构建整个几何学体系。后来的西方人以欧氏几何为楷模,以亚氏形式逻辑为指南,总是试图将各门知识建立成公理化的演绎体系。
  但是公理是如何产生和发现的呢?这成了这一方法的最大问题。古希腊的阿基米德以及近代的伽利略给出了答案,就是通过观察和实验建立和发现公理(定律),培根将这种方法称之谓归纳法,并被后来的穆勒总结为“求因果关系五法”。爱因斯坦将西方的科学归结为这两种方法的结合。
  我对演绎法和归纳法的思考虽然受益于代数而非几何,但从中领悟到的西方哲学和科学精神却是一样的。这可能与代数建成体系要远比几何迟有关。在代数和几何两者间,我明显的更喜欢代数,因为代数不需要任何公理,它是一个纯概念的演绎体系(1+1=2不是公理,而是定义,即我们将1+1定义为2),而几何却依赖于一些基本公理,我从那时起就有一种不愿承认公理的心理。
  经过多年的思考使我认识到演绎法从本质上讲它其实是客观宇宙的方法,主要表现为时间序列的演化以及空间序列的结构组成。而归纳法才是人类的方法,人类是通过归纳法从客观宇宙中获取知识的——获取时间序列上的演化知识和空间序列上的结构组成知识。由于人类的知识是对客观宇宙的局部认识,因此人类的知识也必定表现为某种演绎性,尤其是数学知识与物理知识。宇宙的演绎性从另一方面讲就是宇宙的统一性,即客观事物一般都有共同的起源——本源,和结构组成单位——本原。而归纳法的根本任务就是逆着客观宇宙的演绎方向求解客观宇宙的本源和本原,所以我提出了“求本源和本原归纳法”。
大家可以从《代数的体系》、《演绎、归纳与宇宙的统一性》、《认识论的终结》、《西方哲学应破除演绎中心主义》、《最可靠的归纳法——求本源和本原归纳法》等文章中了解我这方面思想的发展脉络。



  当我头次接触到柏拉图《理想国》中由杰出人才治理国家的思想时,我当时大受感动,感到它帮我说出了我潜意识里一直想表达但又还没有表达出来的观点。现在回想起来可能与我当时的生活环境有关。
  我刚高中毕业,父母就告诉我有教育局的占地招工指标,问我去不去?由于教书要读师范,而我刚读完高中不愿再读与高中同级别的中专的师范。父亲则认为教育局的占地招工指标肯定要分配到乡下,而教育系统的到乡下后不容易调上来,更重要的原因是他是电力局的,他认为电力局要比教育局好,所以也不大愿意让我去。我当时就觉得很奇怪,社会怎么是这样的?怎么找工作不是凭自己的能力和兴趣,而是搞什么“占地招工指标”、“内招”,是由父母决定的。
  大约一年左右,父亲真的把我弄到电力局上班了。当时弄到电力局上班是比较容易的(只要父母有一方是电力局的,子女吃商品粮的,就可以弄进去),但上班容易,弄到招工指标却很难。没弄到招工指标在里面上班,只属于待业青年——上班了却还只能算待业,真是会发明创造,就像农民进城打工叫农民工一样。同样上班,干同样的工作,正式工与待业青年的待遇差别是很大,而电力局又是所谓的好单位,外面的都想往里面挤。
  正是这样的环境使我深刻的体会到了,我们的社会其实还是一个血缘等级社会,在这样的社会里,个人的能力是次要的,父母和亲属的权力、地位、关系才是最重要的。正因为有这样的体会,所以当我首次接触到柏拉图由杰出人才治理国家的思想,我才有那样的感觉。
  但这并不能说我的这种思想是受西方的影响,因为没过多久,我就发现中国古代的墨子也提出过类似的思想——尚贤,只不过由于机遇原因我是先从柏拉图那里接触到这种思想的吧了。另外,到目前为止柏拉图的这种思想在西方也还没有成为主流。
  不过,我觉得柏拉图的这种思想是一种精英主义,只强调杰出人才的作用,而忽视了下层人民的作用。所以我提出了更合理的思想——能力治国。与柏拉图的由杰出人才治理国家的思想不同,能力治国是把我们每个人都看成有某方面能力、特长的人,主张应当充分发挥每个人的能力,将人的能力与社会分工最恰当的搭配起来。墨子的尚贤到与之更为接近。
  可笑的是,许多人一听到能力治国一词就把它定性为精英主义,难道我们非要无视人的能力差异、特长不同才算合理吗?我现在觉得有一个更好的词表达我这方面的思想,那就是科学治国,能力治国是科学治国的基本要求,民主选举与科举考试是选拔人才的两种方式,分权制衡则是实现科学治国的制度保证。
  提出能力治国的思想后,我立即想到了它的对立面——血缘治国。我认为能力治国本来是最容易实现的,但由于人类社会化血缘关系的原因,当有能力的人获得了权力和财产之后,通常不是将权力和财产转交给和他们同样有能力的人,而是更愿意转交给他们的子女,这样权力和财产就不可避免的逐渐落到了无能之人手里,国家和社会的灾难就由此而产生,人民的疾苦就由此而造成。而传统的中国是宗法社会、血缘等级社会,因此受此危害最大。
  后来我进一步认识到,权力和财产如果是完全凭自己的努力和能力获得的到不一定是坏事,比如,盖茨和巴菲特通过自己的努力和能力获得的巨额财富。真正成为坏事的是,那些纨绔子弟们可以不劳而获,仅仅因为出身好而从其父母那里继承权力和财产。所以我认为我们更应该反对的是这种建立在血缘继承权基础上的家族性质的私有制(世袭制),而不是那种凭自己的能力和努力获得权力和财产的个人性质的私有制;另外我认识到马克思所说的私有制和公有制都是指的生产资料,是一种经济意义的私有制或公有制,而忽视了另一种更重要的私有制和公有制——政治私有制或政治公有制,即权力和社会地位归谁所有、能否世袭给其子女。
  这让我将能力治国思想与社会主义思想结合起来了,我认为能力治国的社会才是真正的社会主义社会。真正的社会主义不应该反对那些凭自己的能力和努力获取权力和财产的人,而应该反对的是由血缘继承权造成的社会不公、人和人之间的不平等。
  进一步的思考让我认识到,西方目前的政体才是真正意义上的政治公有制,在那里即使是最高权力也受到限制并只能在规定的范围内行使,有分权制衡(不一定是三权分立)这种方式作保障,官员(政务官和事务官)通过选举或考试的方式选拔人民信任或有能力的人,人民的权利通过选举来表达。而古代的皇权(王权)专制世袭制则是一种真正的政治私有制,最高权力没有限制和制约,皇帝或国王在皇族中世代相传,人民的权利无法表达。尤其是中国西周时期的宗法分封世袭制,是一种最完善的政治私有制,在那里社会的各阶层几乎都是通过世袭制而世代相传,人的能力被世袭制窒息。当然西方目前的政体还存在很多不足,还需要完善,但作为政治公有制显然已经成型了。
这样,我就将能力治国的思想与社会主义及宪政民主主义结合起来了。
  大家可以从《能力治国与血缘治国》、《理想国》、《论政治私有制与政治公有制》、《再论政治私有制与政治公有制》、《民主运动、社会主义运动与能力治国运动》、《共和与权力公有》、《民主制与公有制》、《五权分立制和能力治国制》、《把统治者关进笼子之后》、《我们应该实行什么样的民主?》等文章中了解我这方面思想的脉络。



  我人生中曾有两次在图书馆集中读书:一次是小学毕业至初一,当时主要看的是科学方面的书,其中有两本书对我的影响很大,一本是《星星离我们有多远?》,让我对宇观世界有了基本了解,另一本是《在10-13厘米以内》,让我对微观量子世界有了基本认识;另一次是高三下半年之后的好几年,这一时期读的书比较多、比较杂,有科技方面的、哲学思想方面的、社会政治方面和历史文化方面的等等。
  正是在这第二次集中读书的过程中,我接受了融合中西文明及社会主义这三大思潮的思想,并立志为之而奋斗。1840年至今的中国是一个非常特殊的时期,传统儒家文明受到严重摧残,近现代西方文明对中国的影响却主要集中在物质文明层面,马克思主义虽然在中国取得了政权,但几十年的实践问题不少。中国还未能从这个特殊时期走出来,中国未来的出路只能是将这三大思潮的优质成份结合起来而去其糟粕。
  经过十几年的努力,我现在基本上实现了早年的志向,虽然还需要不断完善,但基本框架已经成型。细心的读者其实可以从上面的两小节中看出端倪。我的融合可以分为哲学思想和社会政治思想两大方面。
  在哲学思想方面,我用中国传统哲学精神中的“大统一”——宇宙的统一性来融合西方哲学中的演绎和归纳。所谓宇宙的统一性,是指复杂多样的客观事物一般都是由共同的起源——“本源”演化而来的,和由共同的结构组成单位——“本原”组合而成的,因而服从共同的规律——原理和公式。
  宇宙的统一性其实也就是客观宇宙的演绎性,即客观宇宙存在两个方面的演绎,一是时间序列上的演化,二是空间序列的结构组成。而西方哲学家们谈的演绎一般是指人类知识体系中的演绎,其中最具有代表性的就是欧氏几何。但人类的知识体系是人类通过长期的实践活动,从与其生活比较紧密的客观宇宙中总结出来的,因此人类知识体系中的演绎只不过是对客观宇宙的演绎的局部反映吧了。
  而归纳法才是人类认识客观宇宙的真正方法。人类是通过归纳法从客观宇宙中获取知识的——获取时间序列上的演化知识和空间序列上的结构组成知识,归纳法的根本任务就是逆着客观宇宙的演绎方向求解客观宇宙的本源和本原。人类的归纳法之所以有效,是因为我们的客观宇宙不是杂乱无章,不是随机变化的,而是有共同本源和本原的。也就是说,人类的归纳法其实就是对客观宇宙的演绎性作逆运算,而客观宇宙的演绎性则保证了这一逆运算的有效性。
  我们知道马克思的哲学方法论来源于黑格尔的辩证法,而康德、黑格尔的哲学是对他们之前的近代西方哲学中的唯理主义(演绎主义)和经验主义(归纳主义)的融合,但他们走的路子是用唯理主义融合他们之前的唯理主义和经验主义。即他们之间的唯理主义认为存在绝对可信的知识——公理、定律,以此作为演绎法的推理前提,因此是基础主义的唯理主义。他们吸收了他们之前的经验主义思想,对公理和定律抱有怀疑,因此是无基础的唯理主义。在黑格尔的哲学里,演绎法的前提是通过“正题—反题—合题”的否定之否定的方式辩证展开的。
  我的哲学也是对康德、黑格尔之前的唯理主义和经验主义的融合,只不过我走的路子与康德、黑格尔的路子正好相反,是用经验主义融合他们之前的唯理主义和经验主义。他们之前的经验主义是鲜少谈客观宇宙的,而我则认为演绎性和唯理性是客观宇宙的基本特性,正是由于客观宇宙的演绎性、唯理性,才保证了人类归纳法的有效、经验的有效。我也对人类知识体系中的演绎的前提抱有怀疑,认为它们是通过“破缺循环”的方式展开的,主张从对客观宇宙的本源和本原的不断深入认识的过程中获取这种知识。
  在社会政治思想方面,我从对传统中国的血亲等级社会在当代中国的遗留(由于1905科举制的废除有些方面其实更严重了)的反对,以及受柏拉图、墨子的启发,提出了能力治国的思想。认为真正的私有制社会应当是建立在血缘关系基础上的家族性质的,即父母可以将其权力和财产世袭给子女;真正的公有制社会应当是废除了这种世袭权的社会,任何人都是完全凭自己的能力和努力获取自己应得的权力和财产。因而对社会主义的公有观和私有观进行了改造。
  另外,我认为马克思的生产资料公有制仅仅只是一种经济公有制,还存在一种更重要的公有制,那就是政治公有制。我认为西方目前的宪政民主体制就是一种政治公有制,只不过他们的经济制度还处在集体所有制(股东集体所有的股份制)阶段,还没有转变成完全的生产资料公有制,他们的福利国家制度和高额遗产税则是在消费资料方面向经济公有制转变。因此将西方的政治经济制度也融合进来了。

《中华复兴方略》 http://www.ctk3.cn/zhfx/

[ Last edited by zzz19760225 on 2016-6-3 at 08:45 ]
作者: zzz19760225     时间: 2016-5-19 19:56    标题: 文本和编辑功能

linux下的gedit命令使用方法与技巧
2012-03-16      0 个评论       收藏     我要投稿
1、启动:
  从菜单启动:应用程序——>附件——>文本编辑器
  从命令行执行以下命令: gedit
  2、窗口说明:
  菜单栏:包含您在 gedit 中处理文件所需的所有命令。
  工具栏:包含您可以从菜单栏访问的命令的子集。
  显示区域:该区域包含您正在编辑的文件的文本。
  输出窗口:显示 Shell 命令插件和比较文件插件返回的输出。
  状态栏:显示关于当前 gedit 活动的信息和关于菜单项的上下文信息。
  3、小技巧:
  a、打开多个文件:
  要从命令行打开多个文件,请键入下面的命令,然后按下回车键:gedit file1.txt file2.txt file3.txt
  b、将命令输出输送到文件中:
  例如,要将 ls 命令的输出输送到一个文本文件中,请键入 ls | gedit,然后按下回车键。ls 命令的输出就会显示在 gedit 窗口的一个新文件中。
  c、更改突出显示模式以适用文件编写:
  查看——>突出显示模式——>标记语言——>HTML即可以彩色模式查看html文件
  d、善用插件:
  文档统计信息:计算当前文件中的行数、单词数、字符数及字节数。该插件将结果显示在一个“文档统计信息”对话框中。
  缩进行:对选定的行进行缩进,或从选定的行删除缩进。
  插入日期/时间:在文件中插入当前日期和时间。
  Shell: 命令在输出窗口中显示 shell 命令的文本输出。
  排序:对选定的文本进行排序。
  e、快捷键:
  CTRL-Z:撤销
  CTRL-C:复制
  CTRL-V:粘贴
  CTRL-T:缩进
  CTRL-Q:退出
  CTRL-S:保存
  CTRL—R:替换
  CTRL+Tab 切换
  CTRL+W 关闭选项卡

有时候在Linux上使用基于GUI的程序,你必须在程序窗口和命令行窗口之间切换。这会消耗一些时间。将一个终端窗口嵌入到程序窗口内部是个很好的解决方案。我不知道在其他程序是否可以,但是,如果你为gedit寻找一个这样的解决方案,那么这儿有一个插件-- Embedded Terminal -- 能让你从gedit窗口内部访问命令行终端。


简短教程

安装了这个插件后,可以让用户很容易地在编辑文件的同时访问命令行。

这是插件启用后的gedit窗口截图:

如上,你可以看到在gedit窗口内部命令行操作与编辑文本文件集成到了一起。

下载/安装

通过以下步骤来正确地在gedit下载安装和配置embedded terminal插件。

步骤1

通过命令安装gedit插件:

sudo apt-get install gedit-plugins

步骤2

现在,在gedit窗口里,转到Edit(编辑)-->Preferences(首选项)-->Plugins(插件)并且启动Embedded Terminal插件。

步骤3

在gedit窗口中点击View(视图)-->Bottom Panel(底部面板)

你将在gedit窗口的底部面板看到一个嵌入式终端呈现出来。

唯一的问题是色调搭配不是很好,比如,白色的命令提示符在淡灰色背景下几乎看不清。接下来的步骤去修改色调搭配。

步骤4

打开dconf-editor,如果没有安装,通过命令来安装它:

sudo apt-get install dconf-tools

安装后,用下面命令来执行:

dconf-editor

在dconf editor窗口中,转到org-->gnome-->gedit-->plugins-->terminal并且取消选定use-theme-colors选项。

步骤5

重启gedit

可以看到,在浅色背景下的黑色的命令提示符。

优点

从gedit窗口内部轻松访问终端
作为一个插件,它能节约任何时间
缺点

在初始化配置里色调搭配问题是个主要问题(译注,估计插件作者使用的深色配色方案的Gedit,因此没有意识到这个问题,期待以后的更新版本会解决这个问题)
总结

无论如何,在Linux中工作总是难以避开命令行。所以,在你常用的程序窗口中嵌入一个终端是一个好多的方法。这个gedit插件是个不错的小工具,它可以帮你节省一些时间。尝试它,它值得你安装。
----------------------------------------------------------------------------------------

簡易文字編輯器 – Mousepad
發表於 2006 年 02 月 12 日 由 Tsung

Gnome 預設的 gedit 實在太肥大了, 每次開都要等一下子才會出現.

之前在用 XFCE 的時後, 意外的用到 Mousepad, 才突然發現 Mousepad 的快速開啟, 很方便, 這次重灌 Xwindow 時, 忘記這個名字, 還真難找… 趕快記下來, 以後才不用那麼辛苦的再找尋~

安裝方法: apt-get install mousepad
--------------------------------------------------------------------------------
距现在更近的,GitHub以开源形式发布了Atom,展开了与Sublime Text正式的竞争。Atom打包了所有你想要的文件跳转,代码片段使用等特性,提供一个完整特性的编辑器而不是简单的编辑框。使用HTML,CSS和集成Node.js环境,可以轻易地定制文本处理过程,这正是它的魅力所在。这其实已经要涉及到IDE的定义了,我们的列表最多会覆盖到这里。(LCTT译注:好吧,我觉得从Sublime Text转移出来的最佳出口就是Atom。)
------------------------------------------------------------------------
Gnome 下的 Gedit 和 KDE下的 Kate 都很好的集成在桌面系统中,可以通过插件进行个性化定制。比如,更容易的进行LaTeX排版。Mousepad 和 Leafpad 更适合于轻量级的桌面,比如Xfce和LXDE。它们在某种程度上很像Windows的记事本。所以,如果你需要的是灵活和便捷,请选择它们。

[ Last edited by zzz19760225 on 2016-6-4 at 00:37 ]
作者: zzz19760225     时间: 2016-5-19 19:58    标题: emacs

Emacs是什么?

Emacs是一种功能超强的文本处理程序,或者文本编辑器。作者Richard Stallman(主页:http://stallman.org/)。基础部分是使用C语言编写的,其他部分是用Emacs Lisp编写的。深层次的话,C语言构成了emacs的底层,包括Emacs Lisp的解释器。而Emacs Lisp则是负责了Emacs Lisp的建筑物上层,也就是包括我们平时用的扩展、界面等。

Emacs只是一文本编辑器,这和Windows上的Visual Studio等等不同的是,VS集成的是完整的开发功能,包括编译器、编辑器、调试器等等。而Emacs只是一个文本编辑器,当然不要因此而是否定Emacs的强大。Emacs可以做的:

  收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流

  查看日历、撰写文章大纲

  对多种编程语言的编辑、调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等

  玩游戏、计算器、记日记

  煮咖啡、管理日程,Task,ToDo,约会等、个人信息管理、目录管理

  文件比较、阅读info和man文档、浏览网站

他确实只是一个文本处理器,你可以将之视为伪编辑器的操作系统。而这是因为其与unix/linux系统的整合程度而起的,换句说,如果Richard Stallman可以早点开发出内核,而不是等到Linux的话。Linux/Unix的设计思想之一就是:简单,使用足够的小程序来支撑起这世界,而是Emacs所做的就是利用这些工具,来打造自己,完成自己的系统。因而,Emacs强大的另一点是,有足够的扩展,无论是过去的auto-complete或者是现在的Android-mode等等。故而,我们可以在《架构之美》之中看到关于其的介绍,而是他的特性也是如此,滋长的特性是其优势。

也因些,Emacs是Unix世界的两大神器之一,另外一个是Vim/Vi。

Emacs是什么样的?

Emacs的设计预想是需要时只需要启动一次,然后一直运行着。我们可以使用C-x-2,C-x-3对窗口进行分割,打开多个文件进行编辑。Emacs的三种基本对象是:帧(frame)、窗口(window)、缓冲区(buffer)。

帧是Emacs对计算机图形界面中窗口的称呼。将上图分为三个部分,分别是显示了Emacs的介绍,可浏览的目录列表及展示Lisp交互界面的缓冲区(buffer)。而是最下面的那一行,则是输入命令的地方。

窗口是帧的一部分,要创建一个新的窗口,只能通过将原有窗口分成两个,当关闭某个窗口时,将把空间给邻近的窗口。这样的结果是一个帧中的窗口始终会填满整个帧的内容。只有对键盘命令进行响应,窗口是轻量级的,在使用时会频繁地创建和关闭。

缓冲区是用来保存可编辑的文本内容。Emacs将会把打开的文本内容保存在缓冲区中,但缓冲区中的内容并不一定必须与某个文件关联:它可能包括搜索结果、在线文档,以及刚输入还没有保存到任何文件中的内容。每个窗口将显示某些缓冲区的内容,而一个缓冲区可能保存0个、1个或多个窗口。

还有一个很重要的地方,那就是除了每个窗口底部的模式行以及其他类似的东西,Emacs在向用户显示文本信息时会将其放在缓冲区中,然后将缓冲区的内容显示在某些窗口中。帮助信息、搜索结果、目录列表以及其他类似的的内容,保存在缓冲区中的内容都有相应的名称。

我们通常用.emacs文件进行配置,不过一些比较主流的是放置于.emacs.d文件夹下。不过虽然是叫配置文件,官方的叫法是初始化文件。网上搜索的,可参考的一些简单的自定义及配置:

(set-cursor-color "white")   
;; 鼠标颜色设置为白色   
(set-mouse-color "white")   
;; 设置背景颜色和字体颜色   
(set-foreground-color "white")   
(set-background-color "darkblue")   
;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择   
(set-face-foreground 'highlight "white")   
(set-face-background 'highlight "blue")   
(set-face-foreground 'region "cyan")   
(set-face-background 'region "blue")   
(set-face-foreground 'secondary-selection "skyblue")   
(set-face-background 'secondary-selection "darkblue")   
;;设置日历的一些颜色   
(setq calendar-load-hook   
    '(lambda ()   
    (set-face-foreground 'diary-face "skyblue")   
    (set-face-background 'holiday-face "slate blue")   
    (set-face-foreground 'holiday-face "white")))  

;;外观设置   
;;去掉工具栏   
(tool-bar-mode nil)   
;;去掉菜单栏,我将F10绑定为显示菜单栏,万一什么东西忘了,需要菜单栏了可以摁F10调出,再摁F10就去掉菜单   
(menu-bar-mode nil)   
;;不要滚动栏,现在都用滚轴鼠标了,可以不用滚动栏了   
(scroll-bar-mode nil)   
  
;;备份设置   
;;emacs还有一个自动保存功能,默认在~/.emacs.d/auto-save-list里,这个非常有用,我这里没有改动,具体可以参见Sams teach yourself emacs in 24hours(我简称为sams24)   
;;启用版本控制,即可以备份多次   
(setq version-control t)   
;;备份最原始的版本两次,记第一次编辑前的文档,和第二次编辑前的文档   
(setq kept-old-versions 2)   
;;备份最新的版本五次,理解同上   
(setq kept-new-versions 5)   
;;删掉不属于以上7中版本的版本   
(setq delete-old-versions t)   
;;设置备份文件的路径   
(setq backup-directory-alist '(("." . "~/.emacs.tmp")))   
;;备份设置方法,直接拷贝   
(setq backup-by-copying t)   
  
;;自动补全功能,这事从王垠的网站直接Copy过来的,引用一些他对此的说明   
;;你可以设置以下 hippie-expand 的补全方式。它是一个优先列表, hippie-expand 会优先使用表最前面的函数来补全   
;;这是说,首先使用当前的buffer补全,如果找不到,就到别的可见的窗口里寻找,如果还找不到,那么到所有打开的buffer去找,如果还……那么到kill-ring里,到文件名,到简称列表里,到list,…… 当前使用的匹配方式会在 echo 区域显示。   
;;特别有意思的是 try-expand-line,它可以帮你补全整整一行文字。我很多时后有两行文字大致相同,只有几个字不一样,但是我懒得去拷贝粘贴以下。那么我就输入这行文字的前面几个字。然后多按几下 M-/ 就能得到那一行。  
(global-set-key [(meta ?/)] 'hippie-expand)   
(setq hippie-expand-try-functions-list   
'(try-expand-line   
try-expand-line-all-buffers   
try-expand-list   
try-expand-list-all-buffers   
try-expand-dabbrev   
try-expand-dabbrev-visible   
try-expand-dabbrev-all-buffers   
try-expand-dabbrev-from-kill   
try-complete-file-name   
try-complete-file-name-partially   
try-complete-lisp-symbol   
try-complete-lisp-symbol-partially   
try-expand-whole-kill))   
  
;;时间戳设置(time-stamp),设定文档上次保存的信息   
;;只要里在你得文档里有Time-stamp:的设置,就会自动保存时间戳   
;;启用time-stamp   
(setq time-stamp-active t)   
;;去掉time-stamp的警告?   
(setq time-stamp-warn-inactive t)   
;;设置time-stamp的格式,我如下的格式所得的一个例子:<hans 05/18/2004 12:01:12>   
(setq time-stamp-format "%:u %02m/%02d/%04y %02H02M02S")   
;;将修改时间戳添加到保存文件的动作里。   
(add-hook 'write-file-hooks 'time-stamp)   
  
;;时间显示设置   
;;启用时间显示设置,在minibuffer上面的那个杠上(忘了叫什么来着)   
(display-time-mode 1)   
;;时间使用24小时制   
(setq display-time-24hr-format t)   
;;时间显示包括日期和具体时间   
(setq display-time-day-and-date t)   
;;时间栏旁边启用邮件设置   
(setq display-time-use-mail-icon t)   
;;时间的变化频率,单位多少来着?   
(setq display-time-interval 10)   
  
hvj的讨论和推广emacs贴3:   
这里继续帖我得hvj-basic-config.el,讲另外一些比较零碎的设置   
引用:;;启用minibuffer,好像是默认设置吧   
(minibuffer-electric-default-mode 1)   
;;启用部分补全功能,如输入M-x q r r相当于M-x query-replace-regexp   
(partial-completion-mode 1)   
;;在minibuffer里启用自动补全函数和变量   
(icomplete-mode 1)   
;;所有的问题用y/n方式,不用yes/no方式。有点懒,只想输入一个字母   
(fset 'yes-or-no-p 'y-or-n-p)   
;;允许minibuffer自由变化其大小(指宽度)   
(setq resize-mini-windows t)   
;;当寻找一个同名的文件,自动关联上那个文件?   
(setq uniquify-buffer-name-style 'forward)   
;;在emacs读man文档时,使用当前buffer   
(setq Man-notify-method 'pushy)   
;;鼠标自动避开指针,如当你输入的时候,指针到了鼠标的位置,鼠标有点挡住视线了   
(mouse-avoidance-mode 'animate)   
;;允许自动打开图片,如wiki里面   
(auto-image-file-mode)   
;;可以操作压缩文档   
(auto-compression-mode 1)   
;;在minibuffer上面可以显示列号   
(column-number-mode t)   
;;显示默认的文档的宽度,看起来比较舒服?   
(setq default-fill-column 60)   
;;指针不要闪,我得眼睛花了   
(blink-cursor-mode -1)   
(transient-mark-mode 1)   
;;当指针到一个括号时,自动显示所匹配的另一个括号   
(show-paren-mode 1)   
;;是用滚轴鼠标   
(mouse-wheel-mode t)   
;;去掉烦人的警告铃声   
(setq visible-bell nil)   
;;滚动页面时比较舒服,不要整页的滚动   
(setq scroll-step 1   
scroll-margin 3   
scroll-conservatively 10000)   
;;设定句子结尾,主要是针对中文设置   
(setq sentence-end "\\([?££?£?]\\|??\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")   
(setq sentence-end-double-space nil)   
;;去掉Emacs和gnus启动时的引导界面   
(setq inhibit-startup-message t)   
(setq gnus-inhibit-startup-message t)   
;;当指针移到另一行,不要新增这一行?d   
(setq next-line-add-newlines nil)   
;;在文档最后自动插入空白一行,好像某些系统配置文件是需要这样的   
(setq require-final-newline t)   
(setq track-eol t)   
;;使用C-k删掉指针到改行末的所有东西   
(setq-default kill-whole-line t)   
;;设定删除保存记录为200,可以方便以后无限恢复   
(setq kill-ring-max 200)   
;;增大使用查找函数和变量的寻找范围   
(setq apropos-do-all t)   
;;是用aspell程序作为Emacs的拼写检查成学   
(setq-default ispell-program-name "aspell")   
;;使用narrow功能时的一个设置   
(put 'narrow-to-region 'disabled nil)   
;;启动Emacs自动设置为两个窗口(上下各一个)   
(split-window-vertically)   
;;改变emacs标题栏的标题   
(setq frame-title-format "%b@vj.org")   
;;允许emacs和外部其他程序的粘贴   
(setq x-select-enable-clipboard t)   
而,我们知道Emacs更主要的是在于其扩展,以及不断增长的特性。我们可以用些来增加一些mode及功能。

直接打emacs, 如果有X-windows就会开视窗.

如果不想用X 的版本,就用 emacs -nw (No windows)起动.
C-X 表示按住CTRL键, 然后按X, 再把CTRL, X一起放开.

M-X META META

在没有META键的电脑上, M-X 等于先按 ESC键, 接着按 X键.

Sun上面META键就是菱形的那个键.

有些系统META键就是ALT键.(或者某一边的ALT键)

C-X或 M-X的X没有大小写分别.

Emacs按键命令基本上是一串C-和M-组成的.

超过两个以上的按键命令, Emacs会在屏幕最下面一行显示你按过什么.

这一行叫作mini buffer

`C-x C-c' -- 退出Emacs

或者在minibuffer输入'kill-emacs',在输入前需要按下M-x

如果当前有需要保存的文件,那么应该是'save-buffers-kill-emacs'

常用的窗口操作,右边是命令按M-x可以输入,等同于快捷键

                  
C-x 0        delete-window        关闭一个窗口
C-x 1        delete-other-windows        关闭其他窗口
C-x 2        split-window-vertically        垂直分割窗口成两部分
C-x 3        split-window-horizontally        水平分割窗口成两部分
C-x o        other-window        切换到另一个窗口

so,让我们开始分割成三部分,先垂直再水平,也就是先'C-x 3' 'C-x 2',如图所示:
然后在第一个窗口,'M-x'然后'find-file',或者'C-x C-f',结果如图所示:
接着在切换到另一个窗口('C-x o',或者'M-x',然后输入'other-window'),再输入eshell,或者shell,如果是windows会切换到cmd也就是命令提示符,如图。
然后,新建个文件,'find-file',再输入路径和文件名,比如我的'D:\Desktop\hello.c。

接着'M-x',输入'C-mode',也就是开始C模式,有语法加亮等功能。

接着输入:

   #include<stdio.h>   
    int main(){  
    printf("Hello,world\n");  
}  
完成后,'M-x',再输入'save-buffer',或者'C-x C-s'。
然后切换到eshell或者shell窗口,输入'gcc hello.c -o hello',如果是windows则是'gcc hello.c -o hello.exe'

再执行它'./hello',或者windows输入'hello',即可,最后如图所示:
如果没有gcc,有python,那么就如上图所示的那样。

[ Last edited by zzz19760225 on 2016-6-4 at 00:17 ]
作者: zzz19760225     时间: 2016-5-19 19:59
自然小威

地球每天都会经过十二个星座,十二个星座每天轮流上升与下降,犹如一个巨大的摩天轮慢慢通过夜空,我们从地球上观察,就好像有十二个轮辐在永无止境的旋转,一天当中白羊、金牛、双子、巨蟹、 狮子等十二个星座都要沿天空中轮流变换位置,以此循环往复,就像太阳一天中的日升和日落一样,实际上是地球围绕太阳旋转,太阳系又围绕银河系旋转,银河系以及整个星系群沿巨大的黄道带运动,所以当地球自转一周,就看到了十二个星座轮流上升与下降,地球围绕太阳运行一圈,一年中的12个月十二个星座又会轮流变换位置,随着太阳系围绕银河系旋转,就出现所谓的岁差运动,既每个时期从春分点观察到的正在升起的星座在轮流变化,在不久的将来,春分点升起的星座将从双鱼座转换到宝瓶座。

这十二个星座所代表的意义是极其深刻的,宇宙的进程与历史就包含在这天空的轮辐之内,地球和太阳系,银河系,甚至整个世界都要通过黄道带上这十二个星座,所以黄道十二宫是宇宙的推动力,每一种运动都是旋转的力,正如天空中的每一个星体都在旋转之中,每旋转完一周就是完成一个时期,旋转代表一个圆,如果我们看一下时钟上的指针,就能理解这种关系。如果原子振动的周期代表钟上的微秒变化,那么从微秒到一秒钟之间原子要经历无数次振动周期,犹如一个飞速旋转的秒针推动着较大的分针和时针变化,这正是宇宙中的时钟关系!同样原子经历了无数的周期变化,整个世界变化了一秒!

如果把地球当作宇宙时钟上的指针,那么地球自转一周代表宇宙中的一秒,相当于秒针围绕时钟旋转了一周,地球围绕太阳系旋转一周就是这个巨大时钟上的分针变化,同样太阳系也在围绕银河系旋转,每2160年通过一个星座,这相当于一天中的一个时辰,黄道带上的十二个星座本身就是天区的12个刻度,太阳系围绕银河系移动一圈相当于这个时钟的一天,也就是走完十二个星座的历程,银河系也在逐渐变化,它围绕巨大的星系群移动,这是更大的时钟上的刻度了,星系群会逐步沿黄道带变化,最终整个宇宙自身就变成了巨大的时钟刻度了。
如果说旋转代表一个圆,那么一个圆可以分为两个部分,分别是上半圈和下半圈,上半圈和下半圈可以与很多现象对应,比如事物的兴起与没落,白天与黑夜,阴晴圆缺,日出日落,流转与变化,创生与毁灭。这两个半圈又可以再分为四个部分,代表了成长,繁荣,衰落,分解的完整过程,四个部分每个又可以分为两个和三个部分,分别对应八和十二,但十二 、八、四、二,所代表的都是一个完整的圆辐,每一个事物都是这圆辐的呈现。

一个大圆的内部包含这所有的过程,当银河系自身移动一周时,银河系内部的无数的恒星、星球、文明、生命、思想、旋律、经历了无数次诞生与毁灭的历程,旧事物衰落总会有新事物的诞生,因为银河系的一个大圈总要经历无数的小圈,正如一个大时钟上经历了无数的秒针、分针变化,这个世界的每一秒钟的变化都在推动着更大的创造之轮的前行,就如同我们观察计时器上的秒针转动,虽然只是移动了一秒钟,但是整个宇宙就前进了一个刻度!你现在理解宇宙为何会创造这一切了吧,宇宙好如一个巨大的时间的轮辐,轮辐的每一次旋转就创造了无数的我们这样的世界。
印度的婆罗门讲过一个 “梵天的创造和毁坏宇宙的故事”,梵天每个白天都要创造宇宙,每当梵天晚上睡觉的时候,梵天就把这个宇宙毁坏掉,如此循环往复。宇宙自身的时钟走完一圈,整个宇宙也就消失了,这个时间的轮辐在开始时,推动整个虚空或以太实质产生无数的变化,随着轮辐的不断旋转,所有的创造变的繁荣起来,无数事物的开始成长、繁荣,宇宙自身之内产生了无数的世界,星系,恒星,行星,当轮辐旋转到最后,所有的物质都分解了,整个世界又回到了它自身的起点,这时的宇宙犹如一个无尽的虚空的存在,精神回到了它自身之内,所有的物质显化都已不复存在。

这个世界来源于虚空,最终也将归复于虚空,因为光将自身投射到黑暗的虚无就产生了无数变化的影像,但是黑暗却不是光本身…
宇宙自身也在经历诞生,成长,繁荣,衰落,和死亡的历程,这个轮辐会继续旋转下去,从起点也就是虚空的状态重新开始,世界本身在不断的经历昼与夜的过程,当白昼来临时,大地上开始有了一切,当黑夜来临时一切又找不到踪影,然后新的一天又来临了…这种过程在永无止境进行下去,宇宙的十二个轮辐在永无止境的旋转,新的世界不断的从它之内产生和出现,直到永远…
从地球、太阳在宇宙的运行轨迹,以及相对星群的变化,可以计算出这一切是从何时开始,又是到何时结束,因为星群的移动和变化本身就是宇宙指针的移动,星群的排列在逐渐变化,当这种改变到达显著的程度,人类历史将前进到一个新的时期,星群在不断的变化,它们要经历很多个时期,在地球上每个时期都会产生这些星象所代表的文明形式,同时宇宙的车轮也在不断前进,历史也不断的向前发展,最终宇宙也会走完它自身的刻度,这要经历无法计数的漫长时间,我们现在所观察到的夜空的星座排列只是这漫长时间中的一个非常小的片段,当这星座排列完全改变的时候,宇宙的历史也将走到一个新的时期,对于人类来说新的文化以及思想理念也将出现,但从我们的角度来看这个过程是逐步发生的,甚至地球和太阳系,更大的星系群的生成与毁灭也只不过是宇宙指针上一个微小变化罢了,所以观察星空中星群的移动就可以知道个人、国家、群体、人类文明可能出现的形态、甚至整个宇宙的过去与未来,以及它们的潜在和可能发生的形式,占星术中最深奥的部分也莫过于此了

十二个轮辐在永无止境的旋转,但是我们从地球上观察时,它们是十二个星座,每一个星座都是星群组成的,因为地球和太阳系在围绕黄道十二宫前进,实际上是围绕这些星座旋转的,因为太阳系在围绕银河系旋转,银河系也在沿黄道带缓慢前进,所以我们通常把黄道带的十二个星座作为太阳系移动的坐标,整个夜空的星群都可以看成时间的标尺,但是因为太阳和地球都在围绕十二个星群旋转的,这十二个星群就好像在推动地球转动一样,但实际上这十二个星群是由恒星星群组成的,宇宙运转的动力被这些恒星所放射出的射线不断的推出,放射的能量成为推动性的力量,正如太阳系的动力是来自于银河系的中心太阳群,中心太阳群的动力来自于宇宙旋转的推力,由于十二星群从地球上观察室处于这个旋转的轮辐上,所以宇宙间推动的力量就通过这十二个星群所放射的能量,其中六个是正半弦,另外六个是负半弦,也就是圆的两个部分,这两种特质产生一个呈“∞”的动力,正半弦的特质是推进,负半弦回旋,所以十二个星群的相位就成为了一个旋转的动力,在地球上每一个旋转都作为一个周期,不论是原子还是生命的活动,人的心理,一个事物的产生和没落,十二个星群的推动力所产生的相位就会加强或减弱这些事物的某些特征,主要是相位与行星产生的特质在不同的方面和谐或冲突引发的,个人及群体的思想,情感特质由这些星群的相位与行星所决定的,群体所表达的思想,情感特质与另一个体或群体代表的相位以及行星力量和谐或冲突就会引发群体之间的不同的关系组合,比如摩擦等等。

行星的作用主要是个人的情感特质,比如火星代表意志力,攻击的特征,金星代表艺术,审美观,月球代表潜意识及情绪,对于地球上的人类来说影响并不是直接来自星座,而是太阳系的主要行星以及太阳本身产生的放大作用,十二个星群放射的能量被行星传递到地球上,因为地球上的能量活动都有正负极之分,火星,金星,木星等行星所传递的振动能够加强或减弱某些能量的极性,也就是对个人或群体某些特质的加强或减弱,也和这些行星与地球之间的相位有关,相位的不同就造成了极性的差异,几乎夜空中所有的星群对地球都有影响,但是最主要的影响是离地球最近的星球产生的,所以一般就是太阳系的主要行星,较远的就主要是一些发光的恒星了,不过传统的占星学并没有提及,这些恒星放射的能量,比如天狼星,昴宿星团,以及大角星都会影响到地球上的活动。
每一个行星,恒星,星团都有自己的特质,就好比一个人,不同的行星就好像不同的人一样,这些行星是有自己的个性的,有的行星是情感的特质,而有的行星是行动和表达的特质,行星的特质影响到个人和群体的特质,有些是加强或者减弱某些特质,而有些会赋予一个人新的特质,是和这个人的自身特质的相位有关的。

十二个星座就好像一个巨大的摩天轮,不停的旋转,在地球上我们看到这十二个星座中的每个都要轮流升起下降一遍,十二个星座代表十二种特质,每个人都有这十二个星座的影响,不同的人的情感、思想、意志力等特质的不同都是这十二个星座上的不同进展,因为人类的进化由这十二星座所推动,行星所在的星座会影响到行星本身的特质,而个人特质的发展是一种综合性的结果,但是每个人都要通过这十二个星座,十二个星座可以看作是一种天体的运动轨迹,不但每一个地球要通过它,人类自身包括他们的思想与意志也要通过这十二个星座,每个星座代表一个进展阶段,比如白羊是奋斗和生存,而金牛是平静,还有其它的星座都有不同的特征,每个人都具备这些不同的特质,但是在不同的发展中产生了很多不同,比如有些人是艺术特质,而有些人是奋斗者,还有些人是战士的特质,这些均是前行到十二星座的不同位置,当一个人某些特质获得发展以后,他就通过了一个星座,然后进入下一个星座,在那里他需要在那里发展自己新的特质,在那里有帮助的力量,也有阻碍存在,比如他个人的行星会产生帮助或者阻碍的力量,他需要克服那些问题才能够获得发展,比如艺术的特质,当这些特质获得完全发展时,就会进入下一个星座,直到把十二个星座全部过完,就像游戏里的过关升级一样,一旦他通过了所有十二个星座,他就可以选择离开这个世界了,因为他把所有他应该学到的东西都学到,就可以进入更高的存在中去了,在那里他将获得更高的发展。

地球通过十二个星座需要非常漫长的时间,不过人类却可以选择提前通过它们,因为人类的思想本身也是这十二个星座上的运行的天体,他可以通过自己的努力以尽快的方式完成这个过程,但是每个人的前进步伐都是不同的,这也就是为什么这个世界会有那么多个性与才智不同的人,以及天才、艺术天赋等等。
这十二个星座是宇宙赋予我们最伟大的礼物,人类通过它们发展自身,每一个文明的出现都是所在星座推动的,地球每26000年移动完一个大年的移动,从春分点观察到正在升起的星座会完成一个循环,正如之前说的,十二个星座中六个是正半弦,另外六个是负半弦,太阳移动到正半弦会经历白昼,当太阳移动到负半弦会经历黑夜,宇宙的昼与夜的法则永远在运作。对应人类历史的发展时期是成长、繁荣、衰落的时期。太阳围绕银河系旋转一圈就会经历所谓的白昼和黑夜,这个过程大约是26000年的时间,也就是地球上观察到十二个星座轮流变化一周的时间,这是太阳在宇宙一天的时间,一个半圈出现的时间大约是13000,一旦来到负半圈的时候,很多事物的衰落期就要开始了,人类文明开始经历所谓的黑暗期,我们知道亚特兰提斯就是在一万年前沉没了,但是有时候衰落并不一定要以毁灭的形式出现,可能以别的方式出现,然后经历一个时期,再重新获得发展。

一万年的时间过去了,地球很快会重新来到正半弦,我们从春分点的东方地平线上观测的到正在上升的星座,正是宝瓶座开使升起的位置,宝瓶座就是新的文明形态出现的开始,不过现在地球位于双鱼和宝瓶之间,预示着这两种力量将发生冲突,人类会在进入新的纪元之前经历一个动荡和痛苦的时期,战争,种族冲突,以及地理上巨大的破坏会出现,届时地轴也将发生变化,这是双鱼与宝瓶的对立,是未来100年所代表的能量形式,之后从春分点升起的星座将完全移动到宝瓶座。随着水瓶座不断的上升,人类将会重新获得他们曾经失去的能力,宝瓶纪元是从人类内心的探索开始的,亚特兰提斯最终时代会重新来到地球。
宝瓶座在目前仅仅是人类内心的一颗即将发芽的种子,当几千年后宝瓶座移动三个星座来到中天的时候,宝瓶所代表的文明形式开始成熟了,同样那些正在升起和落下的星座也将是未来的种子,那些正在落下的星座代表旧的事物的结束,一切都已经过去了,而升起的星座是即将经历的新事物的出现,而那些在地平线以下的星座代表潜在的存在,几千年后它们回来到东方地平线上,地球经历了一个文明的季度,宇宙的昼与夜永恒的在运作,地球在十二个星座中不断的循环,而这十二个星座本身也在逐步改变,当它们的排列改变时,届时整个宇宙的历史也将进入新的时期!
我们是用象征理解这十二个星群的能量的,当这十二星象的排列完全改变时,新的世界就出现了,宇宙十二个轮辐在永无止境的旋转,一切都要通过它们,当所以这一切完成这轮辐的旋转,他们会回到一切的开始的地方,你可能会说从这个起点又重新开始了,对于宇宙来说是这样,但是完整经历过这十二个轮辐的人就再不会回来了,他找到了他内在的神圣自我,他的所以特征已经完全的平衡了,人类是宇宙的孩子,当宇宙赋予人类的课问题全部完成时,他已经具有全部的特质,他便实现了他内心的上帝的显现。所有他经历的一切已经成为他记忆中的影像,他找到了永恒,最终整个宇宙也会成为太一记忆中的影像,就像过去的一切都已经成为我们记忆中的影像那样…




好有力量的ㄧ段話!

It doesn't interest me what you do for a living.
你靠什麼謀生,我不感興趣。
I want to know what you ache for,
我想知道你渴望什麼,
and if you dare to dream of meeting your heart's longing.
你是不是敢夢想你心中的渴望。
It doesn't interest me how old you are.
你幾歲,我不感興趣。
I want to know if you will risk looking like a fool
我想知道你是不是願意冒看起來像傻瓜的危險
for love, for your dream, for the adventure of being alive.
為了愛,為了你的夢想,為了生命的奇遇。
It doesn't interest me what planets are squaring your moon.
什麼星球跟你的月亮平行,我不感興趣。
I want to know if you have touched the center of your own sorrow,
我想知道你是不是觸摸到你憂傷的核心,
if you have been opened by life's betrayals
你是不是被生命的背叛開敞了心胸,
or have become shriveled and closed from fear of further pain!
又或者變得枯萎與封閉,因為怕更多的傷痛!
I want to know if you can sit with pain,
我想知道你是否能與痛苦同坐,
mine or your own,
不管是你的或是我的,
without moving to hide it or fade it, or fix it.
而不想去隱藏它、淡忘它,或撫平它。
I want to know if you can be with joy,
我想知道你是不是能跟喜悅共處,
mine or your own,
不管是你的或是我的,
if you can dance with wildness
你是不是能跟狂野共舞,
and let the ecstasy fill you to the tips of your fingers and toes
讓激情充滿了你的指尖到趾間,
without cautioning us to be careful, to be realistic, to remember the limitations of being human.
而不是警告我們要小心,要實際,要記得做為人的侷限。
It doesn't interest me if the story you are telling me is true.
你跟我說的故事是否真實,我不感興趣。
I want to know if you can disappoint another to be true to yourself;
我想要知道你是否能夠為了對自己真誠而不在乎可能會讓其他人失望;
if you can bear the accusation of betrayal and not betray your own soul;
你是不是能忍受背叛的指控,而不背叛自己的靈魂;
if you can be faithless and therefore trustworthy.
以及你是不是能夠忠實而足以信賴。
I want to know if you can see beauty
我想知道你是不是能看到美麗,
even when it's not pretty, every day
即使不是每天都這樣美麗,
and if you can source your own life from its presence.
你是不是能從生命的呈現裡溯源到生命的源頭。
I want to know if you can live with failure,
我想要知道你是不是能跟失敗共存,
yours and mine,
不管是你的還是我的,
and still stand on the edge of the lake
而還能站在湖畔,
and shout to the silver of the full moon, “Yes!”
對著那銀色滿月吶喊著 「是!」
It doesn't interest me to know where you live or how much money you have.
我對於你住在哪裡,擁有多少錢並不感興趣。
I want to know if you can get up, after the night of grief and despair,
我想知道在經過了整夜的哀傷沮喪,你還能夠站起來,
weary and bruised to the bone,
即使身心疲憊到了極點,
and do what needs to be done to feed the children.
為了孩子們,盡養家活口的責任。
It doesn't interest me who you know or how you came to be here.
我對你認識誰,或如何來到這裡並不感興趣。
I want to know if you will stand in the center of the fire with me and not shrink back.
我想知道你是否會和我一起站在火堆中央而不寒顫退縮。
It doesn't interest me where or what or with whom you have studied.
我不感興趣你曾在哪裡學習,學過些什麼,向誰學習過。
I want to know what sustains you, from the inside, when all else falls away.
我想要知道,當所有的一切都消逝時,是什麼在你的內心支撐著你。
I want to know if you can be alone with yourself
我想要知道你是不是能和自己單獨相處,
and if you truly like the company you keep in the empty moments.
當在空虛的時刻裡,你是不是真的喜歡做自己的伴侶。

~來自某位印地安長老

[ Last edited by zzz19760225 on 2017-6-26 at 00:41 ]
作者: zzz19760225     时间: 2016-5-19 20:00    标题: Xfce

Xfce 编辑
Xfce是一个自由软件,运行在类Unix操作系统 (如Linux、FreeBSD 和 Solaris)上,提供轻量级桌面环境。
Xfce快速、轻量,界面美观和对用户友好。
Xfce由独立的软件组件构成,可根据需要单独使用或者组合在一起提供计算机图形桌面环境的全面功能。
Xfce由C语言写成,依赖GTK+。[1-2]
中文名 Xfce 外文名 Xfce 途    径Unix-like操作系统  性    质桌面环境 特    色 快速、轻量、界面美观、易用
目录
1 简介
2 应用
3 历史
4 结构
5 Xfce 4.10 发布
6 版本
▪ Xfce 4.10
▪ Xfce 4.8
▪ Xfce 4.6
▪ Xfce 4.5
▪ Xfce 4.4
▪ Xfce 4.3
▪ Xfce 4.2
▪ Xfce 4.1
7 Xfce 的组件
简介编辑
Xfce是一个轻量级的类Unix的桌面系统,Xfce这个词的发音为X-f-c-e(即四个字母一个一个的读)。
关于Xfce的设计目的, 它的创始人Olivier Fourdan描述为: “快速加载并用来执行程序,且占用系统资源少" 。
Xfce 是一款适用于多种 *NIX 系统的轻量级桌面环境。它被设计用来提高您的效率,在节省系统资源的同时,能够快速加载和执行应用程序。
Xfce 是一个有很长历史的的桌面环境项目了,在很多U盘 Linux 中可以见到它的身影。[3]
应用编辑
Xfce是使用率仅次于KDE与Gnome的Linux桌面系统。随着Xfce的不断发展,使用Xfce作桌面的系统已经越来越多了,一些大型的Linux发行版如Debian 与Fedora Core将其作为可选择桌面,而且Xubuntu GNU/Linux、SAM Linux Desktop以及国内的lucky8k-veket都将Xfce作默认的桌面。
Xfce4
Xfce4
Xfce不仅是桌面环境,而且为程序设计者提供开发框架。除了Xfce桌面本身,还有第三方的程序使用Xfce的程序库,如文件管理器 - Thunar,文字编辑器 - Mousepad,多媒体播放程序 - xfmedia 与终端机模拟器 - Xfce4 Terminal。
历史编辑
“Xfce”项目起源于1996年,"Xfce" 的名字最初是代表的是"XForms Common Environment",这是因为起初开发使用XForms作为工具包。 但是之后Xfce被重写了两次并且放弃了使用XForms工具包。这个名字虽然仍被保留下来,但是它的全名英文缩写不再是 "XFCE",而变成了"Xfce"。
结构编辑
Xfce建基在GTK+ 2.x之上。它使用Xfwm作为窗口管理器。早期版本的Xfce有点像商业的桌面环境CDE,不过在新版本中已经有较大分别了。
Xfce是个纯粹的自由软件。Xfce的每个独立组件按BSD许可证、GNU通用公共许可证或GNU库通用公共许可证之一进行发布。 坚守标准是Xfce 4的一个主要设计目标,特别是 上定义的那些标准。这使得Xfce 4可以和为其它桌面环境编写的程序进行无缝的互操作,只要这些桌面环境遵循了这些规范(标准)。
Xfce 4.10 发布编辑
2012年4月28日,宣布 Xfce 桌面 4.10 发布了,它是取代 Xfce 4.8 的新稳定版。
  在 4.10 周期内主要集中于以各种方式打磨桌面和提升用户体验。此版本的亮点是:
  全新的应用程序查找器已经完全重写,原有的 xfce4-appfinder 和 xfrun4 已合而为一。
  面板有一个可选的竖直显示模式(桌面栏)。不仅如此,我们还能够多列安排面板插件,这在桌面栏模式中特别有用。
  全新的 MIME 类型编辑器让您可以轻松地更改用以打开不同文件类型的应用程序。鼠标、触摸板设置对话框和设置编辑器的功能已扩展。前者可以更好地支持手写板。
  可以单击鼠标启动应用程序和打开桌面上的文件。而且,4.10 桌面可以显示缩略图并通过壁纸列表自动进行。
  在将窗口拖至屏幕边缘时,可以配置窗口管理器平铺窗口。标签窗口(Alt + Tab)支持更加灵活的主题和光标键导航。[4]  
  * 4.6.2
版本编辑
Xfce 4.10
4.10(2012年4月28日发布的最新稳定版)[4]
4.10pre2
4.10pre1
Xfce 4.8
4.8
4.8pre3
4.8pre2
4.8pre1
Xfce 4.6
* 4.6.1
* 4.6.0
Xfce 4.5
* 4.5.99.1
* 4.5.93
* 4.5.92
* 4.5.91
* 4.5.90
Xfce 4.4
* 4.4.3
* 4.4.2
* 4.4.1
* 4.4.0
Xfce 4.3
* 4.3.99.2
* 4.3.99.1
* 4.3.90.2
Xfce 4.2
* 4.2.3.2
* 4.2.3.1
* 4.2.3
* 4.2.2
* 4.2.1
* 4.2.0
Xfce 4.1
* 4.1.99.3
* 4.1.99.2
Xfce 的组件编辑
Thunar, Xfce 桌面环境的一个新的、现代的文件管理器。
Mousepad, Mousepad 是 Xfce 桌面环境的一个简单、快速和易用的文本编辑器,基于文本编辑器 Leafpad。
Orage, Xfce 项目的日历程序。
Xfburn, CD 和 DVD 烧录程序。
Xfmedia, Xfmedia 是一个简单易用的媒体播放器,使用 xine 引擎。
Midori, Midori 是一个轻量级的浏览器,使用webkit引擎。

[ Last edited by zzz19760225 on 2016-6-4 at 00:23 ]
作者: zzz19760225     时间: 2016-5-19 20:00
大家知道,李登辉从内心和传说方面是一个彻底的日本人,而金美龄却是一个满人。但这奇怪这些两个都热忠于实现台湾人的毒立,从事着一个非自己本民族的毒立事业,从理论上是讲不通的,但事实是,他们一直在认真努力实现他们的目的。而什么是他们的共同目的,答案是共同仇视中国。日本人不用说,满族人则是满清不在。所以,他们完全有以理由从事台毒来报复中国。
  至于曾经的台奸如苏贞昌蔡英文,他们因祖上的行为,是无法走近中国的。为什么,首先是一个台奸的祖先。再次是,中国有文革的历史,他们怕就算跟中国接近,有天也会被文革清算。所以,唯一的出路就是追台毒。这才是长远之计。
举报有礼 | 收藏 |        81楼 | 打赏 | 回复 | 评论
作者:澎湖渔人之二 时间:2013-06-17 02:24:00
--------------------------------------------------------------------------------------------------------------


  1、也说我吧,我是讲闽南语的。大陆GCD就语言方面,只是提倡讲普通话,但未禁闽南语,但几年下来,我发现台语反而保留许多较口语话的词语。而大陆则慢慢变成普通话翻译后的闽南语,不那么地道了。比如,“热闹”有时候就按普通话叫法,而不是原本的“闹热”来讲。也就是说台语尽管受了近百年日本人,国民党的迫害也保护得比大陆好。
  2、换台湾人去殖民日本,我想会走的路也会跟国民党和日本人走的路也差不多。会同化它们,引诱它们放弃自己的传统。不管当年日本做得有多好,我想事实是当年许多台湾人也放弃了自己的传统。也就说,日本的皇民化教育是成功的,台湾的传统保护一样是失败的。国民党的教育是失败的,但台湾的传统保护一样是失败的。
  3、我曾经一同事说,要是日本人当年统治中国,中国一定会更加强大。我说,那强大也是日本人的强大,至于中国人说不定在日本统治的哪一年,被抓 去当活体解剖实验了。日本人可以把台湾人殖民好,即使当成本国人来对待,但血统是改变不了的。次等国民是必须的。大陆虽对少数民族好,但许多关键的东西还是本族人比较可靠。
  4、我曾对一台湾人说, 真正厉害 的人还是欧美系(英国系)的人,当年可以几百人,打遍印度,并统治几百年让印度那样的大地方,安心过了几百年的顺心,这点比日本人成功多了。他们还可以打败许多其他的欧州国家,占领一大片土地,包括北美,澳州、新西兰这样的好土地,还有,打败德国,苏联。还有在80年代打败日本的经济,让日本20多年发展不起来。当时那台湾人还是保持对日本人的敬佩心理说,日本人工作非常认真(有些台湾人做事也如日本人认真)。但事实是,不管日本人多认真,真正胜利的还是英美系的人 ,不管是以前还是现在。他们总是用最小的代价,取得成功。人家玩的是战略。我也接触过日本人,工作确实认真,但一样会出问题。比中国人做事,量会做得好,但质未必 。
  1、说到底是先是满清差,把台湾给了日本。后是日本差,把台湾卖给了国民党,再后来是国民党差,把台湾给了民进党,结果还是差,台湾的儿子偷台湾妈妈的钱。台奸后代什么苏蔡来当领导。更别提那卖岛的正男。
  2、英国给印度建的铁路,几百年了,印度还在用。比日本在台湾建的铁路强吧。台湾人没必要整天扶日本人的卵葩。人家建的铁路是用来运东西回日本的,不是运东西给台湾人的。
  3、日本人把台湾的东西是许多拿回日本用,国民党再差也是放在台湾用。比日本人厚道啦。
  4、我妈到现在也听不懂国语,以前都是看台湾电视台的电视。要是没台湾电视,估计更没得看了。说白了,就是闽南人自己差,没有建立自己的电视台。现在好了,各个县市都有本地话电视台了。
  5、台湾人有一些可能真的有平埔族血统。但起码有另一半血统华人。台湾人只认平埔祖奶奶,不认华人祖爷爷,回头还骂祖爷爷是支那人。用祖爷爷的支那话骂祖爷爷支那人。还有,有唐山公,没唐山妈可能指的是一部分的台湾人。但你真的相信,船只能载男人不能载女人去台湾吗。东南亚国家的华人当年跟当地人混血的都叫娘惹什么的。没混血的才能叫华人,以前到现在的华人都不喜欢跟当地人混血,华人人数还不是照样那么多。东南亚可比台湾远,就算新加坡也没听人家说,新加坡人是混马来的。就台湾娇情。台湾这么近,真以为闽南女人那么差,连坐船也不敢,东南亚都去了,台湾还去不了吗。
  1、日本人当年没占据台湾人也跟台湾没半毛钱关系,后来照样统治台湾五十年。你别说是满清送给日本的,日本要是不来抢,满 清会给吗。即然日本都可以没半毛钱就可以统治台湾了,国民党为何不可。
  2、话说台湾的总督府,你去查查关于满州国的资料吧。话现在东北存在的日本建筑绝不比台湾的差。钱度的英国总督建筑更多。也没见东北人印度人天天扶殖民者的难葩。顺说,这个卵葩还是改成难葩比较好懂。
  3、国民党确实差。同意你的难点。民进党更差,都说爱台,最后原来是做生意的。台联更烂,厚面皮在台日本人。
  4、现在的台剧还不错,纯台语,老家许多人爱看,特别是老人家。
  5、我家离镇上中学远,我小时候上中学时候,在镇上被镇上附近村的人欺负,那时我也想,我们村要是能独立就好了。你们想独立的心情可以理解,问题反对你的人很多,你们得打败那些反对你的人,没打败就不要乱想啦。顺便说台湾要是独立,金门、马祖、澎湖、东沙、太平岛等,还有台湾故宫的中国国宝等等,如何算。
  最后,你觉得中国人会让一个整天扶日本难葩,整天反对中国人的国民住在离中国不远,并用许多中国人血汗打回来的国土上吗?我们这代人可以同意,后代就难说。
举报有礼 | 收藏 |        67楼 | 打赏 | 回复 | 评论
作者:澎湖渔人之一 时间:2013-04-06 21:21:00

------------------------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2016-6-13 at 16:23 ]
作者: zzz19760225     时间: 2016-5-19 20:01
30实验1选择已有操作系统,构建生活工作环境,建立兴趣业余尝试环境,学习和尝试,主题堆积。
---------------------------------------------------------------------------------------------------------------------------------
时空小门1,选择论语,点击,跳转进入新的一页。说明,你选择论语,遇到三个或四个情况,颜回问你要不要天龙八步,关公低价倾销屠龙刀,齐国召开世界新闻发布会,今天衣服忘记洗扣几分,抽烟一支口2分,(对照一个生活需求表里每天的务)等等选项。
1启动引导部分。启动引导部分这里是针对不断重新安装系统后的良好启动引导需求。可以标准化,作为任何系统的通用操作流程,这样单系统会吃点亏,要有两个选项,一个是单系统,一个是非单系统。
针对已有具有国产概念操作系统的多国产概念系统的启动安装综合。起点是任何地方,方向指向最终的地方。
先要个启动结构图,色彩印象图形和道路关键命令的自我归类分类指定。
系统的结构图形化,软件结构的图形化,类似动画或漫画的形式,具有互动部分的图形计算或互动触动。
DOS的启动,veket的启动,
用EMACS制作GRUB,DOS,SHELL,LINUX的命令行游戏学习软件。通过包,文件夹,进行模块添加,路径式功能帮助要显示在最外面,在软件之前显示,可以关闭显示,连续使用3年自动关闭最初的帮助提示。
启动引导的信息知识技术和命令相关的逐渐接触部分。需要找一个面向新手综合的启动引导介绍帮助接触命令的说明书。
规划图,下载资源,制作工具,分区,不考虑启动引导因素的先安装其他系统,最后安装主系统,其他系统在主系统启动引导下动作。
在命令行下的显示详细帮助信息的字体,组织,有限,有效的层面。针对一个命令
长期U盘DOS系统的渐进,需要有个U盘寿命,适用范围等等。还要有U盘帮助文化的优先,有图加文字,顺序步骤,方便新手参与。编辑器的适用技巧趣味化,方便新手参与编程游戏。群体网络的文字版或者纯文字游戏的网络聊天室,游戏和交流并行,方便组队完成相同群体的相同目的。后面行业协会和资金模式属于群体的生长范围。
--------------------------------------------------------------------------------------------------
Wengier
http://www.cn-dos.net/msdos71/mdos71bd.zip

                                README.TXT
            The README File For My Super MS-DOS 7.10 Boot Disk

                     本MS-DOS 7.10超级启动盘说明文件
            --------------------------------------------------
                  版权所有:中国DOS联盟 (China DOS Union)

                            Wengier  2004-2-14

总目录 (Main Directory)
^^^^^^^^^^^^^^^^^^^^^^^
  -> 1. 介绍 (Introduction)
  -> 2. 主要特点 (Main Features)
  -> 3. 系统需求 (System Requirements)
  -> 4. 文件列表 (File List)
  -> 5. 常见问题 (FAQ)
  -> 6. 技术支持 (Technical Support)

+------------------------+
| 1. 介绍 (Introduction) |
+------------------------+

我花了不少时间自制了这个超级通用MS-DOS 7.10启动盘,由于我在其中吸收了许多
国内外制作DOS启动盘的技术并使用了大量自己研究出来的一些DOS和启动盘制作技术,
使得它有很多非常强大实用的功能,并相信比网上同类的DOS启动盘要好得多,增加
了大量实用的功能和特色。尤其是全面的DOS启动LOGO画面(!)、中英文长文件名、
大硬盘、大内存、FAT32、NTFS、USB驱动器、中文显示等支持,以及它的高度兼容性
和通用性、开机时可以选择从软盘、硬盘或者光盘来启动等等诸多功能,相信是绝大
多数同类DOS启动盘所无法比拟的。下面就来介绍一下。

==========================================================================
说明:MS-DOS 7.10的功能是非常强大的。如果您想在硬盘中安装MS-DOS 7.10的话,
请下载并安装“MS-DOS 7.10完整安装版”,包括软盘安装版(IMG)和光盘安装版
(ISO)两种。具体请见:

中文:http://newdos.yginfo.net/dosart32.htm
英文:http://newdos.yginfo.net/msdos71/index.htm
==========================================================================

+-----------------------------+
| 2. 主要特点 (Main Features) |
+-----------------------------+

本MS-DOS 7.10启动盘有非常多的特点,下面就将其中最突出的26大特点列出来:

----------------------------
- 开机时可以选择启动方式     (Bootable media selection on boot)
- DOS启动LOGO画面            (DOS Animated Startup Logo)
- 多配置启动菜单             (Multi-configuration startup menu)
- 全面的中英文长文件名支持   (Full Long File Name[LFN] support)
- 全面的(V)FAT12/16/32支持   (Full [V]FAT12/16/32 support)
- NTFS驱动器支持             (NTFS Drives support)
- USB驱动器支持              (USB Drives support)
- 大硬盘支持                 (Large Hard Disk support)
- 大内存支持                 (Large Memory support)
- 各种类型的光驱支持         (Full support for all kinds of CD/DVD Drives)
- 内存盘功能                 (RAM Drives support)
- 中文支持                   (Chinese support)
- 全面的鼠标支持             (Full mouse support)
- 高空闲常规内存             (High free conventional memory)
- 系统的高稳定性             (High stability of system)
- 强大的系统维护功能         (Powerful function of system maintenance)
- 各种压缩包支持             (Full support for archives)
- 图形方式的文件管理         (Graphics File Manager included)
- 可以直接启动Windows 3.x/9x (Able to launch Windows 3.x/9x directly)
- 强大的显示控制功能         (Powerful function of screen control)
- 启动盘中文件的压缩处理     (The compression of the files on the disk)
- 系统兼容性强               (High compatibility)
- 通用性非常强               (Highly optimized for general use)
- 各种保护模式DOS程序的支持  (Protected Mode DOS programs support)
- 有着完整的DOS风格          (Having full DOS operating style)
- 许多非常实用的工具         (Many very useful tools)
----------------------------

下面再将这26大特点更详细地介绍一下:

1 - 开机时可以选择启动方式 (Bootable media selection on boot)
=============================================================
通过著名的自由开放的多系统管理器--GNU GRUB等工具,以及我对它们进行的相关
配置,使得本启动盘具有开机时选择是从本启动盘、硬盘,甚至光盘来启动系统。
这样,您就可以将本启动盘一直放在驱动器中,而通过它来选择启动您想要的启动
方式了。而且即使系统BIOS不支持光盘启动,用本启动盘也可以真正实现从可启动
光盘启动功能。

2 - DOS启动LOGO画面 (DOS Animated Startup Logo)
===============================================
为我自己在Windows开机画面的基础上经过了大量的修改而成的,包含了DOS的启动
标志及底部的动画滚动条等。这样以来,DOS也有了自己的启动LOGO画面了!大家
不妨好好的欣赏一下DOS强大的功能吧!

3 - 多配置启动菜单 (Multi-configuration startup menu)
====================================================
此MS-DOS 7.10启动盘启动时会出现六项选择,第一项是用EMM386方式启动,第二
项是用UMBPCI方式启动,第三、四项分别此基础上再加入NTFS/SCSI和USB驱动器的
支持。EMM386方式是保护模式的DOS方式,而UMBPCI方式则是实模式的DOS方式。
EMM386在极少数电脑上可能无法正常使用,而UMBPCI最主要的问题则是不支持某些
主板(尤其是一些旧主板,如486电脑上的),所以启动时让用户在EMM386和UMBPCI
之间进行一次选择。这样以来,用户可以更好的使用此启动盘以启动电脑。
启动菜单中的第五项则用来直接查看本帮助文件,而且系统会自动加载汉字系统以
支持中文的显示。
而选择启动菜单中的第六项(即最后一项)则可以自动关闭或重新启动电脑。
除此之外,用户在启动时还可以根据系统出现的菜单提示,用键盘或鼠标选择是否
自动加载PC-CACHE、SMARTDRV、Volkov Commander等程序。

4 - 全面的中英文长文件名支持 (Full Long File Name[LFN] support)
===============================================================
MS-DOS 7.10是全面支持中英文长文件名的,只要存在长文件名的API接口。本启动盘通过使用DOSLFN程序来提供长文件名API接口,使得本MS-DOS 7.10启动盘一启动就能像Win9x的DOS窗口中那样全面支持及使用长文件名,包括中文长文件名。
除DOS的内部命令(如DIR、CD、COPY等等)以及许多外部命令以外,许多其它的DOS
程序,如Volkov Commander 4.99等这时都可以在纯DOS下轻易使用长文件名了,就像
使用标准的短文件名那样方便。更详细信息,请见后面的“常见问题(FAQ)”节。

5 - 全面的(V)FAT12/16/32支持 (Full [V]FAT12/16/32 support)
==========================================================
MS-DOS 7.10本地完善地提供了FAT12/16/32分区支持,因此启动盘继承了此功能。
而以上提到的长文件名驱动程序则启用VFAT(虚拟FAT)的支持。
注:FAT分区是硬盘最常见的磁盘分区格式,因此支持它的话就可以直接对大多数
的硬盘进行各种操作了。

6 - NTFS驱动器支持 (NTFS Drives support)
========================================
通过使用NTFS的驱动程序NTFSDOS,使此启动盘能够完全支持NTFS驱动器的各种只读
访问,并且完全支持NTFS分区上的长文件名。
当在启动菜单中选择第三或第四项后,系统会自动加载NTFSDOS驱动程序以支持NTFS
驱动器。
若想在命令行下手工加载它也是可以的,即执行NTFSDOS或NTFSDOS /U(其中/U表示
启用Unicode字符集支持)即可。

7 - USB驱动器支持 (USB Drives support)
======================================
当在启动菜单中选择第三或第四项后,系统会在启动时自动加载DUSE、Motto Hairu、
ASPI?HCI等USB驱动程序以提供USB驱动器的支持。
支持各种USB接口(包括OHCI、UHCI甚至EHCI接口)和许多类型的USB驱动器,例如大
多数的USB硬盘、USB光驱、USB软驱、USB闪存盘(例如U盘)、USB ZIP驱动器、USB的
MP3播放器等等。对于部分系统,有时还可以手工设置一下驱动器的参数以更好的支持
您的USB驱动器(请见后面的“常见问题(FAQ)”节)。
或者也可以在命令行下用DEVICE、ADDEV等命令手工加载这些驱动程序,例如执行
ADDEV DUSE.EXE DRIVES=2。

8 - 大硬盘支持 (Large Hard Disk support)
========================================
除支持标准的硬盘外,还支持非常大(至少100G以上)的大硬盘,包括LBA和Int13X
扩展分区等。同样,本启动盘中提供的各种工具(例如SPFDISK、FDISK、FORMAT等)
也都是支持大硬盘的,因此不用担心此启动盘不能识别或操作您的大容量硬盘。

9 - 大内存支持 (Large Memory support)
=====================================
全面支持XMS 3.0内存管理规范,支持最高高达4GB的大内存,并提供XMS及UMB等等
内存,以最大限度的发挥电脑的功能。而且XMSDSK、SMARTDRV等工具也可以很有效
地利用这些内存,例如建立内存虚拟盘、磁盘高速缓冲等。

10 - 各种类型的光驱支持 (Full support for all kinds of CD/DVD Drives)
=====================================================================
通过使用最好的通用光驱驱动程序(如VIDE-CDD.SYS及USBCD.SYS等),支持各种
IDE/ATAPI以及大多数SCSI/ASPI甚至USB光驱,并且速度快,占用内存非常少。
还可以通过启动盘中自带的FINDCD程序(自编)将已安装的光驱盘符显示出来并设置
到环境变量中,例如:FINDCD /S就可以将当前所有的光驱盘符进行显示和设置。

11 - 内存盘功能 (RAM Drives support)
====================================
通过使用最好的内存虚拟盘工具XMSDSK,自动提供4M的内存虚拟盘,并且自动将一些
必要或常用的工具(如FORMAT、MEM、Volkov Commander等)解压复制到其中。此内存
盘虚拟不仅使用非常方便,而且可以在命令行下通过XMSDSK命令随意修改其大小。另
外,此启动盘中还带有SUBST、FAKEDISK等工具,可进行许多其它的虚拟盘符的功能。

12 - 中文支持 (Chinese support)
===============================
此启动盘的中文支持体现在多个方面,一是长文件名驱动程序DOSLFN使用代码页936
(简体中文)以全面支持中文长文件名;二是自带小巧的袖珍龙XZL汉字系统,启动
它后就可以全面支持DOS下汉字(包括汉字长文件名)的显示。
同时本说明文件也是中文的,因此可以启动汉字系统后直接在命令行下用MORE、EDIT
等命令直接查看其中的内容,或者可以直接在开机时的启动菜单中选第五项以自动
打开本文件进行查看。

13 - 全面的鼠标支持 (Full mouse support)
========================================
通过使用最好的鼠标驱动程序CuteMouse 1.9,支持各种串口和PS/2鼠标等,且速度
非常快,占用内存也非常少;通过使用MouseClip程序,使DOS命令行下也可以轻易的
使用鼠标了,而且可以用鼠标进行屏幕上的文字的复制/粘帖以及模拟方向键的功能。
这样以来,DOS也有了自己的强大的“剪帖板”和“鼠标模拟”等实用功能了。

14 - 高空闲常规内存 (High free conventional memory)
===================================================
用此启动盘启动系统后,尽管加载了很多实用的功能,但空闲常规内存通常仍高达
625K-630K(启动时选第一项或第二项),空闲UMB内存通常也有几十K。
这样以来,用它启动后运行任何程序都不会提示内存不足,因为还有大量的空闲内存
可用。

15 - 系统的高稳定性 (High stability of system)
==============================================
此启动盘中自带了KILLER及ESCAPE程序,大大增强了系统的稳定性:
KILLER:可以自动截获运行的程序中的不正确指定,并返回DOS,以防止系统的不
稳定或死机;
ESCAPE:可以在任何情况下按F12键以返回DOS,以防止系统死机。
可见,KILLER和ESCAPE是相辐相承的,前者是系统主动,后者是用户主动,以最大
限度的加强系统的稳定性。

16 - 强大的系统维护功能 (Powerful function of system maintenance)
=================================================================
启动盘中除自带CHKDSK、FORMAT、FDISK等常用DOS磁盘工具外,还带有BOOTPART、
SRC Tools、SPFDISK等许多实用的系统维护工具。
BOOTPART是命令行方式的启动分区管理器,功能非常强大;SRC Tools则可以进行
保存/恢复/检查->磁盘的启动扇区/MBR/FAT,以很好的维护系统和磁盘;SPFDISK
是著名的开放源代码的启动管理器+分区管理器。
REGEDIT则是Windows注册表维护工具,可以对注册表进行导入、导出等各种操作。

17 - 各种压缩包支持 (Full support for archives)
===============================================
启动盘中带有PKUNZIP 2.50、UNARJ、EXTRACT、UNDISK等实用的压缩包解压工具,
并且大多支持长文件名。
因此,此启动盘支持ZIP、ARJ、CAB、IMG等各种常见格式的压缩包及磁盘镜像,大大
方便了使用。

18 - 图形方式的文件管理 (Graphics File Manager included)
========================================================
启动盘中自带Volkov Commander(VC)文件管理器,一个非常强大实用且有名的文件
管理工具,图形界面操作,且全面支持长文件名。
系统启动后会自动提示是否启动VC,即显示以下信息:
Press ENTER in 2 seconds if you want to start Volkov Commander..
这时若在2秒钟内按下回车键即自动启动VC 4.99,否则不自动启动它,但可以以后
随时在命令行下用VC命令手工启动它。

19 - 可以直接启动Windows 3.x/9x (Able to launch Windows 3.x/9x directly)
========================================================================
众所周知,Windows 3.x和Windows 9x都是DOS下的GUI界面程序。可惜绝大多数的
DOS启动盘启动到DOS后却不能直接运行它们,否则会出现错误。而本MS-DOS 7.10
启动盘则通过使用一些技术以提供了直接启动Windows,包括Win3.x、Win9x等版本
的功能,与Windows实现真正的亲密无间。具体使用起来则非常简单,用本启动盘
启动到DOS后只需在DOS命令行下输入WIN命令以启动相应版本的Windows GUI。
(说明:已通过使用3xStart程序以加强与Windows 3.x的高度配合性)。
并且如以上的特点所述,此MS-DOS 7.10启动盘全面支持长文件名、FAT32分区、
大硬盘等各项功能,所以不会与Windows有任何不兼容。
一些运行Windows 3.x/9x的更详细情况请见下面的“常见问题”。

20 - 强大的显示控制功能 (Powerful function of screen control)
==============================================================
此启动盘通过使用系统显示控制软件,提供了许多实用的系统显示功能,例如显示
加速、滚动屏幕、设置显示模式、节省显示器电源、关闭/挂起显示器等等。
ZENO在启动时会自动加载,可以大大加快显示器的显示速度;PERUSE是非常好的DOS
屏幕滚动控制工具,用了它后就再也不担心看不到屏幕上滚动过的文字了,而且它的
使用也非常简单,用ScrolLock等键就可以轻易的进行屏幕控制;TM可以设置和查看
DOS的显示模式,例如25行显示模式、50行显示模式等等。

21 - 启动盘中文件的压缩处理 (The compression of the files on the disk)
======================================================================
为了在一张1.44MB启动盘中加入各种强大而实用的功能而避免有空间不足的可能,除
了使用各种小巧实用且功能更强大的程序来代替一些同类启动盘中笨重的程序外,我
对此启动盘中的绝大多数文件都进行了相应的压缩或“减肥”技术。除少数软件压缩
成CAB格式进行存储外,其它的多数文件则进行了可执行文件的直接压缩处理(通过
使用各种最好的压缩软件,例如UPX、aPack、DIET等等),以使得它们能够直接运行,
更由于它们自身的体积更小,且不用先进行解压而大大加快了它们的运行速度。而且
压缩大大节省了它们所需的磁盘空间以放入更多实用的程序。而DOS的系统启动文件
IO.SYS,也被我做了一番精简而节省了高达约100KB的磁盘空间,但却丝毫不会降低
系统的功能,而是大大加快了启动速度并提高了系统的兼容性和实用性。

22 - 系统兼容性强 (High compatibility)
======================================
本MS-DOS 7.10启动盘从开始制作起就全面考虑到了启动盘在不同的系统上兼容性的
问题,并按照此要求进行了各种优化和多重配置,所以它不仅功能众多且强大实用,
而且兼容性也是非常强的。通过各种配置,通常只要满足了下面所列出的系统需求,
它就应该能够在绝大多数不同的电脑和系统配置下正常使用。我已用本启动盘在多台
不同系统配置的电脑上都成功的启动到了DOS下。

23 - 通用性非常强 (Highly optimized for general use)
====================================================
本启动是“超级通用型启动盘”,也就是用它启动后就可以运行各种DOS程序了,包括
本启动盘中已有的各种实用程序,及启动后运行硬盘、光驱等驱动器上的各种DOS程序,
例如硬盘上的多媒体程序(例如听MP3歌曲)、网络工具(例如浏览网页)、游戏软件、
Windows安装程序等等。而且,由于本启动盘可以直接用WIN命令启动硬盘上的Windows
3.x和Windows 9x,所以一旦用它启动了Windows的话还可以运行各种Windows程序了。
这样一来,实际上本启动盘已不仅仅是“启动盘”了,而成了一种超级的DOS平台。

24 - 各种保护模式DOS程序的支持 (Protected Mode DOS programs support)
====================================================================
本超级DOS启动盘有一个非常重要的特点,那就是支持各种保护模式的DOS程序。随着
保护模式的DOS程序(尤其是DJGPP程序)的不断增加,对保护模式的DOS程序提供良好
的支持是很重要的了。本启动盘通过使用EMM386、CLOAKING、CWSDPMI等优秀的DOS下
VCPI(虚拟控制协议接口)服务器、DPMS(DOS保护模式规范)服务器、DPMI(DOS保护
模式接口)服务器,以很大程度的支持各种保护模式的DOS程序,使它们能正常运行。

25 - 有着完整的DOS风格 (Having full DOS operating style)
========================================================
本启动盘虽然通过加载各种程序及优化配置而大大扩展了DOS的各种功能,但却完整地
保留了DOS的各种操作风格和使用习惯。本DOS启动盘默认情况下会自动启动到DOS命令
行下,然后就可以进行各种DOS操作了,包括传统方式的DOS操作和各种增强的DOS操作
(例如使用鼠标进行操作、直接对长文件名进行全面操作等等)。

26 - 许多非常实用的工具 (Many very useful tools)
================================================
本启动盘中包含许多非常实用的工具,例如CDPLAY、WBAT、DOSKEY、PC-CACHE等等,
可以提供键盘历史记录、磁盘缓冲、音乐播放、图像查看、软件关机/重启、批处理
控制等各种功能。具体请见下面的文件列表及它们自己的说明文件。

+-----------------------------------+
| 3. 系统需求 (System Requirements) |
+-----------------------------------+

最低需求(Minimal requirements):
-------------------------------

- 386或更高的CPU
- 4~8M以上内存
- CGA以上显示器
- 一个1.44M软驱(注:用虚拟软驱也可以,如启动光盘模拟软盘)

建议配置(Recommanded configuration):
------------------------------------
- 586/奔腾或AMD Athlon及以上CPU
- 32M以上内存
- VGA/SVGA以上显示器
- 一个或更多1.44M软驱(注:用虚拟软驱,或启动光盘所带的软盘启动镜像均可)
- 一个COM或PS/2鼠标
- 硬盘(包括大硬盘,及其中的FAT12/FAT16/FAT32/NTFS分区,数量不限)
- 光驱(各种IDE/SCSI/USB光驱,数量不限)
- Sound Blaster或兼容声卡

注意:本启动盘的此版本不仅可以在真实模式下使用,而且也可以在大多数虚拟机
(比如VMWare Workstation 4.0等)中使用。不过对于某些版本的Virtual PC 5.x
虚拟机,请使用IMG镜像直接启动,而不要放在真实的软盘中启动,因为它(指某些
版本的Virtual PC 5.x)本身的BUG会导致本启动盘在这种方式下无法正常启动。

+-------------------------+
| 4. 文件列表 (File List) |
+-------------------------+

以下是本MS-DOS 7.10启动盘中的所有文件列表:
-------------------------------------------

ADDEV.COM    在DOS命令行下直接加载设备驱动程序的工具,可与DELDEV配套使用
ANSI.COM     最好的ANSI替换程序,非常强大实用
APATH.COM    简便实用的PATH路径修改工具
ASC.COM      ASCII表显示,加载后可随时按Alt+A键调用
ASPIOHCI.SYS Iomega公司出的OHCI接口的USB驱动器的驱动程序
ASPIUHCI.SYS Iomega公司出的UHCI接口的USB驱动器的驱动程序
AUTOEXEC.BAT 系统启动批处理文件
BOOT\        GNU GRUB引导管理器等相关文件
CDPLAY.COM   非常小巧且方便的CD播放器,加载后可随时按Ctrl+P键调用
CLOCK.COM    很不错的TSR方式的时钟软件,且支持闹钟功能
COMMAND.COM  MS-DOS 7.10的命令处理器,支持长文件名
CONFIG.SYS   系统启动配置文件
CP437UNI.TBL DOSLFN的英文代码页,用于英文长文件名支持
CP936UNI.TBL DOSLFN的简体中文(GB)代码页,用于中英文长文件名支持
CSOUND.COM   扬声器工具,可播放和设置扬声器的声音播放
CTMOUSE.EXE  CuteMouse 1.9版,DOS下最好最实用的鼠标驱动程序
CWSDPMI.EXE  DOS下最好的DPMI内存驱动程序,提供保护模式的DOS程序的支持
DELDEV.COM   将用ADDEV加载的设备驱动程序从内存中删除,即取消那个驱动程序
DELTREE.COM  最强大实用的DELTREE替换程序1.02版
DEVICE.COM   在DOS命令行下直接加载设备驱动程序(如光驱驱动程序.SYS等)
DI1000DD.SYS Motto Hairu中的USB/SCSI硬盘的驱动程序
DOSKEY.COM   最好的DOSKEY替代程序1.8版,提供命令历史、宏定义、自动完成等功能
DOSLFN.COM   DOS下最强大实用的中英文长文件名驱动程序
DOSVER.COM   实用的设置DOS版本号的工具,可自动或手动设置DOS版本号
DREADY.COM   判断驱动器状态,例如检查光驱中是否有光盘、软盘是否写保护等
DRVTYPES.EXE 显然系统中所有驱动器列表以及类型的实用工具
DUSE.EXE     DOS下的USB驱动器的驱动程序,可驱动USB硬盘、USB光驱、USB软驱等
DOSET.CAB    含MS-DOS 7.10自带的一些系统工具(如SYS、CHKDSK、FORMAT等)
ECHO.SYS     使在CONFIG.SYS中能显示文字的工具
EMM386.EXE   MS-DOS 7.10中自带的提供UMB和EMS内存的工具
ESCAPE.EXE   使在任何时候都可以按F12键返回DOS命令行下,以防止死机
EXTRACT.EXE  解压CAB压缩包的工具
FIND.COM     查找工具的最好的替代程序
FINDCD.EXE   自编的实用的查找光驱盘符的程序
FINDRAMD.EXE 实用的查找内存盘盘符的工具
HIMEM.SYS    MS-DOS 7.10中自带的提供XMS内存的工具,支持大内存
IFSHLP.SYS   为Win9x提供增强的VFAT文件系统驱动支持(启动Win9x时必备)
IO.SYS       MS-DOS 7.10的系统启动文件
KILLER.EXE   可以自动截获非法指令,以防止死机
KPUSH.COM    键盘ASCII表查询及清理工具
LABEL.COM    非常小巧的修改磁盘卷标的工具
LFNXLAT.386  为DOSLFN长文件名驱动程序提供Windows 3.x下的长文件名支持
LOCATE.COM   最强大实用的文件定位工具1.30版,支持长文件名
LOGO.SYS     MS-DOS 7.10的启动LOGO画面
LOWDMA.SYS   提供软盘的ISA DMA UMB支持
MCD.EXE      实用的建立和切换文件夹工具,支持长文件名
MOUSCLIP.EXE 很实用的在DOS下(包括命令行下)用鼠标复制/粘帖及模拟方向键的工具
MSDOS.SYS    MS-DOS 7.10的系统启动配置文件
PC-CACHE.COM 小巧实用的磁盘缓冲程序,可大大加快启动及磁盘读写速度
PC-EXT2X.OVL PC-CACHE所需的用于加载缓冲的覆盖文件
PC-WNERR.OVL PC-CACHE所需的用于Windows启动的覆盖文件
PERUSE.COM   非常好的DOS屏幕滚屏工具
PKUNZIP.EXE  ZIP文件的解压工具,支持长文件名
QV1.EXE      小巧的多媒体查看器QuickView 1.03b,可以播放音乐和动画、查看图片等
RAMFD.EXE    Motto Hairu中的用虚拟软盘的方式驱动USB软驱的驱动程序
README.TXT   本MS-DOS 7.10启动盘的说明文件(即此文件)
SPFDISK.EXE  启动管理器+分区管理器,功能强大
SHARE.EXE    最好的文件锁定和共享工具,以启动需文件共享的程序
SHSUCDX.EXE  小巧实用的光驱扩展驱动程序最新版,是MSCDEX的最好替代品,只占很少内存
SHUTDOWN.COM 非常好的命令行ATX电源重新启动/软关机程序
SORT.COM     非常小巧的排序工具
STRINGS.COM  实用的批处理/命令行增强工具
SUBST.EXE    非常小巧的设置虚拟驱动器的程序
TM.EXE       小巧实用的设置键盘和显示的工具
UDMA.SYS     ATA硬盘加速工具,尤其是新式的大硬盘
UMBPCI.SYS   强大实用的提供UMB内存的驱动程序3.54版
UNARJ.EXE    ARJ文件的解压工具
UNDISK.EXE   IMG等磁盘映象文件的解压工具
USBASPI.SYS  Motto Hairu中的USB驱动程序2.06最实用版
USBCD.SYS    Motto Hairu中的USB/SCSI光驱的驱动程序
VC.CAB       Volkov Commander 4.99版,非常强大实用的文件管理器,支持长文件名
VIDE-CDD.SYS DOS下最好的通用IDE/ATAPI光驱驱动程序,只占很少的内存
WAIT.COM     用于批处理文件的等待工具,且支持键盘返回值等操作
WBAT.COM     非常强大实用的批处理对话框设计器,支持鼠标操作
WRITEXT.EXE  强大的ECHO显示增强工具,可设置显示的位置及颜色等
XFIND.COM    小巧实用的从一组文件中查找指定字符串的工具,支持长文件名
XMSDSK.EXE   最好的虚拟内存盘工具,非常方便实用,且只占很少的内存
XZL.COM      小巧的袖珍龙汉字系统,以显示汉字
ZENO.EXE     很好的屏幕显示加速软件

DOSET.CAB压缩包中的文件:
-------------------------

ATTRIB.COM   强大实用的ATTRIB文件属性修改程序1.09版
BOOTPART.EXE 启动分区管理器2.50版,功能强大
CHKDSK.EXE   MS-DOS 7.10中自带的命令行方式的磁盘检查工具
DEBUG.EXE    MS-DOS 7.10中自带的调试程序,已修改让它支持汉字显示
EDIT.COM     MS-DOS 7.10中自带的EDIT命令,可编辑多个大文件、文本/二进制文件
FAKEDISK.COM 将各种软盘镜像(如IMG、DDI等)虚拟成软盘的工具
FDISK.EXE    MS-DOS 7.10中自带的硬盘分区工具,支持大硬盘和各种分区
FORMAT.EXE   MS-DOS 7.10中自带的格式化程序
MEM.EXE      DOS下的内存信息查看工具
MORE.COM     MS-DOS 7.10中自带的分屏显示工具
NTFSDOS.EXE  DOS下的NTFS驱动器的驱动程序(只读)
NTFSHLP.EXE  为NTFSDOS提供Win9x下的NTFS功能的VXD驱动程序
REGEDIT.EXE  MS-DOS 7.10中自带的Windows注册表维护工具
SMARTDRV.EXE MS-DOS 7.10中自带的磁盘高速缓冲程序
SRCBOOT.COM  命令行方式的保存/恢复/比较磁盘的启动扇区的小工具
SRCFAT.COM   命令行方式的保存/恢复/比较磁盘的文件分配表(FAT)的小工具
SRCMBR.COM   命令行方式的保存/恢复/比较磁盘的主引导记录(MBR)的小工具
SYS.COM      MS-DOS 7.10中自带的DOS系统文件传输程序
TREE.COM     DOS自带的用文本图形方式查看文件夹树的工具

VC.CAB压缩包中的文件:
----------------------
含Volkov Commander 4.99程序

VC.EXE       Volkov Commander 4.99的主程序
VC.MNU       Volkov Commander 4.99的菜单文件
VC.OVL       Volkov Commander 4.99的覆盖文件

+-------------------+
| 5. 常见问题 (FAQ) |
+-------------------+

1. 问:用本启动盘启动Windows 9x/ME时应注意哪些问题?
   答:如果是用软盘启动本启动盘,请确保启动Windows的时候软盘在软驱中(启动
       后则不一定)。要进入Windows 9x GUI界面,请先进入Windows所在的文件夹,
       然后运行WIN命令即可。假设Win98 GUI装在D:\WIN98文件夹下,请依次输入:
       D:
       CD \WIN98
       WIN
       但不要试图用MS-DOS 7.10启动盘启动Windows ME GUI。因为Windows ME只能
       在MS-DOS 8.0下运行,而不能在MS-DOS 7.x或其它的DOS(例如ROM-DOS等)
       下运行。否则Windows ME的WIN.COM会提示"This version of Windows runs
       only on MS-DOS 8.00."的错误信息并返回DOS命令行下。

       另外,要启动Windows 9x,不要加载USB驱动程序以及PC-CACHE磁盘高速缓冲
       程序,否则可能会造成死机或以下问题。

2. 问:用本启动盘成功启动Windows 9x后,Windows有时提示“正在使用MS-DOS兼容
       方式的文件系统”或出现其它现象,如何解决?
   答:如果出现此提示是由于加载了PC-CACHE磁盘高速缓冲程序造成的。解决方法
       有两种,一种方法是启动盘启动时在提示选择想要加载的“磁盘缓冲程序”的
       时候,选择SMARTDRV或选择不加载磁盘缓冲程序即“Cancel”项),以代替
       PC-CACHE磁盘缓冲程序即可;或者将Windows 9x所在文件夹中的IOS.INI的
       [SafeList]项中加入“PCCACHE.COM”一行以避免Windows 9x不能识别此程序。
       这样以来,启动Windows 9x后就不会出现任何提示了。

3. 问:用本启动盘启动Windows 3.x的时候,系统提示“PageOverCommit value in
       SYSTEM.INI is too large.”,如何解决?
   答:Windows 3.x是用当前XMS内存的大小和Windows 3.x所在文件夹中的SYSTEM.INI
       的[386Enh]项中的PageOverCommit的值的乘积来确定其所要使用的虚拟内存的
       交换文件的最大值的。若这个乘积超过了Windows 3.x所能支持的最大值的话,
       就会出现那个提示。PageOverCommit的默认值为4,因此如果系统的内存大于
       256MB的话,这个乘积将超过Windows 3.x所能支持的最大值而出错。解决方法
       其实很简单,就将Windows 3.x所在的文件夹里的SYSTEM.INI文件的[386Enh]项
       中的PaveOverCommit设置的值减少(即比默认值4少),例如PageOverCommit=2;
       如果[386Enh]项中没有此设置的话,请手工在那儿加入此设置。这样Windows
       3.x就应该可以正常启动了。

4. 问:用本启动盘启动后如何对长文件名进行显示和操作?
   答:本启动盘在启动时会显示一个对话框,让用户选择以合适的方法提供长文件名
       支持。对话框中有三个选择,其中“CP936”为简体中文+英文长文件名代码页,
       “CP437”为英文长文件名代码页,而最后一项则为禁用长文件名支持。第一项
       为默认值,所以系统在默认情况下将全面提供中英文长文件名支持。上面已提
       到过,由于MS-DOS 7.10的各种与文件相关的内部命令、大多数外部命令,以及
       许多其它DOS文件工具都支持长文件名的显示和操作,所以一旦有了提供长文件
       名的API接口,这些程序就可以像在Win9x的“DOS窗口”中那样本地使用长文件
       名了。以输入DIR命令为例,在长文件名功能打开时,系统默认会同时显示短文
       件和其对应的长文件名,其中短文件名在屏幕的左侧,而长文件名则在右侧。
       如果是进行其它的操作,如用COPY命令进行文件复制,则既可以在DOS命令行下
       指定短文件名,也可以用长文件名。如果长文件名中有空格的话,请用引号括
       起来。例如:COPY "This is a file.txt" C:\DOS

5. 问:用本启动盘如何正常驱动和使用USB驱动器(如U盘等等)?
   答:一般来说,如果USB驱动器已正确地接在电脑上,当本启动盘出现启动菜单时,
       选择第三或第四项启动后,系统应能自动识别各种已安装的USB驱动器并对它们
       进行盘符分配,例如E盘、F盘等等,然后就可以像本地驱动器那样对它们进行
       全面的访问了。不过,对于某些USB驱动器,可能需要对这些USB驱动程序的一些
       参数进行一些调整,以更好的适应它。更详细信息,请看“中国DOS联盟论坛”
       中的相关帖子和讨论,地址:http://dosbbs.2ya.com/
       注:对于USB键盘或USB鼠标,最好请在BIOS/CMOS设置中打开其支持。

+---------------------------------+
| 6. 技术支持 (Technical Support) |
+---------------------------------+

本超级MS-DOS 7.10启动盘为我(即Wengier)所自制,如果有任何问题或建议的话,
欢迎与我联系:

我的电子邮件:wengierwu@hotmail.comwengierwu@sohu.com
也可以到“联合DOS论坛”中去提问或讨论,论坛地址:http://dosbbs.2ya.com/

如果您想提出问题或建议,请告知您所用的本启动盘的版本号,谢谢合作!

中国DOS联盟--联合DOS、推动DOS、发展DOS--中国DOS联盟

版权所有,Wengier,中国DOS联盟(China DOS Union),2002-2004
============================================================

注:此MS-DOS 7.10启动盘最新版(不断地更新着)的下载地址是:
http://newdos.yginfo.net/dosware/mdos71bd.zip

-----------------------------------------------------------------------------------------------------------------------------------------------------------
xiaoyunwang        简体中文MS-DOS 7.10 标准启动盘        1.0MB        2008/03/19(Wed)18:54        MSDOS71.rar
http://upload.cn-dos.net/img/117.rar

                       简体中文 MS-DOS 7.10 标准启动盘
                       ===============================

+--------+
|  简介  |
+--------+
*--------------------------------------------------------------------------

    简体中文 MS-DOS 7.10 标准启动盘 中的以下所有程序都是汉化过的, 希望你能喜
欢. 在这里保留了原英文的标准启动盘中的大多数程序, 没有保留的则都是使用了功能
更强大的同类程序作了替换, 如用 UDVD.SYS 替换了 vide-cdd.sys 这样就可以同时支
支持 IDE/APAPI 光驱和 SATA 光驱, 这样就得到了一个简体中文版的 MS-DOS 7.10 标
准启动盘, 在这里不对启动盘中的程序压缩打包处理, 以提高运行速度, 为了使启动盘
更实用, 便考虑加入了一些与 DOS 日常操作联系最紧密的外部程序, 如NTFS4DOS 简体
中文版, 以方便在 DOS 下完美读写原 MS-DOS 7.10 不能识别的 NTFS 磁盘分区. 不过
本启动盘功能不是特别强大, 但比较实用, 同时能使你在熟悉母语的环境下愉快的学习
和使用 DOS 命令.



+------------------+
|  使用中文输入法  |
+------------------+
*--------------------------------------------------------------------------

简体中文 MS-DOS 7.10 标准启动盘中使用中文输入法相关快捷键:

        右shift      调出/隐藏天汇兼容汉字系统(隐藏时即输入英文)
                     在需要输入中文时,再按右shift键显示并调用中文输入法.
                     也可以按右 shift 键防止和某些应用程序快捷键冲突.
        Alt+F1       区位输入法
        Alt+F2       五笔输入法
        Alt+F3       全拼输入法
        Alt+F4       双拼输入法
        Alt+F5       快捷指南
        Alt+F10      英文输入法(也可按右shift键隐藏中文输入法来输入英文)
        Shift+F9    开关联想功能
        Ctrl+F5     系统控制功能
        Ctrl+F8     大小写切换
        Ctrl+F9     全角半角切换
        Ctrl+F10    系统状态设置



+----------------+
|  程序文件说明  |
+----------------+
*--------------------------------------------------------------------------

目录文件 PATH 列表
A:.
│  ANSI.COM                最好的 ANSI 替换程序,用于控制屏幕显示,键盘和光标.
│  ATTRIB.COM                显示或改变文件的属性
│  CHKDSK.EXE                检查磁盘并修复文件系统
│  COMMAND.COM                MS-DOS 7.10 命令解释程序汉化版
│  CONFIG.SYS                系统启动配置文件
│  AUTOEXEC.BAT        系统启动批处理加载文件
│  COUNTRY.SYS                包含不同国家习惯信息的文件
│  DOSLFN.COM                DOSLFN F 版的中英文长文件名驱动程序(占内存最少)
│  CP437UNI.TBL        DOSLFN 的英文代码页,用于英文长文件名支持
│  CP936UNI.TBL        DOSLFN 简体中文(GB)代码页,用于中英文长文件名支持
│  LFNXLAT.386                为 DOSLFN 提供Windows 3.x下的长文件名支持
│  DEBUG.EXE                软件测试调试实用程序
│  DOSKEY.COM                提供命令历史,宏定义,自动完成等功能增强版
│  EMM386.EXE                MS-DOS 7.10 自带的提供 UMB 和 EMS 内存的工具
│  FDISK.EXE                MS-DOS 7.10 自带的硬盘分区程序,支持大硬盘
│  FORMAT.COM                MS-DOS 7.10 自带的磁盘格式化工具
│  HIMEM.SYS                MS-DOS 7.10 中自带的提供XMS内存的工具,支持大内存
│  IFSHLP.SYS                为 Win9x 提供增强 VFAT 系统驱动支持(启动Win9x时必备)
│  KILLER.EXE                可以自动截获非法指令,以防止死机
│  MEM.EXE                微软内存查看程序
│  MODE.COM                配置系统设备
│  MORE.COM                分屏显示输出软件
│  SHUTDOWN.COM        DOS 命令行 ATX 电源软重启/软关机程序
│  SMARTDRV.EXE        MS-DOS 7.10 中自带的磁盘高速缓存程序
│  SYS.COM                传输系统文件,将磁盘制成启动盘
│  CTLOAD.COM                在 DOS 命令行下直接加载设备驱动程序
│  UDVD.SYS                通用 IDE/ATAPI/SATA 串并口光驱驱动程序
│  SHCDX33C.COM        光驱扩展接口驱动程序增强改进版
│  IO.SYS                优化的无 Logo 防硬盘逻辑锁系统核心文件汉化版
│  KEY.COM                中文输入法安装程序
│  CTMOUSE.EXE                鼠标驱动程序 CtMouse 2.04 版(支持PS/2,USB及串口鼠标)
│  NTFS4DOS.EXE        使 DOS 下完美支持读写磁盘 NTFS 分区的程序
│  TW.EXE                天汇兼容汉字系统 3.2 袖珍改进版
│  readme.txt                此说明文件
│  MSDOS.SYS                MS-DOS 7.10 的系统启动配置文件
│  REPLACE.EXE                文件替换添加程序
│  DELTREE.COM                删除目录及目录下的所有文件和子目录的程序
│  TREE.COM                树状图形化的显示驱动器或指定路径的目录结构
│  XCOPY.EXE                拷贝增强程序,能拷贝整个目录及其下的所有文件和子目录
│  HELP.BAT                本简体中文 MS-DOS 7.10 标准启动盘帮助批处理
│  FIND.EXE                文本字符串查找程序
│  LABEL.EXE                创建、修改或删除磁盘卷标的程序
│  MOVE.EXE                移动目录或文件到指定位置和重命名目录的程序
│  DOSVER.COM                小巧实用的自由设置 DOS 版本号的工具
│  CHOICE.COM                选择命令,返回按键的 ERRORLEVEL 值
│  PRINT.EXE                打印命令,在使用其它 MS-DOS 命令时打印正文文件
│  RECOVER.EXE                恢复命令,从一个已损坏的或有缺陷的磁盘恢复可读取的信息
│  EDIT.HLP                MS-DOS 7.10 紧急中文文本编辑器帮助文档
│  EDIT.EXE                MS-DOS 7.10 紧急中文文本编辑器主程序
│  EDIT.INI                MS-DOS 7.10 紧急中文文本编辑器配置文件
│  list.txt                本启动盘所有可执行命令说明
│  
└─DATA                包含拼音,五笔输入法数据包及联想词库的数据目录
        LX.LX                输入法联想功能驱动
        PY.MB                拼音输入法驱动
        WB.MB                五笔输入法驱动



+--------------+
|  汉化与制作  |
+--------------+
*--------------------------------------------------------------------------

本启动盘中的所有简体中文程序你都可以自由的拷贝和使用, 更多程序正在汉化中...

                                                                制作: 王小云
                                                                2008 年 3 月  
-------------------------------------------------------------------------


中文電腦的開發最早起源於台灣的中央研究院,大約在1970年左右開始,負責主持計畫者為中研院院士謝清俊教授。在總共歷時四十多年的期間,中央研究院將大部分的漢字處理問題均解決掉。最早的解決方案是大字集體系,例如CCCII及CNS 11643。其後,以謝清俊教授為主的多位資訊及漢學研究者,共同提出了以「構形法」為主體的解決方案,為漢字資訊處理提供了最終的解決方案。

「中文語言方程」是基於「漢字構形法」的漢字數學化分支版本,研究與實作的主體,利用「漢字構形法理論」作為基礎,將漢字編碼數學化,並且利用數學化的過程,供應漢字資訊系統關於「顯示」、「辨識」及「理解」的三大主功能。

用戶或研究者可將「中文語言方程」視為「漢字構形法」的其中一種實踐與詮釋方式,「漢字構形法理論」可以有多種實現方式,並非絕對只有單一的一種詮釋。

[ Last edited by zzz19760225 on 2016-6-16 at 00:01 ]
作者: zzz19760225     时间: 2016-5-19 20:01
veket 下ghost软件功能运用和ghost帮助文件的互补
--------------------------------------------------------------------------------------------------
ghost (美国赛门铁克公司旗下的硬盘备份还原工具) 锁定
本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。
诺顿克隆精灵(Norton Ghost),英文名Ghost为General Hardware Oriented System Transfer(通用硬件导向系统转移)的首字母缩略字。该软件能够完整而快速地复制备份、还原整个硬盘或单一分区。
中文名 幽灵 外文名 ghost 运行环境Windows  最新版本 15.0
目录
1 版本介绍
2 分区备份
3 使用指南
▪ 分区备份
▪ 硬盘克隆与备份
▪ 备份还原
▪ 局域网操作
▪ 网络硬盘克隆过程简述
4 使用技巧
▪ 用Ghost快速格式化大分区
▪ 用Ghost整理磁盘碎片
▪ 用Ghost同时给多台PC克隆硬盘
▪ 用Ghost巧妙修复PQ分区产生的错误
▪ 恢复误GHOST的硬盘
5 异同比较
▪ 共同点
▪ 不同点
6 常见问题
7 命令参数
8 错误代码
9 注意事项
▪ 软件利弊
▪ 其他介绍
版本介绍
Norton Ghost for Windows
Norton Ghost 15 截图
Norton Ghost 15 截图 (7张)
Ghost 2003 可以在 Windows 环境下运行,但其核心的备份和恢复仍要在 DOS 下完成,所以它还不能算真正意义上的 Windows 克隆软件。但自 2005 年 Symantec 公司收购了 Power Quest公司,Symantec 公司推出了使用更加方便的 Ghost 8.5 及以后版本。最新的版本是 15.0。Windows下的Ghost已经完全抛弃了原有的基于DOS环境的内核,其“Hot Image”技术可以让用户直接在 Windows 环境下,对系统分区进行热备份而无须关闭 Windows系统;它新增的增量备份功能,可以将磁盘上新近变更的信息添加到原有的备份镜像文件中去,不必再反复执行整盘备份的操作;它还可以在不启动 Windows 的情况下,通过光盘启动来完成分区的恢复操作。Windows 版本 Ghost 的最大优势在于: 全面支持 NTFS,不仅能够识别 NTFS 分区,而且还能读写 NTFS 分区目录里的备份文件,彻底解决了 Windows 98 启动盘无法识别 NTFS 分区的难题。Ghost 被设计为在新的 Windows Vista 操作系统中运行,并且已经过测试;同时它仍然支持以前版本的 Windows。
Norton Ghost for DOS
Norton Ghost(诺顿克隆精灵 Symantec General Hardware Oriented System Transfer的缩写译为“赛门铁克面向通用型硬件系统传送器”)是美国赛门铁克公司旗下的一款出色的硬盘备份还原工具,早期的Ghost名前并没冠以Symantec的大名。Ghost可以实现FAT16、FAT32、NTFS、OS2等多种硬盘分区格式的分区及硬盘的备份还原。在这些功能中,数据备份和备份恢复的使用频率特高,以至于人们一提起 Ghost 就把它和克隆挂钩,往往忽略了它其他的一些功能。
在微软的视窗操作系统广为流传的基础上,为避开微软视窗操作系统原始完整安装的费时和重装系统后驱动应用程序再装的麻烦,大家把自己做好的干净系统用ghost来备份和还原。为使这个操作易于操作,流程被一键GHOST、一键还原精灵等进一步简化,它的易用很快得到菜鸟级人士的喜爱。由于它和用它制作的.gho文件,习惯上被简称为“狗版”。又把视窗操作系统Windows XP、Windows Vista、Windows 7等与系统引导文件、硬盘分区工具等集成一体,进一步得到配套,用户在需要重装系统时有效简便地完成系统快速重装,所以,GHOST在狭义上被特指为能快速恢复的系统备份文件。
Ghost 8.3 软件界面
Ghost 8.3 软件界面
1、特点:既然称之为克隆软件,说明其Ghost的备份还原是以硬盘的扇区为单位进行的,也就是说可以将一个硬盘上的物理信息完整复制,而不仅仅是数据的简单复制。Ghost支持将分区或硬盘直接备份到一个扩展名为.gho的文件里(赛门铁克把这种文件称为镜像文件),也支持直接备份到另一个分区或硬盘里。
2、新版本的ghost包括DOS版本和windows版本,DOS版本只能在Dos环境中运行。windows版本只能在windows环境中运行。由于DOS的高稳定性,且在DOS环境中备份windows操作系统,已经脱离了windows环境,建议备份windows操作系统,使用DOS版本的ghost软件。
3、由于Ghost在备份还原是按扇区来进行复制,所以在操作时一定要小心,不要把目标盘(分区)弄错了,要不将目标盘(分区)的数据全部抹掉就很惨的……根本没有多少恢复的机会,所以一定要认真、细心!但你也不要太紧张,其实Ghost的使用很简单,弄懂那几个单词的意思你就会理解它的用法,加上认真的态度,你一定可以掌握它的!一起来吧:)
分区备份
预备知识:认识单词
Disk:磁盘的意思;
Partition:即分区,在操作系统里,每个硬盘盘符(C盘以后)对应着一个分区;
Image:镜像,镜像是Ghost的一种存放硬盘或分区内容的文件格式,扩展名为.gho;
To:到,在ghost里,简单理解to即为“备份到”的意思;
From:从,在ghost里,简单理解from即为“从……还原”的意思。
(一) Partition菜单简介
其下有三个子菜单
To Partition:将一个分区(称源分区)直接复制到另一个分区(目标分区),注意操作时,目标分区空间不能小于源分区;
To Image:将一个分区备份为一个镜像文件,注意存放镜像文件的分区不能比源分区小,最好是比源分区大;
From Image:从镜像文件中恢复分区(将备份的分区还原)。
使用方案
1、最佳方案:完成操作系统及各种驱动的安装后,将常用的软件(如杀毒、媒体播放软件、office办公软件等)安装到系统所在盘,接着安装操作系统和常用软件的各种升级补丁,然后优化系统,最后你就在Dos下做系统盘的克隆备份了,注意备份盘的大小不能小于系统盘!
2、如果你因疏忽,在装好系统一段间后才想起要克隆备份,那也没关系,备份前你最好先将系统盘里的垃圾文件清除,注册表里的垃圾信息清除(推荐用Windows优化大师),然后整理系统盘磁盘碎片,整理完成后到Dos下进行克隆备份。
3、什么情况下该恢复克隆备份?
当你感觉系统运行缓慢时(此时多半是由于经常安装卸载软件,残留或误删了一些文件,导致系统紊乱)、系统崩溃时、中了比较难杀除的病毒时,你就要进行克隆还原了!有时如果长时间没整理磁盘碎片,你又不想花上半个小时甚至更长时间整理时,你也可以直接恢复克隆备份,这样比单纯整理磁盘碎片效果要好得多!
4、最后强调:在备份还原时一定要注意选对目标硬盘或分区!
使用指南
分区备份
使用Ghost进行系统备份,有整个硬盘(Disk)和分区硬盘(Partition)两种方式。在菜单中点击 Local(本地)项,在右面弹出的菜单中有3个子项,其中 Disk表示备份整个硬盘(即克隆)、Partition 表示备份硬盘的单个分区、Check 表示检查硬盘或备份的文件,查看是否可能因分区、硬盘被破坏等造成备份或还原失败。分区备份作为个人用户来保存系统数据,特别是在恢复和复制系统分区时具有实用价值。
选 Local→Partition→To Image 菜单,弹出硬盘选择窗口,开始分区备份操作。点击该窗口中白色的硬盘信息条,选择硬盘,进入窗口,选择要操作的分区(若没有鼠标,可用键盘进行操作:TAB键进行切换,回车键进行确认,方向键进行选择)。在弹出的窗口中选择备份储存的目录路径并输入备份文件名称,注意备份文件的名称带有 GHO 的后缀名。接下来,程序会询问是否压缩备份数据,并给出3个选择:No 表示不压缩,Fast表示压缩比例小而执行备份速度较快,High 就是压缩比例高但执行备份速度相当慢。最后选择 Yes 按钮即开始进行分区硬盘的备份。Ghost 备份的速度相当快,不用久等就可以完成,备份的文件以 GHO 后缀名储存在设定的目录中。
硬盘克隆与备份
硬盘的克隆就是对整个硬盘的备份和还原。选择菜单Local→Disk→To Disk,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目标硬盘(第二个硬盘)。注意,可以设置目标硬盘各个分区的大小,Ghost 可以自动对目标硬盘按设定的分区数值进行分区和格式化。选择 Yes 开始执行。
Ghost 能将目标硬盘复制得与源硬盘几乎完全一样,并实现分区、格式化、复制系统和文件一步完成。只是要注意目标硬盘不能太小,必须能将源硬盘的数据内容装下。
Ghost 还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单 Local→Disk→To Image),然后就可以随时还原到其他硬盘或源硬盘上,这对安装多个系统很方便。使用方法与分区备份相似。[1]
备份还原
如果硬盘中备份的分区数据受到损坏,用一般数据修复方法不能修复,以及系统被破坏后不能启动,都可以用备份的数据进行完全的复原而无须重新安装程序或系统。当然,也可以将备份还原到另一个硬盘上。
要恢复备份的分区,就在界面中选择菜单Local→Partition→From Image,在弹出窗口中选择还原的备份文件,再选择还原的硬盘和分区,点击 Yes 按钮即可。
局域网操作
LPT 是通过并口传送备份文件,下面有两个选项:slave 和 master,分别用以连接主机和客户机。网络基本输入输出系统 NetBios 和 LPT 相似,也有 slave 和 master 两个选项,作用与 LPT 相同。
先和平时一样将要 ghost 的分区做成一个 *.gho 文件,再在一台 win98 上安装Symantec Ghost 企业版,重启。
1. 首先制作一张 ghost 带网卡驱动的启动盘。Start > Programs > Symantec Ghost > Ghost Boot Wizard->Network Boot Disk 如果你的网卡在列表内直接选择它就可以生成一张带 PC-DOS 的启动盘。(但 6.5版的生成的软盘经常有问题,不能成功启动)如果你的网卡不在列表内,你要建立专用的 Packet Driver。ADD->Packet Driver (网卡的驱动程序中有)往下根据提示一步一步走,填入工作站的 ip(ghost 一定要 tcp/ip 协议)。最后生成一张软盘,但此软盘仍不能使用,要改 autoexec.bat 文件在 net xxxx.dos 后面加一个16进制的地址,如 0X75 等。多台计算机只需改 wattcp.cfg 文件中的 ip 即可:
IP = 192.168.100.44
NETMASK = 255.255.255.0
GATEWAY = 192.168.100.1
2. 在 server 端运行 multicast server 出来的画面。先给 server一个Session Name(别名)如:bb,再选择 image file 就是你的 gho 文件。然后 ->Dump From Client->rtitions->More Options-> 在 auto start 的 client 中填入 50(如果你要同时复制50台)->accept client 就算完成了,当你的工作站数达到50台时,server就自动传送*.gho 文件。
3.详述:
相当多的电子教室都采用了没有软驱、光驱的工作站。在没有软驱、光驱的情况下,当硬盘的软件系统出现问题时,能否实现网络硬盘克隆呢?PXE(Preboot Execution Environment,它是基于 TCP/IP、DHCP、TFTP 等 Internet 协议之上的扩展网络协议)技术提供的从网络启动的功能,让我们找到了解决之道。下面,我们就来讲解怎样采用Ghost 7.0来实现基于 PXE 的网络硬盘克隆。
网络硬盘克隆过程简述
网络硬盘克隆过程为:在装有软驱的工作站上,用一张引导盘来启动机器,连接到服务器,使用 Ghost 多播服务(Multicast Server)将硬盘或分区的映像克隆到工作站,这样就实现了不拆机、安全、快速的网络硬盘克隆。
实现 PXE 网络启动方式
对于没有软驱、光驱的工作站,要实现PXE网络启动方式,需要完成三个步骤:
1、工作站的PXE启动设置
PXE网络启动一般要求在网卡上加装 PXE 启动芯片(PXE Boot ROM);对于某些型号的网卡,也可以将 PXE 启动代码(Boot Code)写入主板的 Flash ROM;而一些主板上集成了网卡的品牌机(例如清华同方的商用机),可直接支持PXE启动。
常用的 RTL8139 芯片的网卡,其 PXE 启动设置方式是:机器启动时根据屏幕提示按下Shift+F10,在启动类型中选择PXE,开启网络启动选项即可。
2、制作 PXE 启动文件
制作 PXE 的启动文件,推荐使用 3Com 的 DABS(Dynamic Access Boot Services)。DABS 提供了功能强大的 PXE 启动服务、管理功能,但是,网上可供下载的是一个30天的试用版。所以,我们只用它的启动映像文件制作功能,而由 Windows 2000 Server 的 DHCP 服务器来提供 PXE 启动服务。
DABS 可以安装在任何一台运行 Windows 的机器上。安装后,运行 3Com Boot Image Editor,出现主界面图。选择“创建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)”,出现对话窗口。为即将建立的映像文件命名,例如:pxeghost.img,其他采用默认选项,将经测试正常的网络启动盘放入软驱,选择[OK],创建PXE启动映像 Pxeghost.img文件。
在 3Com Boot Image Editor 的主菜单中,选择“创建PXE菜单启动文件(Creat a PXE menu boot file)”,在出现的窗口中选择[添加(Add)],加入我们刚刚创建的启动映像文件Pxeghost.img,在“选项(Options)”标签中可以设置菜单标题和等待时间。
选择[保存(Save)],给保存的PXE菜单启动文件命名为 Pxemenu.pxe。
用 Ghost 多播克隆硬盘
运行 Ghost 多播服务器,任务名称为 Restore。设置完毕,按下[接受客户(Accept Clients)]按钮。启动要接受硬盘克隆的无软驱工作站,如果以上步骤操作无误,应该能够实现 PXE 启动,加入到多播克隆的任务当中。所有的目标工作站连接到本次任务之后,按下[发送(Send)]按钮,开始克隆任务。
使用技巧
用Ghost快速格式化大分区
如今硬盘的容量是越来越大,每次对大分区进行Format时,都要花费很多时间,其实Ghost可以对大分区进行快速格式化。
首先在硬盘上划分一个很小的分区(例如40MB),然后用Format命令对这个分区格式化,注意以后不要在该分区上存放任何文件;接下来用DOS启动盘重启电脑,运行Ghost,选择菜单“Local→Disk→To Image”,将这个分区制作成一个GHO映像文件,存放在其他分区中。
以后需要格式化某个大分区时,即可用DOS启动盘重启电脑,运行Ghost,选择菜单“Local→Disk→From Image”,选中上述制好的GHO镜像文件,选择要格式化的大分区,按下OK键,最后再按YES键即可。
用Ghost整理磁盘碎片
用Ghost备份硬盘分区时,Ghost会自动跳过分区中的空白部分,只把其中的数据写到GHO映像文件中。恢复分区时,Ghost会把GHO文件中的内容连续地写入分区中,这样分区的头部都写满了数据,不会夹带空白,因此分区中原有的碎片文件也就自然消失了。
Ghost整理磁盘碎片的步骤是先用Scandisk扫描、修复要整理碎片的分区,然后使用DOS启动盘重启机器,进入DOS状态,在纯DOS模式下运行 Ghost,选择“Local→Disk→To Image”,把该分区制成一个GHO映像文件;再将GHO文件还原到原分区即可。
注意:在还原GHO映像文件时一定要选对分区,否则会覆盖原来的分区,造成数据的丢失。
用Ghost同时给多台PC克隆硬盘
Ghost8.0在原来一对一的克隆方式上,增加了一对多的恢复方式,能够透过TCP/IP网络,把一台PC硬盘上的数据同时克隆到多台PC的硬盘中,而且还可以选择交互或批处理方式,这样你就可以给多台电脑同时安装系统或者升级,节省了时间。不过,网上免费下载的都为试用版本(即单机版),不支持 “LPT”和“NetBios”的网络克隆功能,正式的Ghost网络版才拥有该功能。
用Ghost巧妙修复PQ分区产生的错误
当使用PQ分区失败后导致文件消失不要急,先进入Ghost,依次选取“Local/Check/Disk”,按回车后开始检测。如果发现检测进程的目录和文件中居然有使用PQ分区的盘符的原有文件还存在就一切好说。
首先用Ghost把E盘做一个镜像文件保存在D盘,然后将E盘格式化,完成后,E盘空间变为了用PQ调整时期望的大小了。最后用Ghost Explorer打开镜像文件,把其中的文件提取到E盘,再次打开E盘运行其中的程序,一切正常,至此成功地恢复了被PQ损坏的分区。
恢复误GHOST的硬盘
当是误用了带功能的XP安装盘,这种安装盘会重建分区表,把你的硬盘分为四个区,然后把XP系统到C盘;第二种是利用备份还原系统,本应把备份还原到C分区,但一不小心还原到整个硬盘上了。这两种操作的实质是一样的,都改写了硬盘的分区表,而且向硬盘覆盖了一些数据。从数据恢复的角度来看,C分区被覆盖了数据,国内由于没有深层恢复技术,基本被覆盖的数据是回不来的,但C分区之后的数据基本是可以完全恢复的。
举个例子加以说明,一块硬盘原来有三个分区,分别是C,D,E,D盘和E盘有重要数据。原打算用在C盘装上一个XP系统,但操作时不小心,把备份还原到了整个硬盘,这下子硬盘上只有一个C分区了。这个硬盘共有16G,原先C盘8G,D和E各是4G,现在只有一个C盘,大小是16G。
当中我们做了两件事情,一是覆盖了C盘的一部分空间,二是重写了分区表。除了被覆盖了一部分数据,其余的数据都毫发无损,我们只要能重建分区表,原来的D盘和E盘的数据就可以重见天日了。要重建分区表,关键是要知道第一个扩展分区起始的位置,找到了这个位置,所有的问题就都解决了。
异同比较
ghost备份还原与虚拟系统的区别
共同点
1.都具有备份数据和还原数据的能力.
不同点
1.GHOST采取镜象系统分区或者文件夹的方式备份和还原数据.而虚拟系统采取操作系统与应用程序分离,并且重定向技术实现,操作系统崩溃不影响数据与应用程序环境的方式,实现数据和设置的备份与还原.  2.GHOST由于其设计特点只能还原早期的备份数据,不能还原当前的系统状态.虚拟系统由于实现了操作系统与应用程序分离,并且重定向了操作系统操作和访问数据的路径,实现了时时保存数据和保存应用程序设置的能力,因此系统崩溃不会因为系统问题而导致类似收藏夹丢失,我的文档丢失,上网历史记录丢失,聊天记录丢失,一些系统设置丢失,一些软件设置丢失等等情况发生.
常见问题
ghost是一个经济实惠的软件备份恢复选择,很多个人用户都用这个,也有很多学校和公司也用这个。从使用情况来看,主要碰到了以下一些问题:
1、对于学校、培训机构的机房,无法实现硬件还原卡的网络拷贝、增量拷贝功能;
2、恢复可靠性强,但是恢复效率低,硬件还原卡是及时还原;
针对以上各种情况,给各位一点建议:
1、学校尽量还是选择硬件还原卡,网络功能可以大大降低大批量机器的维护工作量;
2、恢复即时性要求高的场合,比如网吧,最好是装有还原产品,即时实现还原保护;而ghost作为一种硬备份的方式,一旦遇到紧急情况,作为第二选择。
命令参数
其实ghost 2001的功能远远不止它主程序中显示的那些,ghost可以在其启动的命令行中添加众多参数以实现更多的功能。命令行参数在使用时颇为复杂,不过我们可以制作批处理文件,从而“一劳永逸”(类似于无人安装windows 98和windows 2000)让我们来了解一些常用的参数(了解更加详细的参数介绍可查看ghost的帮助文件)。
1.-rb 本次ghost操作结束退出时自动重启。这样,在复制系统时就可以放心离开了。
2.-fx 本次ghost操作结束退出时自动回到dos提示符。
3.-sure 对所有要求确认的提示或警告一律回答“yes”。此参数有一定危险性,只建议高级用户使用。
4.-fro 如果源分区发现坏簇,则略过提示强制拷贝。此参数可用于试着挽救硬盘坏道中的数据。
5.@filename 在filename中指定txt文件。txt文件中为ghost的附加参数,这样做可以不受dos命令行150个字符的限制。
6.-f32 将源fat16分区拷贝后转换成fat32(前提是目标分区不小于2g)。winnt 4和windows95、97用户慎用。
7.-bootcd 当直接向光盘中备份文件时,此选项可以使光盘变成可引导。此过程需要放入启动盘。
8.-fatlimit 将nt的fat16分区限制在2g。此参数在复制windows nt分区,且不想使用64k/簇的fat16时非常有用。
9.-span 分卷参数。当空间不足时提示复制到另一个分区的另一个备份包。
10.-auto 分卷拷贝时不提示就自动赋予一个文件名继续执行。
11.-crcignore 忽略备份包中的crc error。除非需要抢救备份包中的数据,否则不要使用此参数,以防数据错误。
12.-ia 全部映像。ghost会对硬盘上所有的分区逐个进行备份。
13.-ial 全部映像,类似于-ia参数,对linux分区逐个进行备份。
14.-id 全部映像。类似于-ia参数,但包含分区的引导信息。
15.-quiet 操作过程中禁止状态更新和用户干预。
16.-script 可以执行多个ghost命令行。命令行存放在指定的文件中。
17.-span 启用映像文件的跨卷功能。
18.-split=x 将备份包划分成多个分卷,每个分卷的大小为x兆。这个功能非常实用,用于大型备份包复制到移动式存储设备上,例如将一个1.9g的备份包复制到3张刻录盘上。
19.-z 将磁盘或分区上的内容保存到映像文件时进行压缩。-z或-z1为低压缩率(快速);-z2为高压缩率(中速);-z3至-z9压缩率依次增大(速度依次减慢)。
20.-clone 这是实现ghost无人备份/恢复的核心参数。使用语法为:
-clone,mode=(operation),src=(source),dst=(destination),[sze(size),sze(size)......]
此参数行较为复杂,且各参数之间不能含有空格。其中operation意为操作类型,值可取:copy:磁盘到磁盘;load:文件到磁盘;dump:磁盘到文件;pcopy:分区到分区;pload:文件到分区;pdump:分区到文件。
source意为操作源,值可取:驱动器号,从1开始;或者为文件名,需要写绝对路径。
destination意为目标位置,值可取:驱动器号,从1开始;或者为文件名,需要写绝对路径;@cdx,刻录机,x表示刻录机的驱动器号,从1开始。
下面举例说明 :
命令行参数:ghostpe.exe -clone,mode=copy,src=1,dst=2
完成操作:将本地磁盘1复制到本地磁盘2。
命令行参数:ghostpe.exe -clone,mode=pcopy,src=1:2,dst=2:1
完成操作:将本地磁盘1上的第二分区复制到本地磁盘2的第一分区。
命令行参数:ghostpe.exe-clone,mode=load,src=g:3prtdisk.gho,dst=1,sze1=450m,sze2=1599m,sze3=2047m
完成操作:从映像文件装载磁盘1,并将第一个分区的大小调整为450mb,第二个调整为1599mb,第三个调整为2047mb。
命令行参数:ghostpe.exe -clone,mode=pdump,src2:1:4:6,dst=d:prt246.gho
完成操作:创建仅具有选定分区的映像文件。从磁盘2上选择分区1、4、6。
了解了这些参数后,我们就可以轻松地实现ghost的无人备份/复制/恢复了。冲杯咖啡吧。
一些示例
ghost.exe -clone,mode=copy,src=1,dst=2 -sure
硬盘对拷
ghost.exe -clone,mode=pcopy,src=1:2,dst=2:1 -sure
将一号硬盘的第二个分区复制到二号硬盘的第一个分区
ghost.exe -clone,mode=pdump,src=1:2,dst=g:ac.gho
将一号硬盘的第二个分区做成映像文件放到g分区中
ghost.exe -clone,mode=pload,src=g:ac.gho:2,dst=1:2
从内部存有两个分区的映像文件中,把第二个分区还原到硬盘的第二个分区
ghost.exe -clone,mode=pload,src=g:ac.gho,dst=1:1 -fx -sure -rb
用g盘的bac.gho文件还原c盘。完成后不显示任何信息,直接启动。
ghost.exe -clone,mode=load,src=g:ac.gho,dst=2,sze1=60p,sze2=40p
将映像文件还原到第二个硬盘,并将分区大小比例修改成60:40
还原磁盘
首先做一个启动盘,包含config.sys,autoexec.bat,command,io.sys,ghost.exe文件(可以用windows做启动盘的程序完成)。
autoexec.bat可以包含以下命令:
ghost.exe -clone,mode=pload,src=d:ac.gho,dst=1:1 -fx -sure -rb
利用在d盘的文件自动还原,结束以后自动跳出ghost并且重新启动。
开机自动做c区的备份,在d区生成备份文件bac.gho。
ghost.exe -clone,mode=pdump,src=1:1,dst=d:ac.gho -fx -sure -rb
还原光盘
包含文件:config.sys,autoexec.bat,mscdex.exe(cdrom执行程序),oakcdrom.sys(atapi cdrom兼容驱动程序),ghost.exe
config.sys内容为:
device=oakcdrom.sys /d:idecd001
autoexec.bat内容为:
mscdex.exe /d:idece001 /l:z
ghost -clone,mode=load,src=z:ac.gho,dst=1:1 -sure -rb
可以根据下面的具体说明修改实例
-clone 在使用时必须加入参数,它同时也是所有的switch{batch switch}里最实用的一种,下面是clone所定义的参数
-clone,
mode={copy|load|dump|pcopy|pload|pdump},
src={drive|file|driveartition},
dst={drive|file|driveartition}
mode指定要使用哪种clone所提供的命令
copy 硬盘到硬盘的复制(disk to disk copy)
load 文件还原到硬盘(file to disk load)
dump 将硬盘做成映像文件(disk to file dump)
pcopy 分区到分区的复制(partition to partition copy)
pload 文件还原到分区(file to partition load)
pdump 分区备份成映像文件(partition to file dump)
src指定了ghost运行时使用的源分区的位置模式及其意义:
mode命令 对应mode命令src所使用参数 例子
copy/dump
源硬盘号。
以1********号硬盘
load 映像文件名
g:/back98/setup98.gho 或装置名称(drive)
pcopy/pdump
源分区号。
1:2********硬盘1的第二个分区
pload 分区映像文件名加上分区号或是驱动器名加上分区号。
g:ack98setup98.gho:2,********文件里的第二个分区
dst运行ghost时使用的目标位置模式及其意义:
mode命令 对应mode命令dst所使用参数 例子
copy/dump 目的硬盘号。
2********号硬盘
load 硬盘映像文件名。
例g:ack98setup98.gho
pcopy/pload 目的分区号。
2:2 ********,硬盘2的第二个分区
pdump 分区映像文件名加分区号。
g:ack98setup98.gho:2
szen指定所使用目的分区的大小
n=xxxxm 指定第n目的分区的大小为xxxxmb sze2=800m表示分区2的大小为800mb
n=mmp 指定地n的目的分区的大小为整个硬盘的mm个百分比。
其他参数
-fxo 当源物件出现坏块时,强迫复制继续进行
-fx 当ghost完成新系统的工作后不显示“press ctrl-alt-del to reboot”直接回到dos下
-ia 完全执行扇区到扇区的复制。当由一个映像文件或由另一个硬盘为来源,复制一个分区时,ghost将首先检查来源分区,再决定是要复制文件和目录结构还是要做映像复制(扇区到扇区)。预设是这种形式。但是有的时候,硬盘里特定的位置可能会放一些隐藏的与系统安全有关的文件。只有用扇区到扇区复制的方法才能正确复制
-pwd and -pwd=x 给映像文件加密
错误代码
使用Ghost时,发生错误,Ghost会返回一个错误代码给用户,很多人并不知道代码的意思。我们把它们一一列出,供大家在使用中参考,以做到对症下药,排除故障。
错误代码: 10000
原因或对策:不正确的路径/文件语法。请确保路径及文件名是否正确,同时确定如果你正在网络上建立映像文件你是否有写权限。
错误代码: 10001
原因或对策:使用者放弃了操作。
错误代码: 10060
原因或对策:读取了坏的来源文件或磁盘。检查磁盘或映像文件是否有问题,网络是否有冲突,光驱是否有了问题。
错误代码: 10082
原因或对策:Ghost的共享版本已过期,必须购买才能够使用。
错误代码: 10170
原因或对策:拒绝检查映像文件或磁盘。请使用更新的版本以解决此问题。
错误代码: 10180
原因或对策:硬盘没有响应。请检查电缆线、电源连接、跳线及基本输出入单元(BIOS)设置。确定你的系统已经由FDISK给硬盘正确分了区。
错误代码: 10210
原因或对策:无效的扩充分区信息,可能你的硬盘分区已经被硬盘压缩软件压缩。如果它们是由此类型的驱动器所控制,Ghost无法完全将硬盘定位。请先把分区解压缩,再执行Ghost程序。
错误代码: 10220
原因或对策:返回这个错误代码,是因为你正在Windows的DOS窗口下执行Ghost程序。请试着在纯DOS下使用Ghost,最好用DOS盘启动机器,然后再执行Ghost程序。
错误代码: 10600
原因或对策:Ghost无法适当地继续由于缺乏内存,请参阅下面15040错误代码。
错误代码: 11000
原因或对策:无效的备份映像文件,请重新指定备份映像文件。
错误代码: 12080
原因或对策:一般是企图在网络之上克隆磁盘对磁盘所致。Ghost仅仅能够通过NetBIOS协议在网络上进行磁盘对磁盘克隆操作。
错误代码: 12090
原因或对策:读取或写入硬盘发生错误,请尝试先扫描硬盘,并修复操作再执行Ghost。
错误代码: 14030
原因或对策:未注册的Ghost版本遭遇文件的日期超过它的终止日期,请购买新的Ghost版本。
错误代码: /15010 /15020 /15030 /15050
原因或对策:返回此类错误代码,可以试着使用Ghost -E去避免此类错误。
错误代码: 15040
原因或对策:执行Ghost时内存不够,请确认在config.sys中已经加入以下语句:
device=himem.sys
错误代码: 15100
原因或对策:使用Ghost -OR去拒绝检查或更新到最新的版本以解决此难题。
错误代码: 15150
原因或对策:可能是已经损坏的映像文件,请先使用Local→Check→Image File命令来检查一下映像文件的完整性。
错误代码: 15165
原因或对策:Ghost在存取网络上的文件或硬盘时发生问题,请检查你的网络设备或者使用最新版本的Ghost解决此难题。
错误代码: 15170
原因或对策:来源硬盘未格式化或遇到了无效的分区。请确定来源硬盘已经被正确分区。
错误代码: 15175
原因或对策:在Compaq机器上运行时可能产生的问题,请使用最新版本的Ghost。
错误代码: 16040
原因或对策:你的硬盘上有太多的分区。
错误代码: 19080
原因或对策:大部分或许是Ghost存取的目录或文件名称是无效的。
错误代码: 19320
原因或对策:Ghost由于缺乏内存无法执行,请参阅上面15040错误信息。
错误代码: 30004
原因或对策:读入加密过的映像文件时用户提供的密码不正确,无法使用映像文件。
注意事项
1.在备份系统时,单个的备份文件最好不要超过2GB。
2.在备份系统前,最好将一些无用的文件删除以减少Ghost文件的体积。通常无用的文件有:Windows的临时文件夹、IE临时文件夹、Windows的内存交换文件。这些文件通常要占去100多兆硬盘空间。
3.在备份系统前,整理目标盘和源盘,以加快备份速度。
4.在备份系统前及恢复系统前,最好检查一下目标盘和源盘,纠正磁盘错误。
5.在恢复系统时,最好先检查一下要恢复的目标盘是否有重要的文件还未转移,千万不要等硬盘信息被覆盖后才后悔莫及啊。
6.在选择压缩率时,建议不要选择最高压缩率,因为最高压缩率非常耗时,而压缩率又没有明显的提高。
7.在新安装了软件和硬件后,最好重新制作映像文件,否则很可能在恢复后出现一些莫名其妙的错误。
8.在没有光驱的情况下用GHOST软件进行还原硬盘中的系统备份时,要注意电脑供电不要中断,否则不仅电脑系统失败,而且硬盘中存储的备份文件也会丢失或损坏。
软件利弊
ghost很大的方便了人们对系统的维护安装,却也极大的推行了盗版系统的泛滥。
其他介绍
onekey ghost软件介绍
一款设计专业、操作简便,在 Windows 下对任意分区进行一键备份、恢复的绿色程序。
支持多硬盘、混合硬盘(IDE/SATA/SCSI)、混合分区(FAT32/NTFS)、未指派盘符分区、盘符错乱、隐藏分区以及交错存在非 Windows 分区。
支持多系统,并且系统不在第一个硬盘第一个分区,完美支持品牌机隐藏分区!
支持最新 Windows 8系统,支持 32、64 位操作系统!
安装不成功时,如何删除老版本?可以采用QQ电脑管家的“强力卸载电脑上的软件”来彻底清理老版ghost。
一键备份不成功时怎么办?一半问题出在备份磁盘空间不够,在最后一个磁盘分区里腾出两倍于C盘的安装容量的空间就可以了。

[ Last edited by zzz19760225 on 2016-6-17 at 21:52 ]
作者: zzz19760225     时间: 2016-5-25 22:41
我是一个线程 2016-03-30 IBM刘欣 程序猿
  
我是一个线程, 我一出生就被编了个号: 0x3704,  然后被领到一个昏暗的屋子里,  
这里我发现了很多和我一模一样的同伴。
  
我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说:
  
我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远
回不来了。
  
  
我一脸懵懂,包裹,什么包裹?
  
”不要着急,马上你就会明白了, 我们这里是不养闲人的。“
  
果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:  
  
"0x3704 ,出来!"
  
我一出来就被塞了一个沉甸甸的包裹,上面还有附带着一个写满了操作步骤的纸。  
  
"快去,把这个包裹处理了。"
  
"去哪儿处理"
  
"跟着指示走, 先到就绪车间"
  
  
果然,地上有指示箭头,跟着它来到了一间明亮的大屋子,这里已经有不少线程了,  
大家都很紧张,好像时刻准备着往前冲。
  
  
我刚一进来,就听见广播说:“0x3704, 进入车间”
  
  
我赶紧往前走, 身后很多人议论说:
  
  
”他太幸运了, 刚进入就绪状态就能运行“
  
”是不是有关系?“  
  
”不是,你看人家的优先级多高啊, 唉“
  
  
前边就是车间, 这里简直是太美了, 怪不得老线程总是唠叨着说:要是能一直待在这
里就好了。  
  
  
这里空间大,视野好,空气清新,鸟语花香,还有很多从来没见过的人,像服务员一样
等着为我服务。  
  
  
他们也都有编号, 更重要的是每个人还有个标签,上面写着:硬盘,数据库,内存,
网卡...
  
  
我现在理解不了,看看操作步骤吧:
  
  
第一步:从包裹中取出参数  
  
  
打开包裹, 里边有个HttpRequest  对象, 可以取到 userName, password两个参数
  
  
第二步:执行登录操作
  
  
奥,原来是有人要登录啊,我把userName/password 交给 数据库服务员,他拿着数据
, 慢腾腾的走了。  
  
  
  
他怎么这么慢? 不过我是不是正好可以在车间里多待一会儿? 反正也没法执行第三
步。
  
  
就在这时,车间里的广播响了: 
  
  
"0x3704,  我是CPU , 记住你正在执行的步骤, 马上带包裹离开"
  
我慢腾腾的开始收拾
  
  
”快点, 别的线程马上就要进来了“
  
  
离开这个车间, 又来到一个大屋子,这里很多线程慢腾腾的在喝茶,打牌。
  
”哥们,你们没事干了?“
  
  
”你新来的把, 你不知道我在等数据库服务员给我数据啊! ,据说他们比我们慢好几
十万倍, 在这里好好歇吧“
  
  
”啊? 这么慢?  我这里有人在登录系统, 能等这么长时间吗"
  
  
”放心,你没听说过人间一天, CPU一年吗, 我们这里是用纳秒,毫秒计时的, 人间
等待一秒,相当于我们好几天呢, 来的及“
  
  
干脆睡一会吧 , 不知道过了多久 ,大喇叭又开始广播了:
  
  
"0x3704, 你的数据来了,快去执行”
  
  
我转身就往CPU车间跑,发现这里的们只出不进!
  
  
后面传来阵阵哄笑声:
  
  
”果然是新人, 不知道还得去就绪车间等“
  
  
于是赶紧到就绪车间, 这次没有那么好运了, 等了好久才被再次叫进CPU车间。
  
  
在等待的时候, 我听见有人小声议论:
  
  
”听说了吗,最近有个线程被kill掉了“
  
”为啥啊?“
  
”这家伙赖在CPU车间不走, 把CPU利用率一直搞成100%,后来就被kill掉了“
  
”Kill掉以后弄哪儿去了“
  
”可能被垃圾回收了吧“
  
  
我心里打了个寒噤 ,  赶紧接着处理, 收下的动作块多了,第二步登录成功了
  
  
第三步:构建登录成功后的主页
  
  
这一步有点费时间, 因为有很多HTML需要处理, 不知道代码谁写的,处理起来很烦
人。
  
  
我正在紧张的制作html呢, CPU有开始叫了:
  
  
"0x3704,  我是CPU , 记住你正在执行的步骤, 马上带包裹离开"
  
”为啥啊“
  
”每个线程只能在CPU上运行一段时间,到了时间就得让别人用了, 你去就绪车间待着
, 等着叫你吧“
  
  
就这样, 我一直在就绪-运行 这两个状态,不知道轮转了多少次, 终于安装步骤清单
把工作做完了。
  
  
最后顺利的把包含html的包裹发了回去。
  
  
至于登录以后干什么事儿 , 我就不管了。  
  
  
马上就要回到我那昏暗的房间了, 真有点舍不得这里。
  
  
不过相对于有些线程, 我还是幸运的, 他们运行完以后就彻底的销毁了,而我还活着

  
  
回到了小黑屋, 老线程0x6900 问:
  
  
”怎么样?第一天有什么感觉?“
  
”我们的世界规则很复杂 , 首先你不知道什么时候会被挑中执行;  第二 ,在执行的
过程中随时可能被打断,让出CPU车间;
  
  
   第三,一旦出现硬盘,数据库这样耗时的操作也得让出CPU,去等待;  第四,就是数
据来了,你也不一定马上执行,还得等着CPU挑选“
  
  
”小伙子理解的不错啊“
  
”我不明白为什么很多线程都执行完就死了, 为什么咱们还活着?“
  
”你还不知道, 长生不老是我们的特权, 我们这里有个正式的名称,叫做 线程
池!“
  
  
平淡的日子就这么一天天过去, 作为一个线程, 我每天的生活都是取包裹,处理包裹
,然后回到我们昏暗的家:线程池。
  
  
有一天我回来的时候, 听到有个兄弟说, 今天要好好休息下,明天就是最疯狂的一天
。  
  
  
我看了一眼日历,明天是 11月11号 。  
  
  
果然,零点刚过,不知道那些人类怎么了, 疯狂的投递包裹, 为了应付蜂拥而至的海
量包裹, 线程池里没有一个人能闲下来,全部出去处理包裹,CPU车间利用率超高,硬
盘在嗡嗡转, 网卡疯狂的闪,  即便如此, 还是处理不完,堆积如山。
  
  
我们也没有办法,实在是太多太多了, 这些包裹中大部分都是浏览页面,下订单,买
,买,买。
  
  
不知道过了多久, 包裹山终于慢慢的消失了。
  
  
终于能够喘口气, 我想我永远都不会忘记这一天。
  
  
通过这个事件,我明白了我所处的世界:这是一个电子商务的网站!
  
  
我每天的工作就是处理用户的登录,浏览, 购物车,下单,付款。
  
  
我问线程池的元老0x6900 : " 我们要工作到什么时候?"
  
" 要一直等到系统重启的那一刻", 0x6900 说
  
" 那你经历过系统重启吗?"
  
" 怎么可能? , 系统重启就是我们的死亡时刻, 也就是世界末日,一旦重启, 整个
线程池全部销毁,时间和空间全部消失,一切从头再来”
  
" 那什么时候会重启?"
  
" 这就不好说了,好好享受眼前的生活吧....."
  
  
其实生活丰富多彩, 我最喜欢的包裹是上传图片,由于网络慢,所以能在就绪车间,  
CPU车间待很长很长时间,可以认识很多好玩的线程。
  
  
比如说上次认识了memecached 线程,他给我说通过他缓存了很多的用户数据, 还是分
布式的! 很多机器上都有!
  
  
我说怪不得后来的登录操作快了那么多, 原来是不再从数据库取数据了你那里就有啊
, 哎对了你是分布式的你去过别的机器没有?
  
  
他说怎么可能我每次也只能通过网络往那个机器发送一个GET, PUT命令才存取数据而已
, 别的一概不知。
  
  
再比如说上次在等待的时候遇到了数据库连接的线程, 我才知道它他那里也是一个连
接池, 和我们线程池几乎一模一样。
  
  
他说有些包裹太变态了,竟然查看一年的订单数据, 简直把我累死了。
  
  
我说拉倒吧你, 你那是纯数据, 你把数据传给我以后,我还得组装成HTML,  工作量
不知道比你大多少倍。
  
  
他说一定你要和memecached搞好关系,直接从他那儿拿数据,尽量少直接调用数据库,
我们JDBC connection也能活的轻松点。
  
  
我说好啊好啊, 关键是你得提前把数据搞到缓存啊, 要不然我先问一遍缓存, 没有
数据, 我这不还得找你吗?
  
  
生活就是这样, 如果你自己不找点乐子,还有什么意思?
  
  
有一天我遇到一个可怕的事情, 差一点死在外边,回不了线程池了......
  
其实这次遇险我应该能够预想到才对, 太大意了。  
  
  
前几天我处理过一些从http 发来的存款和取款的包裹, 老线程0x6900 特意嘱咐我:
  
  
"处理这些包裹的时候要特别小心, 你得一定要先获得一把锁, 在对账户存款或者取
款的时候一定要把账户给锁住, 要不然别的线程就会在你等待的时候趁虚而入,搞破
坏, 我年轻那会儿很毛糙,就捅了篓子"  
  
  
为了“恐吓”我, 好心的0x6900还给了我两个表格:
  
  
1、没有加锁的情况
  
  
2、加锁的情况
  
  
我看的胆颤心惊, 原来不加锁会带来这么严重的事故。
  
  
从此以后看到存款,取款的包裹就倍加小心, 还好,没有出过事故。  
  
  
今天我收到的一个包裹是转账, 从某著名演员的账号给某著名导演赚钱, 具体是谁我
就不透漏了, 数额可真是不小
  
  
我按照老线程的吩咐, 肯定要加锁啊, 先对著名演员账号加锁, 在对著名导演账号
加锁。
  
  
可我万万没想到的是, 还有一个线程,对,就是0x7954,  竟然同时在从这个导演到往
这个演员转账。  
  
  
于是乎,就出现了这么个情况:
  
  
  
刚开始我还不知道什么情况, 一直坐在等待车间傻等, 可是等的时间太长了, 长达
几十秒 ! 我可从来没有经历过这样的事件。  
  
  
这时候我就看到了线程0x7954 , 他悠闲的坐在那里喝咖啡, 我和他聊了起来:
  
  
“哥们, 我看你已经喝了8杯咖啡了, 怎么还不去干活?”
  
“你不喝了9杯茶了吗?” 0x7954 回敬到。
  
“我在等一个锁, 不知道哪个孙子一直不释放”
  
“我也在等锁啊,我要是知道哪个孙子不释放锁我非揍死他不可 ” 0x7954 毫不示
弱。
  
  
我偷偷的看了一眼, 这家伙怀里不就抱着我正在等的 某导演的锁嘛?
  
很明显, 0x7954 也发现了我正抱着他正在等待的锁。  
  
  
很快我们两个就吵了起来, 互不相让:
  
  
"把你的锁先给我, 让我先做完"
  
"不行, 从来都是做完工作才释放锁, 现在绝对不能给你"
  
  
从争吵到打起来, 就那么几秒钟的事儿。  
  
  
更重要的是, 我们俩不仅仅持有这个著名导演和演员的锁, 还有很多其他的锁, 导
致等待的线程越来越多, 围观的人们把屋子都挤满了。
  
  
最后事情真的闹大了, 我从来没见过终极大boss "操作系统" 也来了。  
  
大Boss毕竟是见多识广, 他看了一眼, 哼了一声 , 很不屑的说:
  
  
"又出现死锁了"
  
"你们俩要Kill掉一个, 来吧, 过来抽签 "
  
  
这一下子把我给吓尿了, 这么严重啊!
  
我战战兢兢的抽了签,打开一看, 是个"活"字。  
  
唉,小命终于保住了。  
  
  
可怜的0x7954 被迫交出了所有的资源以后, 很不幸的被kill掉, 消失了。
  
  
我拿到了导演的锁, 可以开始干活了。
  
  
大Boss操作系统如一阵风似的消失了, 身后只传来他的声音:
  
  
记住, 我们这里导演>演员,  无论认识情况都要先获得导演的锁
  
由于不仅仅是只有导演和演员, 还有很多其他人, Boss留下了一个表格,  里边是个
算法, 用来计算资源的大小, 计算出来以后,永远按照从大到小的方式来获得锁:
  
  
  
  
  
我回到线程池, 大家都知道了我的历险, 围着我问个不停。  
  
凶神恶煞的线程调度员把大Boss的算法贴到了墙上。
  
  
  
每天早上, 我们都得像无节操的房屋中介, 美容美发店的服务员一样, 站在门口,
像被耍猴一样大声背诵:
  
  
"多个资源加锁要牢记, 一定要按Boss的算法比大小, 然后从最大的开始加锁"
  
  
--------------------------------------------------------
  
  
又过了很多天, 我和其他线程们发现了一个奇怪的事情:包裹的处理越来越简单
  
  
不管任何包裹,不管是登录, 浏览,存钱..... 处理的步骤都是一样的, 返回一个固
定的html页面
  
  
有一次我偷偷的看了一眼, 上面写着:
  
  
"本系统将于今晚 00:00 至4:00 进行维护升级, 给你带来的不便我们深感抱歉"
  
我去告诉了老线程0x6904,  他叹了一口气说:
  
  
"唉, 我们的生命也到头了, 看来马上就要重启系统, 我们就要消失了, 再见吧兄
弟。"
  
  
系统重启的那一刻终于到来了。 
  
我看到屋子里的东西一个个的不见了, 等待车间,就绪车间,甚至CPU车间都慢慢的消
失了。
  
我身边的线程兄弟也越来越少, 最后只剩我自己了。  
  
我在空旷的原野上大喊: 还有人吗?
  
无人应答。
  
我们这一代线程池完成了使命。
  
下一代线程池将很快重生。
  
(完)
---------------------------------------------------------------------
五大常用算法:分治、动态规划、贪心、回溯和分支界定
时间 2014-06-03 11:22:00  CSDN网志
原文  http://blog.csdn.net/yapian8/article/details/28240973
主题 动态规划
分治算法

一、基本概念

   在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并 。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

    任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。

二、基本思想及策略

   分治法的设计思想是: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之 。

   分治策略是: 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解 。这种算法设计策略叫做分治法。

   如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。 这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之 中,并由此产生许多高效算法。

三、分治法适用的情况

    分治法所能解决的问题一般具有以下几个特征:

    1) 该问题的规模 缩小 到一定的程度 就可以容易地解决

    2) 该问题可以分解为若干个规模较小的相同问题,即该问题 具有最优子结构性质 。

    3) 利用该问题分解出的子问题的解 可以合并 为该问题的解;

    4) 该问题所分解出的各个子问题是相互独立的,即 子问题之间不包含公共的子子问题 。

第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是应用分治法的前提 它也是大多数问题可以满足的,此特征反映了递归思想的应用;、

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征 ,如果 具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法 。

第四条特征涉及到分治法的效率 ,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但 一般用动态规划法较好 。

四、分治法的基本步骤

分治法在每一层递归上都有三个步骤:

    step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;

    step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题

    step3 合并:将各个子问题的解合并为原问题的解。

它的一般的算法设计模式如下:

    Divide-and-Conquer(P)

    1. if |P|≤n0

    2. then return(ADHOC(P))

    3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk

    4. for i←1 to k

    5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi

    6. T ← MERGE(y1,y2,...,yk) △ 合并子问题

    7. return(T)

    其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,y2,...,yk合并为P的解。

五、分治法的复杂性分析

    一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有:

  T(n)= k T(n/m)+f(n)

    通过迭代法求得方程的解:

    递归方程及其解只给出n等于m的方幂时T(n)的值,但是如果认为T(n)足够平滑,那么由n等于m的方幂时T(n)的值可以估计T(n)的增长速度。通常假定T(n)是单调上升的,从而当                  mi≤n<mi+1时,T(mi)≤T(n)<T(mi+1)。  

六、可使用分治法求解的一些经典问题

  (1)二分搜索
(2)大整数乘法

  (3)Strassen矩阵乘法


(8)最接近点对问题

(10)汉诺塔
七、依据分治法设计程序时的思维过程

    实际上就是类似于数学归纳法,找到解决本问题的求解方程公式,然后根据方程公式设计递归程序。

1、一定是先找到最小问题规模时的求解方法

2、然后考虑随着问题规模增大时的求解方法

3、找到求解的递归函数式后(各种规模或因子),设计递归程序即可。

五大常用算法之二:动态规划算法

一、基本概念

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

二、基本思想与策略

    基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

    由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

    与分治法最大的差别是: 适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解) 。

三、适用的情况

能采用动态规划求解的问题的一般要具有3个性质:

    (1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

    (2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

   (3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。( 该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势 )

四、求解的基本步骤

      动态规划所处理的问题是 一个多阶段决策问题 ,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。如图所示。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。

     初始状态→│决策1│→│决策2│→…→│决策n│→结束状态

                       图1 动态规划决策过程示意图

    (1) 划分阶段 :按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意 划分后的阶段一定要是有序的或者是可排序的 ,否则问题就无法求解。

    (2) 确定状态和状态变量 :将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

    (3) 确定决策并写出状态转移方程 :因为决策和状态转移有着天然的联系, 状态转移就是根据上一阶段的状态和决策来导出本阶段的状态 。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做, 根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程 。

    (4) 寻找边界条件 :给出的 状态转移方程是一个递推式 ,需要一个递推的终止条件或边界条件。

    一般,只要解决问题的 阶段 、 状态 和 状态转移决策 确定了,就可以写出 状态转移方程(包括边界条件)。

实际应用中可以按以下几个简化的步骤进行设计:

    (1)分析最优解的性质,并刻画其结构特征。

    (2)递归的定义最优解。

    (3)以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值

    (4)根据计算最优值时得到的信息,构造问题的最优解

五、算法实现的说明

    动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。

     使用动态规划求解问题, 最重要的 就是 确定动态规划三要素 :

    (1)问题的阶段 (2) 每个阶段的状态

    (3) 从前一个阶段转化到后一个阶段之间的递推关系 。

     递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过 因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处 。

    确定了动态规划的这三要素, 整个求解过程就可以用一个最优决策表来描述 , 最优决策表是一个二维表,其中行表示决策的阶段,列表示问题状态 ,表格需要 填写的数据一般对应此问题的在某个阶段某个状态下的最优值 (如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。

           f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}

六、动态规划算法基本框架
复制代码
  代码
1 for (j = 1 ; j <= m; j = j + 1 ) // 第一个阶段 2   xn[j] = 初始值; 3 4   for (i = n - 1 ; i >= 1 ; i = i - 1 ) // 其他n-1个阶段 5   for (j = 1 ; j >= f(i); j = j + 1 ) // f(i)与i有关的表达式 6 xi[j] = j = max(或min){g(xi - 1 [j1:j2]), ......, g(xi - 1 [jk:jk + 1 ])}; 8 9 t = g(x1[j1:j2]); // 由子问题的最优解求解整个问题的最优解的方案 10 11 print(x1[j1]); 12 13 for (i = 2 ; i <= n - 1 ; i = i + 1 ) 15 { 17 t = t - xi - 1 [ji]; 18 19 for (j = 1 ; j >= f(i); j = j + 1 ) 21 if (t = xi[ji]) 23 break ; 25 }

复制代码
五大常用算法之三:贪心算法

贪心算法

一、基本概念:

      所谓贪心算法是指,在对问题求解时,总是做出在 当前看来是最好的选择 。 也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的 局部最优解 。

      贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

     所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。

二、贪心算法的基本思路:

    1.建立数学模型来描述问题。

    2.把求解的问题分成若干个子问题。

    3.对每一子问题求解,得到子问题的局部最优解。

    4.把子问题的解局部最优解合成原来解问题的一个解。

三、贪心算法适用的问题

      贪心策略适用的前提是:局部最优策略能导致产生全局最优解。

    实际上, 贪心算法适用的情况很少 。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。


四、贪心算法的实现框架

    从问题的某一初始解出发;

    while (能朝给定总目标前进一步)

    {
          利用可行的决策,求出可行解的一个解元素;

    }
    由所有解元素组合成问题的一个可行解;

  
五、贪心策略的选择

     因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。

六、例题分析
    下面是一个可以试用贪心算法解的题目,贪心解的确不错,可惜不是最优解。

    [背包问题]有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。

    要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。

    物品 A B C D E F G

    重量 35 30 60 50 40 10 25

    价值 10 40 30 50 35 40 30

    分析:
    目标函数: ∑pi最大

    约束条件是装入的物品总重量不超过背包容量:∑wi<=M( M=150)

    (1)根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?

    (2)每次挑选所占重量最小的物品装入是否能得到最优解?

    (3)每次选取单位重量价值最大的物品,成为解本题的策略。

    值得注意的是,贪心算法并不是完全不可以使用,贪心策略一旦经过证明成立后,它就是一种高效的算法。

    贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。

    可惜的是,它需要证明后才能真正运用到题目的算法中。

    一般来说, 贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。

    对于例题中的3种贪心策略,都是无法成立(无法被证明)的,解释如下:

    (1)贪心策略:选取价值最大者。反例:

    W=30
    物品:A B C

    重量:28 12 12

    价值:30 20 20

    根据策略,首先选取物品A,接下来就无法再选取了,可是,选取B、C则更好。

    (2)贪心策略:选取重量最小。它的反例与第一种策略的反例差不多。

    (3)贪心策略:选取单位重量价值最大的物品。反例:

    W=30
    物品:A B C

    重量:28 20 10

    价值:28 20 10

    根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择A,则答案错误。

五大常用算法之四:回溯法

1、概念

      回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

   回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

     许多 复杂的,规模较大 的问题都可以使用回溯法,有“通用解题方法”的美称。

2、基本思想

    在包含问题的所有解的解空间树中,按照 深度优先搜索的策略 ,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。

       若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

       而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

3、用回溯法解题的一般步骤:

    (1)针对所给问题,确定问题的解空间:

            首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。

    (2)确定结点的扩展搜索规则

    (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

4、算法框架

     (1)问题框架

      设问题的解是一个n维向量(a1,a2,………,an),约束条件是ai(i=1,2,3,…..,n)之间满足某种条件,记为f(ai)。

     (2)非递归回溯框架

1: int a[n],i;
   2: 初始化数组a[];
   3: i = 1;
   4: while (i>0(有路可走)   and  (未达到目标))  // 还未回溯到头
   5: {
   6:     if(i > n)                                              // 搜索到叶结点
   7:     {
   8:           搜索到一个解,输出;
   9:     }
  10:     else                                                   // 处理第i个元素
  11:     {
  12:           a第一个可能的值;
  13:           while(a在不满足约束条件且在搜索空间内)
  14:           {
  15:               a下一个可能的值;
  16:           }
  17:           if(a在搜索空间内)
  18:          {
  19:               标识占用的资源;
  20:               i = i+1;                              // 扩展下一个结点
  21:          }
  22:          else
  23:         {
  24:               清理所占的状态空间;            // 回溯
  25:               i = i –1;
  26:          }
  27: }
(3)递归的算法框架

         回溯法是对解空间的深度优先搜索,在一般情况下使用递归函数来实现回溯法比较简单,其中i为搜索的深度,框架如下:

1: int a[n];
   2: try(int i)
   3: {
   4:     if(i>n)
   5:        输出结果;
   6:      else
   7:     {
   8:        for(j = 下界; j <= 上界; j=j+1)  // 枚举i所有可能的路径
   9:        {
  10:            if(fun(j))                 // 满足限界函数和约束条件
  11:              {
  12:                 a = j;
  13:               ...                         // 其他操作
  14:                 try(i+1);
  15:               回溯前的清理工作(如a置空值等);
  16:               }
  17:          }
  18:      }
  19: }
五大常用算法之五:分支限界法

分支限界法

一、基本描述

    类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。 回溯法 的求解目标是找出T中满足约束条件的 所有解 ,而 分支限界法 的求解目标则是找出 满足约束条件的一个解 ,或是在满足约束条件的解中找出使某一目标函数值达到 极大或极小的解 ,即在某种意义下的 最优解 。

   (1)分支搜索算法

    所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点,继续搜索。

     选择下一个E-结点的方式不同,则会有几种不同的分支搜索方式。

   1)FIFO搜索

   2)LIFO搜索

   3)优先队列式搜索

(2)分支限界搜索算法

二、分支限界法的一般过程

    由于求解目标不同,导致分支限界法与回溯法在解空间树T上的搜索方式也不相同。 回溯法以深度优先的方式搜索解空间树T ,而 分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T 。

    分支限界法的 搜索策略是 :在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。

    分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。问题的 解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树 。在搜索问题的解空间树时,分支限界法与回溯法对当前扩展结点所使用的扩展方式不同。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,那些导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被子加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所求的解或活结点表为空时为止。

三、回溯法和分支限界法的一些区别

    有一些问题其实无论用回溯法还是分支限界法都可以得到很好的解决,但是另外一些则不然。也许我们需要具体一些的分析——到底何时使用分支限界而何时使用回溯呢?

回溯法和分支限界法的一些区别:

   方法对解空间树的搜索方式        存储 结点的常用数据结构      结点 存储 特性常用应用

  回溯法深度优先搜索堆栈活结点的所有可行子结点被遍历后才被从栈中弹出找出满足约束条件的所有解

  分支限界法广度优先或最小消耗优先搜索队列、优先队列每个结点只有一次成为活结点的机会找出满足约束条件的一个解或特定意义下的最优解


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/ynwlgh/archive/2011/12/02/2272421.html

瑜伽:意识的成长

    生命的目的是要变成有意识(conCscious)。这不仅是瑜伽的目的,生命的进化本身也
在于变得越来越有意识,而瑜伽还意味着更多一些东西。生命的进化是要求变得越来越有意
识,但是意识(consciousness)却总是他物指向的(otheroriented):你总是在意识到某
个东西、某个客体。瑜伽意味着在没有客体只有意识存在的层面上进化。瑜伽是朝向纯净意
识的进化,而不是在意识到的“某个东西”,它只能“是”意识本身。当你在意识某个东西
时,你不会意识到意识本身的存在。你的意识是集中在某个东西上的,你的注意力并不在意
识本身的源头上。在瑜伽中,整个努力就是要变得意识到客体和意识本身这两者,意识有着
双重的目的。你必须意识到客体,你也必须同时意识到主体,意识必须成为一座双向的桥
梁。主体决不能被忘掉,当你把意识集中在客体上时,主体决不能被忘记。
    这是瑜伽的第一步。第二步是去除主体与客体两者而只是成为有意识的。这个纯净的意
识就是瑜伽的目标。
    即使不用瑜伽,一个人也会向越来越有意识成长,但是瑜伽会给这个意识的进化增加某
些东西,贡献某些东西。它能改变(change)很多东西,也能变革(transform)很多东
西。第一个变革就是在某些东西要被意识到的那个时刻,你能是一个双向的觉知(a double
arrowed awareness),你能记住自己(remembering yourself)。
    那个困境在于:要么你在意识到某个客体,要么你是无意识的。如果没有外在的客体,
那么你就是在昏睡中,客体被需要是为了让你成为有意识的。当你完全不被占据时你就感到
困倦——你需要某些用来意识的客体,但是当你有太多的客体要去意识时,你可能会感到无
法入睡了。那就是为什么一个人如果太被思想占据了他就无法入睡了。客体在那儿连续地出
现,思想在那儿连续地出现,他无法变得没有意识,思想一直在要求他的注意。而这就是我
们活着的样子。
    对新的客体你会变得更有意识。那就是为什么我们会有追求新东西的欲望、追求新东西
的渴望。旧的东西会变得令人厌倦。一旦你和某个客体多待上一会儿,你就对它变得没有意
识。你已经接受了它,那么现在就不需要你的注意力了,你会变得厌倦。举例来说,你可能
好几年没有意识到你的妻子了,因为你已经把她视为理所当然了。你不再看她的脸了,你不
记得她的眼睛的颜色了,好几年你都没有真正地注意她了。只有当她死的时候你才会再次觉
知到她在那儿。那就是为什么妻子们与丈夫们都变得相互厌倦了。任何客体,只要它不再持
续地引起你注意,就会产生厌倦。
    同样的,一个咒语、一个重复的声音振动会导致很深的睡眠。当一个特定的咒语被不断
地重复,你就会觉得无聊。这没有什么神秘的。持续地重复一个特定的词会使你厌倦,你无
法与它多呆一会儿,你会开始觉得困倦,你会进入某种睡眠状态,你会变得没有意识。事实
上,整个催眠的方法就是依靠厌倦。如果你的头脑能够因某个东西而无聊,那么你就会进入
睡眠,睡眠是可以被诱导的。
    我们整个的意识就依赖着新的客体,那就是为什么有那么多对新东西的渴望。一个新的
感觉,一件新的衣服,一幢新的房子,都是“新”的东西,即使它并不怎么好。有了某种不
同的东西,你才会感觉到意识的一个突然的上升。
    因为生命是意识的一个进化,这是好的;就生命而言,这是好的。如果一个社会在渴望
新的感觉,生命就会有进步;但是如果它停驻在旧的状态,不去要求新的,那么它会变得死
气沉沉,意识将无法进化。
    例如,在东方,我们都在设法满足于现状,这产生出了无聊,没有东西是新的。于是,
好几个世纪以来,每一样东西都在按它的老样子继续不断。你只会觉得无聊。当然,你可以
睡得更好些,而西方是无法睡觉的。当你一直在要求新东西的时候,失眠是肯定会存在的,
然而不会有进化。有两件事似乎是会发生的:要么整个社会变得昏睡而死气沉沉,就像东方
所发生的那样;要么这个社会就会变成没有睡眠的,就像西方所发生的那样。
    没有一件事是好的。你需要一个即使在没有新的客体时仍然能够觉知的头脑。实际上,
你需要一个不是必定要与那“新”、不是必定要与客体相关的意识。如果它注定是与客体相
关的,那么它必定会与“新”相关。你需要一个完全与客体不相关的意识,它是超越客体
的。那样,你才有了自由:当你愿意,你就能去睡觉,当你愿意,你就能醒着,不需要客体
来帮助你。你变得自由,真正地不受客体世界的影响。
    一旦你超越了客体,你也就超越了主体,因为它们是一同存在的。实际上,主体性与客
体性是一个事物的两极,当有一个客体,那么你是一个主体,但是如果你能不需要客体而有
觉知,那么就没有主体、没有自己。
    这需要有很深的了解:当客体消失了,你能够没有客体而有意识,只有意识,那么主体
也就消失了。它无法留在那儿,它不可能存在!两者都消失了,只有意识、那没有束缚的意
识在那儿。这样一来也没有了界限,既没有主体的界限,也没有客体的界限。
    佛陀经常说,当你在静心中,那么就没有自己,没有我(atman),因为那个觉知会把
你同其他每一样东西隔离开来。
    如果你还在那儿,那么客体也就在那儿。我存在,但是“我”无法在完全孤独中存在,
“我”是在与外在世界的关系中才能存在的。“我”是一个关系物。那么所谓的“自己”,
“我存在”只是某种存在于与外在事物的关系中的你自己里面的东西。但是如果外在不存
在,那么这个内在也会消失,那么只有单纯的、自发性的意识存在。
    这就是瑜伽所追求的目的,这就是瑜伽所意味的东西。瑜伽是使你自己不受主客体的界
限束缚的科学,而除非你不受这些界限的束缚,否则你就要么落入东方的不平衡中,要么落
入西方的不平衡中。
    如果你要达到头脑的平静、宁静、睡眠,那么最好是持续地与同一个东西呆在一起。经
过很多很多世纪那儿也不会有什么看得见的变化。那样,你就很安逸,你可以睡得更好,但
是这不是灵性的;你丢失得太多了。那个要成长的迫切要求丢失了,那个要冒险的强烈愿望
丢失了,那个要去探寻、发现的强烈愿望丢失了。真的,你会开始过呆板单调的生活,你会
变得很呆滞。
    如果你能改变这种生活,那么你会变得很有活力,但是这也是病态的,因为你变得有活
力但是紧张,有活力但是疯狂。你会开始寻找新的东西、要求新的东西,但是你是在刮旋
风。新的东西会发生,但是你丢失了。
    如果你去掉了你的客体性,那么你会变得太富有主体性和太有梦想;但是如果你太被客
体占据了,那么你会失去主体性。两种情况都是不平衡的。东方已经试过一个,西方也已经
试过另一个。
    现在,东方正在转向西方,而西方正在转向东方。东方被西方的科技、西方的科学、西
方的理性主义所吸引,爱因斯坦①、亚里士多德②和罗素③已经抓住了东方的头脑;而与此
同时,西方正在发生着完全相反的事情,佛陀、禅和瑜伽已经变得很有意义。这是一个奇
迹。东方正在转向共产主义、马克思主义、物质主义,而西方则正在开始关心有关扩展意识
的事情——静心、灵性、狂喜。这个轮子会转动,而我们能够改变我们的负担。在一个片刻
中,它将是光辉灿烂的,但是之后,整个愚蠢的举动又会重新开始。   
  ①爱因斯坦(Albert Einstein,1879~1955):德国出生的美籍著名理论物理学家。——编注
    ②亚里士多德(Aristotle,公元前384~前322):希腊哲学家、逻辑学家和科学家。
他是西方思想史中实在论哲学学派的最杰出代表。——编注
    ③罗素(BertrandRussell,1872~1970):英国唯心主义哲学家、数学家、逻辑学
家。主要著作有《数学原理》、《哲学问题》、《西方哲学史》等。——编注
    东方在一条路上已经失败了,西方在另一条路上也已经失败了,因为它们都是在拒绝头
脑的另一部分的情况下去尝试的。你必须去超越两个部分,而不要拒绝一个部分而只关心另
一个部分。头脑是一个整体。你要么能完全地超越它,要么不能超越它,如果你继续拒绝一
个部分,那么这个被拒绝的部分将会来报复。真的,那个在东方被拒绝的部分现在正在东方
报复,而那个在西方被拒绝的部分现在正在西方报复。你永远无法超越那被拒绝的,它在那
儿,它会继续聚集更多更大的力量。你所接受的那个部分成功的那个片刻也正是它失败的片
刻。没有什么东西像成功那么失败。因为有部分的成功,因为有你的一部分的成功,你就注
定要进入更深的失败。你所得到的那些东西会变成无意识,而你所丢失的那些东西会进入你
的觉知。
    缺席就会更加被感受到。如果你掉了一颗牙齿,你的舌头就会觉知到那个缺失而经常伸
向那颗不在的牙齿。在此之前它从不去那个地方,从不,但是现在你无法停止它了,它会持
续地伸向那个空缺的地方去感受那颗不在的牙齿。
    同样地,当头脑的一个部分成功了,你会变得觉知到那另一个部分的失败——那个部分
是应该成功的但现在它没有。现在,东方已经意识到没有变成科学的那个愚蠢了:那就是我
们贫穷的原因,那就是我们默默无闻的原因。现在,这个缺失被感觉到了,所以东方已经开
始转向西方,而同时,西方也感觉到了它自己的愚蠢和它的缺乏一体化。
    瑜伽意味着人的整体的科学。它不只是宗教,它是人的整体的科学,是超越一切部分的
整体的科学。当你超越了部分,你就变成了整体。整体并不只是部分的累加,它不是一个把
所有的部分排列起来而成为一个整体的那样一件机械的事。不,它要比一件机械的事丰富得
多,它就好像是某种艺术品。
    你可以把一首诗划分成很多语词,但是这样一来语词并不意味着什么,而当整体存在,
那么它就比语词更丰富,它有它自己的身份(identity)。它有空隙,就像有语词一样。而
有时候,空隙比语词更有意义。只有当一首诗说出了某些并没有真的被说出来的东西时,只
有当它超越了所有有关它的部分时,一首诗才是有诗性的。如果你划分它、分析它,那么你
只是拥有了部分,而那个超越的花朵,那个真正的东西却丢失了。
    所以,意识是一个整体。拒绝一个部分,你就会丢失某些东西,某些真正有意义的东
西。而你不会得到什么,你得到的只是极端。每一个极端都会变成一种病,每一种极端都会
变成一种内在的病,这样你就会一直不断地处于动荡之中。
    那儿有一种内在的混乱。
    瑜伽是超越混乱的科学,是使得你的意识变得完整的科学。而只有当你超越了部分,你
才变得完整。所以瑜伽既不是宗教又不是科学,它是两者,或者说,它超越两者。你可以说
它是一个科学的宗教,或者是一个宗教的科学。那就是为什么瑜伽可以被属于任何宗教的任
何人所使用;它可以被任何一类头脑的任何人所使用。
    在印度,所有已经发展起来的宗教都有差异很大的、事实上是敌对的哲学、概念和观
念。它们没有一点共同的东西。在印度教与耆那教之间没有共同的东西,在印度教与佛教之
间没有共同的东西。但是有一个所有这些宗教都无法否认的共同的东西:瑜伽。
    佛陀说“没有身体,没有灵魂”,但是他无法说“没有瑜伽”。摩诃毗罗说“没有身
体,但是有一个灵魂”,但是他无法说“没有瑜伽”。印度教说“有身体,也有灵魂,也有
瑜伽”。瑜伽保持是永恒的,即使基督教也无法否认它。
    事实上,即使某个人是完全无神论者,他也无法否认瑜伽,因为瑜伽并没有一个要先相
信上帝的先决条件。瑜伽没有先决条件,瑜伽是绝对经历主义的。在最古老的瑜伽书中根本
没有提及“上帝”这样的概念。当上帝这样的概念被提及时,它只是作为一个方法而被提
及,它可以作为一个假设而被使用,如果它对某个人有帮助,那么可以使用它,但是它不是
一个绝对的条件。那就是为什么佛陀可以是一个没有上帝、没有《吠陀经》、没有任何信仰
的瑜伽行者。没有任何信仰,任何所谓的信仰,他也能成为一个瑜伽行者。
    所以,对有神论者或者即使是一个无神论者,瑜伽都能成为一个共同的基础。它可以成
为科学与宗教之间的一座桥梁。它同时是理性的和非理性的,它的方法是完全理性的,但是
通过方法,你会深深地进入的非理性的奥秘之中。整个过程是极其理性的,每一步都是那么
理性的,那么科学的,它是那么有逻辑的,以至于你只需要去做它,而其他的每一件事都会
随之而来。
    荣格①提到过,在19世纪没有一个西方人关心过能够想象超越意识的头脑或低于意识
头脑的心理学,因为头脑就是意味着意识。所以,怎么会有一个无意识的头脑呢?这是荒谬
的,不科学的。然而,在20世纪,随着科学对无意识更多的了解,一个无意识的头脑的理
论就发展出来了。于是,当他们进入得更深的时候,他们就不得不接受一个“集体无意识”
(collectiveuncon-scious)的观念,而不仅仅是个体的。这看起来是荒唐的,因为头脑
意味着某种个人的东西,所以怎么会有一个集体的头脑呢?但是现在他们甚至已经接受了集
体性头脑这个概念。   
  ①荣格(CarlGustavJung,1875~1961):瑞士心理学家,分析心理学首创人。主
要著作有《分析心理学论集》、《心理学型态》等。——编注
    这些是佛教心理学、佛教瑜伽划分的最初的3个区别,然后,佛陀继续把它划分成160
多种区别。荣格说:“以前我们否认这3个,现在我们接受它们了,或许其他的也存在着。
我们只有一步一步地向前,我们必须更加深入。”荣格的处理方式是非常理性的,他是一个
深深扎根于西方的人。对于瑜伽,你必须很理性地进行,但只是为了跳入非理性。结果一定
是非理性的。你能够理解,那理性的不可能是源头,因为它是有限的。源头一定比你更伟
大,你从源头而来,每一样东西都从源头而来,整个宇宙从源头而来,又走下去并且消失在
其中。这个源泉一定比这些更多。显示出来的一定比源头少。一个理性的头脑能够感觉和理
解那显示出来的,但是那没有显示出来的仍然在后面。
    瑜伽并不坚持一个人必须是理性的。它说:“去想象一些非理性的东西本身就是理性
的,去想象理性的界限真的是理性的。”一个真实的、诚实的头脑总是知道理性的限度,总
是知道理性在某个地方结束了,任何一个真诚的理性的人都不得不来到一个能感觉到非理性
的点。如果你用理性向着终极前进,那个界限就会被感觉到。
    爱因斯坦感觉到它,维特根斯坦①也感觉到它。维特根斯坦的《逻辑哲学论》是迄今为
止所写过的最理性的书之一,他是最理性的头脑之一。他一直以一种非常逻辑的方式、一种
非常理性的方式谈论存在(existence)。他的表达——语词、语言、每一样东西都是理性
的,但是之后他说:“在超过某一个点之后,有一些东西是无法被说出来的,关于它我必须
保持沉默。”然后他又写道:“那些不能被说出来的一定不可以被说出来。”   
  ①维特根斯坦(LudwigWittginstein,1889~1951):奥地利人,20世纪英语世
界中哲学界的主要人物。曾在罗素指导下研究数理逻辑。所著《逻辑哲学论》和《哲学研
究》为哲学经典著作。——译注
    整个大厦倾倒了,整个大厦!维特根斯坦原来是在想对整个生命和存在的现象作出理性
的解释,但是突然之间一个点来临了,而他说:“现在,超过这一点,什么也不能说。”这
是在说某种东西,某种非常有意义的东西。某种东西在那儿,而现在,关于它,什么也不能
说。现在,存在着一个点,它是无法被定义的,在那儿,所有的定义全都掉落了。每当有一
个真正的、逻辑的头脑,它就会来到这个点。爱因斯坦是作为神秘主义者而死的,他是比你
所谓的神秘主义者更是一个神秘主义者,因为如果你是一个没有经历过理性道路的精疲力竭
的神秘主义者,那么你就永远无法深入到神秘主义中。你并没有真正知道那个界限。我总是
看到那些把上帝当作一个逻辑概念、当作一场争论来谈论的神秘主义者。有一些基督教神秘
主义者一直在尝试“证明”上帝。多么无聊!如果上帝也能被证明,那么你就无法留下任何
不能被证明的了,而那不能被证明的就是源头。
    一个曾经经历过某些神性的东西的人是不会试着去证明它的,因为那个证明的努力显示
出一个人还从来没有与生命的本源有着连结,而那本源是无法被证明的,它是不能被证明
的。整体是无法用部分来证明的。举例来说,我的手无法证明我的存在(existence),我
的手不可能比我更大,它无法覆盖我。要去证明是愚蠢的。但是如果一只手能够完全地覆盖
它自己,那也已经够好的了。一旦手知道了它自己,它也就知道了它是扎根于某些“更……
的”东西上的,它也就知道了它一直是和某些“更……的”东西连成一体的。它存在是因为
那“更………的”是存在的。
    如果我死了,那么我的手也会死,它活着仅仅是因为我。整体一直是不能被证明的,只
有部分是可以知道的。我们无法证明整体,但我们能感觉到它;手无法证明我,但是手能够
感觉到我。它可以在它自身中走得更深,一旦它到达那个深度,那就是我了。
    被理性所困扰的所谓的神秘主义者不是真正的神秘主义者。一个真正的神秘主义者从来
不会被理性困扰,他能够与它玩游戏。他能够与理性玩游戏,是因为他知道理性无法摧毁生
命的神秘。那些害怕理性、逻辑、争论的所谓的神秘主义者和宗教人士,实际上是在害怕他
们自己。任何反对他们的争论都可能创造出内在的疑惑,它可能会帮助他们的内在的疑惑浮
现出来。他们是害怕他们自己。
    基督教的神秘主义者德尔图良①说:“我相信上帝,因为我无法证明他;我相信上帝,
因为这是不可能相信的。”一个真正的神秘家就是会这样感觉的:“这是不可能的,那就是
我为什么相信。”如果它是可能的,那么不需要去相信,它会变成只是一个概念、一个普通
的概念。   
  ①德尔图良(Tertullian):古代基督教著作家、雄辩家,在使拉丁语成为教会语
言和西方基督教的传播工具方面,作出了贡献。主要著作有:《护教篇》、《驳赫莫金尼
斯》、《论基督的肉体复活》等。——编注
    这就是神秘主义者们一直在说的信念、信仰,它并不是某种理性的东西,它不是一个概
念,它是跳进那不可能。但是你只有在理性的边缘才能跳进那神秘之中,在此之前永远不可
能。在此之前你怎么能做它呢?只有当你的理性伸展到它的逻辑的极限时,你才能够跳。你
已经来到一个理性无法向前而这个超越的东西仍然存在的点上了。现在你知道理性无法再向
前一步,而“前面的”依然存在。即使你决定要停留于理性,那也就创造出了一个界限。你
知道存在是超越于理性的界限的,所以即使你不去超越这个界限,你也变成了一个神秘主义
者。即使你不跳,你也变成了一个神秘主义者,因为你知道某些东西,你遭遇过某些东西,
而那些东西完全不是理性的。
    所有理性能够知道的你都知道了。现在,某些理性无法知道的东西被遭遇到了。如果你
要跳,那么你必须把理性丢在后面,你无法带着理性去跳。这就是所谓的信念。信念是并不
反对理性的,它超越于理性。它不是反理性的,它是非理性的。
    瑜伽是带领你到理性的极限的方法,它不仅是一个带你去极限的方法,而且是一个跳的
方法。
    怎么去跳?爱因斯坦如果知道某种静心的方法,他会像佛陀一样开花的。他正好就在边
缘,在他一生中有很多次他一直走到了那个可以跳的点,但是一次又一次地错过了,他再次
被理性纠缠住了。而到最后,他因为整个理性的人生而灰心了。
    同样的事也可能发生在佛陀身上,他也有一个非常理性的头脑,但是对他来说,有一些
事是可能的,他能够使用一个方法。不仅理性有它的方法,非理性也有它的方法。
    瑜伽在根本上关心的是非理性的方法,只有在一开始可以使用一些理性的方法。那些方
法只是为了说服你,推动你,劝服你的理性走向极限。而如果你到达了那个极限,你将会作
最根本的跳跃。
    古尔捷耶夫①在某个团体中用一些深入的、非理性的方法展开他的工作。他与一群追随
者一起用一种特殊的非理性的方法展开工作。他经常称它是一项“停住的训练”(StopExc
ercise)。举例来说,你跟他在一起,而突然之间他会喊:“停!”然后每一个人都必须按
他的样子停下来,完全地停住。如果手在某个地方,那么手就必须停在那个地方;如果眼睛
是睁开的,那么就必须保持是睁开的;如果嘴巴是张开的,你正在讲某些话,那么嘴巴就必
须保持它那时的样子。不能有变动。   
  ①古尔捷耶夫(Gurdjieff,1872~1949):亚美尼亚哲学家。——编注
    这个方法是以身体为开始的。如果在身体上没有了运动,那么在头脑中也就没有了运
动。两者是相连结的。如果没有内在的头脑的运动,你就无法移动你的身体,而如果没有内
在的头脑的停止,你就无法完全地停住你的身体。身体和头脑是两样东西,但它们是同一种
能量。身体中的能量比头脑中的能量更粗重一些。密度有不同,波长的频率也有不同,但它
们是同一种波,是同一种能量的流动。
    追随者们做这个“停住的训练”连续有一个月了。有一天,古尔捷耶夫在他的帐篷里,
3个追随者正在通过地面上的一条干的运河,这是一条干的运河,没有水在里面流动,突然
之间,从他的帐篷里,古尔捷耶夫喊道:“停!”在运河岸上的每一个人都停住了,3个在
运河里的人也停住了,它是干的,所以没有问题。
    然后突然间,水冲了过来。有人打开了水闸,水冲进了运河。当水淹到3个人的脖子
时,有一个人跳出了运河,他想:“古尔捷耶夫不知道发生了什么,他在他的帐篷里,他不
知道水已经进入了运河这个事实。”那个人想:“我必须跳出去,现在还待在这里是不理性
的。”于是他跳出去了。
    另外两个人还待在运河中,而水越升越高。最后,水到了他们的鼻子,第二个人想:
“这是极限了!我到这里来不是为了来死的,我到这里来是为了知道那永恒的生命,而不是
送死的。”于是他也跳出了运河。
    第三个人还待在那儿,他也面对着同样的问题,但是他决定留下来,因为古尔捷耶夫曾
经说过这是一项非理性的训练,如果用理性来做它,那么整个事情就会被破坏掉。他想:
“好!我接受死亡,但是我不能停止这个训练。”所以他就留在那儿了。
    现在,水正在没过他的头顶,古尔捷耶夫从他的帐篷里冲出来,跳进运河,把他拉了出
来,他正在死亡的边缘了。但是当他活过来,他已经是一个改变了的人了。他已经不是那个
站在那里做这个训练的人了,他已经完全被改变了。他已经知道了某些事情,他已经跳了。
    极限在哪里?如果你继续带着理性,那么你会错过,你会继续掉回来。有时候一个人会
跨出一步以引导你超越。那一步会变成一个变革,分裂就被超越了。不管你说这个分裂是意
识与无意识之间的,理性与非理性之间的,宗教与科学之间的,还是东方与西方之间的,那
个分裂一定是被超越了。这就是瑜伽:一种超越。然后你又可以回到理性,但是你将会有所
改变的。你甚至可以用理性把事情推导出来,但是“你”将会是超出理性的。
    ------------------
  天涯在线书库 整理校对

[ Last edited by zzz19760225 on 2016-11-30 at 22:49 ]