[宝典]汉语编程:关于字串操作系统词讲解
1、系统词一: 动态内存分配
功能: 分配指定大小的地址空间,返回一个首地址
应用如下:
0 给 地址一
1000 动态内存分配 写入 地址一
这样,我们就可以在编程应用中就可以对地址一进行操作了
等效方法:
建词 地址一 1000 字节空出
从以上讲解中,我们会想,根据我们的编程经验,发现用“字串传送”无法操作255以上的地址空间,从这一点上讲,1000 字节空出 就没意义了,
为了解决这个问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,我仔细思考,并有反复调试过,现在,可以向与我曾经一样,有着这种疑惑的人祥细解答了
我们将在下一个系统词的讲解中,解答这个疑惑。
2、系统词二: 字节传送
我们都知道,位是计算机的最小单元,而字节是计算机存储数据的基本单元,我们对地址的操作通常以字节为基本单位
但是,由于我们在学习和编程应用中,对字串的操作,喜欢用已有系统词: 字串传送
所以, 而“字串传送”这个词正好不能操作字串长度超过255的长串
初学者,才会产和以上疑惑。
下面,我将通过对字节传送的讲解,来为大家解决长串(超过255字节)的操作问题:
词名: 字节传送
功能: 将一个地址的内容传送到另一个地址中(有兴趣的朋友,可以查阅一上中级教程关于字节正传,字节逆传、字节传送完善过程的内容)
使用格式: <源地址> <目标地址> <拟传送字节数> 字节传送
应用如下:
建词 地址一 1000 字节空出 ?
50 地址一 999 + 字节写 ?
地址一 999 + 字节读 ?.
看数摞 [1] 50 ?.
从以上测试中,我们可以看出,将50写入“地址一+999”的地址中,并一再次读出,看数摞,发现50已经准确写入
为了测试,我们必须再建一个缓冲,以实现用“字节传送”这个词对两个地址的操作,接着上面的测试如下:
摞初始 ?.
建词 地址二 1000 字节空出 ?
地址一 地址二 1000 字节传送 ?
地址二 999 + 字节读 ?.
看数摞 [1] 50 ?.
当我们通过“字节传送”这个词将“地址 的内容(1000字节)传送到新建地址“地址二”中后
我们通读出与地址一相对位置相同的内容
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
,通过“字节传送”这个词成功地将地址一的内容传送到了地址二
现在,我们明白了,字节传送的作用和意义(不明白地要多想想,这个词对我们的编程应用作用重大)
我们将在下一个系统词中讲解: 为什么“字串传送”不能实现对长串的操作,
3、系统词三:字串传送
功能:将一个地址 长度型字串传送到一个计数字节型字串中
使用格式; <地址> <长度> <缓冲> 字串传送
我们知道了,以字节为单位对字串进行操作,最方便的是使用系统词:字串传送
而在对长串的操作中,我们发现了问题
那就是:使用字串传送对超过255字节的长串进行操超过255字节的部分无法成功传送
为了解决这个疑惑,我们先做个小 测试(为了方便,使用前面测试所建缓冲):
摞初始 ?
地址一 1000 填空格 ?
地址二 1000 填空格 ?
100 地址一 30 + 字节写 ?
50 地址一 999 + 字节写 ?
地址一 1000 地址二 字串传送 ?
地址二 计字节 ?..
看数摞 [2] 638545 255 ?..
印字串
d
?
ASCII d 显 100 ?
从以上测试 中,我们可以看出,地址一的内容只传送了255个字节给地址二,并没有传送1000个字节
我们或许还有一个疑问,明明在地址一中,写入了一个十进制数100在地址一中,为什么传到地址二中,执行印字串后,会变成字母d呢
这是因为,d的ASCII码正好是十进制数100,我们往地址中写数,写入的是内码,并不是字符本身
只有通过字串传送或字节传送才能将字符传入缓冲中
这里,我们用写入内码的方法,是为了用简便的方法来调试
现在,我们通过测试,发现通过”字串传送“这个词确实无法实现对长串的操作
为了进一步探讨这个问题,得到最终答案,我们将继续讲解下一个系统词:
4、系统词四: 计字节
功能: 将一个计数字节型字串计算其长度并返回字串首地址和长度,即返回一个地址长度型字串
使用格式: <缓冲> 计字节
我们知道了,字串传送不能传送长度超过255字节的字串,为了找出原因,我们将接着上面的测试,继续试验:
摞初始 ?
地址一 1000 填空格 ?
100 地址一 30 + 字节写 ?
50 地址一 999 + 字节写 ?
1000 地址一 字写 ?
地址一 计字节 ?..
看数摞 [2] 637541 232 ?
摞初始 地址一 字节读 ?.
看数摞 [1] 232 ?
摞初始 地址一 字读 ?.
看数摞 [1] 1000 ?.
上面我们将地址一填满空格后,在”地址一+999”处写入了一个内码100 ,并且将该字串的长度写入前16位空间
测试后,我们发现,对地址一进行计字节返回的长度与读出地址一第一个字节的数字相符,为232
而实际上,超过255字节的长度,要用两个字节空间来保存,所以,计字节无法对长串操作
这样,我们不难估计计字节,这个词的源码结构,大概为:
编 计字节
? 字节读 ?? 1+ ?? 。
由于计字节与字串传送是对应使用的,所以,我们也可以大概估计字串传送的源码结构:
编 字串传送
? ? ? ? 字节写
1+ 字节传送
。
综上所述,计字节和字串传送之所以不能对长串进行操作
是因为,这两个词在操作过程中只将字串长度保存在一个字节的空间里,即缓冲的第一个字节
而一个字节空间只能存储小于或等于255的数,所以超过255字节的长串,这两个词无法操作
必须用“字节传送”这个词来操作长串
关于长串操作,其实,汉编系统也提供了相关的词汇:
甲、系统词:长串传送 使用格式: <地址> <长度> <缓冲> 长串传送
乙、系统词:长串+传送 使用格式: <地址> <长度> <缓冲> 长串+传送
丙、系统词:计双字 使用格式: <缓冲> 计双字
系统词“长串传送”操作的缓冲地址,前四字节用来存诸字符串的长度,从第五个字节开始连续
存储字符串的内码,因此,长串传送 长串+传送 计双字 ,必须配套使用。
我们了解了长串操作的地址存储方式,那么,我们不难估计,这些词的源代码,大致如下:
5、新词一:长串传送1
源码:
编 长串传送1
? ? ? ? 写
?? 单元+ ?? 字节传送
。
功能:在“字串传送的基础上扩展,只是字串长度占四个字节的存储空间
使用格式: <地址> <长度> <缓冲> 长串传送
测试:略
6、新词二: 计双字1
源码:
编 计双字1
? 读 ?? 4 + ?? 。
功能:在“计字节 的基础上扩展,只是字串长度占四个字节的存储空间,与“长串传送1”匹配使用
使用格式: <缓冲> 计双字1
测试:略