NASM转MASM:空宏SLDR及_m后缀寄存器含义咨询
NASM转MASM:SLDR空宏与带
_m后缀符号的疑问 正在将NASM汇编代码移植到MASM时,遇到两个关键问题:带双参数的空宏SLDR,以及带_m后缀的符号用法。示例代码如下:
;register defines %define arg0 rcx %define arg4 r12 %define tmp4 r14 %define len arg0 %define dest1 arg4 %define dest2 tmp4 %define PS 8 ;empty macro %macro SLDR 2 %endmacro %define SSTR SLDR ; example usage in code: SLDR len, len_m sub len, 16 SSTR len_m, len jl .return0 ;... SLDR dest1, dest1_m mov dest2, [dest1+PS] SSTR dest2_m, dest2 mov dest1, [dest1] SSTR dest1_m, dest1
推测带_m后缀的参数是宏生成的名称,且假设它们不在栈上,请问这些参数代表什么?
分析与结论
关于
SLDR/SSTR宏:
示例里的SLDR是空宏,但从代码用法(SLDR 寄存器, _m符号、SSTR _m符号, 寄存器)来看,它原本应该是实现寄存器值保存/恢复的宏——比如把寄存器的值存储到指定内存位置,或者从内存位置恢复到寄存器。空宏可能是示例简化,或是原代码依赖特定环境的宏定义。带
_m后缀的符号:
这些符号并非寄存器,而是用来暂存对应寄存器值的内存位置(比如全局变量、线程本地存储槽位),一一对应关系如下:len_m:暂存len(即rcx寄存器)的值dest1_m:暂存dest1(即r12寄存器)的值dest2_m:暂存dest2(即r14寄存器)的值
代码里的
SLDR len, len_m是把rcx的值存入len_m,SSTR len_m, len则是把len_m中的值写回rcx,其他SLDR/SSTR调用的逻辑完全一致。
内容的提问来源于stack exchange,提问作者rcgldr
相关产品推荐
相关产品推荐

