MASM中如何将数值常量嵌入字符串而非运行时嵌入?
在MASM中编译时将数值常量嵌入字符串的实现方法
可以实现,但你当前的写法有问题——直接把数值常量放在BYTE定义里,会把常量的ASCII码值而非数字字符嵌入字符串。比如LOWER_BOUND=50对应的ASCII字符是冒号(:),UPPER_BOUND=100对应的是小写字母d,输出的提示会完全不符合预期。
要在编译时把数值常量转换成字符串嵌入,需要用到MASM预处理器的字符串化功能,具体有两种常用方式:
方法1:使用%STR宏展开常量为字符串
.data LOWER_BOUND = 50 UPPER_BOUND = 100 promptMessage BYTE "Please enter a number between ", %STR(LOWER_BOUND), " and ", %STR(UPPER_BOUND), ".",10,13,0
方法2:用CATSTR宏拼接整个字符串
.data LOWER_BOUND = 50 UPPER_BOUND = 100 promptMessage BYTE CATSTR( "Please enter a number between ", %STR(LOWER_BOUND), " and ", %STR(UPPER_BOUND), ".",10,13,0 )
这两种方式都会在编译阶段由MASM预处理器完成数值到字符串的转换和拼接,生成最终的字节数组,完全不需要运行时额外处理。
内容的提问来源于stack exchange,提问作者Iain
相关产品推荐
相关产品推荐

