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

什么都不说了,先上代码(有 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!

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值