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

查看: 11368|回復(fù): 6
打印 上一主題 下一主題

對(duì)比 armcc 和 arm-elf-gcc 的編譯結(jié)果

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2009-7-27 14:40:14 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: armcc , 編譯 , 結(jié)果
本帖最后由 linux_Ultra 于 2009-7-27 14:46 編輯

armcc 和 arm-elf-gcc 那個(gè)好些?


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

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

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

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

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

《編譯原理》?看看。

問題是現(xiàn)在無法了解。
分的清點(diǎn),把c轉(zhuǎn)匯編指令叫編譯,匯編代碼 轉(zhuǎn) 機(jī)器碼叫 匯編 吧。我看gas是搞不清 里邊 分了 各種的section,和 table 還 listing 什么的 到底何解。
還有 匯編 語言之所以叫“匯編”,即 assembly -- 到底是什么含義?assemble ,把指令 集合起來的意思?

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产国产人免费视频成69大陆 | 国产成人久久精品激情91 | 鸥美性生交xxxxx久久久 | 91亚洲精品在看在线观看高清 | 精品国产品香蕉在线观看 | 99免费观看 | 手机看片欧美日韩 | 可以免费在线看黄的网站 | www.日本高清.com| 天天舔天天干天天操 | 四虎国产精品视频免费看 | 最新69国产成人精品视频69 | 亚洲国产精品影院 | 大伊香蕉在线观看视频 wap | 最近中文字幕++中文 | 国产精品久久久久免费 | 国产在线高清不卡免费播放 | 日本大片成人免费播放 | 欧洲色视频 | 日韩精品免费 | 久热久热 | 日韩一区二区三区在线免费观看 | 国产日韩精品一区二区在线观看 | 久久成人永久免费播放 | 午夜片在线 | 日韩成人精品 | 亚洲高清视频在线观看 | 亚洲天堂影院在线观看 | 黄色网站手机在线观看 | 香蕉成人在线 | 91精品国产高清在线入口 | 香蕉在线观看视频 | 我们不能是朋友电视剧免费观看 | 草久久免费视频 | 中文字幕在线一区二区在线 | 国产91单男3p在线观看 | 大香线蕉97久久 | 香蕉网在线视频 | 亚洲最大情网站在线观看 | 中文字幕一区二区区免 | 精品国产三级a在线观看 |