【发布时间】:2014-03-26 22:13:55
【问题描述】:
我正在 Ada 中为 Brainf*** 编写一个简单的编译器,但是我在代码生成方面遇到了严重的麻烦,因此我无法正确生成带有操作码指令的二进制文件,因为每当我编写文件时,它像整数一样保存十六进制值。 (整数大小)
我制作了一个我尝试制作的简单样品:
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
如何正确保存操作码指令??
【问题讨论】:
-
文件有多大?你确定十六进制编辑器不只是扩展它可以显示整个世界吗?换句话说,文件是 1 字节还是 4 字节大?
-
把Bin_IO改成
package Bin_IO is new Sequential_IO(Byte);还不够吗? -
@WoutervanNifterick 这是我的另一个想法.....
-
哦,当我尝试编写一个简单的 16#F# 时,我没有意识到我的错误,而不是它的工作,但是,当我尝试编写例如 16#FF# 时,我得到了一个错误:( ..
-
那是因为那似乎超出了范围(-128 .. 127)
标签: ada