zoukankan      html  css  js  c++  java
  • Hello World——Linux汇编

    采用AT&T语法。

    32位: 

     1 .section .text
     
    2
    .global _start
     
    3

     
    4 msg:
     
    5     .ascii "Hello World!/n"
     
    6 msg_end:
     
    7     .equ len, msg_end - msg
     
    8     .equ SYS_write, 4

     
    9     .equ SYS_exit, 1
    10
    11 _start:
    12
    13     mov $SYS_write, %eax    # system call number
    14     mov $1, %ebx            # file descriptor (stdout)
    15     mov
    $msg, %ecx          # message to write
    16     mov
    $len, %edx          # message length.
    17     int $0x80               # system call

    18
    19     mov $SYS_exit, %eax     # system call number
    20     mov $0, %ebx            # exit (0
    )
    21     int $0x80               # system call


    64位:

     1 .section .text
     
    2
    .global _start
     
    3

     
    4 msg:
     
    5     .ascii "Hello World!/n"
     
    6 msg_end:
     
    7     .equ len, msg_end - msg
     
    8     .equ SYS_write, 1

     
    9     .equ SYS_exit, 60
    10
    11 _start:
    12
    13     mov $SYS_write, %rax    # system call number
    14     mov $1, %rdi            # file descriptor (stdout)
    15     mov
    $msg, %rsi          # message to write
    16     mov
    $len, %rdx          # message length.
    17     syscall                 # previous 'int $0x80' in
    i386
    18

    19     mov $SYS_exit, %rax     # system call number
    20     mov $0, %rdi            # exit (0
    )
    21     syscall                 # previous 'int $0x80' in i386

    编译命令一样:(假设汇编源文件名为:hello.s)

    $ as hello.s -o hello.o

    $ ld hello.o -o hello

    主要区别:

    (1)系统调用号不同了,比如sys_write在i368中是4,x86-64中是1;sys_exit在i386中是1,而x86_64中是60;
    (2)系统调用所使用的6个参数寄存器也变了,i386中分别是ebx/ecx/edx/esi/edi/ebp,x86_64中则使用rdi/rsi/rdx/r10/r8/r9,显然不只是“e”改成“r”那么简单;
    (3)执行系统调用的指令,i386中使用“int 80”,而x86-64中使用“syscall”。


  • 相关阅读:
    Mybatis <set>标签
    Mybatis <where>标签
    Mybatis choose (when, otherwise)标签
    Mybatis <if>标签
    Mybatis <Sql>标签
    Mybatis配置详解
    [转]在浏览器的标签页显示网站标志图标(或指定图标)的方法
    【转】如何建立一个样式新颖的CSS3搜索框
    【转】css布局居中和CSS内容居中区别和对应DIV CSS代码
    作业:按钮控制打开关闭新窗口及新窗口按钮关闭父窗口
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124606.html
Copyright © 2011-2022 走看看