linux – “Hello World”函数,不使用C printf
发布时间:2020-12-13 23:10:24 所属栏目:Linux 来源:网络整理
导读:UPDATED 这是我与NASM合作的第二天.彻底了解了这一点 section .programFlow global _start _start: mov edx,len mov ecx,msg mov ebx,0x1 ;select STDOUT stream mov eax,0x4 ;select SYS_WRITE call int 0x80 ;invoke SYS_WRITE mov ebx,0x0 ;select EXIT_C
这是我与NASM合作的第二天.彻底了解了这一点 section .programFlow global _start _start: mov edx,len mov ecx,msg mov ebx,0x1 ;select STDOUT stream mov eax,0x4 ;select SYS_WRITE call int 0x80 ;invoke SYS_WRITE mov ebx,0x0 ;select EXIT_CODE_0 mov eax,0x1 ;select SYS_EXIT call int 0x80 ;invoke SYS_EXIT section .programData msg: db "Hello World!",0xa len: equ $- msg 我想把这些东西包装在一个汇编函数中. Web上的所有(或大多数)示例都使用extern并调用C的printf函数(参见下面的代码) – 我不希望这样.我想学习在汇编中创建一个“Hello World”函数,而不使用C printf(甚至其他外部函数调用). global _main extern _printf section .text _main: push message call _printf add esp,4 ret section .data message: db "Hello,World",10,0 更新 我正在为Linux练习程序集,但由于我没有Linux机器,因此我在compile_assembly_online运行汇编代码. 解决方法
假设您的意思是在Windows命令提示符环境中,写入标准输出:
由于那些提供了旧DOS环境的虚拟化版本,我相信你可以使用旧的DOS中断: int 21,function 9可以输出一个字符串:将AH设置为9,将DS:DX设置为以$结尾的字符串,并触发中断. int 21,function 2可以输出单个字符,因此如果需要输出$(或者你不想要Ctrl C和这样的检查),你可以重复使用它. AH到2,DL到ASCII(我期待)字符代码,并触发中断. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |