【问题标题】:How to write a program for ARM using *only* assembly如何使用 *only* 程序集为 ARM 编写程序
【发布时间】:2013-06-13 14:57:24
【问题描述】:

我想为我的基于 ARM 的手机 (Nexus S) 编写一个纯 ARM 程序集的小程序。 我知道 C 中的内联汇编,但是当我尝试一个简单的程序时,例如

int main() {
    asm("nop");
    return 0;
}

perf 表明运行该程序消耗了数千条指令和周期。 我不知道为什么..但我相信这是因为加载了最小的 C 库以便处理 int main 并返回 0 等。
我想避免这种情况..

所以,我想知道是否可以用纯汇编编写一个小程序并在基于 ARM 的手机(Nexus S)上执行它

【问题讨论】:

    标签: assembly arm


    【解决方案1】:

    首先,您需要一些合适的工具包——最重要的是汇编程序。我建议fasmarm

    它是基于 FASM 的交叉汇编程序 - 您应该在 x86 机器(Windows 或 Linux)上编写程序,编译程序然后将其上传到 Arm 机器执行。

    Fasmarm 支持全系列的 Arm 处理器和协处理器。

    【讨论】:

    • @AlbertvanderHorst - 你错了。 (因此,您不能投反对票是件好事;)) FASM 汇编器用于英特尔编程。 FASMARM 是 FASM 的一个分支,使用相同的代码库,具有相同的预处理器语法和数据定义指令,但针对 ARM 处理器进行编译。这就是为什么它被命名为 FASMARM。当然,它是交叉编译器。 FASMARM 在 Intel 机器上运行,但为 ARM 编译。
    【解决方案2】:
    .globl _start
    _start:
       nop
       b .
    

    【讨论】:

    • 你能推荐一个我可以学习写这样普通汇编的地方吗?
    • 基于 NDK 的应用程序的入口点不是在 Java 领域的某个地方,而本机代码不是通过 JNI 调用的吗?猜猜你是否已经植根手机,但安装控制台应用程序没有问题。
    • @Marko:NDK 允许您开发仅包含本机活动的应用程序,而您的 apk 根本不包含任何 Java 代码。这并不是说 Android 中的 Java 代码不参与启动您的应用程序。无论如何,它不会是“裸机”汇编编码。
    • 具有讽刺意味的是,如果您从 XCode 的调试器运行它,您可能可以使用与 @Dwelch 提出的方法不同的方法为 iOS 构建一个最小的、仅组装的应用程序......但是,如果OP 真的很想试试这个,Raspberry Pi 可能是首选设备。
    • github.com/dwelch67 我有不同指令集的模拟器,用于学习 asm 和裸机,它们可能对你有用,也可能没用。我同意 Marko 的观点,我建议先使用指令集模拟器,然后再转向 raspberry pi 等硬件或 10 到 20 美元范围内的其他硬件。您的手机或笔记本电脑/台式机都是正确的位置(手机适合其环境,笔记本电脑/台式机,因为如果它是 x86 则不是一个好的第一个汇编语言)。
    【解决方案3】:

    您可以使用二重奏 gnu arm 编译器 + eclipse IDE。要拥有完整的环境,您还需要引导加载程序。因为我要处理LPC2148 uC,所以我以前使用LPCUSB loader。它也很容易与eclipse集成......所以加载和编译都是一键式的。

    您可以通过以下方式找到更多信息: https://www.google.pl/search?num=20&newwindow=1&safe=off&espv=210&es_sm=93&q=gnu+arm+eclipse+plugin+installation

    您必须选择适合您的 uC 的引导加载程序。

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多