色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    9088

    瀏覽量

    367405
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120250
  • 指令集
    +關注

    關注

    0

    文章

    223

    瀏覽量

    23379

原文標題:從最簡單的例子,帶你輕松學習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.8w次閱讀
    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 ?7135次閱讀

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

    ARM處理器是基于精簡指令集計算機(RISC原理設計的,指令集和相關嶧碼機制較為簡單ARM7TDM(S)具有32位
    發表于 11-24 17:24 ?33次下載
    <b class='flag-5'>ARM</b>處理器的尋址方式和<b class='flag-5'>指令集</b>介紹
    主站蜘蛛池模板: 视频成人永久免费看| 最近中文字幕MV高清在线| CHRISTMAS农村夫妻HO| 国产又黄又粗又爽又色的视频软件 | 小雪奶水涨翁工帮吸的推荐语录| 56prom在线精品国产| 花蝴蝶hd免费| 天天躁夜夜踩很很踩2022 | 翁熄性放纵交换300章| 99久久免费热在线精品| 狠很橹快播| 忘忧草研究院一二三| 边摸边吃奶玩乳尖视频| 老司机福利在 线影院| 亚洲国产综合人成综合网站00| 超碰caoporon最新视频| 蜜桃臀无码内射一区二区三区| 亚洲熟女丰满多毛XXXXX| 高傲教师麻麻被同学调教123| 免费特黄一区二区三区视频一| 一区二区乱子伦在线播放| 国产亚洲精品久久孕妇呦呦你懂| 日美一级毛片| www国产av偷拍在线播放| 末成年美女黄网站色大片连接| 亚洲综合AV色婷婷五月蜜臀| 国产人妻午夜无码AV天堂| 少妇高潮久久久久7777| 菠萝菠萝蜜视频在线看1| 免费国产成人高清在线看软件 | 狂躁美女BBBBBB视频| 亚洲永久精品AV在线观看| 国产一区内射最近更新| 偷拍 自怕 亚洲 在线| 国产AV无码一二三区视频| 日日夜夜天天操| 成人在线高清不卡免费视频| 欧美亚洲韩日午夜| xnxx高中生| 日本不卡免免费观看| 超碰免费碰免费视频|