我在学院学习了8086英特尔处理器的汇编编程。我现在正试图修改它。
我听说汽车嵌入式系统需要装配,所以我想知道哪一种方法是最好的?我不需要浪费时间,因为我想找份工作。
修改8086大会真的有帮助吗?还是转向32位x86程序集更好?
谢谢。
发布于 2018-11-17 00:07:30
你的头衔提出了一个与身体完全不同的问题。一般来说,你应该问一个简单的问题。
不,没有通用程序集语法--或者实际上存在,但您可能并不意味着程序集语法通常是
[<label>:] <opcode> <operands> [<comment>]或者类似的。
对于x86,实际上有两种常见的语法-- Intel和AT&T (包含来自不同汇编程序的英特尔语法的多种变体,包括针对非指令行的完全不同的指令),但它们和其他语法或多或少都属于这种形式。
但你的意思可能是有一个通用汇编语言指令集。如果是这样的话,那就没有。这与语法不是一回事。就像一种自然语言一样,机器语言有语法、词汇和语义--单词是如何排列的,可用的是什么,它们的意思是什么。汇编语言的要点是,组装助记符和机器代码指令集之间存在一对一的关系。因此,汇编语言和处理器体系结构一样多。
修改8086大会真的有帮助吗?还是搬到32位程序集之类的地方更好?
16位8086汇编程序很少被使用(在教学之外,就像你的例子一样),如果你感兴趣的话,一般来说x86并不是一种汽车设备。“32位程序集”不是一件事,除非你是专门指32位x86程序集。
学习汇编语言对于理解计算机如何工作的基本原理是有用的--这可能就是为什么你被教会了一套过时的指令集,因为它的目标不是能够在其中编码,而是理解基本原理。这反过来会导致编写更好的高级语言代码,将其编译成更小、更快的机器语言代码。它在调试高级代码时也很有用--有时您需要在指令级别上执行步骤,以理解为什么编译器生成的代码不能按照您的预期执行。但要做到这一点,您只需要能够读取程序集,而不是编写它。
可以用系统级语言(如C或C++ )实现的大型代码体的汇编语言是不必要的,也是无效的。编译器不仅是目标机器代码指令集的专家,所以您不必这样做,而且高级语言也更有可能被广泛的测试、验证、静态分析、安全分析、性能分析和错误检测工具所支持。代码还将更易于维护、更可重用,并且能够从范围更广的第三方库中获益。
也可以这样看,例如,你是PIC组装方面的专家,但你的下一份工作是ARM Cortex-M,现在你不再是专家了,编写的代码比编译器生成的代码要糟糕得多,而且要花费更长的时间。那你就失业了。
在大量的代码基础上,现代优化编译器在制作高效的asm方面可能做得比人类能够或愿意做得更好,除了一些重要的循环之外,您可以返回并调优(通过调整C或重写asm中的一个循环)。在asm中,内联和常量传播是很难的,但是编译器在这方面很出色.这对于那些是很好的编译器目标的处理器来说尤其如此,编译器开发人员花了很多时间在上面,比如x86或ARM。
https://stackoverflow.com/questions/53345211
复制相似问题