忆杰的博客

忆杰的博客

好用的字符串宏

字符串对于每一个程序都是非常重要的, 在masm里面如果利用好字符串宏, 那写代码就非常舒服和方便了, 这几个字符串宏是我平时使用的非常多的宏, 包括Unicode宏, 我以前一直觉得非常遗憾, 不过有了这个宏, 就不是问题了!

 

因为masm不支持中文的Unicode, 我曾经也想自己写一个编码转换的宏, 不过一直觉得会比较麻烦. 后来在csdn偶得一大牛写的宏, 真是佩服啊, 呵呵不但有支持Unicode的字符串宏, 还有很多好用的支持SSSE3,SSE4的宏. 非常的给力! 可以在这里下载 UnicodeString.mac

看看这个试用代码, 和C语言的字符串定义也是不相上下啊, 而且不乏汇编的灵活, 多舒服啊!

	Include JoenWin.inc

	.Data
String		"\\Device\\devVirtToPhys", MyString, 4

MyUString	UString	('This is not a star.',10,13,"这不是一颗流星",0)

StUString	"\\Device\\devVirtToPhys", g_StUStringName, 4 

	.Code
Jmain	Proc	

	pushad
;===========================================================================
	;定义Unicode类型的字符串
	mov	eax, UString$('This is not a star.',10,13,"这不是一颗流星",0)
	mov	ecx, offset MyUString
;===========================================================================
	;定义普通Ascii类型的字符串, 这个支持\t\nC语言那些格式符号
	mov	ebx, String$( "helll\t\n", MyString2, 4 )
	mov	eax, offset MyString
;===========================================================================
	;定义内核编程说需要的Unicode结构类型
	mov	ecx, offset g_StUStringName
	mov	edx, StUString$( "\\Device\\devVirtToPhys", g_StUStringName2, 4  )
;===========================================================================
	popad
	mov	eax, -1
	ret
Jmain 	Endp

End	Jmain

最上面那个UString$是定义Unicode的, 这个非常给力, 支持中文, 以后汇编就避免了这个比支持Unicode的问题了,关于这个宏,是从CSDN上down来的, 我只是修改了下名称, 统一方便使用而已, 当然压缩包里面有他们公司的信息, 我就不多说了. 第二个是普通的我们一般写代码使用Ascii码的时候用的非常多, 第3个是内核里面使用结构定义Unicode字符串使用的, 这个修改自 Kernel Mode Driver KMD开发包中的, 作者当然是个大牛, 不过写代码的风格好像和国人不太一样, 国人受罗云彬的影响很深, 很多人的代码风格都趋向于罗云彬.. 当然说这个就扯远了..

相信有了这几个字符串宏, 写代码会更加舒服的, 其实我说的不是很多, 关于里面宏的代码实现我也没有提到,我想如果你有兴趣的话. 会自己去看看的.

对了还有那个String.mac宏文件中的已经被翻译成中文了, 也不是我翻译的, 没有前人的工作. 哪有小辈们的今天啊. 哈哈哈!!

你可以使用转义字符, 和C语言的有些区别, 主要是被汇编的宏函数所限制

esc. char.     code         symbol
————————————————–
\:         21h            ‘!’
\{         28h            ‘(‘
\}         29h            ‘)’
\[         3Ch            ‘<‘
\]         3Eh            ‘>’
\=         22h            ‘”‘
\-         27h            “‘”
\\         5Ch            ‘\’
\*          –              –   ;; To workaround “CopyFile” -> CopyFileA problem
\0          0             zero byte/word
\a          7             alert (BEL)
\b          8             backspace
\t          9             horizontal tabulation
\n         0Dh, 0Ah       new line
\l         0Ah            line feed
\v         0Bh            verticalal tabulation
\f         0Ch            formfeed
\r         0Dh            carrige return

发表评论


Warning: Undefined variable $user_ID in /www/wwwroot/joenchen.com/wp-content/themes/agan/comments.php on line 66

您必须登录 才能进行评论。