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

Assembly 如何在汇编时连接字符串(使用CATSTR?),assembly,x86,masm,Assembly,X86,Masm,我有一个项目的多个构建配置,每个配置都需要一些全局定义的字符串。这些字符串实际上应该在汇编时通过连接根和特定于配置的后缀来构建,例如,我可能有根“TABLE”,配置a将使用后缀“ALPHA”,配置“B”将使用后缀“BETA”,因此当我构建a时,我的全局定义字符串的值为“TABLEALPHA”,对于B,值为“TABLEBETA” 理想情况下,后缀通过命令行、a/D类型定义提供 一个复杂的问题是,我们使用一种专有的源语言,首先“编译”到MASM,然后使用MASM进行汇编。这使得我很难为我所尝试的提供

我有一个项目的多个构建配置,每个配置都需要一些全局定义的字符串。这些字符串实际上应该在汇编时通过连接根和特定于配置的后缀来构建,例如,我可能有根“TABLE”,配置a将使用后缀“ALPHA”,配置“B”将使用后缀“BETA”,因此当我构建a时,我的全局定义字符串的值为“TABLEALPHA”,对于B,值为“TABLEBETA”

理想情况下,后缀通过命令行、a/D类型定义提供

一个复杂的问题是,我们使用一种专有的源语言,首先“编译”到MASM,然后使用MASM进行汇编。这使得我很难为我所尝试的提供好的示例代码


如果有人能提供一段MASM源代码,显示根文本字符串的定义、字符串文本后缀,以及如何使用CATSTR(或@CATSTR???)来定义包含两个字符串串联的新全局符号,我希望(祈祷吧!)这是一个完整的工作示例,它将字符串常量
“TABLE”
与编译时定义的名为
subfixb
的字符串组合在一起,并在消息框中显示结果

; 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
;ml/c/coff/DSUFFIXB=BETA test.asm
;链接/子系统:WINDOWS test.obj
.586p
.平板模型,标准球
选项案例图:无
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
根文本
味精CATSTR
.数据
dlgmsg db msg,0
dlgtitle数据库“标题”,0
.代码
开始:
调用MessageBoxA,NULL,ADDR dlgmsg,ADDR dlgtitle,MB_OK
调用ExitProcess,NULL
结束-开始

作为旁注,masm的
/EP
选项在尝试找出预处理器语法时非常有用,因为它允许您在代码经过预处理器后查看代码的外观