Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • arm 汇编一些疑问

    post by onelong / 2012-12-15 6:26 Saturday [C++]

    c++代码如下

    int main()

    {

        int * i = new int();

    }

    编译工具 arm-linux-gcc 4.4.3

    看如下汇编之前,先看看如下两篇文章吧,可以更容易理解如下的汇编

    http://general.blog.51cto.com/927298/657803

    http://blog.chinaunix.net/uid-25871104-id-2938389.html

    编译之后的汇编

     

    .arch armv4t

    .fpu softvfp

    .eabi_attribute 20, 1

    .eabi_attribute 21, 1

    .eabi_attribute 23, 3

    .eabi_attribute 24, 1

    .eabi_attribute 25, 1

    .eabi_attribute 26, 2

    .eabi_attribute 30, 6

    .eabi_attribute 18, 4

    .file "ht.cpp"

    .text

    .align 2

    .global main

    .type main, %function

    main:

    .fnstart

    .LFB0:

    @ Function supports interworking.

    @ args = 0, pretend = 0, frame = 8

    @ frame_needed = 1, uses_anonymous_args = 0

    stmfd sp!, {fp, lr} //保护现场

    .save {fp, lr}

    .LCFI0:

    .setfp fp, sp, #4

    add fp, sp, #4 //sp+4存放 fp,即原来的sp-4,应该没错吧

    .LCFI1:

    .pad #8

    sub sp, sp, #8 //分配8b内存

    .LCFI2:

    mov r0, #4

    bl _Znwj //应该是分配内存

    mov r3, r0 //函数返回,应该是一个地址吧

    mov r2, r3 //为什么还要这样?

    mov r1, #0 //默认初始化为 0

    str r1, [r2, #0] //直接str r1 [r0,#0]有问题?或str r1 [r3,#0]

    str r3, [fp, #-8]//函数返回的指针放[fp, #-8],那么[fp, #-4]到底干嘛用去了呢?

    mov r3, #0

    mov r0, r3 //返回值 干嘛不mov r0 #0,是不是罗嗦呢?

    sub sp, fp, #4 //恢复sp

    ldmfd sp!, {fp, lr}//恢复现场

    bx lr //返回

    .LFE0:

    .fnend

    .size main, .-main

    .ident "GCC: (ctng-1.6.1) 4.4.3"

    .section .note.GNU-stack,"",%progbits

     

    在汇编中看到很多很罗嗦的东西!至少我是觉得很罗嗦,或者是我是一个初学者吧,理解不够深入吧!有不对的地方,希望高手指正吧。。。

    最后送上一些资料 http://www.softwarehistory.net/h/EmbeddedSystem_Chen/1.php

    标签: c c++ arm 汇编
    引用地址:
     

    我要评论