文本是一段文字数据,数组是按数据类型连续排列的数据,指针是指向内存中某个地址位置的数值。
它们都是用一个整数值来表示所在位置,操作是比较近似的。都可以用指针的语法进行操作
文本相当于一维的字节数组,数组可以用来存放更多数据,跟申请内存一样都可以作为缓冲区
二维数组跟一维数组用法类似,只是多了一组括号,数组都有动态和静态两种申请方法
固定数组申请时括号里指定固定的数值,如:整数 数一(10);小数 数三(15,3);
使用方法: 数一(3)=66; 数二=数一(5) 数三(3,0)=88.4567; 数值=数三(2,1)
动态数组是在申请时候括号里写空: 整数 数二(); 然后在代码段使用重置:
重置 数二(886679) 重置 数二(66,55);文本变量的数组其实就是二维的
例如: 文本 内容(64,10);注意文本变量和固定数组的长度必须是数值
不能是变量,例如这样就是是错的: 文本 内容; 文本 文字(数三)
指针操作相关符号:
符号 | 作用 | 用法示例 |
@ | 取内存地址 | @变量名或程序段名 |
~ | 取内存处的数据 | ~变量:取指针变量地址的整数值;~变量%取两字节数值 |
[] | 取内存处的数据 | 值=变量[8];获取变量地址后第8字节处的字节值 |
[]% | 取内存处的数据 | 值=变量[8]%;获取变量地址后第8字节处的正数值 |
[]& | 取内存处的数据 | 值=变量[8]&;获取变量地址后第8字节处的整数值 |
` | 取已知内存 | 使用~或中括号后取1字节值:值=`;指针后移1字节 |
`% | 取已知内存 | 使用~或中括号后取2字节值:值=`%;指针后移2字节 |
`& | 取已知内存 | 使用~或中括号后取4字节值:值=`&;指针后移4字节 |
() | 读写指定内存数据 | b=a(3);a(b*6+c/100)=66+d*78;非数组读写一字节 |
()% | 读写指定内存数据 | 数=组%;组(b*6)%=值;非数组读写两字节 |
()& | 读写指定内存数据 | 数=组(2)%;组&=值;非数组读写四字节 |
% | 读写指定内存数据 | 数=组%;组%=值;非数组读写两字节,(0)%偏移为零时可省略(0) |
& | 读写指定内存数据 | 数=组&;组&=值;非数组读写四字节,(0)&偏移为零时可省略(0) |
()$ | 读写指定内存地址 | 数组指针获取地址指针:地址=$460 |
()! | 读写指定内存数据 | 数组指针读取或写入单精度值:数=组(2)!;组(6)!=值; |
()# | 读写指定内存数据 | 数组指针读取或写入双精度值:数=组(2)#;组(6)#=值; |
# | 取已知内存 | 使用小括号或列举后取值(整数或小数):#4 |
#@ | 取已知内存 | 使用小括号或列举后取地址(文本):#@8 |
#() | 取已知内存 | 使用小括号或列举后取值(字节):#(12) |
#[] | 取已知内存 | 使用小括号或列举后取值(正数):#[12] |
## | 取已知内存 | 使用小括号或列举后取值(浮点):##16 |
_[] | 读写已知内存 | 使用中括号后读取或写入字节值:_(2)=60 |
_[]% | 读写已知内存 | 使用中括号后读取或写入2字节值:_(4)%=60 |
_[]& | 读写已知内存 | 使用中括号后读取或写入整数值:_(2)&=60;n=_[4]& |
_[]$ | 读写已知内存地址 | 使用中括号后获取地址指针:地址=_[460]$ |
_[]! | 读写已知内存 | 使用中括号后读取或写入单精度值:_(4)!=60 |
_[]# | 读写已知内存 | 使用中括号后读取或写入双精度值:_(8)#=60 |
.() | 读写已知内存 | 使用小括号或列举后读取或写入字节值:.(2)=60 |
.% | 读写已知内存 | 使用小括号或列举后读取或写入2字节值:.%4=60 |
.& | 读写已知内存 | 使用小括号或列举后读取或写入整数值:.&2=60;n=.&4 |
.$ | 读写已知内存地址 | 使用小括号或列举后获取地址指针:地址=.$460 |
.! | 读写已知内存 | 使用小括号或列举后读取或写入单精度值:.!4=60 |
.# | 读写已知内存 | 使用小括号或列举后读取或写入双精度值:.#6=60 |
.+ | 增加已知内存 | 数据表使用列举时内存增加指定长度:.+10 |
.++ | 增加已知内存 | 数据表使用列举时内存增加到下一行 |
< | 读指定内存数值 | a < b;从b地址处取数据到a,a是字节取一字节,整形取两字节,局部变量固定4字节 |
> | 写指定内存值 | a>b+8;向b+8地址处写入a的数值,a是字节写一字节,整形写两字节,局部变量固定4字节 |
已知内存是指使用指针操作后,无需再使用变量表达式去定位指针。
以刚才指针位置进行偏移,比如读写指针后面6字节位置内存,只用指定偏移值6即可。
可以使用API函数进行读写,程序还提供一些便捷的指针操作。 如 整数 s="sdkfskd";
s(0)=\b;就把文本的第一个字符替换成字符b;
非定义的数组,通常是读写是按一字节
如 整数 m是一个内存地址
m(13)=128;就是把128这个数字写入第14个字节处
a=m(10);是从第11字节处读取1字节。
在括号后面加%就可以读写两字节,加&读写四字节。
如m(13)%=32128;a=m(2)%;
m(13)&=$AF32C128;如果(m(2)&=889654){};
也可以把变量对内存地址进行读写
变量只能是字节 整形 整数 小数等4字节以内的数字类型
如 文本 a="$32A4B8C6428B";字节 b;正数 i;
b b>a+2;就把a的第三位置0xB8,换成了50
i 读写数据的长度是按定义的变量类型长度,只有1、2、4字节这三种。
示例代码:
文本 内容[64]="0123456789ABCDEF中华人民共和国";
整数 数值=内容
//数值得到数据缓冲区的内存地址
数值=内容(0)
//从数据缓冲区读取第一字节数值,0这个字
数值=内容%
//从数据缓冲区读取两字节数据到数值变量,01这两个字
数值=内容&
//从缓冲区读取四字节数据,0123这四个字,(0)可以不写
数值=内容(2)
//从缓冲区的2字节后读取一字节数据,2这个字
数值=内容(2)%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=内容(2)&
//从缓冲区的2字节后读取四字节数据,2345这四个字
内容% =数值
//向缓冲区写入两字节数值,01被修改
内容& =数值
//向缓冲区写入四字节数值,0123被修改
内容(2)% =数值
//向缓冲区的2字节后写入两字节数值,23被修改
内容(2)& =数值
//向缓冲区的2字节后写入四字节数值,2345被修改
数值=#4
//#4是指针之后偏移4字节,就是读取4567这四个字
数值=#(4)
//#(4)是指针之后偏移4字节,小括号就是读取4这一个字
数值=#[4]
//#[4]是指针之后偏移4字节,中括号就是读取45这两个字
数值=#@4
//#@4是指针之后偏移4字节,就是4这个字的位置(取文本)
数值=##4
//#4是指针之后偏移4字节,就是读取456789AB这8个字(取浮点数)
.#6=数值
//#6是指针之后偏移6字节的浮点数,就是6789ABCD这八个字
.(6)=数值
//6是指针之后偏移6字节,读写操作6这个字
.%6=数值
//6是指针之后偏移6字节,读写操作67这两个字
.&6=数值
//6是指针之后偏移6字节,读写操作6789这四个字
.!6=数值
//6是指针之后偏移6字节,读写操作6789这四个字的小数值
//==============以上是小括号的指针用法=============
//记住的指针位置是变量的缓冲区内最后读写操作的内存偏移位置
//还有中括号和~符号的指针操作,只记变量指针位置,不包括操作的偏移位置
//小括号可以读写操作整数、文本、数组、结构体和数据表等,中括号只能读整数和文本指针
示例代码:
文本 内容[64]="0123456789ABCDEF中华人民共和国";
整数 数值=~内容
//数值得到数据缓冲区的前四字节数据,0123
数值=内容[0]
//从数据缓冲区读取第一字节数值,0这个字
数值=内容[2]
//从缓冲区的2字节后读取一字节数据,2这个字
数值=内容[2]%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=内容[2]&
//从缓冲区的2字节后读取四字节数据,2345这四个字
数值=`[4]
//`[4]是内容缓冲区向后4字节,就是读取4这个字
数值=`[4]%
//内容缓冲区向后4字节,百分号就是读取45这两个字
数值=`[4]&
//内容缓冲区向后4字节,连接号就是读取4567这四个字
置入指令类似于汇编的DB/DW等,是在代码段插入指令数据,支持下面几种格式
英文语法 | 中文语法 | 简单用法 |
byte | 字节 | 置入[字节 15,20,40];多个用逗号隔开 |
dword | 整数 | 置入[整数 66,$204068AA]; |
word | 整形 | 置入[整形 $2040,88]; |
single | 小数 | 置入[小数 3.14]; |
string | 文本 | 置入[文本 "你好"];不带引号时是插入指定长度的0,置入[文本 50]; |
address | 地址 | 置入[地址 窗体];地址是指变量的地址 |
local | 局部 | 置入[局部 参数];局部是指局部变量 |
call | 调用 | 置入[调用 加法];调用是指小程序 |
function | 函数 | 置入[函数 信息框];函数是指向外部API函数 |
@ | 指针 | 置入[@ 加法];指针是取变量或小程序的偏移地址 |
跳转是一系列特殊指令,且记不要和跳到搞混,指令功能如下(判断语句也可以使用#符号)
用法 | 作用解释 |
跳转 = 标记 | 相等则转移到标记 |
跳转 != 标记 | 不相等则转移到标记 |
跳转 <> 标记 | 不相等则转移到标记 |
跳转 > 标记 | 大于则转移到标记(比较无符号数) |
跳转 < 标记 | 小于则转移到标记(比较无符号数) |
跳转 <= 标记 | 小于或等于则转移到标记(比较带符号数) |
跳转 =< 标记 | 小于或等于则转移到标记(比较带符号数) |
跳转 >= 标记 | 大于或等于则转移到标记(比较无符号数) |
跳转 => 标记 | 大于或等于则转移到标记(比较无符号数) |
跳转 #0 标记 | 若溢出则转移到标记 |
跳转 #1 标记 | 不溢出则转移到标记 |
跳转 #2 标记 | 小于则转移到标记(比较无符号数) |
跳转 #3 标记 | 大于或等于/进位为零则转移到标记(比较无符号数) |
跳转 #4 标记 | 相等则转移到标记 |
跳转 #5 标记 | 不相等则转移到标记 |
跳转 #6 标记 | 小于或等于则转移到标记(比较无符号数) |
跳转 #7 标记 | 大于则转移到标记(比较无符号数) |
跳转 #8 标记 | 结果为负则转移到标记 |
跳转 #9 标记 | 结果为正则转移到标记 |
跳转 #A 标记 | 奇偶位为偶则转移到标记 |
跳转 #B 标记 | 奇偶位为奇则转移到标记 |
跳转 #C 标记 | 小于则转移(比较带符号数) |
跳转 #D 标记 | 大于或等于则转移(比较带符号数) |
跳转 #E 标记 | 小于或等于(比较带符号数) |
跳转 #F 标记 | 大于则转移(比较带符号数) |