小编MS.*_*MS.的帖子

指令如何与数据区分开来?

在阅读ARM核心文档时,我对此表示怀疑.CPU如何区分读数据与数据总线,是将其作为指令执行还是作为可以操作的数据执行?

请参阅文件摘录 -

"数据通过数据总线进入处理器内核.数据可能是执行指令或数据项."

在此先感谢您的启发!/女士

cpu arm cpu-architecture

14
推荐指数
2
解决办法
2万
查看次数

CPU和数据对齐

请原谅我,如果你觉得这已被无数次回答,但我需要回答以下问题!

  1. 为什么数据必须对齐(在4字节/ 8字节/ 2字节边界上)?这里我怀疑的是当CPU具有地址线Ax Ax-1 Ax-2 ... A2 A1 A0时,很可能顺序地寻址存储器位置.那么为什么需要在特定边界对齐数据呢?

  2. 在编译代码和生成可执行代码时如何找到对齐要求?

  3. 如果例如数据对齐是4字节边界,那是否意味着每个连续字节位于模4偏移处?我怀疑的是,如果数据是4字节对齐,那意味着如果一个字节是1004那么下一个字节是1008(或1005)?

c processor alignment cpu-architecture

14
推荐指数
2
解决办法
6216
查看次数

关于C中的比特掩蔽.为什么(〜(~0 << N))优先于((1 << N)-1)?

我知道~0将评估最大字大小的位1(因此需要关注可移植性),但我仍然没有得到为什么((1 << N) - 1)不鼓励?

如果您使用了第二张表格,请分享并遇到任何麻烦.

c bitmask

10
推荐指数
1
解决办法
1623
查看次数

基于ROM的可执行文件的基本问题

我对存储在ROM中的可执行文件有基本疑问.

据我所知,带有文本和RO属性的可执行文件存储在ROM中.问题是ROM是只读内存,如果有代码需要写入内存的情况会发生什么?

我无法想出任何一个例子来引用这里(可能我对这种情况一无所知或者我错过了基本的东西;)但是这个主题的任何亮点都可以帮助我理解!:)

最后关闭 - 1.有没有这样的情况?2.在这种情况下,将代码从ROM复制到RAM是答案吗?

回答一些例子可以大大帮助..

提前谢谢了!

/女士

embedded cpu operating-system computer-architecture

7
推荐指数
1
解决办法
5100
查看次数

ARMv8 - 在64位操作系统上运行传统的32位应用程序

通过ARMv8手册,我有以下问题来帮助理解大局.

  1. 可以遗留32位应用程序.(ARMv7或更早版本)在ARMv8操作系统上运行吗?

  2. 如果需要为ARMv8重建遗留应用程序并假设我将应用程序重建为32位(Aarch32),那么这需要32位操作系统底层支持吗?(知道寻址机制如何在这里工作很有趣.)

请尽可能提供参考.

PS:我的目标是支持Aarch64的Linux操作系统(3.7及更高版本)

linux arm arm64

5
推荐指数
1
解决办法
5858
查看次数

需要帮助来理解这些ARM指令

我正在查看我的代码的汇编输出,并需要以下说明的帮助.

- // -

    0x00000fe8:    e28fc000    ....    ADR      r12,{pc}+8 ; 0xff0

    0x00000fec:    e28cca08    ....    ADD      r12,r12,#8, 20 ; #0x8000
Run Code Online (Sandbox Code Playgroud)

- // -

根据我的理解,第一条指令导致r12被加载

"{pc value} + 8"即是

"{当前正在执行的指令的地址(0xfe8)加上2个指令(8)} + 8"

第一条指令执行加载0xff8(0xfe8 + 8 + 8)后r12也是如此

关于第2条指令 -

如何计算添加并存储到r12的值?(评论说它的0x8000,虽然我无法理解它是如何得到的)

assembly arm

4
推荐指数
1
解决办法
4796
查看次数

Linux系统调用

我能够执行系统调用调用并在内核中进行处理.但很少有事情我不清楚.进入swi例程后,内核将用户模式寄存器保存在堆栈中.问题是-

  1. 是谁的堆栈?(因为swi处理和相应的系统调用例程需要堆栈框架才能工作)

  2. 如果它是Kernel自己的堆栈,从哪里获得堆栈分配..?它会开始使用当前的堆栈吗?如果是,则current可以是内核中当时可能正在执行的任何进程.这不是耗尽电流的堆栈吗?

  3. 如果它在swi处理程序中使用当前正在执行的User进程的堆栈,那么这将是内核现在将访问的用户地址空间.这可能吗?由于内核可寻址内存在1GB以内(如果在4GB RAM内存系统中使用1:3内核到用户地址空间比率).

arm linux-kernel embedded-linux

4
推荐指数
1
解决办法
1281
查看次数