2012-04-12 82 views
0

有人能解釋一下彙編代碼的下列代碼段是什麼嗎? 我不太確定最後一行的真正用處。組裝說明

.def main = r16 

.equ O = 5 
.equ P = 6 

ldi main, 0 
ldi r16, (1<<O) | (1<<P) 

我特別想知道最後一行的確做了什麼。 是否在OR語句之後向左邊的兩個邏輯shif加載寄存器16?

非常感謝。

回答

1

(1<<O) | (1<<P)是由彙編器評估的表達式,其結果(在這種情況下,96)然後在最終的機器代碼中被替換。

+0

感謝您的回覆,但我更想知道它的真實含義,就像我在開場白中所說的那樣。我只是想知道'''和'|'在裝配中意味着。 – Brainscrewer 2012-04-12 22:27:27

+0

<<和|不是彙編語言,它們更像是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

+0

一個定義是C語言的一部分,是的。但是在彙編語言中,指令是特定於彙編程序的,彙編程序是將彙編語言文件轉換爲機器碼的程序。而且,對於同一個處理器,不同的彙編程序經常會發生不同的指令。當你用類似代碼的C做類似這樣的事情時,有時彙編器本身不能處理它(例如gnu彙編器),有時必須通過C編譯器預處理它,然後將它傳遞給彙編器。 – 2012-04-13 01:58:29