所以我从来没有做任何汇编编程(虽然我做了一些阅读/推理结果来自x86的小部分和CS类中的arm组装).
我有点好奇人们如何在c /其他(几乎没有)高级语言被认为过于缓慢的时代进行严肃的汇编编程.
人们使用高级汇编程序吗?
某种文本宏?每行评论?
人们是否根据团队约定的惯例进行调用堆栈?他们倾向于使用文本编辑器还是某种ide?
和任何其他有趣的东西.
PS另外你如何处理字符串(可能只是ascii),结构/联合(compositee数据类型)(即如何简化编写代码来创建和操作它们)?
PPS人们经常从汇编中调用OS提供的c库函数吗?
我通常使用汇编程序来补充C编译器不能做的事情,或者当我想要它时它不能或不能实现的汇编语言的功能.或者我需要通过数据和指令集的知识或通过编译器不知道的硬件知识来进行性能的地方.将某些内容与高速缓存行对齐,或者知道数据总线的宽度或性质,写入缓冲区等嵌入式引导代码,C中的代码主体但由于上述原因而在汇编程序中有些部分.有时汇编程序是嵌入式抽象层,并且在操作系统上重新编译应用程序,使用其他一些抽象层.
有些人用汇编语写了一个整个项目(今天),在我看来,它更具政治性而非实际性.证明它可以完成,或者需要瘙痒的个人目标或划痕.就像攀登一座山,因为它在那里,有些人为了个人内心的心理或身体上的利益而对他们有益,有些人则严格地吹嘘和炫耀,羞辱他们.对于大型应用程序,编译器(今天)将在平均生成代码方面做得比人工更好,并且在一天结束时,rtos或其他任何内容都可以在许多机器上编译和运行,而不仅仅是您选择的一个处理器的汇编程序.
我做了很多嵌入式工作,其中一些是微控制器.由于多种原因,我经常为这些程序选择(全部)汇编程序,这个微控制器上的外设,寄存器和I/O不能移植到其他微控制器上,因此汇编程序的不可移植性不是问题.内存通常非常有限,并且指令集通常效率低下且编译器不友好(并不意味着没有编译器).最重要的是,(开源/免费)交叉编译器不是以这样的方式编写的,也不是以年复一年的方式维护,因为操作系统(Linux)改变和改进,汇编程序通常更简单,并且更有可能年复一年地继续工作.另一个原因是我有时只是为了学习指令集和芯片内部以及它如何比其他更好或更差而购买微控制器.并且在SDK中调用库不会对我有所帮助.
当C从Pascal手中接过来的时候我就回来了,并且问了同样的问题,可以证明有些人可以在汇编程序中编写和调试应用程序,而另一个可以在C中编写和调试大致相同的问题.多少时间.事情变得更简单了.在这两个世界中,你并不是从零开始创造一切,就像你开车上下班时一样,你的双脚和双手和双臂拥有这种记忆并驾驶自动驾驶,日复一日无聊的道路,你的大部分编程都是在自动驾驶仪中完成的,你剪切,粘贴或重新输入或链接到你一直在抛光整个职业生涯的相同例程.在汇编程序中,您重复使用相同的收藏指令而不使用其他指令,在C中您使用相同的收藏变量或语言功能,从不使用其他.这是个人而不是语言.
所以回答你的问题.宏和函数以及重用以前开发的代码或库,就像您现在可以在高级语言中使用宏和函数或以前开发的代码或库一样.您对程序员(高级别或低级别)更加专注和谨慎,资源(内存,光盘等)不是今天的样子,寄存器/变量是经过仔细选择的.C编译器远没有那么好,它们几乎没有编译得更少优化.就像任何语言或汽车,键盘或鼠标一样,使用它越多,使用它就越有效.经验丰富的汇编程序员可以胜过初学者,因为经验丰富的C程序员可以产生初学者.
结构是一种节省某些语言类型的解决方案,汇编程序允许您执行相同的基址+(索引*结构大小)+偏移计算加上更多.一些指令集使它变得更容易,并且一些程序员可能将乘法交换为shift或shift加上.或者使用乘法累加.
字符串是汇编程序真正闪耀的地方.最酷的汇编程序技巧可以在C库中的字符串和复制函数中找到.如果您要使用所有汇编程序,您可以选择使用pascal长度加上数据或C,直到您达到零或混合匹配或自己构成.您可能会或可能无法在此区域中改进C库,但非优化的字符串代码在C和汇编程序中同样重要.
从汇编程序调用os/C调用.启动代码通常调用.data的memcpy和.bss的memset.如果您愿意调用C库,那么您可能正在使用"我在整个应用程序中使用C并在几个罕见实例中使用汇编程序"."我在汇编程序集中编写这一整篇文章"并不会采取这种捷径,如果是这样的话,他们就不会在汇编程序中进行编程.必须在两种情况下进行操作系统调用,除了在汇编程序中编写操作系统并执行所需操作之外,无法绕过它.
联盟只是重复使用相同的内存空间,你可以做任何事情,并根据你的需要重新定义内存中的任何字节.Assebler不会束缚你的双手,让你走路,并像某种高级语言一样思考.
文本编辑器或ide主要与语言,个人及其习惯/偏好无关.有时,项目或公司强制使用工具,即您使用的工具或获得其他工作或获得足够高的晋升,您可以更改公司政策.文本编辑器,工具,标签,空格,论文在专业环境中是非常敏感的主题,它就像强迫每个人驾驶相同品牌和型号的汽车或穿同一品牌和型号的鞋子.它与语言无关.另一方面,偶尔的处理器只在一个环境中只有一个工具,如果你选择使用那个你使用的处理器.
系统工程很重要,经常被忽视或做得很差.当它完成并完成后,在定义的模块之间调用约定会自动脱离进程.决定在任何地方使用相同的约定或将约定调整到任何一方的模块,也是该系统工程过程的一部分.对于汇编程序,今天,你更有可能找到使用或接近它的C调用约定,并对性能进行一些修改(我知道我不需要为这个函数保留R4因为我知道我到处都使用这个函数我永远不会仅仅因为它是众所周知的并且这些日子经过精心设计而你永远不知道何时可以调用你从C写的这个很酷的功能或与C程序员伙伴分享.
如果你想回过头来,你谈论的是时间份额或更早的时间,硬件要么勉强工作,要么在机器重新启动之前有大量的时间来编写机器语言位.而且你还没有终端或键盘.或者更新一点,你有时间分享,你可能每天运行一次程序或每隔几天运行一次程序,所以你有大量的时间来创建更多的穿孔卡,并且你没有终端或键盘或文本编辑器.你的高级语言可能是fortran,如果有的话.你很高兴你的程序在崩溃之前运行了一段时间,而且你想要在一周内生成多少千行调试代码的想法尚未发明.