0
有人能解釋一下彙編代碼的下列代碼段是什麼嗎? 我不太確定最後一行的真正用處。組裝說明
.def main = r16
.equ O = 5
.equ P = 6
ldi main, 0
ldi r16, (1<<O) | (1<<P)
我特別想知道最後一行的確做了什麼。 是否在OR語句之後向左邊的兩個邏輯shif加載寄存器16?
非常感謝。
有人能解釋一下彙編代碼的下列代碼段是什麼嗎? 我不太確定最後一行的真正用處。組裝說明
.def main = r16
.equ O = 5
.equ P = 6
ldi main, 0
ldi r16, (1<<O) | (1<<P)
我特別想知道最後一行的確做了什麼。 是否在OR語句之後向左邊的兩個邏輯shif加載寄存器16?
非常感謝。
(1<<O) | (1<<P)
是由彙編器評估的表達式,其結果(在這種情況下,96
)然後在最終的機器代碼中被替換。
感謝您的回覆,但我更想知道它的真實含義,就像我在開場白中所說的那樣。我只是想知道'''和'|'在裝配中意味着。 – Brainscrewer 2012-04-12 22:27:27
<<和|不是彙編語言,它們更像是C語言的東西。這裏的「彙編語言」是ldi r 16,96。像C語言中的定義,.equ不是彙編語言,它只是與彙編程序進行通信(除了輸入,不管)。所以O是數字5的定義,1 << 5表示1左移5位或0x20。 P定義爲6,1 << 6表示1左移6或0x40。 |意味着或兩個值如此0x20 | 0x40 = 0x60,與96小數相同。 – 2012-04-13 01:55:42
一個定義是C語言的一部分,是的。但是在彙編語言中,指令是特定於彙編程序的,彙編程序是將彙編語言文件轉換爲機器碼的程序。而且,對於同一個處理器,不同的彙編程序經常會發生不同的指令。當你用類似代碼的C做類似這樣的事情時,有時彙編器本身不能處理它(例如gnu彙編器),有時必須通過C編譯器預處理它,然後將它傳遞給彙編器。 – 2012-04-13 01:58:29