NASM转MASM语法对应关系及resb、global _start替代方案咨询
问题1解答
NASM的resb指令作用是预留指定字节数的未初始化内存,MASM中对等的写法是db N dup (?),你要预留16字节的name变量,正确写法为name db 16 dup (?)。你将.bss段对应到.data?段的修改是正确的,二者都用于存放未初始化数据,不会占用可执行文件的静态存储空间。
额外说明:你当前代码中使用的syscall调用规则是Linux平台的系统调用约定,MASM通常用于Windows平台开发,Windows系统不存在rax=60对应进程退出的调用规则,如果你要在Windows下运行代码,需要替换为对应的Windows API调用。
问题2解答
NASM的global _start作用是将_start符号导出为全局符号,供链接器识别为程序入口,MASM中对等的语法是PUBLIC指令。如果你要保留_start作为程序入口,添加PUBLIC _start声明即可,同时需要在代码末尾的end指令后指定入口点,改为end _start。如果你是和C运行库链接使用main作为入口,就声明PUBLIC main,末尾改为end main即可。
问题3解答
目前没有官方推出的专门的NASM与MASM语法等价对照表,你可以分别查阅二者的官方文档对照语法差异:NASM官方文档中设有专门章节描述和MASM的语法区别,微软官方的MASM文档也有完整的语法说明,你可以按需查询对应语法点的写法即可。
内容的提问来源于stack exchange,提问作者learn123456
相关产品推荐
相关产品推荐

