[英]What does 1: mean in assembly language?
我正在閱讀RISC-V測試模式的源代碼。 riscv-test.h中有一個宏定義,
我想知道1:
在此代碼中的含義:
#define RVTEST_CODE_BEGIN \
.section .text.init; \
.align 6; \
.weak stvec_handler; \
.weak mtvec_handler; \
.globl _start; \
_start: \
/* reset vector */ \
j reset_vector; \
.align 2; \
trap_vector: \
/* test whether the test came from pass/fail */ \
csrr t5, mcause; \
li t6, CAUSE_USER_ECALL; \
beq t5, t6, write_tohost; \
li t6, CAUSE_SUPERVISOR_ECALL; \
beq t5, t6, write_tohost; \
li t6, CAUSE_MACHINE_ECALL; \
beq t5, t6, write_tohost; \
/* if an mtvec_handler is defined, jump to it */ \
la t5, mtvec_handler; \
beqz t5, 1f; \
jr t5; \
/* was it an interrupt or an exception? */ \
1: csrr t5, mcause; \
bgez t5, handle_exception; \
INTERRUPT_HANDLER; \
1:
是本地符號名稱; 它只是一個標簽。 從gas
手冊 :
本地符號名稱
本地符號可幫助編譯器和程序員臨時使用名稱。 它們創建的符號在輸入源代碼的整個范圍內都保證是唯一的,並且可以用簡單的符號來引用。 要定義本地符號,請寫成N:形式的標簽(其中N代表任何正整數)。 要引用該符號的最新先前定義,請使用與定義標簽時相同的數字寫Nb。 要引用本地標簽的下一個定義,請寫Nf-b代表“向后”,f代表“向前”。
對於如何使用這些標簽沒有限制,也可以重復使用它們。 因此,可以重復定義相同的本地標簽(使用相同的數字N),盡管您只能引用該數字的最新定義的本地標簽(用於向后引用),也可以引用下一個特定本地標簽的定義前瞻性參考。 還值得注意的是,前10個本地標簽(0:... 9 :)的實現方式比其他標簽更有效。
這是一個例子:
1: jra 1f 2: jra 1b 1: jra 2f 2: jra 1b
等效於:
label_1: jra label_3 label_2: jra label_1 label_3: jra label_4 label_4: jra label_3
本地符號名稱僅是一種符號設備。 在匯編程序使用它們之前,它們會立即轉換為更常規的符號名稱。 ...
在您的示例中,該標簽之前已引用了一些說明:
beqz t5, 1f;
那里的1f
表示“下一個名為1的標簽”,並跳到該1:
。
這是定義和引用本地標簽的便捷方法,而無需在任何地方都想出唯一的名稱。
這是另一個例子 :
#define TEST_JR_SRC1_BYPASS( testnum, nop_cycles, inst ) \
test_ ## testnum: \
li TESTNUM, testnum; \
li x4, 0; \
1: la x6, 2f; \
TEST_INSERT_NOPS_ ## nop_cycles \
inst x6; \
bne x0, TESTNUM, fail; \
2: addi x4, x4, 1; \
li x5, 2; \
bne x4, x5, 1b \
在那里,我們看到的標簽被稱為2f
, 1b
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.