【嵌入式】嵌入式系統開發與應用第二版課后答案第三章(田澤)


自整理,復習用,考試只考前三章——海底淤泥

一、簡答題

1ARM尋址方式有幾種?舉例說明ARM如何進行不同的尋址方式

  6種

  1.立即尋址:    ADD  R0,R0,#1

  2.寄存器尋址:   ADD  R0,R1,R2,#2

  3.寄存器間接尋址: LDR  R0,[R1]

  4.基址加偏址尋址:    1.前:LDR  R0,[R1,#4]  2自動:LDR  R0,[R1,#4]!  3后:LDR  R0,[R1],#4

  5堆棧尋址:1.STMFD  SP!{R1-R7,LR}  2.LDMFD  SP!{R1-R7,LR}

  6塊拷貝尋址:1.LDMIA  R0!,{R2-R9}  2.STMIA  R1,{R2-R9}

  7相對尋址:MOV  PC,R14

2簡述ARM指令分類以及指令格式形式

  1.數據處理指令  <op>{<cond>}{S}Rd,Rn,#<32位操作數>  <op>{<cond>}{S}Rd,Rn,Rm,{<shift>}

  2.Load/Store指令  LDR|STR{<cond>}{B}{T}Rd,[Rn,<offset>]{!}  LDR|STR{<cond>}{B}{T}Rd,[Rn]<offset>  

            LDR|STR{<cond>}{B}{T}Rd,LABEL

            LDM|STM<cond>}<add mode> Rn{!},<registers>  SWP{<cond>}{B}Rd,Rm,[Rn]

  3.狀態寄存器與通用寄存器之間的傳送指令  MRS{<cond>}Rd,CPSR|SPSR

  4轉移指令  B{L}{<cond>} <target address>

  5異常中斷產生指令  SWI{<cond>} <24位立即數>  BKPT {immed_16}  CLZ{cond} Rd,Rm

  6協處理器指令 CDP{<cond>} <CP#>,<Copl>,CRd,CRn,CRm{,<Cop2>}

3假設SP的內容為0x8000,寄存器R1、R2的內容分別為0x01與0x10,存儲器內容為空,執行下述指令后,說明PC如何變化。存儲器以及寄存器內容如何變化。

  STMFD  sp!,{R1,R2}  0x8000<-0x10  0x7996<-0x10  sp=0x7996

  LDMFD  sp!,{R1,R2}  r1<-[0x8000]  r2<-[0x7996]  sp=0x7996

4試比較ARM指令集與Thumb指令集的異同,並簡述各自的特點

  ARM指令是31位二進制編碼

  Thumb指令是16位二進制編碼

  支持Thumb指令的ARM微處理器都可以執行ARM指令

5簡述Load指令與Store指令的功能

  Load  寫

  Store  讀

6ARM處理器如何進入和退出Thumb指令模式

  進入:1.BX R0  R0最低位置1  2.利用異常進入

  退出:2.BX R0  R0最低位置0  2.利用異常退出

7簡述ARM協處理器指令的分類

  1.用於ARM處理器的初始化ARM協處理器的數據操作指令

  2.用於ARM處理器的寄存器和ARM協處理器之間的數據傳送指令

  3.用於ARM協處理器的寄存器和內存單元之間的傳送數據

8簡述ARM匯編語言中的偽操作、宏指令和偽指令的含義,偽操作和偽指令都分為哪幾類?

  偽操作:特殊指令助記符號

  宏指令:一段獨立的程序代碼,可以插入源程序

  偽指令:特殊指令助記符號

  偽操作:

    1符號定義  2數據定義  3匯編控制

    4框架描述  5信息報告  6其他

  偽指令:

    ADR、ADRL、LDR、NOP

9如何在匯編語言中定義和使用宏

  使用#define

10ARM指令與Thumb指令有何異同

  ARM指令是32位二進制編碼

  Thumb指令是16位二進制編碼

