嵌入式系统习题(考试相关)

news2024/9/23 21:17:45

文章目录

  • 上一篇
  • 嵌入式系统概述
  • ARM技术概述
  • ARM指令
  • Thumb指令集
  • ARM程序设计

上一篇

嵌入式系统复习–基于ARM的嵌入式程序设计

嵌入式系统概述

  1. 嵌入式系统中常用的通信接口包括哪些?
    RS-232C串行通信接口,RS-422串行通信接口,RS-485串行通信接口,USB接口,以太网接口,IEEE1394接口,IEEE802.11接口,JTAG接口,蓝牙接口

  2. 大端存储与小端存储有什么异同?
    大端存储是将数据的低字节存入低地址高字节存入低地址,小端存储是将数据的高字节存入低地址低字节存入高地址

ARM技术概述

  1. RISC的主要特点

    • 数据通道中只保留有用的指令
    • 确保通道能够快速执行每个指令
    • 确保CPU硬件设计的足够简单
  2. 简述ARM处理器的数据类型

    • 有符号/无符号字节(B)
    • 有符号/无符号半字(H)
    • 有符号/无符号字(D)
  3. 简述哈佛结构和冯诺依曼结构的主要区别
    在这里插入图片描述

  4. 简述ARM体系结构的版本情况。

    • v6
      • 增加了Thumb-2 提高了代码密度
      • 增加了SIMD 提高了数字和媒体处理能力
      • TrustZone增加了安全性能力
      • IEM增强了功耗管理能力
    • v7
      • A型号提供了应用处理能力,支持复杂的操作系统
      • R型号提供了实时操作系统
      • M型号提供了成本敏感的系统
    • v8
      • 支持64位的处理器架构
      • 64位的通用寄存器和PC, SP
      • 支持64位AArch64, 和32位AArch32两种指令
  5. 简述ARM处理器异常处理情况。
    进入异常:

    1. 将CPSR中的内容拷贝到SPSR中
    2. 改变CPSR中的中断标志位
    3. 将指令的下一条指令拷贝到链接寄存器LR中
    4. 强制改变PC中的值,进入异常状态

    异常返回:

    1. 将异常改变的寄存器保护存入栈中
    2. 将SPSR_mode中的值拷贝到CPSR中
    3. 将PC恢复到指令异常前的指令流中
    4. 修改CPSR中的中断标志位
  6. ARM处理器支持哪几种工作模式?
    用户模式,快速中断fiq模式,普通中断irq模式,软件中断模式svc,中止模式abt,未定义模式und, 系统模式

  7. ARM处理器共有多少个寄存器?ARM状态下通用寄存器可以分为几类?
    37个寄存器,可以分为31个通用寄存器(不分组寄存器、分组寄存器、程序计数器),6个状态寄存器

  8. 简述ARM指令中12位压缩的立即数是如何构成的?
    由8位常数及4位循环移位位构成,及 将8位立即数循环右移2 * 循环移位位后得到对应的立即数

