这种赋值方式无疑是正确的,但对程序员来说不是唯一的选择.
实际上在汇编中任何数据变量类型,都可以看作一个字节缓冲区,其区别仅是大小不同而已(sizeof(Type))。
这样来看,字符串变量可以看成是大小不固定的字节换冲区。高级语言中的字符串类会对自身包含的字符串大小有一个计数器描述。
譬如在一个C++的String类中的数据成员可以是这样:引用计数 字符串大小 字符串。这样的好处是操作起来非常简便。数据大小一目了然。
缺点是占用空间较大。
而在C中对字符串的描述就是一个以零结束的字符数组。所以它的大小引用每次都要进行计算。
WIN32汇编中对字符串的操作可以有两种形式:
1、指令级
2、API级
指令级就是上面所说的MOVS、LOADS、SCANS、STOS等一系列操作指令。(高效、灵活。但处理繁琐.适合个别字符或特种用途处理)
API级用lstrcpy、lstrcmp、lstrlen、lstrcat等字符串操作函数。(高效、便捷。适合普遍场合)。
举一例:
StrProcess Proc uses esi
local szTemp[128]: Byte ;局部字符串缓冲区
lea esi,szTemp ;地址放入esi
invoke RtlZeroMemory,esi,128 ;初始化为0
invoke lstrcpy esi,CTEXT("This is a Test Str!") ;高级操作,赋值,其中CTEXT为字符串定义宏
mov byte ptr[esi + 1],'X' ;低级操作,修改串第二字符为'X"
invoke MessageBox,NULL,esi,esi,MB_OK | MB_ICONINFO ;输出
StrProc endp
以上个人浅见,不对之处还请赐教。