在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從最簡單的例子,帶你輕松學習ARM指令集

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:龔婷 ? 2018-03-14 10:36 ? 次閱讀

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

1.#include

2.

3.voidmain()

4.{

5.intd=4;

6.}

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

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

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

835c: b480 push {r7}

這里,835c是main函數的地址,b480是機器碼表示的指令,push {r7}就是給我們人類看的了。下面看test1的輸出:

0000835c

:

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

1 835c: b480 push {r7}

堆棧向下增長棧用的不多,只需要12個字節就夠用了: 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已經是原來的sp了

7 836c: 46bd mov sp, r7

彈出sp指向的內存數據給r7,c語言:r7 = *sp;

8 836e: bc80 pop {r7}

沒有調用子函數,即沒有使用lr寄存器,所以不需要push lr。跳轉到lr地址--進入main函數的下一條地址

9 8370: 4770 bx lr 10 8372: bf00 nop

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

[cpp]view plaincopy

1.#include

2.

3.voidmain()

4.{

5.intd=4;

6.charb=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,注意與上一個例子的區別,這里是頂著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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9273

    瀏覽量

    373791
  • 寄存器
    +關注

    關注

    31

    文章

    5402

    瀏覽量

    122876
  • 指令集
    +關注

    關注

    0

    文章

    228

    瀏覽量

    23670

原文標題:從最簡單的例子,帶你輕松學習ARM 指令集

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    常用ARM指令集及匯編

    常用ARM指令集及匯編ARM處理器是基于精簡指令集計算機(RISC)原理設計的,指令集和相關譯碼機制較為
    發表于 11-23 09:38

    簡單介紹ARM指令集

    處理器架構是處理器廠商為同一個系列的處理器規定的一個規范。ARM架構是一種精簡指令集(RISC)架構,具有以下RISC架構特點:較大的通用寄存器堆。load/store體系結構,其中數據處理操作僅對
    發表于 08-18 10:58

    ARM指令集文章集合

    三、指令集如果你想要集中學習一下關于ARM指令集方面的知識(比如下面幾個知識點),可以看下下面的文章1、機器碼2、運算指令3、控制
    發表于 09-07 22:06

    ARM指令集的特點有哪些呢

    1、ARM指令集ARM指令集格式ARM指令集ARM
    發表于 12-14 07:24

    常用ARM指令集與匯編

    常用ARM指令集與匯編 好資料,與你供享。只供學習
    發表于 03-25 16:34 ?74次下載

    ARM指令集下載 arm指令集參考手冊

    ARM指令集下載 arm指令集參考手冊, ARM 指令集 寄存器和處理器模式(26-bi
    發表于 12-25 09:20 ?118次下載

    常用arm指令集及匯編

    常用arm指令集及匯編
    發表于 09-09 14:22 ?34次下載
    常用<b class='flag-5'>arm</b><b class='flag-5'>指令集</b>及匯編

    arm指令集(1)

    arm指令集(1)  ARM跳轉指令可以當前指令向前或向后的32MB地址空間跳轉。這類跳轉
    發表于 03-02 15:46 ?79次下載

    ARM指令集詳解

    ARM指令集詳解 內容提要 ARM指令集 ARM指令集分類與
    發表于 03-09 09:39 ?263次下載
    <b class='flag-5'>ARM</b><b class='flag-5'>指令集</b>詳解

    arm7指令集

    1.ARM處理器尋址方式        ARM處理器是基于精簡指令集計算機(RISC)原理設計的,指令集和相關譯碼
    發表于 10-23 11:07 ?163次下載
    <b class='flag-5'>arm</b>7<b class='flag-5'>指令集</b>

    ARM指令集介紹

    arm開發板 嵌入式開發 指令集 PDF文檔。
    發表于 05-03 16:42 ?5次下載

    常用的ARM指令集及匯編

    常用的ARM指令集及匯編
    發表于 10-30 10:07 ?24次下載
    常用的<b class='flag-5'>ARM</b><b class='flag-5'>指令集</b>及匯編

    thumb指令集是什么_thumb指令集arm指令集的區別

    thumb指令集arm指令集的一個子集,是針對代碼密度問題而提出的,它具有16位的代碼寬度。與等價的32位代碼相比較,thumb指令集在保留32位代碼優勢的同時,大大的節省了系統的存
    發表于 11-03 17:34 ?1.9w次閱讀
    thumb<b class='flag-5'>指令集</b>是什么_thumb<b class='flag-5'>指令集</b>與<b class='flag-5'>arm</b><b class='flag-5'>指令集</b>的區別

    ARM架構及ARM指令集 Thumb指令集你了解多少?

    ARM架構及ARM指令集、Thumb指令集你了解多少?
    的頭像 發表于 02-26 16:09 ?7450次閱讀

    ARM處理器的尋址方式和指令集介紹

    ARM處理器是基于精簡指令集計算機(RISC原理設計的,指令集和相關嶧碼機制較為簡單ARM7TDM(S)具有32位
    發表于 11-24 17:24 ?33次下載
    <b class='flag-5'>ARM</b>處理器的尋址方式和<b class='flag-5'>指令集</b>介紹
    主站蜘蛛池模板: 黄色网址视频在线播放 | 欧美婷婷六月丁香综合色 | 在线www 天堂网在线 | 成人av在线电影 | 成人欧美一区二区三区黑人3p | 午夜国产在线观看 | 色视频在线观看 | 性色网站| 美女三级在线 | 男人操女人视频网站 | 好紧好爽水真多18 | 四虎国产在线观看 | 天天操夜夜操狠狠操 | 高颜值露脸极品在线播放 | 久久天天躁狠狠躁夜夜爽蜜月 | 免费国产小视频 | 色婷婷亚洲精品综合影院 | 国产精品嫩草影院一二三区入口 | 欧美xxxxxxxxx | 最近的中文字幕免费动漫视频 | 天堂网在线免费 | 萝l在线精品社区资源 | 视频一区二区在线播放 | 2021久久天天躁狠狠躁夜夜 | 香蕉色综合 | 26uuu欧美性色 | 午夜免费啪在线观看视频网站 | 免费大片黄在线观看日本 | 一卡二卡≡卡四卡亚洲高清 | 免费一级成人毛片 | 奇米888在线看奇米999 | 欧美一级精品高清在线观看 | 足控免费视频xxav | 国产成人乱码一区二区三区 | 天天干天天夜 | 欧美性色黄大片四虎影视 | 月夜免费观看高清在线完整 | 在线观看jyzzjyzz | 夜夜爽夜夜爽 | 久久精品视频免费观看 | 97超频国产在线公开免费视频 |