GCC內聯彙編程序要求您分別列出輸入和輸出約束。但是,它還要求您在輸出約束之前指定「=」,該輸出約束根據the manual表示「此操作數是隻寫的」。沒有修飾符意味着只讀。現在,在我看來,只讀/只寫和輸入/輸出之間存在細微差別,因此這些處理方式不同。但是,如果gcc如果不相同,gcc如何區分「輸入」和「只讀」?有沒有人會在輸入約束中放置「=」,或者在輸出約束上忽略它?對於「+」(讀和寫)參數,將該參數放入輸入區和輸出區是否有區別?將參數指定爲「+」約束與將其指定爲如下之間有區別嗎?爲什麼GCC內聯彙編程序要求您根據位置和約束來指定輸入/輸出?
"some instruction" : "=r" : 0 :
謝謝。我其實不太確定「只寫輸入」是沒有意義的。在理解asm模型(問題在於這是否正確)的一種方式中,「輸入」意味着分配一些東西來將東西移到彙編之前,而「輸出」意味着分配東西來在彙編之後移動東西。因此,例如,列出一個作爲只寫輸入寫入的內存位置實際上可能會更加正確。但沒有人這樣做,所以這可能是錯誤的。 – user2040142
你說:「約束來自於GCC用來描述操作的內部語言,並且隨着時間的推移而發展(有一些向後兼容性將其引入了spice)」,但我認爲這是我試圖解決這個問題的問題。你應該不需要知道的「內部語言」在這裏已經流露出來了,就像人們訪問彙編程序一樣,我擔心,不瞭解內部語言,我的代碼可能會與未來(或過去)的編譯器斷裂即使它編譯我今天的打算。 – user2040142