簡體   English   中英

1:匯編語言是什么意思?

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

在那里,我們看到的標簽被稱為2f1b等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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