加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

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_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(我期待)字符代码,并触发中断.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读