日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]首先編輯一個最簡單的函數(shù),包含變量分配及初始化:test1.c1. #include2.3. void main()4. {5. int d = 4;6. }然后編譯:arm-linux-gnueabihf-gcc test.c -o test1 然后看看

首先編輯一個最簡單的函數(shù),包含變量分配及初始化:test1.c

1. #include

2.

3. void main()

4. {

5. int d = 4;

6. }

然后編譯:arm-linux-gnueabihf-gcc test.c -o test1

 

然后看看匯編代碼:arm-linux-gnueabihf-objdump -D test1;每一句的含義我已經(jīng)給出詳細注釋。

首先對輸出的文件格式說明,對于如下的輸出,左邊是程序地址(各種函數(shù)地址等等),第二列是指令碼的十六進制表示也俗稱機器碼,剩下的就是給人類看的指令助記符號,舉例舉例:

835c: b480 push {r7}

這里,835c是main函數(shù)的地址,b480是機器碼表示的指令,push {r7}就是給我們?nèi)祟惪吹牧恕O旅婵磘est1的輸出:

0000835c

:

程序用到了r7寄存器,所以需要保護以免破壞之前的數(shù)據(jù)

1 835c: b480 push {r7}

堆棧向下增長棧用的不多,只需要12個字節(jié)就夠用了: int d需要4個,多出來的8個沒有使用

2 835e: b083 sub sp, #12

因為r0-r7是通用寄存器,可以使勁用,堆棧寄存器sp只有沒辦法的時候才使用。只好用r7 = sp + 0這種笨辦法

3 8360: af00 add r7, sp, #0

參與int d = 4這條語句的是r3,這是通用寄存器,spec定義大家都可以用,不需要保護

4 8362: f04f 0304 mov.w r3, #4

把4存儲到sp+4所指定的棧里,c語言描述:*(sp + 4) = 4;留給大家思考:為何不頂著sp放置--即*(sp+0)=4?

5 8366: 607b str r3, [r7, #4]

還記得第二條:sub sp, #12嗎?此句和下一句是為從堆棧里恢復原來的r7--pop {r7},做準備;

6 8368: f107 070c add.w r7, r7, #12

r7已經(jīng)是原來的sp了

7 836c: 46bd mov sp, r7

彈出sp指向的內(nèi)存數(shù)據(jù)給r7,c語言:r7 = *sp;

8 836e: bc80 pop {r7}

沒有調(diào)用子函數(shù),即沒有使用lr寄存器,所以不需要push lr。跳轉(zhuǎn)到lr地址--進入main函數(shù)的下一條地址

9 8370: 4770 bx lr 10 8372: bf00 nop

我們再編輯一個稍微增加一個變量:test2.c

[cpp] view plain copy

1. #include

2.

3. void main()

4. {

5. int d = 4;

6. char b = 2;

7. }

0000835c

:

1 835c: b480 push {r7}2 835e: b083 sub sp, #123 8360: af00 add r7, sp, #0

4 8362: f04f 0304 mov.w r3, #4

把4存儲到sp+0所指定的棧里,c語言描述:*(sp + 0) = 4,注意與上一個例子的區(qū)別,這里是頂著stack存放,為什么?

5 8366: 603b str r3, [r7, #0]

6 8368: f04f 0302 mov.w r3, #2

為何要這么任性的存放變量b?

7 836c: 71fb strb r3, [r7, #7] 8 836e: f107 070c add.w r7, r7, #129 8372: 46bd mov sp, r710 8374: bc80 pop {r7}11 8376: 4770 bx lr

棧里的數(shù)據(jù)是這樣的,b和d中間隔著好幾條街呢:)

 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