11簡述IRQ和FIQ異常中斷處理程序中所使用的的__irq的作用

  在程序內部增加中斷保護的代碼

12簡述#include<頭文件.h>與#inlcude“頭文件.h”的區別

  <>標准頭文件

  “”自定義頭文件

 13簡述局部變量和全局變量的區別

  局部變量作用域在局部范圍

  全局變量作用域在全局范圍

14函數的存儲類說明符有幾種?各自的作用是什么?

  static:表示本文件定義前和非本文件定義的文件中,該函數不能被調用

  extern:表示該函數是全程序可見的

15變量的存儲類型是有幾種?各自的作用是什么?

  auto——自帶存儲類型——局部

  register——寄存器存儲類型——寄存器提高速度

  entern——外部存儲類型——全局

  static——靜態存儲類型

16變量在內存中存儲方式有幾種?分別是什么?

  字符,整形,浮點數

17函數的參數傳遞方式有幾種?分別是什么?

  1.參數個數固定的子程序傳遞參數——使用R0,R1,R2,R3

  2.參數個數可變的子程序傳遞參數——使用R0,R1,R2,R3和數據棧,多於4個之后的參數倒序入棧

18簡述字符串與字符數組的存儲區別

  字符串在最后一位有‘\0’

19修飾符const、volatile、near、far的作用是什么?用在什么地方?

  const——常量修飾符

  volatile——易失性修飾符

  near,far——遠近修飾符

20定義指針變量是如果不進行初始化,可能出現什么問題?

  出現野指針異常

21簡述const int *  和 int * const

  const int *   說明指針指向對象是常量,是常量指針

   int * const  說明指針本身是常量,是指針常量
  const int * const  常量指針常量指向常量

22 char a,int b,shot c ,int d,與char a, shot c,int b,int d各自占用的存儲空間有何區別?

    char a,int b,shot c ,int d  占4個字

    char a, shot c,int b,int d  占3個字

23ATPCS包括哪些規則?分別是什么?

  1.寄存器使用規則

  2.數據棧使用規則

24如何使用內嵌匯編編程?使用內嵌匯編時需要注意什么?

__asm("指令");
__asm{
  "指令"
  "指令"
  ...
}

  注意__asm是兩個_

25如何在ADS開發環境下使用malloc和free?使用 時需要注意什么?

  內存單元分配通過C語言完成

26簡述結構類型與聯合類型的異同。

  結構:每個變量都有獨立空間

  聯合:所有變量共享一份空間

  都可以儲存不同類型變量

27結構類型中存取成員有幾種方法?簡述他們的區別。

  結構名.變量名

  結構指針名->變量名

28ARM嵌入式軟件設計中,如何在匯編程序中實現子程序調用?

  使用IMPORT來聲明C程序   import f

  通過BL來調用子程序      bl  f

二、程序設計題

1完成下面操作后,R0的內容是什么?

  mov  R1,#5

  add  R0,R1,LSL #3

2請將下面C語言代碼轉換成匯編語言。

  if(a==0||b==1)

  c=d+e

3編寫一段程序實現在C語言中調用匯編語言程序,實現將1KB大小的內存塊以字的形式復制到另一內存地址

4編寫一段匯編語言程序,用內嵌匯編指令實現中斷的使能和禁止

5編寫一段匯編語言程序,實現從ARM到Thumb的轉換

6編寫一段匯編語言程序,實現從Thumb到ARM的轉換

7編寫一段程序,實現匯編語言程序中訪問C語言程序中的變量

8編寫一段程序,利用跳轉表實現程序跳轉

9編寫以字節為單位的的字符串拷貝子程序,要求從存儲器某處拷貝到另一處。源字符串的起始地址放入R1,長度(以字節為單位)放入R2,目的字符串的起始地址放入R3

10編寫一段C語言與匯編語言的混合編程代碼,在C語言中調用匯編語言代碼,完成字符串str1和str2內容的互換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM