Assembly 是否可以只使用程序集文件的某些功能?
我正在使用uVision(Keil)和8051控制器 假设我有这样一个main.asm文件(它不做任何事情,仅用于示例) 另外,假设我正在使用一个functions.asm文件,其中包含一些很好的函数。(与此文件相同..不执行任何操作,例如) 当我编译这段代码时,“func3”包含在十六进制文件中,尽管我从未调用过它。我可以接受 问题:Assembly 是否可以只使用程序集文件的某些功能?,assembly,keil,8051,Assembly,Keil,8051,我正在使用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