冯诺依曼体系结构计算机的要点和工作过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、简述诺依曼体系结构计算机的要点和工作过程。

答:诺依曼体系结构计算机的要点:计算机中的信息(程序和数据)以二进制方式表示。

程序预存储,机器自动执行。

计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

计算机通过执行预存储在存储器中的程序来完成预定的运算。

程序由计算机的指令序列构成,计算机在处理器的控制下,首先从存储器读取一条待执行的指令到处理器中,接下来分析这条指令,而后发出该指令对应的电平脉码序列,即执行该指令。

并以此递归运行程序。

2、何谓总线?计算机中有哪几类总线?简述其用途。

答:计算机的总线(Bus)就是连接计算机硬件各部件,用于计算机硬件各部件之间信息传输的公共通道。

按照其传送信号的用途属性,总线可细分为:地址总线(Address Bus)、数据总线(Data Bus)和控制总线(Control Bus)三类。

♦地址总线(A_Bus):专用于在CPU、存储器和I/O端口间传送地址信息的信号线。

此类信号线传送的信息总是从CPU到存储器或I/O端口,它是单向信号线。

♦数据总线(D_Bus):专用于在CPU、存储器和I/O端口间传送数据信息的信号线。

此类信号线传送的信息可以是从CPU到存储器或I/O端口(“写”操作),也可能是从存储
器或I/O端口到CPU(“读”操作),它是双向信号线。

♦控制总线(C_Bus):专用于CPU与其它部件之间传送控制信息和状态信息的信号线。

此类信号线的构成比较复杂,传送的控制、状态信息可以是从CPU到其它部件,也可能
是从其它部件到CPU。

此类总线中的某些具体的线是单向的(或从CPU到其它部件,
或反之),但作为总线来说,它是双向信号线。

3、中央处理器CPU是计算机的核心部件,主要功能是解释并执行计算机指令,完成数据处理和对计算机其他各部分进行控制。

存储器是计算机系统中用来存储程序和数据的信息记忆部件。

4、嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、
可靠性、成本、体积、功耗严格要求的专用计算机系统。

简而言之,嵌入式系统就是嵌入到目标应用系统中、完成特定处理功能的专用计算机系统。

5嵌入式处理器分类嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片上系统1.何谓计算机体系结构?
答:计算机体系结构是对计算机较高层次的抽象,是摆脱具体电路的实现而主要着眼于计算机系统的逻辑特征、原理特征、结构特征和功能特征的抽象。

3.什么是RISC?什么是CISC?简述他们的特点与差别。

答:RISC是Reduced Instruction Set Computer,精简指令集计算机。

特点是指令系统精炼,处理器电路逻辑相对简单,且能够以更快的速度执行操作。

对于负载的功能需要编程实现。

CISC是Complex Instruction Set Computer,复杂指令集计算机。

特点是指令系统中含有大量的类似于高级程序设计语言结构的复合功能指令。

指令系统庞大,处理器硬件电路的复杂度。

21.存储器和IO端口统一编址和独立编址各有什么特点?ARM7处理器统一编址编址方式
答:统一编址方式---存储器单元资源和IO端口资源统一编址在一个地址空间。

特点:按地址空间位置约定各分类资源,访问IO端口如同访问存储器单元,无需专用的IO访问指令。

芯片上没有专用于IO访问的引脚。

独立编址方式---存储器资源和IO端口资源分别编址在两个地址空间,存储器地址空间和IO 地址空间。

特点:按资源分类的地址空间清晰,使用不同的指令访问存储器和IO端口,处理器指令系统中既有存储器访问指令,又有专用的IO访问指令。

芯片上有专用于IO访问的引脚。

22.大端存储模式和小端存储模式的含义:高位数据存储在高地址字节,这种组织数据的存储方
式称为‘小端模式’;另一种则反之,高位数据存储在低地址字节,这种组织数据的存储方式称为‘大端模式’;
8、ARM体系结构支持7种处理器模式,用户模式、系统模式、快中断模式、中断模式、管理模式、
中止模式、未定义模式。

ARM微处理器共有37个32位的程序可访问寄存器物理资源,其中31个通用寄存器,6个状态寄存器。

