微处理器系统与嵌入式系统1—7章最全答案合集 联系客服

发布时间 : 星期五 文章微处理器系统与嵌入式系统1—7章最全答案合集更新完毕开始阅读fcb26192bbf3f90f76c66137ee06eff9aef849a8

DB

AB

端口译码器 数据输入 缓冲器端口 /RD 数据输出 缓冲器端口 /WR

在某系统中,要求采用中断方式把一个长100字节的数据块从首址为AREA的存储区传送到端口地址为37FH的接口上,每次中断只传送一个字节。试给出数据交换流程。

主程序:

(1) 初始化内存指针为AREA(全局变量); (2) 初始化传送次数为100(全局变量); (3) 允许传送中断;

(4) 启动传送:从内存取一个字节输出到37FH端口,并修改内存指针(加1); (5) 等待中断或处理其他事情; 中断服务程序:

(1) 修改传送次数(减1),并判断是否为0,若为0,退出中断,结束传送; (2) 若未传送完,则修改内存指针(加1); (3) 从内存取一个字节输出到37FH端口; (4) 返回;

用8255A作为CPU与打印机的接口,8255A的A端口工作于方式0输出;C端口工作于方式0。8255A与打印机及CPU的连线如下图所示。试给出查询方式下将100个数据送打印机打印的数据交换流程。

(1) (2) (3) (4) (5)

CPU读C口并判断PC0(BUSY)电平,若PC0(BUSY)=1,则重复(1); 若PC0(BUSY)=0,表示打印机空闲,CPU即可向A口输出一个数据; CPU写C口令PC6=0(延时后再令PC6=1),通知打印机数据已准备好; 打印机取走数据后令BUSY=0; 重复(1)~(4)100次;

若某8位A/D转换器的满度输入电压为10 V,则其量化误差为多少?

110?0.0196V 822?1

ARM支持7种运行模式: 1) 用户模式 2) 快速中断模式 3) 外部中断模式 4) 管理模式 5) 终止模式 6) 未定义模式 7) 系统模式

运行模式的切换由

CPSR低8位中M4~M0控制位决定(1)10000 (2)10001(3)10010(4)10011(5)10111(6)11011(7)11111

1) ARM状态:处理器执行32位字时齐的ARM指令

2) Thumb状态:处理器执行16位的,半字对齐的Thumb指令 切换:

进入Thumb:1.当操作数寄存器的状态位(最低位)为1时执行BX指令 2.当在Thumb 发生异常,在异常处理后自动返回Thumb 进入ARM:1.当操作数寄存器的状态位为0时,执行BX指令 2.当进行异常处理时,把程序计数器的PC的值放入异常模式链接寄存器中,从

异常向量地址开始执行程序,自动进入ARM状态

1) 寄存器寻址

2) 寄存器寻址,立即寻址

3) 寄存器寻址,寄存器间接寻址 4) 寄存器寻址,基址变址寻址 5) 多寄存器寻址(堆栈寻址)

6) 寄存器寻址,寄存器寻址,寄存器移位寻址 7) 多寄存器寻址 8) 相对寻址

1) 改为ADD R1, R2,#4 2) 对

3) 不用“!”

4) 立即数 #02F100不符合规定

5) 既不是立即数,也不是寄存器数

6) 目的寄存器R2存放不能与操作数寄存器相同 7) 不能将立即数直接给CPSR 8) 正确

1) 比较R0与R1中的值,更新标志位,无符号数R0>无符号数R1,C置位,Z清零,R1R1+1 2) 比较R1与R2中的值,更新标志位,若N置位,即(R1)<(R2),则R2R2-0x08

“微处理器系统原理与嵌入式系统设计”第六章习题解答

试用汇编代码完成如下C语言代码完成的功能。

int gcd(int a, int b) {while (a != b) if (a > b) a = a-b; else

b = b-a; return a; }

AREA Sub1,CODE,READONLY EXPORT Sub1 CMP R0, R1

;(R0)=a,(R1)=b

;相等则返回

;带符号数大于条件码为GT,无符号数为HI ;带符号数小于条件码为LT,无符号数为LO ;更新变量a

MOVEQ PC,LR

SUBGT R0, R0, R1 SUBLT R1, R1, R0 LDR R2,=a STR END

MOV PC,LR

R0,[R2]

;R2指向a ;返回

宏的定义如下面的代码所示:

MICRO

$aa example $bb, $cc, $dd $aa CMP $cc, #0

B$dd $bb

MEND

若在汇编程序中需要调用上面定义的宏example,则其程序代码如下。试写出下面程序被汇编后,宏展开后的结果。

lable example next, R3, NE … next

宏展开后的代码为: label

CMP R3 , #0

BNE next

编写一个程序段,判断寄存器R5中数据是否为12, 18, 22, 29, 45或67,如果是则将R0中数据加1,否则将R0设置为0xF,并把这个程序段定义成一个代码段。

AREA Comp,CODE,READONLY ENTRY

LDR

R0,=dat

;寄存器R0指向DataT表中的数据列表dat

MOV R1,#6 MOV R2,#0 SUB Loop

SUB

R1,R1,#1

;调整比较次数

BEQ Handle

CMP R5,[R0,#4]! BNE Loop MOVEQ R2,#1 Handle

CMP R2,#0 Stop END

…… dat

DCD

12,18,22,29,45,67

;需要比较的数据列表

AREA DataT,DATA,READWRITE

ADDNE R0, R0, #1 MOVEQ R0,#0xF

R0,R0,#4

;调整比较指针 ; dat表中的数据个数

;标志寄存器(R2)=0则R5中数据不在dat表中

试编写一个循环程序,实现从0开始10个偶数的累加。

AREA Foud,CODE,READONLY