我在寫一些可以讀取string.dump()函數產生的字節碼的Lua代碼。我假設(因爲它允許一些優化和較少的編碼),所有OP_JMP指令在用於if語句時都會向前增加指令指針。他們可以在技術上向後跳躍,因爲他們使用sBx值(可能是負值)。我只對標準Lua 5.1實現中的if語句的字節碼感興趣。'if'語句的Lua字節碼可以向後跳轉嗎?
我用chunkspy(awesome tool btw)來查看幾個樣本的字節碼。
這是一個基本的if語句:
a, b = 1, 2
if a == b then
print '='
elseif a < b then
print '<'
else
print '>'
end
它產生四次跳躍,其中沒有一個是負:
[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
我試圖尋找在Lua source code答案,但它只是結束了令人困惑(如果我花時間掌握它,我相信這是超優雅的代碼)。
有誰知道'if'語句的情況,其中lua的OP_JMP指令對sBx有負值或知道它們總是正值嗎?
'luac -p -l'也給你一個字節碼列表。 – lhf