ARM指令

  1. 用ARM汇编指令实现下面列出的几种操作

    • R0 = 16
      MOV R0, #16
      
    • R0 = R1 / 16
      MOV R0, R1, LSR #4
      
    • R1 = R3 * 4
      MOV R1, R3, LSL #2
      
    • R1 = -R1
      MVN R1, R1
      
  2. 下面的ARM指令完成什么功能?

    • LDRH R0, [R1, #6]
      以前变址的方式将R1中的内容作为地址加上偏移量6后,以半字的方式载入R0中
    • LDR R0, =0x999
      伪指令,编译时通过多条指令运算得到32位的0x999并将它载入到R0中
  3. BX指令与BL指令有什么不同,请说明之?
    BX指令是在ARM与Thumb两个状态间的切换,当寄存器的第0位是1,则切换到Thumb状态,如果是0则切换到ARM状态,BL指令是跳转链接指令,在调到对应指令前,会将当前指令的地址拷贝到链接寄存器LR中,然后在进行跳转。

  4. 请指出MOV指令与LDR指令的区别和用途?
    MOV是完成寄存器与寄存器之间或与立即数之间的数据移动
    而LDR是寄存器与存储器之间的数据传输

  5. 调用子程序使用B还是BL指令?写出返回子程序的指令?
    调用子程序使用BL指令,因为需要返回到主程序所以要将下一条的指令地址链接到LR中
    没有嵌套的返回指令

    	BL LABEL
    LABEL
    	MOV PC LR
    

    有嵌套的返回指令

    	STMFD SP! {R0-R7, LR}
    	BL SUBPROGRAM
    	
    SUBPROGRAM
    	
    	;从子程序返回
    	LDMFD SP! {R0-R7, PC}
    
  6. 编写一个子程序,从存储器某处拷贝一个字符串到存储器另一处。源字符串的开始地址放入R1, 长度(以字节为单位)放入R2, 目的字符串的开始地址在R3

    AREA COPYSTRING, CODE, READONLY
    ENTRY
    CODE32
    start
    	BL SUBCOPY
    stop
    	MOV R0, #0x18
    	LDR R1, =0x20026
    	SWI 0x123456
    ;子程序
    SUBCOPY
    	CMP R2, #0
    	BEQ ENDCOPY
    LOOP
    	LDRB R4, [R1], #1; 后变址 mem32R1 -> R4, R1 + 1 -> R1
    	STRB R4, [R3], #1
    	SUBS R2, R2, #1
    	BNE LOOP
    
    ENDCOPY
    	MOV PC, LR ; 子程序返回
    
    END
    
  7. 请将下面C语言代码转换成汇编语言

    if (a > 10 && a < 100)
    	b = b + 1
    else
    	b = b - 1
    

    汇编语言为

    假设R0中存入a的内容, R1中存入b的内容
    	CMP R0, #10
    	BLS SECOND
    	CMP R0, #100
    	BCS SECOND
    	ADD R1, R1, #1
    SECOND
    	SUB R1, R1, #1
    
  8. ARM寻址方式有哪几种?
    立即数寻址,寄存器寻址,基址加偏址寻址,寄存器间接寻址,块拷贝寻址,堆栈寻址,相对寻址方式

Thumb指令集

  1. ARM指令集与Thumb指令集中移位操作是如何实现的?有什么异同点?
    移位通过移位寄存器进行,一个移位类型一个移位量字段,前者决定移位方式,后者决定移位步数
    异同:

    1. ARM可以同时进行移位和逻辑运算,而Thumb只能单独进行移位运算
    2. ARM可以进行循环移位,但是Thumb不行
  2. 用语言描述ARM处理器如何进入和退出Thumb指令模式?
    ARM通过使用BX指令寄存器第0位为1进入Thumb模式,或者通过异常返回进入Thumb模式
    通过BX指令,寄存器第0位为0推出Thumb模式,或者通过发生异常推出Thumb

  3. 编写一个子程序,从存储器某处拷贝一个字符串到存储器另一处。源字符串的开始地址放入R1, 长度(以字节为单位)放入R2, 目的字符串的开始地址在R3

    AREA TCOPY, CODE, READONLY
    ENTRY
    CODE 16
    start
    	BL SUBCOPY
    stop
    	MOV R0, #0x18
    	LDR R1, =0x20026
    	SWI 0x123456
    SUBCOPY
    	CMP R2, #0
    	BEQ ENDCOPY
    LOOP
    	LDRB R4, [R1], #1
    	STRB R4, [R3], #1
    	SUBS R2, #1
    	BNE LOOP
    ENDCOPY
    	MOV PC, LR
    END
    

    异同Thumb在使用寄存器时需要使用R0~R7, 低位寄存器使用受到限制, Thumb指令大多是二地址指令(CMP,MOV,LDR,STR等用法还和ARM类似), 多了移位指令

ARM程序设计

  1. 简述IRQ/FIQ异常中断处理程序中所使用的的_fiq/_irq的作用
    标记对应函数为中断函数,编译器会自动在函数内部增加中断现场保护代码
  2. 简述#include<头文件.h>与 #include "头文件.h"的区别
    带<>的是直接在标准路径下搜索相应文件,而带“”的是先在标准路径下搜索相应文件如果找不到,则在对应工程目录下搜索对应文件

  1. 变量的存储类型有几种?各自的作用是什么?
    • 全局变量:在整个程序的生命周期内都可访问,其存储空间在程序启动时分配,在程序结束时释放。
    • 局部变量:仅在被声明的函数或代码块内可见,器存储空间在声明该变量的函数或代码块时分配,在退出时释放
    • 静态变量:静态变量的生命周期延长到整个程序执行期间,但其作用域仍限定在声明它的函数或代码块内部
    • 寄存器变量:将变量存储在寄存器中,以提高访问速度。

  1. 函数的参数传递方式有几种?分别是什么?
    2中,寄存器传递和栈传递

  2. ATPCS包含那些规则?分别是什么?

    • 寄存器使用规则:R0-R3是用来传递参数的,R4-R11是用来保存局部变量的
    • 栈的使用规则:使用FD满递减堆栈,采用字对齐方式
    • 参数传递规则:当参数个数是固定的,第一个参数使用R0-R3传递,其余使用数据栈传递,当参数不是固定的时候,前4个参数使用R0-R3传递,超过4个的使用数据栈传递
  3. 在完成以下操作后,R0的内容是什么?

    MOV R1, #5
    ADD R0, R1, R1, LSL #3
    

    R1 = 5, R0 <- R1 + R1 * 8
    R0 = 5 + 5 * 8 = 45

  4. 请将下面C语言代码转换成汇编语言

    if (a == 0 || b == 1)
    	c = d + e 
    
    AREA EXAMPLE, CODE, READONLY
    GBLA a, b, c, d, e
    ENTRY
    CODE 32
    start
    	MOV R4, a
    	MOV R5, b
    	MOV R6, c
    	MOV R7, d
    	MOV R8, e
    	CMP R4, #0
    	CMP R5, #1
    	BNE COMPAREEND
    	ADD R6, R7, R8
    COMPAREEND
    stop
    	MOV R0, #0x18
    	LDR R1, #0x20026
    	SWI 0x123456
    END
    
  5. 编写一段汇编语言程序,实现ARM到Thumb状态的转换

    AREA SWITCH, CODE, READONLY
    ENTRY
    start 
    CODE 32
    	MOV R0, into_Thumb
    	ADD R0, R0, #1 
    	BX R0
    CODE 16
    into_ Thumb
    END
    
  6. 编写一段汇编程序,利用跳转表实现子程序的跳转。(跳转条件在R2中,R2的值为0,1,2,3,4…,子程序分别为SUB0, SUB1, SUB2…)

AREA JUMPTAB, CODE, READONLY
ENTRY
CODE 32
start 
	BL JUMPTAB

JUMPTAB
	ADR R0, SUBTAB
	CMP R2, #SUBMAX
	LDRS PC, [R2, R0, LSL 2]
	MOV PC, LR

SUBTAB
	DCD SUB1
	DCD SUB2
	...
SUBMAX

SUB1
	...
SUB2
	...
END
	

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【APACHE】的认识和基础配置参数

#主页传送:江南的江 #每日鸡汤&#xff1a;人生没有如果和假设&#xff0c;只有后果和结果。生活有进有退&#xff0c;输什么也不能输心情。生活简单就是迷人的&#xff0c;学会简单其实就是不简单。要学会平静地接受现实&#xff0c;学会对自己说声顺其自然&#xff0c;学会坦…

基于实时Linux+FPGA实现NI CompactRIO系统详解

利用集成的软件工具链&#xff0c;结合信号调理I/O模块&#xff0c;轻松构建和部署实时应用程序。 什么是CompactRIO&#xff1f; CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具&#xff0c;使其成为工业物联网、监测和控制应用的理想之选。实时处理器提…

leetcode——杨辉三角

https://leetcode.cn/problems/pascals-triangle/ 杨辉三角&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 核心思想&#xff1a;找出杨辉三角的规律&#xff0c;发…

如何用UE5 的小白人替换成自己的 metahumen 数字人

1、用QuixelBridge 插件导入制作好的metahumen数字人 2、创建项目时如有选择第三人称游戏&#xff0c;在内容目录中找到第三人称游戏小白人的蓝图类&#xff0c;对其进行复制一个&#xff0c;重命名&#xff0c;我这里命名为BP_METAHUMEN&#xff0c; 并移到Metahumen目录下方便…

python统计分析——箱线图(plt.boxplot)

参考资料&#xff1a;用python动手学统计学 使用matplotlib.pyplot.boxplot()函数绘制箱线图 import numpy as np import pandas as pd from matplotlib import pyplot as pltdata_set1np.array([2,3,3,4,4,4,4,5,5,6]) data_set2np.array([[2,3,3,4,4,4,4,5,5,6],[5,6,6,7,7…

【AI视野·今日Sound 声学论文速览 第四十一期】Thu, 4 Jan 2024

AI视野今日CS.Sound 声学论文速览 Thu, 4 Jan 2024 Totally 8 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Multichannel blind speech source separation with a disjoint constraint source model Authors Jianyu Wang, Shanzheng Guan多通道卷积…

ArcGIS制图技巧总结

Part 1 制图综述 1.1 制图的目的 随着GIS在各行各业的深入应用&#xff0c;各信息化部门和生产单位都逐渐建立起自己的GIS的应用&#xff0c;同时积累了大量的地理数据。随着应用深度和广度的推进&#xff0c;针对数据建立专题应用越来越迫切&#xff0c;对行业专题制图的需…

XCode Build报错

XCode Build时报以下错误 B/BL out of range 143266484 (max /-128MB) 错误提示表明生成的机器代码太大&#xff0c;超出了限制 需要在XCode工程中添加宏定义&#xff0c;使得生成的可执行文件超过限制 步骤&#xff1a; 在项目设置页面中&#xff0c;选择 “Build Settings…

爆肝整理,接口测试+为什么要做接口测试总结,策底贯通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是接口测试…

vue3 指令详解

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、v-model &#xff08;双向绑定功能&#xff09;二、v-bind(用于将一个或多个属性绑定到元素的属性或组件的 prop)三、v-if、v-else、v-else-if(用于根据条件选择性地渲染元素)四、v-show&#xff08;根…

JavaSE 万字总结知识点(期末复习指南)

目录 一.Java的特性 二.注释 三.数据类型 基本数据类型 包装类 引用数据类型 四.运算符 五.逻辑控制 选择语句 循环语句 六.数组 七.方法 八.类与对象 构造方法 内部类 九.继承和多态 十.抽象类与接口 抽象类 接口 十一.异常 一.Java的特性 Java最初由Sun…

C++中vector的insert参数问题

今天模拟实现vector的过程中&#xff0c;发现pos传参给insert后是不能直接使用的&#xff0c;如果扩容的话&#xff0c;就要更新pos&#xff0c;于是就像用引用来解决这个问题 一般的pos还是能正常传参&#xff0c;但是如果传某容器的迭代器的话&#xff0c;就会报错 原因&…

LeetCode-加一(66)

题目描述&#xff1a; 给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 思路&#xff1a; 这里主要分…

Go-gin-example 添加注释 第一部分 新建项目及api编写

文章目录 go-gin-example环境准备初始化 Go Modules基础使用 gin 安装测试gin是否引入 gin搭建Blog APIsgo-ini简述配置文件 阶段目标 编写简单API错误码包 完成一个demo初始化项目初始化项目数据库编写项目配置包拉取go-ini配置包在conf目录下新建app.ini文件&#xff0c;写入…

React.Children.map 和 js 的 map 有什么区别?

JavaScript 中的 map 不会对为 null 或者 undefined 的数据进行处理&#xff0c;而 React.Children.map 中的 map 可以处理 React.Children 为 null 或者 undefined 的情况。 React 空节点&#xff1a;可以由null、undefined、false、true创建 import React from reactexport …

详解ajax、fetch、axios的区别

众所周知它们都用来发送请求&#xff0c;其实它们区别还蛮大的。这也是面试中的高频题&#xff0c;本文将详细进行讲解。 1. ajax 英译过来是Aysnchronous JavaScript And XML&#xff0c;直译是异步JS和XML&#xff08;XML类似HTML&#xff0c;但是设计宗旨就为了传输数据&a…

NI基于PC的测量和控制系统

基于PC的测量和控制系统为工程师提供了电气和物理测量功能&#xff0c;使其能够以可自定义、准确且经济实惠的方式进行台式测量. 什么是基于PC的测量和控制系统&#xff1f; 在基于PC的测量和控制系统中&#xff0c;NI硬件产品通过USB或以太网连接到PC或笔记本电脑。这种系统具…

在ultralytics中实现obb检测,官方团队做了哪些修改?

在最新的在ultralytics中,官方团队已经提供了obb检测功能,并发布了相应的预训练模型,其具体使用可以参考。https://blog.csdn.net/a486259/article/details/134557389 1、网络结构 1.1 OBB(Detect) 在ultralytics\nn\modules\head.py中,实现了OBB head,用于在网络head…

致远OA getAjaxDataServlet XXE漏洞复现(QVD-2023-30027)

0x01 产品简介 致远互联-OA 是数字化构建企业数字化协同运营中台,面向企业各种业务场景提供一站式大数据分析解决方案的协同办公软件。 0x02 漏洞概述 致远互联-OA getAjaxDataServlet 接口处存在XML实体注入漏洞,未经身份认证的攻击者可以利用此漏洞读取系统内部敏感文件…

Marvelous Designer 各版本安装指南

Marvelous Designer下载链接 https://pan.baidu.com/s/1ZZCraq6w2Z4JPisND8q0jA?pwd0531 1.鼠标右击【Marvelous Designer 12(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Marvelous Designer 12(64bit)】。 2.打开解压后的…