ARM嵌入式体系结构与接口技术(Cortex-A9版)-习题答案

更新时间:2023-07-14 03:57:27 阅读: 评论:0

第一章
1.简述ARM可以工作的几种模式。
    答:ARMv7-A架构处理器共有8种工作模式,即用户模式(Ur)、快速中断模式(FIQ)、外部中断模式(IRQ)、特权模式(Supervisor)、数据访问中止模式(Abort)、未定义指令中止模式(Undef)、系统模式(System)、监控模式(Monitor)
2.ARM 核有多少个寄存器?
    答:ARM处理器有40个32位长的寄存器
守望先锋和尚
3.什么寄存器用于存储PC和LR寄存器?
    答:R15和R14寄存器
4.R13通常用来存储什么?
    答:R13通常用来存储堆栈指针
5.哪种模式使用的寄存器最少?
    答:用户模式(Ur)和系统模式(System),因为这两种模式下没有SPSR寄存器
6.CPSR 的哪一位反映了处理器的状态?
    答:T位是处理器的状态控制位
第二章
1.熟悉 Eclip 开发环境。
    答:略,参照第2.3节
2.新建一个工程,编写一个汇编程序实现3+13=16的操作。
    答:略,参照第2.6节
第三章
1.用 ARM 汇编实现下面列出的操作。
R0=15 
R0=R1/16(有符号数)
R1=R2*3
R0=R0
答:R0=15    --  MOV R0,#15
    R0=R1/16  --  MOV R0,R1,ASR #4
                  BIC R0, R0, #0x78000000
        R1=R2*3  --  MOV R3, #3
MUL R1,R2,R3
        R0=R0      --  MOV R1, #-1
                      MOV R2, R0
MUL R0,R1,R2
2.BIC 指令的作用是什么?
    答:将一个寄存器中的某一位或者某几位清零
3.执行 SWI 指令时会发生什么情况?
    答:执行SWI指令时ARM处理器会自动将CPSR拷贝到SVC模式下的SPSR,然后修改CPSR寄存器的T位使处理器进入ARM状态,修改CPSR寄存器的低五位模式位使处理器进入SVC模式,修改CPSR寄存器的I位禁止IRQ中断,保存当前SWI指令下一条指令的地址到SVC模式下的LR寄存器,然后PC的值改为异常向量表中偏移地址为0x08的地址。
4.B、BL、BX 指令的区别有哪些?
答:B与BL都可以使程序跳转到指定的地址(label)处执行程序
B  跳转指令              pc←label
BL  带返回的连接跳转   pc←label,同时将BL下一条指令地址保存到LR
BX使程序跳转到指令中<Rm>指定的地址执行程序,并将<Rm>的第0位复制到CPSR中T位,BX  <Rm>
BX  跳转并切换状态      pc←Rm&0xfffffffe,T←Rm[0]
5.下面哪个数据可以作为数据操作指令的有效立即数?
0x101  0x1f8  0xf000000f  0x08000012  0x104
答:0x1f80xf000000f0x104
6.ARM 在哪些工作模式下可以修改 CPSR 寄存器?
烧心吃什么    答:特权模式下才能修改CPSR寄存器,即快速中断模式(FIQ)、外部中断模式(IRQ)、特权模式(Supervisor)、数据访问中止模式(Abort)、未定义指令中止模式(Undef)、系统模式(System)、(Cortex-A系列)监控模式(Monitor)
7.写一个程序,如果 R0 的值大于 0x50,则将 R1 的值减去 0x10,并把结果送给 R0。
    答:CMP R0, #0x50
        SUBGT R0,R1,#0x10
8.编写一段 ARM 汇编程序,实现数据块复制,将 R0 指向的 8 个字的连续数据保存到 R1 指向的一段连续的内存单元中。
    答:
        LDMIA R0!,{R2-R9}
        STMIA R1!,{R2-R9}
第四章
1.在 ARM 汇编中如何定义一个全局的数字变量?
    答:使用.global伪操作
        语法格式:.global  全局变量名  并且被初始化为0
2.ADR 和 LDR 的用法有什么区别?
答:ADR 伪指令的功能是把标签所在的地址加载到寄存器中
LDR伪指令用于装载一个32位的常数或地址到寄存器中
3.AAPCS 中规定的 ARM 寄存器的使用规则是什么?
答:AAPCS 中定义了 ARM 寄存器使用规则如下。
(1)在进行子函数调用时,当子函数中有参数时,子程序间通过寄存器 R0、R1、
R2、R3 来传递参数,如果参数多于 4 个,则多出的部分用堆栈传递,被调用的子程序在返回前无须恢复寄存器 R0~R3 的内容。
(2)在子程序中,使用寄存器 R4~R11 来保存局部变量。如果在子程序中使用到了 R4~R11 中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在 Thumb 程序中,通常只能使用寄存器R4~R7 来保存局部变量。
柳如是诗词(3)寄存器 R12 用作子程序间 scratch 寄存器(用于保存 SP,在函数返回时使用
该寄存器出栈),记作 ip。在子程序间的连接代码段中常使用这种规则。
(4)寄存器 R13 用作数据栈指针,记作 sp,sp 中存放的是当前使用的栈的栈顶的
地址。在子程序中寄存器 R13 不能用作其他用途。寄存器 sp 在进入子程序时的值和退出子程序时的值必须相等。
(5)寄存器 R14 称为连接寄存器,记作 lr。它用于保存子程序的返回地址。如果
在子程序中保存了返回地址,寄存器 R14 则可以用作其他用途。
(6)寄存器 R15 是程序计数器,记作 pc。它不能用作其他用途。
4.什么是内联汇编?
    答:在C代码中插入汇编语言的方法称为内联汇编。
