帮忙写一个嵌入式系统的ARM汇编子程序

; r1 : s_add

嵌入式arm编程例题(嵌入式arm实验)嵌入式arm编程例题(嵌入式arm实验)


嵌入式arm编程例题(嵌入式arm实验)


嵌入式arm编程例题(嵌入式arm实验)


; r2 : len

; r3 : d_add

_char_copy:

b _check

_loop:

ldrb r0, [r1], #1 ; load a byte to r0 from [r1], then r1 += 1

sub r2, r2, #1 ; len -= len 加在这是因为流水线。。。节省一个周期

strb r0, [r3], #1 ; store a byte form r0 to [r3], then r3 +=1

_check:

cmp r2, #0

bne _loop

mov pc, lr ; return

ARM嵌入式系统题目

MOV R0, #6 ; R0=6

MOV R1, #5 ; R1=5

main:

CMP R0, R1; Compare R0 and R1

BEQ LoopA; R0=R1 goto LoopA

BGT LoopB; R0>R1 goto LoopB

BLT LoopC; R0

LoopA:

ADD R0, #1; R0+=1

B main; goto main

LoopB:

ADD R1, #1; R1+=1

B main; goto main

LoopC:

ADD R0,#1; R0+=1

B main; goto main

希望可以帮助到你

MOV R0, #6

MOV R1, #5

CMP R0, R1 ;比较R0和R1

ITE LE ;是否小于等于

ADDLE R0, #1 ;R0<=R1时R0++

ADDGT R1, #1 ;R0>R1时R1++

基于arm的嵌入式开发,编写一段程序实现在C语言程序中调用汇编语言程序,实现将1kb的内存块以字的形式复

(原地址R0,目标地址R1,数量R2)

LDR R0,=src

LDR R1,=dst

MOV R2,#256

Loop LDR R3,[R0],#4

STR R3,[R1],#4

SUBS R2,R2,#1

BNE Loop

嵌入式的选择题

1.BSP作为一种嵌入式软件,它的主要特点是 ( B.与硬件和作系统都相关 )1.绝大多数Linux分区使用的文件系统类型是( D. ext2 )。1. 实时系统是指( B. 时间约束的系统 )。 2. ARM嵌入式系统中,PC指向的是正在( C. 取指 )的指令地址。2. Linux作系统中,文件系统管理是( B.VFS )的主要职责。

2. 在Linux系统中,硬件设备大部分是安装在( B. /dev )目录下的。

( A. framebuffer )。3.嵌入式处理器指令的执行周期包括 ( D.取指令 指令译码 执行指令 )

4. 存盘并退出vi的指令是 ( D. wq )。

4. 如下哪一个命令可以帮助你知道shell命令的用法 ( A. man )

5.为了使生成的目标文件能够用于gdb调试,在编译时gcc应使用( C. –g )选项。

5. 下面哪个命令行可用来马上重启正在运行的Linux系统? ( D. shutdown –r now )6. 如何从当前系统中卸载一个已装载的文件系统 ( A. umout )

6.RISC是指( C.精简指令计算机 )

7. 删除文件命令为 ( D. rm )7. 以下ARM异常中,优先级的是( D. Reset )8

.Linux将存储设备和输入设备均看做文件来作,( C. i表 )不是以文件的形式出现。

两道关于ARM嵌入式系统设计的基础题

1、社R0=0x12345678,使用将R0存储到0x4000的指令存到存储器中。若存储器为大端组织,写出从存储器0x4000处加载一个字节到R2的指令执行后R2的值。

2、使用汇编完成下列C的数组赋值:

for(i=0;i<=10;i++){a[i]=b[i]+c;}

arm嵌入式的课后习题,配置控制寄存器、数据寄存器与上拉电阻允许寄存器

需要芯片资料,

#define GPBCON (((volatile unsigned int )0x56000010)) //控制寄存器

#define GPBDAT (((volatile unsigned int )0x56000014)) //数据寄存器

#define GPBUP (((volatile unsigned int )0x56000018)) //电阻寄存器

void main (void)

{GPBCON = (GPBCON & (~(0xff<<14))) | (0x55<<14); //将GPBCON的14到21位清零再设置输出

GPBUP |= 0xf<<7; //禁用7到10的上拉电阻

GPBDAT = GPBDAT & (~(0xf<<7)) | (0x03<<7); //数据寄存器7到10位设置为0011

while(1);

}

求ARM嵌入式基础教程(第二版)周立功主编 课后习题

自己写的……

第1章 嵌入式系统概述

(1)举出3个本书中未提到的嵌入式系统的例子。

答:键盘、鼠标、扫描仪。

(2)什么叫嵌入式系统?

答:嵌入到对象体系中的专用计算机应用系统。

(3)什么叫嵌入式处理器?嵌入式处理器分为哪几类?

答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。

(4)什么是嵌入式作系统?为何要使用嵌入式作系统?

答:嵌入式作系统是作系统的一种类型,是在传统作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。3.充分发挥了32位CPU的多任务潜力。

第2章 ARM7体系结构

1.基础知识

(1)ARM7TDMI中的T、D、M、I的含义是什么?

答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。

(2)ARM7TDMI采用几级流水线?使用何种存储器编址方式?

答:3级;冯·诺依曼结构。

(3)ARM处理器模式和ARM处理器状态有何区别?

答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。

(4)分别列举ARM的处理器模式和状态?

