相关疑难解决方法(0)

为什么Linux被称为单片内核?

我读到Linux是一个单片内核.单片内核是否意味着将完整的内核代码编译并链接到可执行文件中?

如果Linux能够支持模块,为什么不将所有子系统分解为模块并在必要时加载它们?在这种情况下,内核最初不必加载所有模块,并且可以维护模块中函数的索引并在必要时加载它们.

architecture operating-system linux-kernel

193
推荐指数
5
解决办法
6万
查看次数

ARM程序集和x86程序集之间的差异

我现在要学习ARM Assembly,为我的Windows Mobile 5 iPAQ开发,但我有一些问题:

  • ARM组件和x86组件之间的主要区别是什么?
    • 中断是否存在差异(新类型)?
      • 他们是谁,他们的意义是什么?
    • 编译的最佳汇编程序以及从何处获得它?
  • 哪里可以找到一些好的资源?

embedded x86 assembly arm

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

ARM Cortex-A8 流水线是 13 级还是 14 级?

如果您在其中一个 ARM演示文稿中看到了这张流行的 ARM Cortex-A8 流水线图。很明显,取指令阶段需要 3 个周期,但第一个周期有点折扣。但为什么?有什么想法吗?

谢谢...

在此处输入图片说明

arm cortex-a8

2
推荐指数
1
解决办法
3872
查看次数

GCC生成的ARM和x86汇编代码的差异

让我们用一个简单的C代码来设置寄存器:

int main()
{
    int *a = (int*)111111;
    *a = 0x1000;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用1级优化编译ARM(arm-none-eabi-gcc)代码时,汇编代码如下:

mov     r2, #4096
mov     r3, #110592
str     r2, [r3, #519]
mov     r0, #0
bx      lr
Run Code Online (Sandbox Code Playgroud)

看起来地址111111被解析为最接近的4K边界(110592)并移动到r3,然后通过将519添加到110592(= 111111)来存储值4096(0x1000).为什么会这样?

在x86中,程序集很简单:

movl    $4096, 111111
movl    $0, %eax
ret
Run Code Online (Sandbox Code Playgroud)

compiler-construction x86 assembly gcc arm

2
推荐指数
1
解决办法
1810
查看次数

如何在不同的操作系统和体系结构上运行相同的汇编程序?

这是一个简单的 NASM 64 位 linux 汇编程序:

_exit:
    mov rax, 60
    mov rdi, 0
    syscall
Run Code Online (Sandbox Code Playgroud)

我的电脑是 AMD(x86_64 64 位),我知道这个汇编程序也可以在 INTEL 64 位处理器上运行。

但我有以下这些问题!

  • 该程序是否可以在具有MIPS 64 位ARM 64 位架构的( linux ) 计算机上运行?
  • 当汇编代码使用不同的操作系统时,是否只有系统调用发生变化?

64-bit assembly arm x86-64 nasm

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