我想知道以下内容:
是否有可能创建一组小的组装指令,这些指令一起可以完成所有可能的操作?或者可能会有不同的问题,关于任何架构,必须有哪些组装说明?
(例如,Jump和Add是做任何事情所必需的)
我希望你们能帮助我!
提供一些背景信息:我正在尝试为我的编译器设计一种中间语言,我想使用尽可能少的指令(稍后可以用一堆这些指令代替特定架构的复杂指令)。但是当然,IL本身应该是可移植的。
最少是一条指令,它甚至在现实中实现在碳纳米管计算机或MAXQ芯片中
虽然只有一个就足够了,但事实上它比你想象的要复杂得多,通常需要更多的指导才能完成同样的工作。如果您需要芯片的速度“可用”,那么IMO应该至少有一些通用指令:
使用子指令或按位指令,您可以移动数据,因此根据您的体系结构和操作码大小,您可以删除MOV或加载/存储,以使其更简单。
我认为你想要的恰恰相反。与其制作尽可能简单的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