ARM中定义了复位、未定义指令、SWI(软中断)、预取指终止、预取数终止、irq以及fiq等7种异常。

ARM7的异常处理:异常响应)处理器转入到ARM状态对应的异常模式;在该异常模式的SPSR、LR寄存器分别备份CPSR、PC的当前数据;重置CPSR和PC
9、ARM7TDMI支持哪几种指令集,各有什么特点?
答:ARM7TDMI支持32位的ARM指令集和16位的Thumb指令集。

ARM指令集效率高、功能全,但是代码密度低,所有ARM指令都是可以有条件执行的;Thumb指令集,功能上是ARM指令集的子集,Thumb状态下的ARM7TDMI(-S)仍然是32位的处理器,因此具有更高的代码密度;Thumb指令中仅有B指令具备条件执行功能。

1、解释“满堆栈”、“空堆栈”、“递增堆栈”和“递减堆栈”? ARM指令系统中是如何支持的?
答:满堆栈就是堆栈指针总是指向最后压入堆栈的数据的存储单元;空堆栈就是堆栈指针总是指向下一个将要放入数据的存储单元;递增堆栈就是堆栈底部位于低地址处,堆栈向高地址方向增长;递减堆栈就是堆栈底部位于高地址处,堆栈向低地址方向递减; ARM指令系统支持的是满递减堆栈
1、请说明MOV指令与LDR加载指令的区别和用途。

答:MOV指令用于将8位位图立即数或寄存器数据传送到目标寄存器(Rd),也可用于移位运算等操作。

LDR指令用于从存储器中加载一个数据到寄存器中。

用于访问存储器操作。

解释B指令、BL指令与BX指令的功能差别?简述它们的应用场合。

答:B指令跳转到标号指定的地址执行程序。

BL指令先将下一条指令的地址拷贝到R14中,然后跳转到标号指定地址运行程序。

BX指令跳转到Rm指定的地址处执行程序,该指令用于处理器状态切换。

4、计算机语言:机器语言是一种用二进制代码表示指令和数据,能被机器直接识别的计算机语言。

5、如何在汇编程序中显示声明文字池?什么情况下需要显示声明文字池?一般应在程序的什么位置显示声明文字池?为什么?
答:使用LTORG汇编器伪指令用于显示声明一个文字池(literal pool)。

实际应用中,如果ARM
需要处理的操作数不符合8bit位图立即数的要求时,那么就需要使用文字池来存放这个常量。

在ARM汇编语言中,使用LDR加载指令相对寻址文字池中存放的任意32bit立即数。

因为LDR指令的寻址围是指令位置的前后4KB,所以如果LDR指令所在位置距离文字池超出4KB围,那么需要在程序中的适当位置,使用LTORG伪指令显式声明文字池。

解决方法:一般总可以在LDR伪指令前后4KB的围找到分支指令,文字池可声明在分支(B)指令之后的紧邻位置,因为B指令总是会将程序的执行转移到其它地方的,所以这样做不会影响代码的正常执行。

6、简述汇编程序设计的一般流程。

○1分析问题,建立数学模型;○2确定算法;○3设计程序流程图;○4合理分配寄存器、存储空间和外设资源;○5编制程序;○6调试程序;○7形成文档;
7、实现汇编程序分支的关键语句有哪几条?分别用于什么场合?
答:汇编程序分支结构的实现是通过在运行时由机器根据不同的条件自动作出判断,选择执行相应的处理程序段。

分支指令主要有BL指令、B指令和BX指令,分别用于调用子程序、直接跳转和带状态的跳转场合。

8、循环控制有哪几种方法?各有什么应用特点?
答:循环控制有两种方法。

○1计数控制循环:通过计数循环次数,判断是否已达到预定次数,控制循环。

适合已知循环次数的循环控制。

○2条件控制循环:通过判断循环终止条件是否已成立,控制
循环。

适合仅知道结束条件的循环控制。

9、汇编子程序传递参数有哪几种方式?答:○1寄存器传递参数方式;○2存储区域传递参数方式;○3堆栈传递参数方式;
10、用汇编语言编写程序将R0寄存器中的字数据分成4组,每组8位,然后分别存放到R1、R2、R3和R4中。

