我目前正在阅读《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))'?