100分征求一个宏定义,关于宏参数的,有点难度!?

stuhome 2005-09-11 11:50:04
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!'

显然,我写的这个宏是不能满足我的要求的,因此特向广大的达人们高分请教这个问题的解。
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stuhome 2005-09-13
  • 打赏
  • 举报
回复
4楼的,便宜你了,把分给你算了
stuhome 2005-09-13
  • 打赏
  • 举报
回复
看来问题只有靠自己的双手来解决呀,郁闷~~可惜不能自己给自己加分

;-------------------------------------------------
String macro length := <30>, name := <>, initial
;
; Define a standard form of string
; Last update: 2005-9-11
;-------------------------------------------------
ifb <initial>
name db length, ?, length dup(?)
else
name db length, ?, initial
endif
endm

.data
String , a
String 10, bb
String 20, cc, 'ccccc'
String 40


展开后:

0000 .data
String , a
0000 1E 00 1 a db 30, ?, 30 dup(?)
001E [
00
]
String 10, bb
0020 0A 00 1 bb db 10, ?, 10 dup(?)
000A [
00
]
String 20, cc, 'ccccc'
002C 14 00 63 63 63 63 1 cc db 20, ?, 'ccccc'
63
String 40
0033 28 00 1 db 40, ?, 40 dup(?)
0028 [
00
]

满足要求
stuhome 2005-09-11
  • 打赏
  • 举报
回复
如果觉得分数不够,我可以另外开帖散分!
VxD1 2005-09-11
  • 打赏
  • 举报
回复
我记得宏定义时有一个默认的定义
stuhome 2005-09-11
  • 打赏
  • 举报
回复
哎,没有人帮忙顶就自己顶了,这里的高人们都放周末了哇?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