组装顺序

asm程序应按什么顺序进入源文件:从内部到外部还是相反?主代码(不在proc中)应该放在哪里:文件的开头或结尾附近?是否有客观标准可供选择,而不仅仅是约定?

zzh0576 回答:组装顺序

没有约定;通常会将相关功能放在源代码中彼此靠近的位置。 与使用C或其他任何语言基本相同。就可读性而言,关于asm并没有什么特别的,可以覆盖它,只是asm函数通常不是很短(因为没有内联函数)它们为您服务,而且您不希望到处都发生实际的呼叫/重载开销。

如果您为了获得可读性而牺牲性能以获得“小功能”,那么asm是错误的语言;如果您的项目那么大,请让编译器执行。 I代码缓存的占用量和使用频率应促使将代码块设置为可调用的函数而不是宏。


或者为了提高性能,将“热”功能组合在一起,使它们位于同一iTLB页面中,甚至对于小功能或在一个结束之间,下一个开始之间的边界处,甚至是同一条L1指令高速缓存行。例如将相互调用或经常彼此调用的函数组合在一起。

如果您希望源顺序不同于二进制顺序,则可以将“冷”函数(在启动或关闭时调用一次)放在类似.text.startup的部分中,而不是通常的.text部分;例如,GCC为此main而不是通常的.text指令

.section        .text.startup,"ax",@progbits
.globl main
main:
  ...
.text            # shorthand for .section .text
other_function:
对于ELF目标,

"ax",@progbits表示具有exec权限,该节应映射到进程内存中,而不是仅放在磁盘上的可执行文件中而不被程序加载器映射,或更具体地说,链接到具有这些属性的ELF 细分)。

如果有好奇心,请尝试on Godbolt


  

主代码(不在proc中)应该放在这里

嗯?通常,即使不是“功能”本身,也要在入口点放置标签。通常,您只编写main(这是一个函数),然后让CRT启动代码调用它。

本文链接:https://www.f2er.com/3119343.html

大家都在问