AREA decode, CODE, READONLY ; 代码段名decode
ENTRY ; 程序的入口
CODE32
start
LDR R0, =x
LDR R0, [R0] ; 将x加载到寄存器R0
MOV R1, #0xFF
AND R1, R1, R0 ; 取x的低八位
MOV R2, #0xFF
AND R2, R2, R0, ROR #8 ; 取x的次低八位
MOV R3, #0xFF
AND R3, R3, R0, ROR #16 ; 取x的次高八位
MOV R4, #0xFF
AND R4, R4, R0, ROR #24 ; 取x的高八位
stop
MOV R0, #0x18 ; 这三条指令是ADS调试环境特约
LDR R1, =0x20026 ;程序运行结束返回编译器调试环境
SWI 0x123456
AREA Data, DATA, READWRITE ; 数据段的名字Data
x DCD 123456789
END ; 结束
11、用汇编语言编写程序统计任意字符串包含的字符个数。

(约定:字符串以0为结束标志)
AREA count, CODE, READONLY ; 代码段名 count
ENTRY ; 程序的入口
CODE32
start
LDR R0, =string ; R0指向字符串string中第一个字符
MOV R2, #0
CONTI
LDRB R1, [R0] ; 将string中的一个字符加载到寄存器R1
CMP R1, #0 ; 是否是字符串结束标志
ADDNE R2, R2, #1 ; 如果不是,统计个数增加1
ADDNE R0, R0, #1 ; 如果不是,指针拨向下一个字符
BNE CONTI
LDREQ R3, =NUM ; 如果是,将统计的字符串个数,放入单元num
STREQ R2, [R3]
stop
MOV R0, #0x18 ; 这三条指令是ADS调试环境特约
LDR R1, =0x20026 ;程序运行结束返回编译器调试环境SWI 0x123456
12、用汇编语言编写程序计算:

=

=
100
1
2
N
N Sum
AREA sum2n, CODE, READONLY ; 代码段名sum2n
ENTRY ; 程序的入口
CODE32
start
LDR R0, =sum ; R0指向存储单元sum
MOV R1, #0 ; R1存放累加和
MOV R2, #1 ; R2初始化起始值
CONTI
ADD R1, R1, R2, LSL #1 ; 实现R1=R1+R2*2
CMP R2, #100 ; 判断R2是否等于100
ADDNE R2, R2, #1 ; 如果不等,R2累加1
BNE CONTI
STREQ R1, [R0] ; 如果相等,将累加和R1放入存储单元sum中
stop
MOV R0, #0x18 ; 这三条指令是ADS调试环境特约
LDR R1, =0x20026 ;程序运行结束返回编译器调试环境
SWI 0x123456
AREA Data, DATA, READWRITE ; 数据段的名字Data
sum DCD 0
END ; 结束
14读程序、文件名:TEST1.S; 功能:实现字符串拷贝功能说明:使用ARMulate软件仿真调试AREA Example1,CODE,READONLY ;声明代码段Example1
num EQU 20 ;设置拷贝字的个数
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START LDR R0, =src ; R0指向源数据块
LDR R1, =dst ; R1指向目的数据块
MOV R2, #num ; R2需要拷贝的数据个数
wordcopy
LDR R3, [R0], #4 ; 从源数据块中取一个字,放入R3中,R0=R0+4
STR R3, [R1], #4 ; 将R3中的数据存入R1指向的存储单元中,R1=R1+4
SUBS R2, R2, #1 ; R2计数器减1
BNE wordcopy ; 如果R2不为0,则转向wordcopy处
stop
MOV R0, #0x18 ; 程序运行结束返回编译器调试环境
LDR R1, =0x20026
SWI 0x123456
AREA BlockData, DATA, READWRITE; 数据段的名字BlockData
AREA |.extra|, NOINIT, READWRITE; 未初始数据段的名字.extra
data SPACE 1024
END ; 文件结束
第六章
1、主机与外设接口之间主要交互的三类信息:状态信息(输入) 用于标示设备的状态情况。

数据信息(输入/输出)-要传送的二进制目标数据。

控制信息(输出) 控制外设的工作方式与具体操作。

对应于上述的三种信息,外设接口电路中的端口寄存器也分为了三类:状态端口(寄存器)、数据端口(寄存器)和控制端口(寄存器)
2、接口与端口:接口和端口是两个不同的概念。

