码迷,mamicode.com
首页 > 其他好文 > 详细

hello world

时间:2015-06-30 23:45:51      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:


来个汇编版的hello world

.section .data
hello:
    .ascii "hello world\n"
    hello_len = . - hello

.section .text

.global _start

_start:

    movl $4, %eax                #write
    movl $1, %ebx                #write(1, )
    movl $hello, %ecx            #write(1, hello, )
    movl $hello_len, %edx        #write(1, hello, hello_len)

    int $0x80

    movl    $1, %eax
    movl    $0, %ebx
    int $0x80

如何编译

gcc -c my_write.s && ld my_write.o && ./a.out


在汇编语言中,任何一小数点(.)开始的指令都不会被直接翻译成机器指令,这些针对汇编程序本身的指令,实际上并不会由计算机运行。

.section .data命令是数据段的开始,数据段中要列出程序数据所需的所有内存空间。

.section .text命令是文本段的开始,文本段是存放程序指令的部分。

_start 是一个符号,这说明它将在汇编或链接过程中被其他内容替换。符号一般用来标记程序或数据的位置。 .global表示汇编程序不应该在汇编之后废弃此符号,因为链接器需要它。_start 是个特殊符号,总是用.global来标记,因为它标记了该程序的开始位置。

_start:

定义_start的值。

movl $4, %eax

4是write 的系统编号

同等的c语言实现:

#include <unistd.h>
#include <stdlib.h>

#define HELLO "hello world\n"

int main() {
    write(1, HELLO, sizeof(HELLO) - 1); 
    exit(0);
}


hello world

标签:

原文地址:http://my.oschina.net/guonaihong/blog/472687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!