2017-03-24 55 views
1

我很難理解.quad函數在彙編中的工作原理。.quad指令在彙編中如何工作?

從我在線閱讀的內容中,它爲每個表達式生成一個64位二進制補碼值到當前部分。我明白什麼是二進制補碼,並且該段引用.quad被調用的行。

何時何地.quad通常在彙編中調用?
另外,爲什麼用.quad生成任何東西?

+0

有沒有參考? [唯一一個](http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.alangref/idalangref_quad_pseudoop.htm)我能找到的是沒有任何關於2的補充。 –

+0

https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg。我使用的html引用 –

+0

它只是評估給定的表達式(在編譯時)並將結果(以2的補碼格式,這實際上並不重要)存儲在那個內存中。 –

回答

4

.quad指令用於定義64位數字值。以類似的方式.byte指令的工作原理。

.quad 0x123456789ABCDEF0, 2, 3 

將編譯到24個字節:

F0 DE BC 9A 78 56 34 12 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 

(爲了比較,.byte 0x12, 2, 3將編譯到三個字節12 02 03)。

何時何地.quad通常在程序集中調用?

嗯..它是彙編程序指令,在編譯過程中使用,它只會產生機器代碼。它不能被「呼叫」。您可以調用/執行由其定義的機器代碼,但這是非常罕見的使用模式,通過將它們以數字方式定義爲操作碼來生成指令,如果手邊有可以由助記符生成的彙編程序。

另外,爲什麼使用.quad生成任何東西?

如果要設置在數據段64b的數萬億(1E12),它是更方便將其定義爲.quad 1000000000000比計算單獨的字節值和其定義爲.byte 0, 16, 165, 212, 232, 0, 0, 0,在.quad情況彙編會爲你解析和分割成字節。

.quad .L3(從評論)

.L3是標籤某處中的代碼,所以它是某些存儲器地址,所以它是一些64位的數字(用於與平面內存映射的x86 64B目標平臺) 。如果你想在內存中的某個位置使用該值,那麼使用.quad .L3就是如何使用該值生成8個字節(地址爲.L3標籤)的簡單方法。

switch代碼是否用於間接跳轉,在由開關值索引的內存中選擇特定值,然後跳轉到表中內存中存儲的地址。類似於jmp [table + index*8],當table+index*8分值爲.L3的值時,則jmp將跳轉至.L3地址。