簡體   English   中英

GNU內聯匯編中的百分號(%)(C中的匯編)

[英]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

這將分別聲明ij為輸出和輸入參數。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM