二十余年过去了,课堂上学了又好像没学的汇编,昨今两日撞上了又试了试,教程上推荐linux环境安装nasm,简单试了试输出hi语句
(开始sasm图形界面编译不了,需执行sudo apt install libc6-dev),
终端编译语句记录如下:
nasm -f elf64 -g -F dwarf a.asm
ld -o a a.o
又琢磨win平台上怎么也得转一圈,安装试很顺利的,
nasm和sasm摸着鱼就装上了,测试语句却遇到问题,屡屡报错。记录如下:
1.输出win32和win64的汇编语句竟然有差异,比如
extern _printf
global _main ;可以在win32通过,win64过不了。
_main:
push msg
call _printf
add esp, 4
ret
;...................................................
extern puts
global main ; 可以在win64通过,win32过不了。
main:
sub rsp,20h
mov rcx,msg
call puts
add rsp,20h
ret
入场即入坑,转转也恍然。
2.mingw32和mingw64的gcc需分别匹配win32和win64编译产生的obj文件
cmd编译语句记录如下:
nasm -f win64 a.asm 或 nasm -f win32 a04.asm
gcc a.o -o a.exe