📌  相关文章
📜  在 keil 上组装 (1)

📅  最后修改于: 2023-12-03 15:37:23.130000             🧑  作者: Mango

在 Keil 上组装

在 Keil 中,我们可以通过汇编语言对程序进行优化或补充。本文将介绍如何在 Keil 中进行汇编语言的编写、组装以及与 C 语言混合编程的实现。

汇编语言的编写

在 Keil 中,我们可以使用汇编语言文件(.s、.asm)进行程序编写。我们可以在如下位置新建一个汇编语言文件:

Project -> New uVision Project -> File -> New -> Assembly Source File

我们可以在文件中编写汇编语言程序,并按下 Ctrl + S 进行保存。

汇编语言的组装

组装是将汇编语言代码翻译为机器码的过程。在 Keil 中,我们可以选择使用 GNU 工具链对汇编语言代码进行组装。我们需要进行如下设置:

Project -> Options for Target -> C/C++ -> Misc Controls,输入以下命令行:

--cplus --cpu=<CPU型号> -g -gdwarf-2

其中,<CPU型号> 应根据实际使用的芯片来设置。

然后,在 Keil 工具栏中选择 Project -> Build Target 进行编译,即可得到相应的机器码文件。

与 C 语言混合编程

Keil 允许汇编语言与 C 语言混合编程。我们只需要在汇编语言文件中编写相应的函数,并在 C 语言文件中进行调用即可。

以在汇编语言中编写一个对数组取平均数的函数 avg 为例:

AREA |.text|, CODE, READONLY

;定义变量、赋初值
Array       DCD         1, 2, 3, 4, 5
Count       EQU         5

;计算平均数
avg         PROC
            LDR         R0, =Array
            MOV         R1, #0
Loop        LDR         R2, [R0], #4
            ADD         R1, R1, R2
            SUBS        R3, R3, #1
            BNE         Loop
            MOV         R0, R1
            BX          LR
            ENDP

            END

我们在函数中定义了数组 Array 和记录数组长度的常量 Count。接着编写了一个名为 avg 的函数,该函数利用循环计算了数组的平均值并返回。

然后,在 C 语言中调用函数 avg

#include <stdio.h>

extern int avg(void);

int main(void)
{
    int average;
    average = avg();
    printf("The average is %d\n", average);
    return 0;
}

通过在 C 语言里使用 extern 关键字来声明 avg 函数的实现在其他文件中。然后,我们就可以直接调用汇编语言中的 avg 函数并得到正确的结果。

总之,在 Keil 上进行汇编语言编写、组装、与 C 语言混合编程,可以充分发挥硬件的性能以及自由度。