AMD Ryzen 5 5600H+Win11环境下汇编入门求助:验证代码可行性
Windows 11 下 x86/x64 汇编入门问题解答
你的代码无法运行的原因
- 你使用的
int 10h是DOS实模式下的BIOS视频中断,Windows 11是64位保护模式操作系统,完全不支持这类实模式中断调用,代码从根本上不适配当前系统。 - 此外,Windows平台的汇编程序需要遵循PE(可移植可执行文件)格式规范,你的代码没有处理程序入口的系统调用逻辑,也未链接必要的系统库,无法被系统正确加载执行。
适配Windows 11的64位汇编入门示例(控制台输出)
以下是基于NASM编写的64位汇编代码,通过调用Windows API实现控制台文本输出,可直接在Windows 11下编译运行:
section .data msg db 'Hello, Windows 11!', 0xA, 0 ; 输出字符串,包含换行符与终止符 msg_len equ $ - msg - 1 ; 计算字符串长度(不含终止符) section .text global main ; 声明需要调用的Windows API函数 extern WriteConsoleA, GetStdHandle, ExitProcess main: ; 1. 获取标准输出句柄 mov rcx, -11 ; STD_OUTPUT_HANDLE的常量值 call GetStdHandle mov rbx, rax ; 保存句柄到rbx寄存器 ; 2. 调用WriteConsoleA输出字符串 mov rcx, rbx ; 参数1:标准输出句柄 mov rdx, msg ; 参数2:字符串指针 mov r8, msg_len ; 参数3:要输出的字符数 mov r9, 0 ; 参数4:接收实际输出字符数的指针(忽略) push 0 ; 参数5:保留参数,设为0 call WriteConsoleA ; 3. 退出程序 mov rcx, 0 ; 退出码为0 call ExitProcess
编译链接步骤
假设你已安装NASM汇编器和MSVC链接器:
- 编译成目标文件:
nasm -f win64 hello.asm -o hello.obj - 链接生成可执行文件:
link hello.obj kernel32.lib /subsystem:console /entry:main
运行生成的hello.exe,如果控制台成功输出Hello, Windows 11!,说明你的汇编与链接流程完全正常。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

