如何在汇编时使用CATSTR连接字符串?

3
我有一个项目的多个构建配置,并且它们都需要一些全局定义的字符串。这些字符串应该在汇编时通过连接根和配置特定的后缀来构建,例如,我可能有根“TABLE”,配置A将使用后缀“ALPHA”,而配置“B”将使用后缀“BETA”,因此当我构建A时,我的全局定义的字符串将具有值“TABLEALPHA”,而对于B,该值为“TABLEBETA”。
理想情况下,后缀是通过命令行提供的,通过/D类型定义。
一个复杂之处在于我们使用专有的源语言,该语言首先“编译”到MASM,然后使用MASM进行汇编。这使得提供我尝试过的好的示例代码变得困难。
如果有人能够提供一个MASM源代码片段,显示根字面字符串的定义,字符串文本的后缀以及如何使用CATSTR(或@CatStr???)定义一个新的全局符号,其中包含两个字符串的连接,我希望(双手合十!)能够从中获益。
1个回答

1
以下是一个完整的工作示例,它将字符串常量"TABLE"与编译时定义的字符串SUFFIXB组合在一起,并在消息框中显示结果。
; ml /c /coff /DSUFFIXB=BETA test.asm
; link /SUBSYSTEM:WINDOWS test.obj

.586p
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

ROOT textequ <TABLE>
msg CATSTR <">, ROOT, SUFFIXB, <">

.data
dlgmsg db msg,0
dlgtitle db "Title",0

.code
start:
invoke MessageBoxA, NULL, ADDR dlgmsg, ADDR dlgtitle, MB_OK 
invoke ExitProcess, NULL 

end start

作为一种旁注,当您试图弄清楚预处理器语法时,masm的/ EP选项可能非常有用,因为它使您能够看到代码在经过预处理器后的样子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接