改进版CTEXT

本文介绍了一种在MASM中使用的改进型文本宏定义方法,该方法能够更好地处理包含特殊字符如/n等转义序列的字符串。通过使用局部变量和条件判断,此宏能将这些转义序列转换为对应的ASCII码值,适用于需要在汇编语言中处理复杂文本的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTEXT MACRO y:VARARG 
LOCAL symCONST segment
IFIDNI <y>,<>
sym db 0
ELSE
sym db y,0
ENDIF
CONST ends
EXITM <OFFSET sym>
ENDM

 

一般来说,在MASM里这个可能够用了,可是。。。

它不支持/r/n换行的东东呢

好吧,我偷来了一个改进版。。。

ctext macro text:VARARG
        local tmp,pos,var
        local j1,j2,txt,f1
.data
   ife @InStr(1,<text>,</>) ;没有用到转义符号,不用任何转换
      var db text,0
        .code
      exitm <offset var>
   else
      f1 SUBSTR <text>,1,1
      txt SUBSTR <text>,2,@SizeStr(<text>)-2
      var db 0
      pos=1
      :next1
      j1 SUBSTR txt,pos,1
      ifidn j1,</>
         pos=pos+1
         j2 SUBSTR txt,pos,1
         ifidni j2 ,<n> ;/n
            db 13,10
         elseifidni j2,<txt> ;/txt
            db 9
         elseifidn j2,</> ;//
            db '/'
         elseifidn j2,<0> ;/0
            db 0
         endif
      else
         tmp textequ f1,j1,f1
         db tmp ;;;
      endif
      pos=pos+1
      if pos LE @SizeStr(<%txt>)
         goto next1
      endif
      db 0 ;;;
      .code
      exitm< offset var+1>
   endif
endm
_T     equ <ctext>
CTEXT equ <ctext>
SADD     equ <ctext>

 

额,Ctrl+C、Ctrl+V就完了

继续干活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值