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”。


  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124606.html
Copyright © 2011-2022 走看看