易码技术论坛

 找回密码
 加入易码
搜索
查看: 359068|回复: 8

求助——关于poke,peek,call

[复制链接]
发表于 2007-6-15 12:55:54 | 显示全部楼层
PEEK
用法 PEEK(ADDR) 获得内存地址ADDR处的数值
199是WQX通用的键盘缓冲区 例如按下空格键(键值为32) 内存199处的数值就会变为32
即PEEK(199)=32
这个可以来判断按键

POKE
用法 POKE ADDR,NUM 将内存ADDR处的数值修改为NUM(不知道WQX内存分配请不要乱试) 某些机型不支持POKE和CALL函数
例如 POKE 199,32 就相当于将内存199处的数值改为32
实现模拟按键功能
也可以改时间 假如某机型时间中 年 的地址为2000 想改为2007年
POKE 2000,126 即可
(WQX上储存年的方式是 年份-1881,数值为126 对应年份为1881+126=2007)

CALL
用法 CALL ADDR 运行ADDR处的汇编代码 运行完毕返回GVBASIC解析器
建议不懂内存的不要使用POKE  和  CALL两函数
 楼主| 发表于 2007-6-17 17:21:08 | 显示全部楼层
好厉害!
谢谢了.
顺便问一下:这些内存地址是从哪里知道的?
发表于 2007-6-17 20:44:20 | 显示全部楼层
发表于 2007-6-18 16:48:24 | 显示全部楼层
LS正解稍做补充:PEEK相当于读内存数值,POKE相当于写,CALL是直接调用。
POKE和CALL都万分危险,不熟知或是不会刷机或有重要资料没备份,千万不要用,有可能损坏系统数据导致系统崩溃(软件损坏,可以重刷)。
发表于 2007-6-18 17:55:45 | 显示全部楼层
引用第0楼mhros2007-06-13 19:03发表的“求助——关于poke,peek,call”:
  在一些GVBASIC程序中看到peek,poke,call等语句。
请问这几个函数怎么用,有什么效果?
为什么peek(199)可以得到键盘输入字符的ASCII码(有时候是+128的),而把括号中的数字换掉就没这个效果?


更正一点 键值缓冲区所储存的键值是ASCII码+128
也会出现ASCII码原值
具体怎么会事 不好意思  偶也不清楚``
还是问问大虾们`

括号中的数字去掉 PEEK就相当于一个实型变量名了它的默认值是0(不知道说的对不对,MS这种标志符会自动被识别为系统函数而报错,但LZ没说有错  只说没效果~高人解释下 谢~!)
发表于 2007-6-18 18:40:43 | 显示全部楼层
括号里去掉……这不是电脑,更不是C++,这个是BASIC……GVBASIC
括号去掉,WQX不会自判,直接按语法错误处理……
PEEK(199)是“上次键盘按键记录”,是长期值,不再按不变,而且显示的值就是按键ASCII码+128,比如“输入”的ASCII码是13,显示的就是141
但是,如果程序直接这么写

10 PRINT PEEK(199)

按输入进去,就会写13,这个不算BUG,没什么影响……
发表于 2007-6-18 18:58:17 | 显示全部楼层
如果是这样的程序
10 PRINT PEEK(199)
20 GOTO 10
RUN
13
141
141
141
]
……
发表于 2007-7-10 19:55:40 | 显示全部楼层
CALL调用机器骂
POKE写内存,PEEK读内存
POKE 和 CALL 非常危险,最好不要乱试,否则后果。。。。
 楼主| 发表于 2007-6-13 19:03:16 | 显示全部楼层 |阅读模式
  在一些GVBASIC程序中看到peek,poke,call等语句。
请问这几个函数怎么用,有什么效果?
为什么peek(199)可以得到键盘输入字符的ASCII码(有时候是+128的),而把括号中的数字换掉就没这个效果?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-25 12:32 , Processed in 0.010627 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表