大多以前是TIMBERHARE和NET还有wqxxp上的精华贴。。。。。。。。 虽然说是FOR PC1000,但基础知识,对那些还不是真正了解POKE ,CALL ,PEEK的星迷还是有点用处的!!!
PEEK详解
在论坛上时常有人问怎么用PEEK,POKE。我也曾经为此迷惘过。对那些PEEK值感到 不可思议。现在学了汇编,当然不觉得了。但当时的情景仍然记忆犹新。于是, 我决定写下这个详解。
§PEEK的使用
先来看一段程序:
FOR I=8136 TO 8141
PRINT CHR$(PEEK(I));
NEXT I
大家应该见过了吧。这就是查看系统密码的程序。他是怎么起作用的呢?我们来 看: 第一行很简单,是一个循环。大家应该看得懂。第三行是对应的循环结尾。主体就在第二行。
PRINT大家都很熟悉了,使用来显示值的。如果给他的参数是数字,就显示数字。 如果是字符就显示字符。当然我们这里需要的是字符了。可是PEEK取出来的是数 字呀。所以我们使用了CHR$()这个函数来吧把数字变成字符。如果你有些知识就 知道这种对应是按照ASC][表来的,如果是中文就比较复杂(有两种对应法则)。
○PEEK取出来的是数字
如果你是细心的人还会发现后面有一个:号。这是干什么用的?是用来把取出的 密码连续的显示出来,而不是写一个就换一行。PEEK不可以一次取出多个值吗? 不可以!一次只可以取一个英文字母或者一个字节的数字。
○PEEK一次取出一个英文字母或者一个字节的数字
好了。那么再来看PEEK的参数。这里没有用直接的数字如8136,而使用了循环变量I。这是因为使用了FOR循环的缘故。PEEK对参数并没有什么特别的要求。
○PEEK的参数可以是数字也可以是变量甚至表达式。
如果你把循环展开,一下语句是等价的:
PRINT CHR$(PEEK(8136));
PRINT CHR$(PEEK(8137));
...
PRINT CHR$(PEEK(8141));
这样写虽然有些笨,不过却可以很清楚的发现对应关系。假设你的系统密码是genius,那么第一至六行对应的分别是g,e,n,i,u,s。清楚?
OK!进入正提。8136到底是什么?8136对应文曲星的内存地址。
○PEEK的参数是内存地址
在这个地址处,系统会把密码放入供检验密码使用。你把它的值取出来了,就相当于偷看到了系统的底牌。于是乎,PEEK就是偷看的意思。什么是内存地址?好,下面就讲。
§文曲星存储器结构基础
题目是不是有些吓人?没关系,其实很简单的。
文曲星其实是学生用的掌上电脑,与桌面上的电脑一样也有CPU。这不是本文的重点(以后写汇编教程的时候就是重点了)。和人的大脑一样,电脑也要记忆东西。人有两种记忆,长期记忆与短时记忆。比如你的mm的生日,就是长期记忆。你在算87乘以76时候的进位就是短时记忆。电脑也一样,在桌面机上就对应为硬盘与RAM。而文曲星是没有硬盘的,文曲星是靠闪存来达到长期记忆的目的的。RAM之所以称为短期记忆是因为断电后内容就没有 了。不过,你按开关键关闭文曲星的时候并不会清空RAM,是我讲错了吗?当然不是,那是因为开关键并没有真正的断电。此时系统时钟仍在运行。只有你按RESET或拔电池时,RAM的内容才会被清空。闪存,RAM。嗯,有些概念了。他们长得什么样?这并不重要。工作原理是什么?也不管我们得事。
○闪存用于长期保存资料
○RAM用于暂时保存资料
我更习惯把两者合称为内存,这和大家一般的概念不太一样。不过我认为,既然都是内部的存储器当然就叫内存喽。不论闪存还是RAM都是用来保存数字的。到了电脑中一切都是用数字表示的,这点观念一定要有。
○闪存和RAM是用来保存数值的。
可是,问题就来了。闪存和RAM肯定不止一个数的内容吧?如果我存入了十个,当我取出来的时候,文曲星怎么知道我要取出来的是哪一个?其实很简单,用数字给他们编一个号就是了。还记得夏天用来冻冰块的方格吗?内存就是那样的,分成了许多块。每一个块对应一个编号,用来标识这个方格的身份。一个方块可以储存一个字节的信息。这个编号就称为地址。现在明白前面的例子了吧。
○地址是用来标识内存不通区块的编号
[此贴子已经被作者于2004-9-7 15:13:45编辑过]
|