Linux中在哪里编写汇编程序,Linux下使用汇编语言编写Hello,world!

首先在编译器编写Hello,world!

[section .data] ; // 数据在此

strHello db "Hello,world!", 0Ah

STRLEN equ $ - strHello

[section .text] ; // 代码在此

global _start ; // 我们必须导出 _start这个入口,以便让链接器识别

_start:

mov edx, STRLEN

mov ecx, strHello

mov ebx, 1

mov eax, 4 ; sys_write

int 0x80 ; 系统调用

mov ebx, 0

mov eax, 1 ; sys_exit

int 0x80 ; 系统调用

接下来,让我们在终端下使用命令行来进行编译,编译链接(每执行一步都用ls命令查看文件的增加情况):

~$ ls

hello.asm

~$ nasm -f elf hello.asm -o hello.o 或者 nasm -f elf64 hello.asm

~$ ls

hello.asm hello.o

~$ ld -s -o hello.o -o hello

~$ ls

hello hello.asm hello.o

NASM的选项"-f elf"指定了输出文件的格式位ELF格式。

链接选项“-s” 意味strip,可以去掉符号表等内容,可起到对生成的可执行代码减肥之功效。

执行:

~$ ./hello

Hello,world!

成功!怎么样?很简单不是吗?

我们回头看看代码,程序中定义了两个节(Section),一个放数据,一个放代码。在代码中值得注意的一点是,入口点默认是“_start”,我们不但要定义它。至于要通过global这个关键字将它导出,这样链接程序才能找到它。至于代码本身,你只需要知道它们是两个系统调用(如果你只接触过Windows变成,那么可认为系统调用相当于Windows编程中的API),用来显示字符串并退出就够了。至于为什么这么做倒不用深究,因为在我们自己的OS中根本用不到Linux的系统调用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值