100分征求一个宏定义,关于宏参数的,有点难度!?
mov ah, 0ah
int 21h
使用过上面的DOS功能调用的朋友,都知道这个DOS调用一般是用于从终端获取一个字符串的,
ds : dx = 字符串地址
(ds : dx) = 字符串最大长度
(ds : dx + 1) = 字符串实际长度
可见,真正的字符串是从第3个字节开始的。
我想按照这个格式在数据段定义一个字符串,可以按照如下的格式定义:
str db 20, ?, 'hello world!' ;已初始化
或
str db 20, ?, 20 dup(?) ;未初始化
上面两种定义均可以符合前面要求的字符串格式,其中str的第一个字节表示该字符串的最大长度,第二个字节表示该字符串的真实长度,由于是初始化的定义,所以用“?”来表示该字节。
比如我写的宏
String MACRO name, maxLength, initialString
name db maxLength, ?, initialString
ENDM
通过宏调用
String myStr, 20, 'hello world!'
则可以展开成:
myStr db 20, ?, 'hello world!'
或者
String myStr, 20, 20 dup(?)
可以展开成:
myStr db 20, ?, 20 dup(?)
现在我的问题是:
============================
这三个参数我可能在定义的时候不一定都需要,比如有以下几种宏调用:
(1) String
则宏展开为:
db 20, ?, 20 dup(?)
(2) String 40
则宏展开为:
db 40, ?, 40 dup(?)
(3) String myStr
则宏展开为:msStr db 20, ?, 20 dup(?)
(4) String myStr, 30
则宏展开为:myStr db 30, ?, 30 dup(?)
(5) String myStr, 30, 'hello world!'
则宏展开为:myStr db 30, ?, 'hello world!'
显然,我写的这个宏是不能满足我的要求的,因此特向广大的达人们高分请教这个问题的解。