linux 汇编语言 ide,Linux 汇编语言 HelloWorld

这篇博客介绍了如何在Linux环境下使用NASM汇编器编写一个简单的‘Hello, World!’程序。作者首先展示了源代码,然后详细说明了安装NASM的步骤,以及在64位系统下解决32位代码编译问题的方法,包括使用`ld`命令的`-m`参数。最终,成功运行程序并在屏幕上显示了预期的输出。
摘要由CSDN通过智能技术生成

什么都不说了,先上代码(有 AT&T 和 Intel 两种格式,我还是习惯用后者):

; hello.asm

section .data ; 数据段声明

msg db "Hello, world!", 0xA ; 要输出的字符串

len equ $ - msg ; 字串长度

section .text ; 代码段声明

global _start ; 指定入口函数

_start: ; 在屏幕上显示一个字符串

mov edx, len ; 参数三:字符串长度

mov ecx, msg ; 参数二:要显示的字符串

mov ebx, 1 ; 参数一:文件描述符(stdout)

mov eax, 4 ; 系统调用号(sys_write)

int 0x80 ; 调用内核功能

; 退出程序

mov ebx, 0 ; 参数一:退出代码

mov eax, 1 ; 系统调用号(sys_exit)

int 0x80 ; 调用内核功能

然后是工具:

因为用的是Intel的格式,需要安装nasm。

$ sudo apt install nasm

然后是编译:

nasm -f elf helloworld.asm

连接时遇到一个问题,当前操作系统是64位的,而我写的是32位的代码:

$ ld -s -o hello helloworld.o

ld: i386 architecture of input file `helloworld.o' is incompatible with i386:x86-64 output

所以要加-m参数:

$ ld --help

...

-m EMULATION Set emulation

...

ld: supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu i386linux elf_l1om elf_k1om i386pep i386pe

...

最后,“Hello,world!”终于出现在屏幕上:

$ ld -s -melf_i386 -o hello helloworld.o

$ ./hello

Hello, world!

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值