这是 Microsoft C/C++ 运行时库使用的一个特殊符号,用于表示正在使用 C 运行时库。值 9876h(十进制为 39030)是一个魔法数字,告诉链接器需要 CRT(C 运行时)初始化。
例子
.MODEL TINY .8086 .code ORG 100h ; COM 程序入口偏移 PUBLIC _nmi_handler ; 导出符号供C使用 extrn _main:proc start: ; 手动设置堆栈(Tiny 模式要求) mov ax, cs mov ss, ax mov sp, 05fffh ;add ax,0100h mov ds,ax ; 调用 C 主函数 call near ptr _main ; 退出到 DOS(使用 AL 中的返回码) mov ah, 4Ch ; DOS 功能:程序退出 int 21h _nmi_handler PROC NEAR push ax ; 保存寄存器 inc _nmi_count ; nmi_count++ (C变量) pop ax ; 恢复寄存器 iret ; 中断返回 _nmi_handler ENDP .data EXTERN _nmi_count:WORD ; 声明外部C变量 public __acrtused __acrtused = 9876h .stack END start ; 指定入口点为 start常见使用场景:
1.在 MASM/TASM 汇编文件中:
.386 .model flat, stdcall public __acrtused __acrtused = 9876h ; 您的代码在这里2. 为什么需要它:
当链接时没有显式包含 C 运行时库时,这个符号确保正确的 CRT 初始化
对于控制台应用程序或使用某些 CRT 函数时特别重要
防止链接器优化掉必要的启动代码
3. 典型上下文:
这通常用于混合汇编/C 语言项目,或编写需要 CRT 支持但不包含完整 C 运行时库的纯汇编程序。
替代方案(更现代的方法):
对于较新的工具链,您可能希望使用:
// 在 C 文件中: #ifdef __cplusplus extern "C" { #endif int _fltused = 0x9876; #ifdef __cplusplus } #endif注意:
确切的值和行为可能因不同版本的 Visual Studio/Windows SDK 而有所不同。如果您遇到与 CRT 初始化相关的链接器问题,这个声明可能有助于解决它们。