5.汇编代码中如何调用 C 代码中定义的函数?
    答:
敌字组词
    (1)调用的C带有参数,需要使用R0~R3寄存器进行参数的传递,如果参数多于四个
        多出来的部分使用堆栈传递。
    (2)调用C程序时,使用BL跳转指令,格式为: BL 函数名
    (3)如果C程序带有返回值,使用寄存器R0传递。
第五章
1.什么是 GPIO?
    答:GPIO 的英文全称为 General-Purpo IO ports,也就是通用 IO 接口。
2.Exynos4412 有几组 GPIO 端口?
    答:Exynos4412有37组GPIO端口
3.编程实现利用 Exynos4412 的 GPIO 控制 LED3 闪烁。
    答:
    .text                    @定义一个代码段
    .global _start          @定义一个全局的标号 _start
_start:                      @汇编的入口,相当于c的main函数
    ldr r0, =0x11000c20      @配置引脚的功能,将GPX1CON寄存器的[3:0]这个位于设置为0x1
    ldr r4, [r0]
    bic r4, #0xf
    orr r4, #0x1
    str r4, [r0]
loop:
    bl led_on                @点亮LED3
    bl delay                @延时
    bl led_off                @熄灭LED3
    bl delay                @延时
    b loop                    @相当于C程序中的while(1), 防止程序跑飞
led_on:
    ldr r1, =0x11000c24      @配置GPX1_0引脚输出高电平
    ldr r5, [r1]
    orr r5, #0x1
    str r5, [r1]
    mov pc, lr
led_off:
    ldr r1, =0x11000c24        @配置GPX1_0引脚输出低电平
    ldr r5, [r1]
    bic r5, #0x1
    str r5, [r1]
    mov pc, lr
delay:                          @延时函数
    mov r7, #0x10000000
ms:
    sub r7, #1
    cmp r7, #0
    moveq pc, lr
    b ms
.end                                @代表汇编的结束
第六章
1.异常向量表位于存储器的什么位置?
    答:存储器映射地址 0x00000000 是为向量表(一组 32 位字)保留的。也可通过设置CP15 的C12寄存器将异常向量表的首地址设置在任意地址
2.IRQ 或 FIQ 异常的返回指令是什么?
    答;SUBS  PC, LR, #4
四年级日记300字3.什么类型的异常优先级最高?
    答:RESET异常
4.什么指令可以放在中断向量表
    答:跳转指令(B Lable)
        LDR指令(LDR PC,Lable地址)
5.ARM 中断控制器有什么作用?
答:ARM 内核只有两个外部中断输入信号nFIQ和nIRQ。但对于一个系统来说,中断源可能多达几十个。为此,在系统集成时,一般都会有一个中断控制器来处理异常信号。这时候用户程序可能存在多个IRQ/FIQ的中断处理函数。为了使从向量表开始的跳转始终能找到正确的处理函数入口,需要设置处理机制和方法。不同的中断控制器处理方法不同。
物理小报6.编程实现按键 K3 的中断检测,当按键按下时打印相应信息。
    答:
#include "exynos_4412.h"
#include "uart.h"
/* 中断处理函数 */
void do_irq()
{
    int irq_num;
    /* 读中断号 */
    irq_num = CPU0.ICCIAR & 0x3ff;
    /* 判断是哪个中断发生了 */
    switch (irq_num)
    {
    //ca 57:
    ca 58:
        //key3按下了
        /* 清中断挂起位*/
        EXT_INT41_PEND = 0x4;
        printf("The KEY3 is presd\n");
        break;
    //ca 59:
    //ca 60:
    default:功夫篮球
        break;
    }
法国旅游攻略
    /* 把当前发生的中断的中断号写回到EOIR寄存器,表示对当前中断已经处理完成,可以响应下一个中断 */
    CPU0.ICCEOIR = CPU0.ICCEOIR & (~(0x3ff << 0)) | irq_num;
}
void interrupt_init()
{
    /* 1. 配置GPX1_2引脚作为中断功能 */
    GPX1.CON = GPX1.CON & (~(0xf << 8)) | (0xf << 8);
    /* 2. 设置中断的触发方式--下降沿触发 */

本文发布于:2023-07-14 03:57:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1095458.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:寄存器   模式   中断   指令   使用   地址   子程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图