依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 27|回复: 0

32位 x86 汇编语言编译器(delphi源码)

[复制链接] 主动推送

1万

主题

1万

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15677
发表于 前天 14:23 | 显示全部楼层 |阅读模式
32位 x86 汇编语言编译器(delphi源码)
一个轻量级的 32 位 X86 汇编语言编译器,语法与 BASM 高度兼容。它能够生成极小体积的 Windows 可执行文件(.com 或 .exe),并支持实模式和保护模式下的代码编译。 通过修改指令集表(位于 XAsmTable.pas),还可以轻松扩展支持其他架构(如 ARM、RISC 等)。
特点:
  • 支持生成极小体积的可执行文件(例如,Hello World 示例仅 444 字节)。
  • 提供灵活的宏定义和结构体支持。
  • 易于扩展,适合学习底层汇编语言和编译器开发。
  • 独立运行:单文件编译器,无任何外部依赖(无需.NET/VC运行库)
编译20423行代码仅需 78 ms (AMD Ryzen3 3550h):
快速开始
  • 使用编译器编译示例代码
./xasm HelloWorld.asm
  • 运行生成的可执行文件
./HelloWorld.exe
示例代码:HelloWorld.asm
说明: 此示例展示了如何调用 Windows API (MessageBoxA) 显示一个消息框。编译后生成的 .exe 文件大小仅为 444 字节。
This example demonstrates how to call the Windows API (MessageBoxA) to display a message box. The compiled .exe file is only 444 bytes in size.
  1. .FILEALIGN 4
  2. .IMAGEBASE $400000

  3. .IMPORT user32.dll,MessageBoxA

  4. txt1&& DB 'Hello World!'

  5. msgbox: MACRO handle=0,text=0,title=0,button=0
  6. push &button
  7. push &title
  8. push &text
  9. push &handle
  10. call A[MessageBoxA]
  11. END

  12. Start:
  13. msgbox handle=0,text=txt1,title=txt1,button=0
  14. ret
复制代码
示例代码:API.asm
说明: 此示例展示了如何动态加载 DLL 并调用多个 API。编译后生成的 .exe 文件大小为 516 字节。
This example demonstrates how to dynamically load a DLL and call multiple APIs. The compiled .exe file is 516 bytes in size.
  1. .FILEALIGN 4

  2. //注意,不同的DLL必须单独使用 .IMPORT
  3. //在定义后 API 名称将成为 Label
  4. //用 CALL A[API名称] 的方式使用API
  5. //本文件编译后 516 Bytes

  6. .IMPORT kernel32.dll,GetProcAddress,LoadLibraryA
  7. .IMPORT user32.dll,MessageBoxA

  8. txt1&& DB 'Hello World!'

  9. msgbox: MACRO handle=0,text=0,title=0,button=0
  10. push &button
  11. push &title
  12. push &text
  13. push &handle
  14. call A[MessageBoxA]
  15. END

  16. Start:
  17. msgbox handle=eax,text=txt1,title=txt1,button=0
  18. ret
复制代码
示例代码:Option.asm
说明: 此示例展示了如何通过配置选项生成不同类型的可执行文件(如最小模式或 DLL)。
This example demonstrates how to generate different types of executable files (such as minimal mode or DLL) by configuring options.
  1. .FILEALIGN 4 //文件对齐
  2. .IMAGEBASE $400000 //影象文件基址
  3. .TINYPE //最小模式编译
  4. //.DLLMODE //编译为DLL
  5. .SUBSYSTEM 2 //设置子系统, GUI == 2, CONSOLE == 3

  6. Start:
  7. .BUILDMSG 编译到这里时产生信息
  8. ret
复制代码
示例代码:m-s.asm
说明: 此示例展示了如何定义结构体和宏,并在代码中使用它们。
This example demonstrates how to define structures and macros, and use them in the code.
  1. .FILEALIGN 4

  2. //本文件编译后 320 Bytes

  3. .ALIGN 2
  4. struct1: STRUCT
  5. FieldDB: DB $90 DIV $90
  6. FieldDW: DW $9090 SHR 10
  7. FieldDD: DD $90909090 / 2
  8. FieldDQ: DQ $90909090 * 2
  9. END

  10. .ALIGN 4
  11. macro1: MACRO param1=0,param2=0
  12. mov eax,¶m1
  13. mov ebx,¶m2
  14. mov ecx,DWORD PTR [struct1.FieldDB]
  15. add ecx,eax
  16. add ecx,ebx
  17. mov DWORD PTR [struct1.FieldDW],ecx
  18. END

  19. Start:
  20. macro1 param1=$100,param2=1
  21. ret
