我正在閱讀「SPARC體系結構,彙編語言編程和C.第二版」一書。我在書的地方,在那裏我不明白或者我不能夠理解有一定的命令:請解釋m4嵌套在字符串中的定義
define(loc, 0)
define(sto, 'loc: 44 $1 define('loc', eval(loc+2))')
的事情是,我明白了第一道防線。但我真的不明白第二行的第二個參數。書中的解釋也沒有幫助。
從書:
在這裏,我們第一次定義的符號,在上述,對具有該符號將代表位置計數器的指令的存儲器地址被組裝的值是0。每個宏定義先被改變以打印loc的當前值,然後重新定義loc爲loc以及存儲指令所需的存儲器位置。
宏的參數是字符和字符串,而不是數字值。在重新定義loc的價值時,我們使用了另一個內置宏eval。 eval接受其字符串參數來表示算術表達式。 eval評估此表達式並以數字字符串的形式返回其值。
我知道上面的解釋可能聽起來很清楚,但對我而言並非如此。我正好不明白的是部分: 'LOC:$ 44定義第(' 祿 '的eval(LOC + 2))'
我不明白:
爲什麼這是一個字符串?
爲什麼loc必須在那裏?
爲什麼,確定44 $ 1日後,有另一種定義,「定義( '祿',的eval(LOC + 2))'?
好吧,我想現在我懂了,但爲什麼用'LOC:'在開始打印地址?這是相同的'loc:',我之前定義了一條線?或者它是一個實習生的命令? – RnBandCrunk 2013-05-07 16:37:39
是的,它是'loc'。它從0開始(因爲它是如何定義的),那麼每個宏都會將指令的大小添加到它。在這個例子中,'sto'是一個2字節的指令,所以'loc'增加了2. – Jester 2013-05-07 16:49:11
啊,好吧。他們希望你在書中已經知道這一點很有趣。無論如何,謝謝你的伴侶。 – RnBandCrunk 2013-05-07 19:36:22