接口 ---侧重于物理连接;端口 --- 侧重于接口的部工作方式。

接口由若干个端口加上相应的控制电路构成。

每个端口都对应与接口电路中的各个工作寄存器。

外设通过接口连接入计算机系统,计算机通过端口访问控制外设工作。

3、处理器与外设之间的数据传送方式主要有:无条件数据访问方式,状态查询方式数据访问方式,中断方式数据访问方式和直接存储器访问(DMA)方式等几种方式。

4、无条件外设---输入设备总是准备好向CPU提供数据,输出设备总是准备好接收CPU送来的数据。

5、接口电路的主要功能:任何设备都不能长期占用系统总线;输入设备要经过三态缓冲器相连到系统总线;输出设备要经过数据锁存器相连到系统总线;
6、状态查询方式的原理:在执行数据端口访问指令前,要先查询该设备的状态,当设备处于准备
好状态时,CPU才执行对设备数据端口的输入/输出指令,与外设交换信息;否则,等待。

中断方式数据访问:当外设需要与CPU进行信息交换时,由外设主动向CPU发出数据传送请求信号(中断申请),CPU响应此请求信号后(中断响应),暂停正在执行的程序,转去执行该外设的数据输入/输出操作程序(中断服务程序----ISR),外设数据端口访问后,CPU再继续执行被暂停的程序(中断返回)。

7、中断向量---- 中断服务程序(ISR)的入口地址;中断现场---- CPU响应中断离开主程序时,
CPU的相关寄存器数据情况。

中断响应 ---- CPU敏感并进入到ISR的一系列动作;中断返回 ---- CPU返回被中断主程序断点处继续执行主程序的一系列动作;
8、中断处理过程一般包括以下五个步骤:①中断请求、②中断响应、③断点保护、④中断处理和
⑤中断返回。

9、例7-1:使用Timer0 作为1秒钟的定时器,产生周期为2秒,占空比为1:1的方波信号。

int main (void)
{
PINSEL0 = PINSEL0 &( ~(3<<10))|(2<<10);
/*设置P0.5管脚为MAT0.1功能*/
T0CTCR = 0x00; /* 设置Timer0工作在定时方式*/
T0TC = 0; /* 定时器设置为0 */
T0PR = 99; /* 时钟100预分频*/
T0MCR = 0x02<<3;
/* 设置T0MR1匹配后复位T0TC,无中断标志*/
T0MR1 = Fpclk / 100; /* 1秒钟定时 --- 匹配目标值*/
T0EMR |= 0xC2;
/* 设置Timer0发生MR1匹配时翻转MAT0.1位*/
T0TCR = 0x01; /* 启动定时器*/
while (1) ;
return 0;
}
例 7-2:假设车轮毂上已经均匀安装了8个霍尔传感器,车轮每转一周可产生8个正脉冲。

使用LPC2132中的Timer0和Timer1资源,设计一个简易的车用综合仪表数据处理系统(可测量显示车速、本次里程、总里程等数据)。

