国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 11105|回復: 6
打印 上一主題 下一主題

對比 armcc 和 arm-elf-gcc 的編譯結果

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2009-7-27 14:40:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關鍵詞: armcc , 編譯 , 結果
本帖最后由 linux_Ultra 于 2009-7-27 14:46 編輯

armcc 和 arm-elf-gcc 那個好些?


都是在win xp 平臺下,
    arm出的編譯器(從 ads1.2 目錄里,弄出來的)---armcc。
    gnu的編譯器--- arm-elf-gcc 。
對比了一下,gnu的編譯器產生的匯編代碼,語法雖然是不同平臺,但比較統一,arm上和x86上都差不多,偽指令基本都一樣,風格也一樣。

  1. 編譯一個 簡單的 c 代碼:
  2. --------------------------------------------------------------------------------------
  3. int a= 123;
  4. int b[] = {1, 2, 3, 4};
  5. char ch[] = "AAAAAA";
  6. int main(void)
  7. {
  8.     int a = 456;
  9.     int b[] = {5, 6, 7, 8};
  10.     char ch[] = "aaaaaa";
  11.    
  12. return 0;
  13. }

  14. --------------------------------------------------------------------------------------

  15. 先在debian5.0上用gcc4.3.2編:
  16. gcc -Wall -S  -O0 1.c -o app_gcc.S
  17. --------------------------------------------------------------------------------------
  18.         .file    "1.c"
  19. .globl a
  20.     .data
  21.     .align 4
  22.     .type    a, @object
  23.     .size    a, 4
  24. a:
  25.     .long    123
  26. .globl b
  27.     .align 4
  28.     .type    b, @object
  29.     .size    b, 16
  30. b:
  31.     .long    1
  32.     .long    2
  33.     .long    3
  34.     .long    4
  35. .globl ch
  36.     .type    ch, @object
  37.     .size    ch, 7
  38. ch:
  39.     .string    "AAAAAA"
  40.     .text
  41. .globl main
  42.     .type    main, @function
  43. main:
  44.     leal    4(%esp), %ecx
  45.     andl    $-16, %esp
  46.     pushl    -4(%ecx)
  47.     pushl    %ebp
  48.     movl    %esp, %ebp
  49.     pushl    %ecx
  50.     subl    $32, %esp
  51.     movl    $456, -8(%ebp)
  52.     movl    $5, -24(%ebp)
  53.     movl    $6, -20(%ebp)
  54.     movl    $7, -16(%ebp)
  55.     movl    $8, -12(%ebp)
  56.     movl    $1633771873, -31(%ebp)
  57.     movw    $24929, -27(%ebp)
  58.     movb    $0, -25(%ebp)
  59.     movl    $0, %eax
  60.     addl    $32, %esp
  61.     popl    %ecx
  62.     popl    %ebp
  63.     leal    -4(%ecx), %esp
  64.     ret
  65.     .size    main, .-main
  66.     .ident    "GCC: (Debian 4.3.2-1.1) 4.3.2"
  67.     .section    .note.GNU-stack,"",@progbits


  68. --------------------------------------------------------------------------------------

  69. 在win xp上用arm-elf-gcc編。
  70. arm-elf-gcc -Wall  -S -O0 1.c -o app_armgcc.s
  71. --------------------------------------------------------------------------------------
  72.         .file    "1.c"
  73.     .global    a
  74.     .data
  75.     .align    2
  76.     .type    a, %object
  77.     .size    a, 4
  78. a:
  79.     .word    123
  80.     .global    b
  81.     .align    2
  82.     .type    b, %object
  83.     .size    b, 16
  84. b:
  85.     .word    1
  86.     .word    2
  87.     .word    3
  88.     .word    4
  89.     .global    ch
  90.     .align    2
  91.     .type    ch, %object
  92.     .size    ch, 7
  93. ch:
  94.     .ascii    "AAAAAA\000"
  95.     .section    .rodata
  96.     .align    2
  97.     .type    C.0.1181, %object
  98.     .size    C.0.1181, 16
  99. C.0.1181:
  100.     .word    5
  101.     .word    6
  102.     .word    7
  103.     .word    8
  104.     .align    2
  105. .LC0:
  106.     .ascii    "aaaaaa\000"
  107.     .text
  108.     .align    2
  109.     .global    main
  110.     .type    main, %function
  111. main:
  112.     @ args = 0, pretend = 0, frame = 28
  113.     @ frame_needed = 1, uses_anonymous_args = 0
  114.     mov    ip, sp
  115.     stmfd    sp!, {fp, ip, lr, pc}
  116.     sub    fp, ip, #4
  117.     sub    sp, sp, #28
  118.     mov    r3, #456
  119.     str    r3, [fp, #-16]
  120.     ldr    r3, .L3
  121.     sub    ip, fp, #32
  122.     ldmia    r3, {r0, r1, r2, r3}
  123.     stmia    ip, {r0, r1, r2, r3}
  124.     ldr    r3, .L3+4
  125.     sub    r2, fp, #39
  126.     mov    ip, #7
  127.     mov    r0, r2
  128.     mov    r1, r3
  129.     mov    r2, ip
  130.     bl    memcpy
  131.     mov    r3, #0
  132.     mov    r0, r3
  133.     sub    sp, fp, #12
  134.     ldmfd    sp, {fp, sp, pc}
  135. .L4:
  136.     .align    2
  137. .L3:
  138.     .word    C.0.1181
  139.     .word    .LC0
  140.     .size    main, .-main
  141.     .ident    "GCC: (GNU) 4.3.2"

  142. --------------------------------------------------------------------------------------

  143. 在win xp上用armcc編。
  144. armcc -S -O0 1.c -o app_armcc.s
  145. --------------------------------------------------------------------------------------
  146. ; generated by ARM C Compiler, ADS1.2 [Build 805]

  147. ; commandline [-O0 -S "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
  148.         CODE32

  149.         AREA ||.text||, CODE, READONLY

  150. main PROC
  151. |L1.0|
  152.         STR      lr,[sp,#-4]!
  153.         SUB      sp,sp,#0x18
  154.         MOV      lr,#0x1c8
  155.         LDR      r1,|L1.60|
  156.         ADD      r0,sp,#8
  157.         LDMIA    r1,{r1-r3,r12}
  158.         STMIA    r0,{r1-r3,r12}
  159.         LDR      r0,|L1.64|
  160.         LDR      r1,[r0,#0]  ; ,
  161.         LDR      r0,[r0,#4]
  162.         STR      r0,[sp,#4]
  163.         STR      r1,[sp,#0]
  164.         MOV      r0,#0
  165.         ADD      sp,sp,#0x18
  166.         LDR      pc,[sp],#4
  167. |L1.60|
  168.         DCD      ||.constdata$1||
  169. |L1.64|
  170.         DCD      ||.constdata$1|| + 16
  171.         ENDP



  172.         AREA ||.data||, DATA, ALIGN=2

  173. ||.data$0||
  174. a
  175.         DCD      0x0000007b
  176. b
  177.         DCD      0x00000001
  178.         DCD      0x00000002
  179.         DCD      0x00000003
  180.         DCD      0x00000004
  181. ||ch||
  182.         DCB      0x41,0x41,0x41,0x41
  183.         DCB      0x41,0x41,0x00
  184.         DCB      0x00


  185.         AREA ||.constdata||, DATA, READONLY, ALIGN=2

  186. ||.constdata$1||
  187.         DCD      0x00000005
  188.         DCD      0x00000006
  189.         DCD      0x00000007
  190.         DCD      0x00000008
  191.         DCB      0x61,0x61,0x61,0x61
  192.         DCB      0x61,0x61,0x00
  193.         DCB      0x00


  194.         EXPORT main
  195.         EXPORT ||ch||
  196.         EXPORT b
  197.         EXPORT a

  198.         IMPORT _main
  199.         IMPORT __main
  200.         IMPORT ||Lib$Request$armlib||, WEAK

  201.         KEEP ||BuildAttributes$ARM_ISAv4$M$PE$A:L22$X:L11$S22$~IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$PRES8||
  202. ||BuildAttributes$ARM_ISAv4$M$PE$A:L22$X:L11$S22$~IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$PRES8|| EQU 0

  203.         ASSERT {ENDIAN} = "little"
  204.         ASSERT {SWST} = {FALSE}
  205.         ASSERT {NOSWST} = {TRUE}
  206.         ASSERT {INTER} = {FALSE}
  207.         ASSERT {ROPI} = {FALSE}
  208.         ASSERT {RWPI} = {FALSE}
  209.         ASSERT {NOT_SHL} = {TRUE}
  210.         ASSERT {FULL_IEEE} = {FALSE}
  211.         ASSERT {SHL1} = {FALSE}
  212.         ASSERT {SHL2} = {FALSE}
  213.         END

  214. --------------------------------------------------------------------------------------
復制代碼
沙發
 樓主| 發表于 2009-7-27 14:53:01 | 只看該作者
為什么armcc編出來的 喜歡用大寫呢?gnu用小寫,可讀性不是高點?
板凳
發表于 2009-7-27 16:25:54 | 只看該作者
unix下的編碼方式都是小寫,簡單不用老是切換
win下的匈牙利命名法太麻煩
地板
 樓主| 發表于 2009-7-28 10:06:12 | 只看該作者
本帖最后由 linux_Ultra 于 2009-7-28 19:54 編輯

在看 《using gas》 時,順便做做實驗對比一下。
bz,我想看看,了解 匯編 方面的原理,你有什么資料推薦的嗎。我找到的只有 using gas ,一本說 匯編器 的書,里邊沒什么講匯編的原理。
地下室
發表于 2009-7-28 11:05:39 | 只看該作者
編譯的原理其實了解就夠了,如果不搞編譯器么必要挖的那么深~
6
發表于 2009-7-28 11:12:15 | 只看該作者
編譯也是很有技術含量的東東~算是不同個一個分支的了吧
如果只做些了解書還是很多的,貌似有本《編譯原理》。很多c語言的書里面也有相應的描述

偶個人建議,能把編譯工具和匯編工具使用好就可以了,需要的時候可以幫助debug就夠了~
7
 樓主| 發表于 2009-7-28 12:23:28 | 只看該作者
本帖最后由 linux_Ultra 于 2009-7-28 12:25 編輯
編譯也是很有技術含量的東東~算是不同個一個分支的了吧
如果只做些了解書還是很多的,貌似有本《編譯原理》。很多c語言的書里面也有相應的描述

偶個人建議,能把編譯工具和匯編工具使用好就可以了,需要的時候可 ...
一朝成名 發表于 2009-7-28 11:12

《編譯原理》?看看。

問題是現在無法了解。
分的清點,把c轉匯編指令叫編譯,匯編代碼 轉 機器碼叫 匯編 吧。我看gas是搞不清 里邊 分了 各種的section,和 table 還 listing 什么的 到底何解。
還有 匯編 語言之所以叫“匯編”,即 assembly -- 到底是什么含義?assemble ,把指令 集合起來的意思?
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: gogogo高清在线观看| 亚洲视频在线免费播放| 日本看片网站| 欧美又大粗又爽又黄大片视频黑人| 色5月婷婷| 一级做a爰性色毛片免费| 怡红院亚洲色图| 高H辣肉办公室| 女性BBWBBWBBWBBW| 亚洲日韩成人| 人人人人凹人人爽人人澡| 日韩欧美三区| 婷婷色婷婷| 中国耄耋老人xxxx| 国厂精品114福利电影| 日韩一区二区三区四区区区| 三毛片| 全国男人的天堂天堂网| 色婷婷久久综合中文久久一本`| 亚洲视频99| 第一福利在线永久视频| 欧美性喷潮xxxx| 欧美精品四虎在线观看| 日韩精品免费| 午夜影院免费观看| 亚洲成年人网址| 国产精品内射久久久久欢欢| 日本50人群体交乱| 欧美一级日韩一级亚洲一级va| 日本爱爱视频网站| 诱惑网综合| 97视频在线观看免费视频| 久久国语精品| 亚洲成人黄色网| 啪啪国产视频| 四虎成人www国产精品| wwwwwwwww日本电影| 欧美乱妇日本无乱码特黄大片| 欧美大陆日韩一区二区三区| 日韩欧美不卡一区二区三区| 日韩美女在线|