在Ada中写入BYTE或字节数组

时间:2014-03-26 13:39:15

标签: ada

我正在为Ada中的Brainf ***编写一个简单的编译器,但是我在代码生成中遇到了严重问题,因此我无法正确生成带有操作码指令的二进制文件,因为无论何时我写文件,它像整数一样保存六进制十进制值。 (整数大小)

我制作了一个简单的wat样本,我试图制作:

With Ada, Ada.Sequential_IO, Ada.Integer_Text_IO;
Use Ada;

procedure main is

   type Byte is range -128 .. 127;
   for  Byte'Size use 16;

   package Bin_IO is new Sequential_IO(Integer);
   File      : Bin_IO.File_Type;
   FileName  : constant String := "teste.bin";
   Num       : Byte;

begin
   Bin_IO.Create(File => File,
                 Name => FileName);

   Num := 16#FF#;        
   Bin_IO.Write(File => File,
                Item => Num);

   Bin_IO.Close(File => File);
end main;

文件中的指定结果只是 FF 但是,当我在十六进制编辑器中打开文件时,我有 FF00 0000

如何正确保存操作码指令?

2 个答案:

答案 0 :(得分:2)

尝试将第9行更改为:

package Bin_IO is new Sequential_IO(Byte);

它将通用包更改为字节序列。 Bin_IO.Write现在应该写字节。

答案 1 :(得分:0)

我找到了功能性解决方案......

我将类型更改为字符类型,并且,我只是将机器操作码转换为字符类型并写入文件,这工作非常好......,我不知道这是否是最好的方法,但是工作< / p>

With Ada, Ada.Sequential_IO, Ada.Integer_Text_IO;
Use Ada;

procedure main is

   package Bin_IO is new Sequential_IO(Character);
   File      : Bin_IO.File_Type;
   FileName  : constant String := "teste.bin";
   Num       : Character;

begin
   Bin_IO.Create(File => File,
                 Name => FileName);

   Num := Character'Val(16#97#);
   Bin_IO.Write(File => File,
                Item => Num);

   Bin_IO.Close(File => File);
end main;