Assembly 关于arm组装和不同处理器的问题

Assembly 关于arm组装和不同处理器的问题,assembly,arm,cpu-architecture,Assembly,Arm,Cpu Architecture,因此,我开始了一个非常小的项目来学习rtos的一些基础知识(在uni完成了一门操作系统课程),我想自己尝试一下,并尝试制作一个小型rtos 这听起来很难,也许是,但我愿意试一试 所以我的问题是,arm cortex处理器在ISA方面有什么区别吗 例如,如果我在M0+上写一个sys调用或一个中断,它是否与M33兼容,或者我是否需要在尽可能多的情况下写相同的东西?(例如,1个用于M33,1个用于M0+等) 由于微体系结构正在改变,我假设我能做到,但我不确定 此外,由于一些处理器具有相同的体系结构,但

因此,我开始了一个非常小的项目来学习rtos的一些基础知识(在uni完成了一门操作系统课程),我想自己尝试一下,并尝试制作一个小型rtos

这听起来很难,也许是,但我愿意试一试

所以我的问题是,arm cortex处理器在ISA方面有什么区别吗

例如,如果我在M0+上写一个sys调用或一个中断,它是否与M33兼容,或者我是否需要在尽可能多的情况下写相同的东西?(例如,1个用于M33,1个用于M0+等)

由于微体系结构正在改变,我假设我能做到,但我不确定

此外,由于一些处理器具有相同的体系结构,但不同的微体系结构,这是否意味着每个处理器都可能支持一些额外的指令?例如,M33是否可以有strcpy指令,而M0是否可以

提前感谢,,
kx

这基本上是对场外材料的请求,可能会被关闭。您只需查看arm文档,其中所有这些答案都是关于ISA/内核的(大多数代码与内核无关,但与非arm的芯片有关,并且被认为在任何方面都不兼容,因此在操作系统设计中使用了抽象层和驱动程序)

我讨厌使用链接,但在维基百科上搜索cortex-m。虽然远优于印刷百科全书,但它并不完美,但我经常发现cortex-m页面作为某些事情的起点非常有用,然后直接进入arm文档。我看到它已经有错误了,但这很好。忽略冯·诺依曼/哈佛的东西,那就是火焰诱饵。我不同意他们对armv6-m的评估,也不同意他们所谓的thumb-1支持,同样,thumb-2支持我手上数过的20条thumb-2指令是从“所有thumb变体”或armv4t thumb添加到armv6-m的。(对于armv7-m,约为150)

该图表所显示的是,armv7-m与armv6-m共享相同的指令,并添加了一些附加指令,这在arm文档中很容易阅读。尽管armv8-m有点棘手,他们有或曾经有过与第一个文档不同的描述方式,但您可以这样想,一种方式是他们有一个armv6-m级别/集和一个armv7-m级别集,但他们使用或曾经使用的语言表明,armv8-m可能会选择他们喜欢的指令,如果他们选择放弃一些工具,这对开发人员或至少是工具人员来说是很艰难的,因为他们需要一段时间才能获得正确的工具(gnu汇编程序、gcc等)

您最好的选择是为armv6-m构建,据我目前所知,它与所有cortex-m内核都兼容。就指令集而言。至于核心选项(fpu、中断、双堆栈指针、获取长度和许多其他选项)以及芯片选项,那么您需要针对正在处理的一个或多个目标逐个处理这些选项

小心使用术语微体系结构,这会导致人们认为ARM是微码化的,而不是,这是毫无意义的。这些核心是为匹配体系结构文档而构建的,就像x86和其他内核一样,它们只是假设每个下一个核心都位于一张干净的工作表上的小补丁之间。不同的管道深度是一个强有力的指标,它比微小的补丁更接近完成。因此,假设每个核心的实现都是一个重复的、独立的,这很好,因为它通常是不相关的,它匹配的体系结构以及它在尝试这样做时的bug/勘误表都很重要

armv4t中的thumb(arm内部有不同的thumb版本号,当我们认为thumb和thumb2类似于thumb7或9或其他版本时,这一定会让他们感到困惑)是arm系列中最兼容的isa,除了AARC64 armv-8a之外,其他所有产品都支持它。我肯定我以前做过,但我需要重新访问原始的thumb vs armv6-m,看看wikipedia想说些什么。他们误导了bl,例如,在cortex-m之前,它是两个独立的指令,以这种方式记录(不是单个32位,而是两个完全独立的16位),如果你选择将这两个指令分开一段距离,你可以这样做,但对于cortex ms,它变成了一个不可分割的指令。从程序员的角度来看,它没有改变,因为常用的工具(gas等)背靠背地生成这两个部分,并且没有生成一半指令的选项

如果您阅读armv7-m体系结构参考手册,一条接一条的说明,您可以看到armv7-特定的说明,以及基本上与thumb2-m特定的说明(请注意armv7和armv6)然后是一个要么列出所有架构,要么说所有thumb变体,这取决于您拥有的armv7-m文档的版本

strcpy与ISA无关。strb/ldrb、strh.ldrh、str/ldr等都支持


m33是armv8-m主线,所以如果您愿意,它基本上是armv7-m,请参阅armv8-m文档(以及armv7-m文档)(想想基线=armv6-m和主线=armv7-m,但阅读细节可能会有例外,我只有几个armv8-m,它们只是使用gcc/gas(可能告诉gcc/gas它是cortex-m0)并且没有像我对其他CPU那样做过大量的阅读/研究…

没有一个CPU有一条实现strcpy的指令,甚至x86也没有。(x86可以
memcpy
在一条指令中实现:p)您好@PeterCordes,谢谢您的推荐。是的,我只是举了一个例子:P@PeterCordes但这背后的想法是相同的,我想,理论上,你能为其他平台编写便携式arm汇编代码吗?请参阅arm架构参考手册和你拥有的特定芯片的手册。Cortex-M0使用手臂