首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM7打印/输出功能

ARM7打印/输出功能
EN

Stack Overflow用户
提问于 2012-02-05 02:24:10
回答 3查看 301关注 0票数 1

我正在尝试实现一个简单的Pascal到ARM的汇编编译器。我需要实现write()函数,但我不知道如何在汇编程序中使用它。我试着用谷歌搜索它,但没有成功。我正在使用Keil uVision 4来模拟我的汇编代码。

假设我想编译以下程序:

代码语言:javascript
复制
PROGRAM myProg;
var A : integer;

BEGIN

A := 5;
write(A);

END.

它在手臂集合中看起来是什么样子?

EN

回答 3

Stack Overflow用户

发布于 2012-02-07 19:02:33

  1. 将整数转换为string
  2. 对字符串中的每个字符执行string
  3. 循环,然后将其输出到输出设备

你可以试验一下“免费的pascal”编译器,看看汇编程序是什么样子的,它支持几种ARM架构。

票数 0
EN

Stack Overflow用户

发布于 2012-02-10 07:10:48

亚历克斯

这里有很多因素..。可执行文件的目标是什么?是某种操作系统,还是原始硬件?如果它是一个操作系统,将会有一个API可供您使用,它应该代表您完成大部分繁重的工作。

但即便如此,这也只是故事的一半。write()背后是一个巨大的输出处理库,它知道如何将输入数据转换为有意义的输出::write()是一种奇特的过程,它接受数量可变的非类型化参数,并以某种方式神奇地将它们全部解释清楚。

正如Marco所说,你可以看看FP的汇编器输出,但我有一种感觉,你很快就会陷入无数子例程调用的泥潭。

另一种选择可能是简单地将Marco的想法更进一步-你不能只使用Free Pascal吗?即使您的目标设备上没有操作系统,您仍然可以让它为您完成大部分工作。毫无疑问,您必须提供到stdin和stdout的挂钩,但除此之外,FP可能是一个可行的解决方案?

票数 0
EN

Stack Overflow用户

发布于 2012-02-10 12:05:33

write()是操作系统的东西,而不是处理器指令的东西。操作系统需要成百上千到成百上千条指令才能实现这样的事情,你要么瞄准一个操作系统,要么创建自己的,然后创建一个从处理器到该操作系统的接口,例如,你可以选择使用swi指令进行系统调用。

你会有更好的运气,只要创建一个编译器,编译成指令集,alu操作,加,减,异或等读和写存储器地址,等等。

现在,您实际上是在问如何写入内存,A是内存中的地址?(我的pascal很生疏)然后看看你的arm指令集,有几条/多条不同的指令,主要是看str指令、str、strh和strb (有些arm有一个strd)。因为这是您的pascal编译器,所以您可以让write()做任何您想做的事情,所以如果这就是您想要做的,就从str指令开始并从那里开始。

在我看来,您需要从开发arm汇编器开始,忘记pascal compiler...THEN,编写一个pascal编译器来生成您确实知道如何使用和编写的汇编语言代码。如果你自己不知道如何在汇编语言中做到这一点,也不要让编译器去做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9143260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档