答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。

(5)PC和LR分别使用哪个寄存器?

答:PC:R15;LR:R14。

(6)R13寄存器的通用功能是什么?

答:堆栈指针SP。

(7)CPSR寄存器中哪些位用来定义处理器状态?

答:位31~28:N、Z、C、V,条件代码标志位;27~8:保留位;7~0:I、F、T、M4~0,控制标志位。

(8)描述一下如何禁止IRQ和FIQ的中断。

答:当控制位I置位时,IRQ中断被禁止,否则允许IRQ中断使能;当控制位F置位时,FIQ中断被禁止,否则允许FIQ中断使能。

2.存储器格式

答:无论是大端格式还是小端格式,R2的值与R1一致;地址0x4000单元的字节:大端:0x12、小端:0x78。

3.处理器异常

请描述一下ARM7TDMI产生异常的条件是什么?各种异常会使处理器进入哪种模式?进入异常时内核有何作?各种异常的返回指令又是什么?

答:

【异常】 【模式】 【返回指令】

复位 管理 无

未定义指令 未定义 MOVS PC,R14

软件中断 管理 MOVS PC,R14

预取指中止 中止 SUBS PC,R14,#4

数据中止 中止 SUBS PC,R14,#8

IRQ 中断 SUBS PC,R14,#4

FIQ 快速中断 SUBS PC,R14,#4

进入异常时,内核自动做:PC→LR、CPSR→相应异常模式下的SPSR、设置CPSR为相应的异常模式、相应异常处理程序的中断入口向量地址→PC。

第3章 ARM7TDMI(-S)指令系统

1.基础知识

(1)ARM7TDMI(-S)有几种寻址方式?“LDR R1,[R0,#0x08]”属于哪种寻址方式?

答:有8种寻址方式:1.寄存器寻址 2.立即寻址 3.寄存器移位寻址 4.寄存器间接寻址 5.基址寻址 6.多寄存器寻址 7.堆栈寻址 8.相对寻址;“LDR R1,[R0,#0x08]”属于基址寻址。

(2)ARM指令的条件码有多少个?默认条件码是什么?

答:16个;AL。

(3)ARM指令中的第2个作数有哪几种形式?列举5个8位图立即数。

答:1.常数表达式(8位图) 2.寄存器方式 3.寄存器移位方式;0x3FC、0、0xF0000000、200、0xF0000001。

(4)LDR/STR指令的偏移形式有哪4种?LDRB指令和LDRSB指令有何区别?

答:1.零偏移 2.前索引偏移 3.程序相对偏移 4.后索引偏移;LDRB:加载无符号字节数据,LDRSB加载有符号字节数据

(5)请指出MOV指令与LDR加载指令的区别及用途?

答:MOV指令的源作数是常数或(带偏移量的)寄存器,用于寄存器之间的数据传送;LDR指令的源作数是地址,用于存储器到寄存器的数据传送。

(6)CMP指令是如何执行的?写一程序,判断R1的值是否大于0x30,是则将R1减去0x30。

答:CMP指令将Rn-operand2,根据结果更新CPSR中的相应条件标志位。

CMP R1,0x30

SUBHI R1,0x30

(7)调用子程序是用B指令还是用BL指令?请写出返回子程序的指令。

答:用BL;MOV PC,R14。

(8)请指出LDR伪指令的用法。指令格式与LDR加载指令的区别是什么?

答:用法:LDR{cond} Rd,=立即数/标号+立即数;LDR伪指令的源作数是代表一个常数,LDR加载指令的源作数代表一个地址。

(9)ARM状态与Thumb状态的切换指令是什么?请举例说明。

答:BX;

;从ARM状态切换到Thumb状态

CODE32

LDR R0,=Lable+1

BX R0

CODE16

Lable MOV R1,#12

;从Thumb状态切换到ARM状态

CODE16

LDR R0,=Lable

BX R0

CODE32

Lable MOV R1,#10

(10)Thumb状态与ARM状态的寄存器有区别吗?Thumb指令对哪些寄存器的访问受到一定限制?

答:有区别;R8~R15。

(11)Thumb指令集的堆栈入栈、出栈指令是哪两条?

答:PUSH、POP。

(12)Thumb指令集的BL指令转移范围为何能达到±4MB?其指令编码是怎样的?

答:BL指令事实上是两条指令,其编码为:11110{地址偏移高11位}、11111{地址偏移低11位},地址编码22位,再左移一位(半字对齐),23位地址寻址8MB,即±4MB。

2.有符号和无符号加法

答:

(1)

0xFFFF000F (A)

+0x0000FFF1 (B)

——————

(0x00000000)

NZCV=0110

如果两个作数是有符号数,A是负数,B是正数,和是0,没有溢出,所以V=0。

如果两个作数是无符号数,和是0,有进位,所以C=1。

(2)

0x7FFFFFFF (A)

+0x02345678 (B)

——————

(0x82345677)

NZCV=1001

如果两个作数是有符号数,A是正数,B是正数,和是负数,有溢出,所以V=1。

如果两个作数是无符号数,没有进位,所以C=0。

(3)

67654321 (A)

+ 23110000 (B)

——————

(0x0568F421)

NZCV=0000

如果两个作数是有符号数,A是正数,B是正数,和是正数,没有溢出,所以V=0。

如果两个作数是无符号数,没有进位,所以C=0。