当前位置: 首页 > 知识库问答 >
问题:

中间语言的最小汇编指令集?

颛孙沈义
2023-03-14

我想知道以下内容:

是否有可能创建一组小的组装指令,这些指令一起可以完成所有可能的操作?或者可能会有不同的问题,关于任何架构,必须有哪些组装说明?

(例如,Jump和Add是做任何事情所必需的)

我希望你们能帮助我!

提供一些背景信息:我正在尝试为我的编译器设计一种中间语言,我想使用尽可能少的指令(稍后可以用一堆这些指令代替特定架构的复杂指令)。但是当然,IL本身应该是可移植的。

共有2个答案

骆文彬
2023-03-14

最少是一条指令,它甚至在现实中实现在碳纳米管计算机或MAXQ芯片中

虽然只有一个就足够了,但事实上它比你想象的要复杂得多,通常需要更多的指导才能完成同样的工作。如果您需要芯片的速度“可用”,那么IMO应该至少有一些通用指令:

  • 1条条件跳转指令:等于(或不等于)跳转

使用子指令或按位指令,您可以移动数据,因此根据您的体系结构和操作码大小,您可以删除MOV或加载/存储,以使其更简单。

席安康
2023-03-14

我认为你想要的恰恰相反。与其制作尽可能简单的IL,不如制作一个非常有表现力的IL。IL越有表现力,就越容易针对特定架构进行优化。

将复杂的IL操作扩展为多个单独的指令比将许多简单的IL操作合并为复杂的指令更容易。您可能不需要乘法,因为它可以通过跳转和加法指令完成。但是,当您为具有硬件乘法的芯片进行编译时,您必须分析IL以确定这是一个“加法循环”,并将其转换回乘法。这比遇到乘法运算并说“嗯,这个体系结构做不到这一点,我想我们必须使它成为一个加法循环”要多得多

另一个例子是,您可能认为您的IL不需要浮点操作,因为一些ARM芯片无论如何都必须在软件中执行浮点操作。但是有些ARM芯片不需要这样做,如果您的IL不支持FP操作,那么您需要将复杂的软件FP IL转换回单个硬件指令。

最好将IL与最先进、最复杂的硬件功能相匹配,然后在没有这些功能的处理器上对这些功能进行“软件仿真”。

 类似资料:
  • 本文向大家介绍汇编语言 跳转指令与C语言的条件分支,包括了汇编语言 跳转指令与C语言的条件分支的使用技巧和注意事项,需要的朋友参考一下 跳转指令 跳转指令也是一个组的指令,称为j组。其中jmp为无条件跳转,其余为条件跳转 上图为j组指令,可结合条件码访问指令加深理解 在机器指令水平上理解如何对跳转指令编码 如上图,通过反汇编软件得到机器指令与汇编语言,其中左边为机器指令编码,右边为对应汇编语言含义

  • 本文向大家介绍16位汇编语言寄存器及指令整理(小结),包括了16位汇编语言寄存器及指令整理(小结)的使用技巧和注意事项,需要的朋友参考一下 寄存器 通用寄存器 8位寄存器 16位寄存器 32位寄存器 寄存器名称 AH,AL AX EAX 累加寄存器 BH,BL BX EBX 基地址寄存器 CH,CL CX ECX 计数器寄存器 DH,DL DX EDX 数据寄存器 SI ESI 源变址寄存器 DI

  • 机器语言 机器语言是指令的集合。 汇编语言 汇编语言的主体是汇编指令。 存储器 随机存储器RAM,可读可写,必须带电存储,关机后存储的内容丢失 只读存储器ROM,只读,关机后其中的内容不丢失 装有 BIOS (基本输入输出设备)的ROM 接口卡上的RAM:显存 外存(storage,磁盘)和内存(memory,主存,高速缓存) 内存地址空间 存储单元:1个字节(byte) 总线 地址总线:CPU是

  • 伪指令 DW 定义字(2字节). PROC 定义过程. ENDP 过程结束. SEGMENT 定义段. ASSUME 建立段寄存器寻址. ENDS 段结束. END 程序结束.

  • 串指令 DS:SI 源串段寄存器 :源串变址. ES:DI 目标串段寄存器:目标串变址. CX 重复次数计数器. AL/AX 扫描值. D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. Z标志 用来控制扫描或比较操作的结束. MOVS 串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较. ( CMPSB 比较字符. CMPSW

  • 上面介绍的在Solidity中嵌入的内联汇编语言也可以单独使用。实际上,它是被计划用来作为编译器的一种中间语言。在这个目的下,它尝试达到下述的目标: 使用它编写的代码要可读,即使代码是从Solidity编译得到的。 从汇编语言转为字节码应该尽可能的少坑。 控制流应该容易检测来帮助进行形式验证与优化。 为了达到第一条和最后一条的目标,Solidity汇编语言提供了高层级的组件比如,for循环,swi