Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 是否可以只使用程序集文件的某些功能?_Assembly_Keil_8051 - Fatal编程技术网

Assembly 是否可以只使用程序集文件的某些功能?

Assembly 是否可以只使用程序集文件的某些功能?,assembly,keil,8051,Assembly,Keil,8051,我正在使用uVision(Keil)和8051控制器 假设我有这样一个main.asm文件(它不做任何事情,仅用于示例) 另外,假设我正在使用一个functions.asm文件,其中包含一些很好的函数。(与此文件相同..不执行任何操作,例如) 当我编译这段代码时,“func3”包含在十六进制文件中,尽管我从未调用过它。我可以接受 问题: 如果我想创建某种通用库,在不生成巨大的十六进制文件的情况下将其包含在我的项目中,该怎么办?阅读您正在使用的链接器的文档。它可能会提供某种类型的选项来删除未使用的

我正在使用uVision(Keil)和8051控制器

假设我有这样一个main.asm文件(它不做任何事情,仅用于示例)

另外,假设我正在使用一个functions.asm文件,其中包含一些很好的函数。(与此文件相同..不执行任何操作,例如)

当我编译这段代码时,“func3”包含在十六进制文件中,尽管我从未调用过它。我可以接受

问题:
如果我想创建某种通用库,在不生成巨大的十六进制文件的情况下将其包含在我的项目中,该怎么办?

阅读您正在使用的链接器的文档。它可能会提供某种类型的选项来删除未使用的节/段(请注意,这可能需要您将每个函数放置在自己的节/段中)。将每个函数放入自己的对象中,将它们链接到静态库中,然后链接器通常会做正确的事情。@Jester好的,我从来没有这样做过。我该怎么做?为每个函数创建一个文件,然后做什么?将每个函数组装到对象,然后使用工具链的库工具。不幸的是,不熟悉keil。如果您想要完整的keil工具链,您可以访问Silab网站(例如,您使用的是8051F040 uC。注册并从Silab获得序列号。然后使用keil网站上的序列号获取完整的工具链(例如,对于我上面提到的uC系列)
; MAIN FILE

extrn      code (func1)
extrn      code (func2)

org 0x0000
    sjmp    main

main:
    mov     a, r0
    lcall   func1
    mov     a, r1
    lcall   func2

    sjmp    $

end
; FUNCTIONS FILE

public     func1, func2, func3

my_seg     segment code
           rseg    my_seg

func1:
           ; do something
           ret

func2:
           ; do something else
           ret

func3:
           ; do something amazing
           ret

end