【发布时间】:2013-05-06 14:22:52
【问题描述】:
我目前正在阅读《SPARC 体系结构、汇编语言编程和 C. 第二版》一书。我到了书中的一个地方,我不理解或无法理解某个命令:
define(loc, 0)
define(sto, 'loc: 44 $1 define('loc', eval(loc+2))')
问题是,我确实理解第一行。但我真的不明白第二行的第二个参数。书中的解释也无济于事。
从书中:
这里我们首先定义了一个符号loc,它的值为0。这个符号将代表位置计数器,即正在汇编的指令的内存地址。每个宏定义都先更改为打印 loc 的当前值,然后将 loc 重新定义为 loc 加上存储指令所需的内存位置。
宏的参数是字符和字符串,而不是数值。在重新定义 loc 的值时,我们使用了另一个内置的宏 eval。 eval 用它的字符串参数来表示一个算术表达式。 eval 计算这个表达式并以数字字符串的形式返回它的值。
我知道上面的解释对你来说听起来很清楚,但对我来说不是。我完全不明白的是:'loc: 44 $1 define('loc', eval(loc+2))'
我不明白:
为什么这是一个字符串?
为什么 loc 必须在那里?
为什么在定义了44个$1之后,还有一个定义,“define('loc', eval(loc+2))'?
【问题讨论】:
标签: assembly macros processor m4