SUBX:X86 ISA子集的简单汇编语言

2021-03-21 08:45:32

SUBX是X86机器代码子集的表示法。 MU翻译在Subx中实现,也会发出子句代码。

这里'在子句中添加1和1的示例程序,并返回结果TOTHE父shell进程:

== CodeEntry:#eBx = 1 BB / Copy-to-EBX 1 / IMM32#增量EBX 43 / Increment-EBX#EXIT(EBX)E8 / CALL SYSCALL_EXIT / DISP32

就像在常规机器代码中一样,Subx程序主要由指令组成,基本上是数字序列(总是在十六进制中)。说明由空格分隔的单词组成。单词可以是操作码(定义正在执行的特工)或参数(指定数据的数据)。任何单词都可以在/后附加到它的额外元数据。需要SomemetAdata(如/ imm32和/ / / / / / / / / / / / / / / / / / / / Imm8),但是默默地跳过了Unsognedizedmetadata,因此您可以将注释附加到单词(如上面的Intricalrity名称/ copy-to-eax或/退出参数)。

所有这些数字意味着什么? SUBX支持可能在计算机上运行的32位X86 ILCRICTRING集的小子集。 (将名称视为Shortfor" sub-x86")指令集包含如89 / copy,01 /添加,3D /比较和51 / push-ecx,它修改寄存器和字节addressablemeMory 。有关支持的指令的完整列表,请运行Bootstrap帮助操作码。

两个额外的32位寄存器:4 / ESP和5 / EBP。 (我建议您唯一只使用这些来管理呼叫堆栈。)

八个8位整数寄存器叠加,含有32位寄存器的部分:0 / Al,1 / Cl,2 / DL,3 / BL,4 / AH,5 / CH,6 / DH和7 / BH。

(英特尔处理器支持一个16位模式和64位模式。Subx将Neversupport它们。Subx的exversupport也有更多的指令。)

虽然Subx Nond' t为操作码提供通常的助记符,它确实提供了error检查。如果你错过了一个论点或意外地添加额外的论点,你会得到一个很好的错误。 SUBX WON' t任意解释数据AsInstructions的字节,反之亦然。

它值得不同于指令' s的参数及其操作数。在说明中直接提供。操作数是可通过指令运行的日期寄存器或内存。

英特尔处理器通常在不超过两个操作数上运行,并且在其中大部分(' reg / mem'操作数)可以访问内存。它的地址/ MEM操作数由其中一个表单的表达式构建:

*(基本+(索引<< scale)+ disp)其中基本和索引是寄存器,并且分别是分别为2和32位常数。

在引擎盖下,Subx以某种复杂方式将这些形式的表达式转变为多个参数。请参阅裸BUSX上的文档。

涵盖了reg / mem操作数的复杂性。第二个操作数Issimpler。它来自以下参数类型之一:

将所有这些放在一起,这里&#39

子句程序映射到传统的Linux系统的相同的ELF二进制文件。 Linux ELF二进制文件由一系列部分组成。特别是,他们在代码和数据之间进行区分。相应地,Subx程序由段的ASERIES组成,每个部分以标题线开始:==,后跟一个近似启动地址。

==代码0x09000000#首先提到需要启动地址...... a ... == data 0x0a000000 ... b ... == code#添加... c ...

在代码段内,每行包含注释,标签或指令.Ments以#开头并被忽略。标签应该始终是一行中的第一字,它们以答:。

说明可以引用位移或立即参数中的标签,' ll基于标签的地址获取值:立即参数直接包含地址,而位移参数将在地址和当前指令的地址之间的差异。后者主要用于跳转和呼叫指示。

使用标签定义函数。按照惯例,函数内部的标签(必须只跳转到)以$开头。只有其他标签都必须被视为,从未跳过。所有标签必须是唯一的。

函数参数必须使用上一节中的语法是文字(整数或字符串)或reg / memoperand。

特殊标签是条目,可用于指定/覆盖程序的入口点。它不必是唯一的,最新的定义版本覆盖了早期的。

(条目标签以及重复的段标题,允许程序以多个图层递增地构建。)

另一对标签是块分隔符{和}。他们可以嵌套,跳跃指令可以采用参数循环或分别将该呼吸分别打破到封闭{和}。

数据段由标签组成以前和字节值。在代码段指示符或数据段值中引用托管数据标签yields它们的地址。

自动测试是Subx的重要组成部分,并且有一个简单的机制提供了一个测试线束:从测试开始的所有函数都是由一个名为Run-Tests的特殊,自动生成的函数所谓的Inturn。你如何挑选它取决于你。

我试图保持简单的事情,以便在Subx中实现augionubx时少工作。但是有一种便利:说明可以在IMM32论点中提供由报价(")包围的批发文字。 Subx将其临时将其复制到数据段并用其地址替换它.Strings是允许Subx Word允许包含空格的唯一位置。

这应该是编写Subx程序的信息。 Apps /目录在Apps / Ex * .subx文件中提供了一些饲料,以便更加逐步介绍Subx功能。特别是,您应该通过Apps / Factorial4.subx,它表明所有上述想法都不concert。