复制代码
示例代码:const.asm
说明: 此示例展示了常量定义、条件编译和基本算术运算。 .REPEAT 与 .ENDREP 在编译时会将块内代码重复生成 CONST2($100) 次.
This example demonstrates constant definitions, conditional compilation, and basic arithmetic operations.
The .REPEAT and .ENDREP directives generate the enclosed code block CONST2 ($100) times during compilation.
  1. // --- 常量与数据定义 ---
  2. // 本文件编译后 1,104 Bytes
  3. .FILEALIGN 4        // 设置文件对齐方式为4字节
  4. .ALIGN 4            // 代码段对齐4字节

  5. @CONST1 VAR $1      // 定义常量1(数值型)
  6. @CONST2 VAR $100    // 定义常量2(数值型)
  7. @CONST3 VAR "This Is Text2" // 字符串常量(未被使用)
  8. txt1&& DB 'Hello World!!'  // 字符串数据(未被使用)
  9. var1&& DD $0        // 初始化双字变量为0

  10. // --- 代码段 ---
  11. showtxt:
  12. jmp SHORT end      // 跳过中间代码

  13. Start:
  14. DB $90,$90         // 两个NOP空操作指令
  15. .IFDEF var1>=$100  // 条件编译检查(因var1=0实际不成立)
  16. jmp SHORT showtxt
  17. .ENDIF
  18. int 3              // 触发调试中断(用于调试)

  19. end:
  20. mov eax, [var1]    // eax = 0
  21. mov ebx, @CONST1   // ebx = 1
  22. add eax, ebx       // eax = 1
  23. .REPEAT @CONST2    // 编译时展开$100次循环
  24. add eax, @CONST1   // 每次循环eax += 1
  25. .ENDREP
  26. mov [var1], eax    // 最终var1 = 1 + $100*1 = $101
  27. ret
复制代码
.FOR 循环指令
语法
  1. .FOR <变量名>=<起始值>,<结束值>[,<步长>]
  2.     ; 循环体代码
  3. .ENDFOR
复制代码
功能说明
  • 编译时展开:在编译阶段直接生成展开后的重复代码块
  • 零运行时开销:不产生循环控制指令(DEC/JNZ等)
  • 嵌套支持:支持多层嵌套循环(需配合缩进使用)
  • 参数灵活:支持常量表达式作为参数值
示例 - 生成递增序列
  1. ; Generate 0-3 with step 1
  2. .FOR i=0,3
  3.     DB &i  ; 展开为 DB 0, DB 1, DB 2, DB 3
  4. .ENDFOR
复制代码
示例 - 颜色渐变生成
  1. .FOR rgb=0,255,16
  2.     DB &rgb, &rgb/2, 0     ; R分量渐变
  3.     DD &rgb<<16 | &rgb<<8  ; ARGB格式颜色
  4. .ENDFOR
复制代码
示例 - 矩阵初始化
  1. .FOR Y=0,15
  2.     .FOR X=0,15
  3.         DB &Y*16 + &X  ; 生成16x16矩阵(0-255)
  4.     .ENDFOR
  5. .ENDFOR
复制代码
注意事项
  • 代码膨胀:循环次数不宜超过100次(典型值),否则可能显著增加最终文件大小
  • 参数限制, 仅支持编译时可确定的常量值,不支持运行时变量
  • 特殊字符, 变量名避免使用寄存器名称(EAX/EBX等)和系统保留字
  • 变量作用域, 循环变量仅在当前循环体内有效:

  1. .FOR i=0,3
  2.     MOV eax, &i
  3. .ENDFOR
  4. ; 此处&i 已失效
