我很難理解.quad
函數在彙編中的工作原理。.quad指令在彙編中如何工作?
從我在線閱讀的內容中,它爲每個表達式生成一個64位二進制補碼值到當前部分。我明白什麼是二進制補碼,並且該段引用.quad
被調用的行。
何時何地.quad
通常在彙編中調用?
另外,爲什麼用.quad
生成任何東西?
我很難理解.quad
函數在彙編中的工作原理。.quad指令在彙編中如何工作?
從我在線閱讀的內容中,它爲每個表達式生成一個64位二進制補碼值到當前部分。我明白什麼是二進制補碼,並且該段引用.quad
被調用的行。
何時何地.quad
通常在彙編中調用?
另外,爲什麼用.quad
生成任何東西?
.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
地址。
有沒有參考? [唯一一個](http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.alangref/idalangref_quad_pseudoop.htm)我能找到的是沒有任何關於2的補充。 –
https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg。我使用的html引用 –
它只是評估給定的表達式(在編譯時)並將結果(以2的補碼格式,這實際上並不重要)存儲在那個內存中。 –