不遇到goto的时候程序还好,但一但遇到goto语句就会报告出错!这到底是怎么回事?
不理解意思 我想知道一般在basic的运行地址范围插入汇编是用什么方法呢? 还有就是说遇到goto语句后如果是往前面跳转就会出错,如果往后跳转就没有!不知道是怎么回事! 引用第3楼lzjseed于2007-01-26 23:07发表的“”:
我想知道一般在basic的运行地址范围插入汇编是用什么方法呢?
用POKE,其实POKE就相当与汇编里的STA,然后在CALL来执行嵌的入汇编程序.CALL相当于JSR. 你的汇编把BASIC的内容覆盖了,你的GOTO当然出问题了。。。 建议LZ把嵌入的汇编程序送到$2000--$3FFF之间,这样就不会覆盖掉BASIC程序了!!
以为BASIC解释器是从$4000开始加载程序的! 好像不是从4000开始运行的.... 我是用poke把数据放在内存里的,而且也是在$2000~$3fff之内的呀!怎么回事呢? 我只是想知道在basic环境下$2000~$3fff之间要用汇编该怎么样做才不会引起错误! 给你个例子好了!!
10 FOR I =0 TO 3: READ A:A(I) =A
20 DATA 0,39,5,96
30 POKE I +8192,A(I)
40 NEXT
50 CALL 8192 晕!估计是我弄错了! 对,一遇到GOTO就会出错!好像是GVBASIC的问题(我原先写程序也遇见过)
比如
1 PRINT "HELLO"
10 FOR I =0 TO 3: READ A:A(I) =A
20 DATA 0,39,5,96
30 POKE I +8192,A(I)
40 NEXT
50 CALL 8192
60 GOTO 1 那怎么做才能防止这种情况的发生呢?应该有的吧?各位高手们! 引用第11楼Isword于2007-01-27 21:40发表的“”:
给你个例子好了!!
10 FOR I =0 TO 3: READ A:A(I) =A
20 DATA 0,39,5,96
30 POKE I +8192,A(I)
40 NEXT
.......
这样是没问题,但一但之后有goto语句并是向前跳转就会出错
比如我再加一句60 GOTO 50 ,系统就会报错! 这样应该不会错吧!
大不了这样改!
0 REM:XXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
1 PRINT "HELLO"
10 FOR I =0 TO 3: READ A:A(I) =A
20 DATA 0,39,5,96
30 POKE I +8192,A(I)
40 NEXT
50 CALL 8192
60 GOTO 1 你看看这吧
也是GOTO的问题!
http://www.emsky.net/bbs/read.php?tid=15508&keyword= 引用第16楼gcwy于2007-01-28 07:30发表的“”:
这样应该不会错吧!
大不了这样改!
0 REM:XXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
.......
我试过了,但还是有行号不存在的错误! 没有人能解决下吗?? 高手们到现在还没有人能回答下?
页:
[1]
2