Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction ARM7打印/输出功能_Compiler Construction_Assembly_Arm_Pascal - Fatal编程技术网

Compiler construction ARM7打印/输出功能

Compiler construction ARM7打印/输出功能,compiler-construction,assembly,arm,pascal,Compiler Construction,Assembly,Arm,Pascal,我正在尝试实现一个简单的Pascal到ARM汇编编译器。我需要实现write()函数,但我不知道如何在汇编程序中实现它。我试着用谷歌搜索,但没有成功。我使用Keil uVision 4来模拟我的汇编代码 假设我想编译以下程序: PROGRAM myProg; var A : integer; BEGIN A := 5; write(A); END. 它在手臂装配中看起来如何 将整数转换为字符串 在字符串上循环 对于字符串中的每个字符,将其输出到输出设备 您可以使用“free pascal

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

假设我想编译以下程序:

PROGRAM myProg;
var A : integer;

BEGIN

A := 5;
write(A);

END.
它在手臂装配中看起来如何

  • 将整数转换为字符串
  • 在字符串上循环
  • 对于字符串中的每个字符,将其输出到输出设备
  • 您可以使用“free pascal”编译器来试验汇编程序的外观,它支持多种ARM体系结构

    亚历克斯

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

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

    正如Marco所说,您可以查看FP的汇编程序输出,但我有一种感觉,您将很快陷入无数子例程调用中

    另一个选择可能是简单地把马可的想法再进一步一点——你能不能不使用免费的帕斯卡?即使目标设备上没有操作系统,您仍然可以让它为您完成大部分工作。毫无疑问,您必须为stdin和stdout提供钩子,但除此之外,FP可能是一个可行的答案?

    write()是操作系统的东西,而不是处理器指令的东西。一个操作系统要实现这样的功能需要数百到数十万条指令,您必须以一个操作系统为目标,或者创建自己的操作系统,然后创建一个从处理器到该操作系统的接口,例如,您可以选择使用swi指令进行系统调用

    您只需创建一个编译器就可以更好地编译指令集、alu操作、add、sub、xor等,读取和写入内存地址等

    现在你真的在问如何写内存,A是内存中的地址吗?(我的pascal已经生锈了)然后看看你的arm指令集,有一些不同的指令,主要是你想看看str指令、str、strh和strb(有些arm有一个STD)。因为这是您的pascal编译器,所以您可以让write()做任何您想做的事情,如果这是您打算做的,那么从str指令开始,然后从那里开始


    在我看来,你需要从arm汇编程序开始,忘掉pascal编译器……然后,制作一个pascal编译器,生成你知道如何使用和编写的汇编代码。如果您自己不知道如何在汇编程序中执行此操作,也不要让编译器执行。

    取决于您使用的操作系统?