[英]Percentage (%) sign in GNU inline assembly (asm in C)
這些代碼行應該做什么?
mov ebx, %1
mov ecx, %0
我知道%表示指針,但我需要更多說明。 為什么%1和0-這些特定數字?
在AT&T語法中,使用百分號引用寄存器,然后使用寄存器名稱即%eax
。 用數字顯示的那些在匯編中沒有意義,它們在內聯匯編中用於引用輸入和輸出操作數。
int i = 5;
int j;
asm ("mov %1, %0" : "=r"(j) : "r"(i)); //AT&T. Swap operands for Intel syntax
這將分別聲明i
和j
為輸出和輸入參數。 q
表示任何通用寄存器都可以。 除非確實需要特定的寄存器,否則應始終讓編譯器選擇方便的選項。 由於您事先不知道獲得哪個寄存器,因此會為它們分配一個從0開始的數字。 %0
是第一個參數,在這種情況下,輸出參數j
和%1
是輸入參數i
。
%0和%1是內聯匯編塊的前兩個操作數。 我認為這不是常規的x86,但對gcc來說很特殊。
參見此處: http : //www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.