复制代码
性能对比
循环类型10次循环代码量执行周期
.FOR40字节N/A
LOOP5字节82周期
REP3字节28周期支持的寄存器及编码表
通用寄存器
寄存器名称编码值位宽用途说明
AL08-bit累加器低8位
AH48-bit累加器高8位
AX016-bit16位累加器
EAX032-bit32位扩展累加器
DL28-bit数据低8位(常用于I/O操作)
DH68-bit数据高8位
DX216-bit16位数据寄存器
EDX232-bit32位扩展数据寄存器
CL18-bit计数低8位(常用于移位操作)
CH58-bit计数高8位
CX116-bit16位计数器
ECX132-bit32位扩展计数器
BL38-bit基址低8位
BH78-bit基址高8位
BX316-bit16位基址寄存器
EBX332-bit32位扩展基址寄存器
SI616-bit源索引寄存器
ESI632-bit32位扩展源索引寄存器
DI716-bit目标索引寄存器
EDI732-bit32位扩展目标索引寄存器
SP416-bit堆栈指针寄存器
ESP432-bit32位扩展堆栈指针
BP516-bit基指针寄存器
EBP532-bit32位扩展基指针
MMX 寄存器
寄存器名称编码值位宽用途说明
MM0064-bit多媒体扩展寄存器0
MM1164-bit多媒体扩展寄存器1
MM2264-bit多媒体扩展寄存器2
MM3364-bit多媒体扩展寄存器3
MM4464-bit多媒体扩展寄存器4
MM5564-bit多媒体扩展寄存器5
MM6664-bit多媒体扩展寄存器6
MM7764-bit多媒体扩展寄存器7
SSE 寄存器
寄存器名称编码值位宽用途说明
XMM00128-bit流式SIMD扩展寄存器0
XMM11128-bit流式SIMD扩展寄存器1
XMM22128-bit流式SIMD扩展寄存器2
XMM33128-bit流式SIMD扩展寄存器3
XMM44128-bit流式SIMD扩展寄存器4
XMM55128-bit流式SIMD扩展寄存器5
XMM66128-bit流式SIMD扩展寄存器6
XMM77128-bit流式SIMD扩展寄存器7
FPU 堆栈寄存器
寄存器名称编码值位宽用途说明
ST(0)080-bit浮点运算寄存器0
ST(1)180-bit浮点运算寄存器1
ST(2)280-bit浮点运算寄存器2
ST(3)380-bit浮点运算寄存器3
ST(4)480-bit浮点运算寄存器4
ST(5)580-bit浮点运算寄存器5
ST(6)680-bit浮点运算寄存器6
ST(7)780-bit浮点运算寄存器7
段寄存器
寄存器名称编码值位宽用途说明
ES016-bit附加段寄存器
CS116-bit代码段寄存器
SS216-bit堆栈段寄存器
DS316-bit数据段寄存器
FS416-bit附加段寄存器
GS516-bit附加段寄存器
控制寄存器
寄存器名称编码值位宽用途说明
CR0032-bit控制处理器基本功能
CR1132-bit保留未使用
CR2232-bit页故障线性地址寄存器
CR3332-bit页目录基址寄存器
CR4432-bit控制处理器扩展功能
CR5-CR75-732-bit保留未使用
调试寄存器
寄存器名称编码值位宽用途说明
DR0032-bit调试地址寄存器0(断点地址)
DR1132-bit调试地址寄存器1
DR2232-bit调试地址寄存器2
DR3332-bit调试地址寄存器3
DR4432-bit保留(与 DR6 重叠)
DR5532-bit保留(与 DR7 重叠)
DR6632-bit调试状态寄存器(断点命中状态)
DR7732-bit调试控制寄存器(断点条件设置)技术亮点 (Technical Highlights)
  • 编译器 :完全使用 Pascal 编写,是学习编译器设计原理的理想工具。
  • 可扩展架构 :通过修改指令集表(XAsmTable.pas),可轻松扩展支持 ARM、RISC 等新架构。
  • 极小体积可执行文件 :生成的可执行文件最小仅 444 字节 ,适合底层编程爱好者和极简代码实践。
  • Compiler: Written in Pascal, making it an excellent learning tool for understanding compiler design.
  • Extensible Architecture: Modify the instruction set table (XAsmTable.pas) to support new architectures like ARM or RISC.
  • Minimal Executables: Generate executables as small as 444 bytes , ideal for low-level programming enthusiasts.

无需安装依赖,可直接在以下环境运行:
  • Windows XP ~ 11
  • WinPE/WinRE 维护系统
  • 其他精简版Windows环境


链接:https://pan.quark.cn/s/cb2a87a267eb



提取码下载:
文件名称:提取码下载.txt 
下载次数:0  文件大小:16 Bytes  售价:20金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员6折;永久VIP4折】
安全检测,请放心下载





相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-4-19 12:46

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表