#define KClr 1 << 0
/* KClr按键连接与P0.0管脚, KClr按下时P0.0为低电平*/
#define L 2.5 /* 车轮周长 2.5米 */
#define HrN 8 /* 车轮箍霍尔传感器个数 */
uint32 Vspeed; /* 当前车速*/
uint32 VtotalLen; /* 总里程*/
uint32 VthisLen; /* 本次里程 --- Km */
int main (void)
{
uint32 Vx; /* 暂存1秒钟车轮毂霍尔脉冲计数值 */
PINSEL0 =( PINSEL0 &( ~(3<<20))) | (2<<20); /* 设置P0.10管脚为CAP1.0 */
PINSEL0 = PINSEL0 &( ~3); /* 设置P0.0管脚为GPIO */
/* 设置Timer0 --- 1秒定时器 */
T0CTCR &= 0xf0; /* 设置Timer0工作在定时方式*/
T0TC = 0; /* 定时器设置为0 */
T0PR = 99; /* 时钟100预分频*/
T0MCR = 0x03;
/* 设置T0MR0匹配后复位T0TC,产生中断标志*/
T0MR0 = Fpclk / 100; /* 1秒钟定时 --- 匹配目标值*/
/* 设置 Timer1 --- 计数器对P0.10管脚输入脉冲计数 */
T1CTCR = ( T1CTCR &(~0x0f))| 0xf1;
/* 设置Timer1计数方式,计数CAP1.0的上升沿 */
T1TC = 0; /* 设置计数器初值为0 */
T1MCR = 0x00; /* 这也是芯片的复位值00 */
T1CCR &= ~0x07; /* CAP1.0 不再用作捕获触发 */
T0TCR = 0x01; /* 启动定时器0*/
T1TCR = 0x01; /* 启动定时器1*/
while (1) {
if ((T0IR&0x01) = = 1) { /* 1S 定时到 */
T0IR = 0x01; /* 清除MR0中断标志 */
Vx = T1TC;
T1TC = 0; /* 下一秒重新计数 */
VtotalLen += Vx; /*累计总里程*/
VthisLen += Vx; /*累计小里程*/
Vspeed = (Vx * L * 3.6) / HrN; /* 单位:Km/Hr */
}
if ((IO0PIN & KClr) = = 0)
VthisLen = 0; /* 如果KClr按下,清0本次里程纪录 */
return 0;
7、GPIO应用举例
#define K1 1 << 0 // K1按键连接与P0.0管脚, K1按下时P0.0为低电平#define K2 1<< 1 // K2按键连接与P0.1管脚, K2按下时P0.1为低电平#define BEEP 1 << 7 // P0.7控制蜂鸣器,高电平蜂鸣
#define LED 1 << 8 // P0.8控制发光二级管,高电平点亮
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
int main (void)
{
PINSEL0 = 0x00000000; // P0[15:0]管脚用做GPIO功能IO0DIR = IO0DIR &( ~K1); // 设置K1控制口为输入
IO0DIR = IO0DIR &( ~K2); // 设置K2控制口为输入
IO0DIR = IO0DIR | BEEP; // 设置BEEP控制口为输出
IO0DIR = IO0DIR | LED; // 设置LED控制口为输出
IO0CLR = IO0CLR | BEEP | LED; // BEEP、LED 输出低电平
while (1)
{
if ((IO0PIN & K1) = = 0)
IO0SET = LED; // 如果K1按下,LED点亮
else IO0CLR = LED; // 松开则熄灭
if ((IO0PIN & K2) = = 0)
IO0SET = BEEP; // 如果K2按下,蜂鸣器鸣叫
else IO0CLR = BEEP; // 松开则静音
DelayNS(50); // 延时 50 个时间单位
}
return 0;
}
实验、功能:计算X的n次方的值
;说明:X和n均为无符号整数
X EQU 9 ;定义X的值为9
n EQU 8 ;定义Y的值为8
AREA Example4,CODE,READONLY ;声明代码段Example4
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START LDR SP,=0x40003F00 ;设置堆栈(满递减堆栈,使用STMFD/LMDFD指令) LDR R0,=X
LDR R1,=n
BL POW ;调用子程序POW,返回值为R0
HALT B HALT
;子程序:POW
;功能:整数乘方运算
;入口参数:R0 底数
R1 指数
;出口参数 R0 运算结果
;占用资源:R0、R1
;说明:本子程序不考虑溢出问题
POW STMFD SP!,{R1-R12,LR} ;寄存器入栈保护
MOVS R2,R1 ;将指数值复制到R2,并影响条件标志 MOVEQ R0,#1 ;若指数为0,则设置R0 = 1
BEQ POW_END ;若指数为0,则返回
CMP R2,#1
BEQ POW_END ;若指数为1,则返回(此时R0没有被更改) MOV R1,R0 ;设置DO_MUL子程序的入口参数R0和R1
SUB R2,R2,#1 ;计数器R2 = 指数值减1
POW_L1 BL DO_MUL ;调用DO_MUL子程序,R0 = R1 R0
SUBS R2,R2,#1 ;每循环一次,计数器R2减1
BNE POW_L1 ;若计数器R2不为0,跳转到POW_L1
POW_END LDMFD SP!,{R1-R12,PC} ;寄存器出栈,返回。

相关文档
最新文档