gpt4 book ai didi

linux - "Hello World"函数不使用 C printf

转载 作者:IT王子 更新时间:2023-10-29 01:15:05 27 4
gpt4 key购买 nike

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

我想将这些东西包装在一个汇编函数中。网络上的所有(或大部分)示例都使用 extern 并调用 Cprintf 函数(参见下面的代码)- 我不想要那个。我想学习在不使用 C printf(甚至其他外部函数调用)的情况下在汇编中创建一个“Hello World”函数。

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(我期望的)字符码,触发中断。

关于linux - "Hello World"函数不使用 C printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com