实验五 ARM 指令系统实验二

合集下载

计算机组成原理实验报告

计算机组成原理实验报告

计算机组成原理实验报告实验目的,通过本次实验,深入了解计算机组成原理的相关知识,掌握计算机硬件的基本组成和工作原理。

实验一,逻辑门电路实验。

在本次实验中,我们学习了逻辑门电路的基本原理和实现方法。

逻辑门电路是计算机中最基本的组成部分,通过逻辑门电路可以实现各种逻辑运算,如与门、或门、非门等。

在实验中,我们通过搭建逻辑门电路并进行实际操作,深入理解了逻辑门的工作原理和逻辑运算的实现过程。

实验二,寄存器和计数器实验。

在本次实验中,我们学习了寄存器和计数器的原理和应用。

寄存器是计算机中用于存储数据的重要部件,而计数器则用于实现计数功能。

通过实验操作,我们深入了解了寄存器和计数器的内部结构和工作原理,掌握了它们在计算机中的应用方法。

实验三,存储器实验。

在实验三中,我们学习了存储器的原理和分类,了解了不同类型的存储器在计算机中的作用和应用。

通过实验操作,我们进一步加深了对存储器的认识,掌握了存储器的读写操作和数据传输原理。

实验四,指令系统实验。

在本次实验中,我们学习了计算机的指令系统,了解了指令的格式和执行过程。

通过实验操作,我们掌握了指令的编写和执行方法,加深了对指令系统的理解和应用。

实验五,CPU实验。

在实验五中,我们深入了解了计算机的中央处理器(CPU)的工作原理和结构。

通过实验操作,我们学习了CPU的各个部件的功能和相互之间的协作关系,掌握了CPU的工作过程和运行原理。

实验六,总线实验。

在本次实验中,我们学习了计算机的总线结构和工作原理。

通过实验操作,我们了解了总线的分类和各种总线的功能,掌握了总线的数据传输方式和时序控制方法。

结论:通过本次实验,我们深入了解了计算机组成原理的相关知识,掌握了计算机硬件的基本组成和工作原理。

通过实验操作,我们加深了对逻辑门电路、寄存器、计数器、存储器、指令系统、CPU和总线的理解,为进一步学习和研究计算机组成原理奠定了坚实的基础。

希望通过不断的实践和学习,能够更深入地理解和应用计算机组成原理的知识。

ARM实验二报告

ARM实验二报告

汇编语言与接口技术实验报告ARM汇编语言程序设计院系信科院专业班级计科1201学生姓名学号指导教师提交日期 2015 年 5 月 15 日一、实验目的●初步学会使用IAR EWARM 开发环境及ARM 软件模拟器。

●通过实验掌握简单ARM 汇编指令的使用方法。

●通过实验掌握使用ldm/stm、b、bl 等指令完成较为复杂的存储区访问和程序分支,学习使用条件码,加强对CPSR 的认识。

●通过实验掌握 ARM 处理器16 位Thumb 汇编指令的使用方法。

二、实验内容●利用实验参考程序学习使用ldr/str、mov 等指令访问寄存器或存储单元。

使用add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。

●编写程序循环对R4~R11 进行累加8 次赋值,R4~R11 起始值为1~8,每次加操作后把R4~R11 的内容放入SP 栈中,SP 初始设置为0x800。

最后把R4~R11 用LDMFD 指令清空赋值为0。

●新建工程,并自行编写汇编程序,分别使用ldr、str、ldmia、stmia 操作,实现对某段连续存储单元写入数据,并观察操作结果。

学习分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。

●编写程序实现50!(即50的阶乘)。

●编写程序从ARM状态切换到Thumb,在ARM 状态下把R2 赋值为0x12345678,在Thumb状态下把R2 赋值为0x87654321。

同时观察并记录CPSR、SPSR 的值,分析各个标志位。

三、实验设备1. UP-TECH S2410实验平台,ARM标准/增强型仿真器套件2. PC 操作系统WIN98 或WIN2000 或WINXP,IAR EWARM集成开发环境,仿真调试驱动程序(H-JTAG)。

四、实验参考程序#*********************************************************************************************# NAME: ARMcode1.s *# Author: Embest *# Desc: ARMcode examples *# copy words from src to dst *# History: shw.He 2005.02.22 *#*********************************************************************************************NAME mainPUBLIC __iar_program_startSECTION `.text`:CODE:NOROOT(2)ARM ; ARM mode__iar_program_startmain:ldr r0, =src /* r0 = pointer to source block */ldr r1, =dst /* r1 = pointer to destination block */mov r2, #num /* r2 = number of words to copy */mov sp, #0x400 /* set up stack pointer (r13) */blockcopymovs r3,r2, LSR #3 /* number of eight word multiples */beq copywords /* less than eight words to move ? */stmfd sp!, {r4-r11} /* save some working registers */octcopyldmia r0!, {r4-r11} /* load 8 words from the source */stmia r1!, {r4-r11} /* and put them at the destination */subs r3, r3, #1 /* decrement the counter */bne octcopy /* ... copy more */ldmfd sp!, {r4-r11} /* don't need these now - restore originals */ copywordsands r2, r2, #7 /* number of odd words to copy */beq stop /* No words left to copy ? */ wordcopyldr r3, [r0], #4 /* a word from the source */str r3, [r1], #4 /* store a word to the destination */subs r2, r2, #1 /* decrement the counter */bne wordcopy /* ... copy more */stopb stopALIGNsrcDCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dstDCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END五、程序运行测试实验代码(替换参考程序的main部分)及测试结果如下:实验1LDR R0, =SRCLDR R1,=DSTMOV R2,#55MOV SP,#0x400BLOCKCOPYMOVS R3,R2, LSR #3BEQ COPYWORDSSTMFD SP!, {R4-R11}OCTCOPYLDMIA R0!, {R4-R11}STMIA R1!, {R4-R11}SUBS R3, R3, #1BNE OCTCOPYLDMFD SP!, {R4-R11}COPYWORDSANDS R2, R2, #7BEQ STOPWORDCOPYLDR R3, [R0], #4STR R3, [R1],#4SUBS R2, R2, #1BNE WORDCOPYSTOPB STOPALIGNSRCDCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DSTDCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END实验2STARTldr r0,=SRCmov r2,#8mov sp,#0x800mov r4,#1mov r5,#2mov r6,#3mov r7,#4mov r8,#5mov r9,#6mov r10,#7mov r11,#8LOOPadd r4,r4,#1add r5,r5,#1add r6,r6,#1add r7,r7,#1add r8,r8,#1add r9,r9,#1add r10,r10,#1add r11,r11,#1stmfd sp!,{r4-r11}subs r2,r2,#1bne LOOPLDMIA r0!,{r4-r11}STOPLTORGSRCDCD 0,0,0,0,0,0,0,0 exit: B exitEND实验3main:STARTmov r0,#0x3000mov r1,#0x10000001mov r2,#100LOOPstr r1,[r0],#4add r1,r1,#1subs r2,r2,#1bne LOOPmov r0,#0x3000mov r2,#100mov r9,#0LOOP1ldr r1,[r0],#4adds r8,r1,r8adc r9,r9,#0subs r2,r2,#1bne LOOP1STOPb STOPEND实验4STARTmov r8,#20mov r9,#0sub r0,r8,#1LOOPmov r1,r9umull r8,r9,r0,r8mla r9,r1,r0,r9subs r0,r0,#1bne LOOPEND实验5STARTldr r2,=0x12345678CODE16ldr r2,=0x87654321END。

5_ARM实验报告

5_ARM实验报告

5_ARM实验报告
实验名称:ARM处理器实验报告
实验目的:通过实验掌握ARM处理器的基本结构和工作原理,了解ARM指令的执行过程以及汇编语言编程的基本方法。

实验设备:ARM处理器开发板、电脑、开发软件Keil等。

实验步骤:
1. 准备工作:连接ARM开发板和电脑,打开Keil软件,新建一个工程。

2. 编写程序:在Keil软件中编写一个简单的程序,比如将两个数相加并将结果输出。

3. 编译程序:通过Keil软件进行编译,生成可执行文件。

5.调试程序:在ARM开发板上运行程序,并观察程序的运行结果。

6.分析程序:分析程序的运行过程,了解ARM指令的执行过程和程序的运行逻辑。

实验结果:
通过本次实验,我对ARM处理器的基本结构和工作原理有了更深入的了解。

我了解了ARM指令的执行过程,掌握了汇编语言编程的基本方法。

在实验中,我成功编写了一个简单的程序,并在ARM开发板上成功运行并输出了结果。

总结与反思:
通过本次实验,我对ARM处理器有了更深入的了解,对汇编语言编程也有了更多的实践经验。

我发现在编写程序时需要考虑指令的执行顺序和逻辑关系,需要注意程序的优化和逻辑性。

在今后的学习和工作中,我将继续深入学习ARM处理器的原理和应用,不断提高自己的编程技能和实践能力。

结论:
本次实验让我在实践中掌握了ARM处理器的基本原理和工作方法,提高了自己的实践能力和编程技能。

我将继续学习和实践,不断提高自己在ARM处理器领域的水平,为将来的工作和研究打下坚实的基础。

湖南工业大学ARM实验报告

湖南工业大学ARM实验报告

ARM嵌入式系统原理及应用开发实验报告学院:电气与信息工程学院班级:电子信息1204指导老师:谭会生姓名:学号:实验一:ARM汇编指令使用实验——基本数学/逻辑运算一、实验目的1.初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。

2.通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。

二、实验设备1.硬件:PC机。

2.软件:ADS 1.2 / Embest IDE 200X集成开发环境。

三、实验内容熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。

具体实验参考程序如下:四.实验操作步骤1.新建工程。

先建立一个实验文件夹,如E\ARMSY\armasm1;然后运行Embest IDE 集成开发环境,选择File→New Workspace菜单项,弹出一个对话框,输入工程名armasm1a/armasmlb等相关内容;最后单击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。

此时在工作区窗口将能打开该工作区和工程。

2.建立源文件。

选择File→New菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。

编辑完后,保存文件armasmla. s。

1)armasmla. s源程序:/* armasm1a.s */.EQU X, 45 /*定义变量X,并赋值为45*/.EQU Y, 64 /*定义变量Y,并赋值为64*/.EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/.GLOBAL _START.TEXT_START: /*程序代码开始标志*/MOV SP, #STACK_TOPMOV R0, #X /*X的值放入R0*/STR R0, [SP] /*R0的值保存到堆栈*/MOV R0, #Y /*Y的值放入R0*/LDR R1, [SP] /*取堆栈中的数到R1*/ADD R0, R0, R1STR R0, [SP]STOP: B STOP /*程序结束,进入死循环*/.END2).使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。

arm实验报告

arm实验报告

arm实验报告ARM实验报告引言:ARM(Advanced RISC Machines)是一种基于精简指令集计算机(RISC)架构的微处理器系列,广泛应用于移动设备、嵌入式系统和智能家居等领域。

本实验报告旨在介绍ARM架构的基本原理、应用领域以及在实验中的应用。

一、ARM架构的基本原理ARM架构采用精简指令集计算机(RISC)的设计理念,注重指令的简洁性和执行效率。

相较于复杂指令集计算机(CISC),ARM架构的指令集更为简单,指令长度固定,执行速度更快,能够提高处理器的性能和能效比。

ARM架构的核心特点包括:1. 简洁指令集:ARM指令集采用三地址指令格式,指令长度为32位,操作码和寄存器字段清晰明了,易于编程和优化。

2. 统一寄存器:ARM架构中的寄存器集合统一,包括13个通用寄存器、程序计数器(PC)和状态寄存器(CPSR),简化了编程和寄存器间的数据传输。

3. 流水线技术:ARM处理器采用流水线技术,将指令的执行过程分为多个阶段,使得多条指令可以同时执行,提高了处理器的吞吐量。

4. 片上缓存:ARM架构支持片上缓存(Cache),能够提高数据的访问速度和处理器的效率。

二、ARM架构的应用领域1. 移动设备:由于ARM处理器具有低功耗和高性能的特点,广泛应用于智能手机、平板电脑和可穿戴设备等移动设备中。

ARM处理器能够提供流畅的用户体验和长时间的电池续航能力。

2. 嵌入式系统:ARM架构适用于嵌入式系统,如智能家居、工业自动化和车载电子等。

ARM处理器的小尺寸、低功耗和高性能使其成为嵌入式系统的首选。

3. 服务器和云计算:ARM架构逐渐在服务器和云计算领域崭露头角。

ARM服务器具有低能耗和高并发处理的特点,能够满足云计算和大数据处理的需求。

三、ARM实验应用在本次实验中,我们使用ARM开发板进行了一系列实验,包括LED控制、按键输入和串口通信等。

1. LED控制实验:通过编写ARM汇编语言程序,实现对开发板上的LED灯进行控制。

实验二ARM汇编语言实验

实验二ARM汇编语言实验

x .long 0xaa88 Y .long 0x77aa z .long 0x123489ab
.text global _start _start:
MOV R0 , #0x55
实验设备: 宿主机:PC机
wait: B wait .end
目标机:IDE内置的软件模拟器
3、实验操作步骤
1)运行EmbestIDE
2)新建工作区
3)新建一个文件, 另存为以.s为扩展名的文件
4)在文件中编辑程序
5)把编辑好的源文件添加到工程中
6)设置工程属性
选择编译工具 调试配置 连接方式(SIM) 下载符号表文件 调试目标文件Fra bibliotek 下载内存地址
3、实验操作步骤
8)构建工程 可以单独编译一个文件,也可采用build实现编译、连
实验二 ARM汇编语言实验
2019/8/1
1
1 实验目的与要求 2 实验内容 3 实验操作步骤 4 测试数据与实验结果
1、实验目的与要求
目的: 1)熟练使用EmbestIDE集成开发环境。 2)基本掌握 ARM 汇编语言
要求: 1)独立完成程序设计、编码与调试 2)编写实验报告
2、实验内容
按照GNU汇编程序文件格式,用ARM汇编语言编写程序, 求三个数(x、y、z)中的最大值与最小值,分别存放在寄 存器R6、R7中。三个数用伪操作定义如下:
接一起完成。 如果编译过程出错,需要修改错误,直到构建成功。
9)调试 连接目标机 下载 运行(打开源文件、设置断点) 浏览(寄存器、内存)

arm实验报告

arm实验报告

实验二:编写程序将R2的高8位传送到R3的低8位(一),程序代码:.global _start.text_start:mov r2,#0x33000000mov r3,#0x00000022mov r1,r2,LSR#24ORR r3,r1,r3,LSL#8stop:b stop.end(每一条的指令分析如下)(二),实验结果及分析:按F11单步跟踪,看寄存器中内容的变化:1,将寄存器R2赋值0x33000000 :2,将0x00000022写入寄存器R3中:3,将R2的内容右移24位,将结果写入R1,R2保持不变4,将R3的值左边移动8位与R1逻辑或,再将结果放到R3中实验结果:实验三实验64位的加法运算:要求[R1:R0]+[R3:R2]结果放到[R1:R0](一),程序代码.global _start.text_start:mov r0,#0x10000000mov r1,#0x11000000mov r2,#0x22000000mov r3,#0x20200000ADDS R0,R0,R2ADC R1,R1,R3stop:b stop.end(二),实验结果及分析1,给R0赋值2,给R1赋值3,给R2赋值4,给R3赋值5,R0与R2相加,结果写入R06,再将R1与R3带进位位相加,把结果写入R1。

R2R3寄存器的内容不变实验结果:实验7:编写一段程序实现10!(一),程序代码.global _start.text_start:ldr r0,=10 @ 将R0赋值为十进制的10mov r1,r0 @将R0的内容写进R1 ,R0的内容保持不变lable: sub r1,r1,#1 @R1的内容减去1 ,结果送回R0 mul r0,r1,r0 @将R0与R1寄存器的内容相乘,结果写入R0。

R1保持不变cmp r1,#1 @ 将R1的值与1 相比较,看是否相等bgt lable @倘若不为1 ,则跳到lable进行循环stop: @否则停止b stop.end(二),实验结果及分析单步调试,由于寄存器的变换图比较多,只截取最后结果图实验结果:实验8:串拷贝(R0指向源数据串的首地址,R1指向目的数据串的首地址)(一),程序代码.global _start.equ num,8 @定义num= =8_start:LDR R0,=src @将src的值赋给R0LDR R1,=dst @将dst的值赋给R1mov r3,#num @ 将8赋给R3mov lr,pcB strcopystop: b stopstrcopy:LDRB R2,[R0],#1 @加载无符号字节数据STRB R2,[R1],#1 @存储无符号字节数据subs r3,r3,#1 @R3减去1 ,结果送入R3CMP R3,#0 @将R3的内容与0相比较看是否相等BNE strcopymov PC,LR.datasrc:.long 1,2,3,4,5,6,7,0 @定义srcdst:.long 2,4,3,5,6,2,5,0 @定义dst.end(二),实验结果及分析实验结果:心得体会:开始的时候,在实验中编译连接成功后,点击debug的connect后总出现warning:load symbol file failed. 找了些原因,不知道怎么回事,后来才发现在开始的设置中的setting中设置download时忘记同时设置的generate了,当设置好后就解决了该warning。

arm程序设计实验报告

arm程序设计实验报告

arm程序设计实验报告ARM程序设计实验报告一、引言ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)架构。

在本次实验中,我们将学习和实践ARM程序设计的基本知识和技巧。

本报告将介绍实验的目标、步骤和结果,并对所学内容进行总结和思考。

二、实验目标本次实验的主要目标是通过编写ARM汇编程序,实现简单的功能。

具体来说,我们将学习如何使用ARM汇编语言编写程序,了解寄存器、指令和内存的基本概念,以及如何进行程序的调试和优化。

三、实验步骤1. 环境准备:安装ARM开发工具链,并配置开发环境。

2. 编写程序:根据实验要求,编写ARM汇编程序,实现指定的功能。

3. 调试与测试:使用模拟器或硬件平台,调试和测试编写的程序,确保程序的正确性和稳定性。

4. 优化改进:根据实验结果和性能要求,对程序进行优化改进,提高程序的效率和可靠性。

四、实验结果在本次实验中,我们成功完成了以下任务:1. 实现了一个简单的计算器程序,可以进行加减乘除运算,并输出结果。

2. 编写了一个字符串反转程序,可以将输入的字符串逆序输出。

3. 设计了一个简单的游戏程序,用户需要通过按键控制角色移动,避开障碍物。

通过以上实验,我们掌握了ARM汇编语言的基本语法和指令,了解了寄存器和内存的使用方法,以及如何进行程序的调试和优化。

同时,我们还学习了如何与外部设备进行交互,实现更复杂的功能。

五、实验总结通过本次实验,我们深入了解了ARM程序设计的基本原理和技巧。

ARM架构的精简指令集使得程序设计更加高效和灵活,适用于各种嵌入式系统和移动设备。

同时,ARM处理器的低功耗特性也使得其在无线通信、物联网等领域有着广泛的应用前景。

然而,ARM程序设计也存在一些挑战和难点。

首先,由于ARM汇编语言与高级语言相比,语法更为底层和复杂,需要更加深入地理解计算机硬件结构。

其次,ARM处理器的架构和指令集不同于传统的x86架构,需要重新学习和适应。

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

实验五ARM指令系统实验二
注意:本实验在模拟环境下进行,请不要打开实验箱电源!!
一、实验目的:
1、掌握MDK开发环境下多文件编程的方法;
二、实验原理
我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。

这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM汇编程序员的角度理解这种关系为:
一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import和export实现。

例如:
三、实验任务
下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore,score.s的内容如下:
;score.s
area score,data,readwrite
scores
dcb65,78,92,47,77,83,59,93,82,97;学生成绩numofstudent
dcb10;学生人数
maxscore
dcb0;存放最高分数
end
四、实验步骤
;A.s
……
export label
label
……;B.s……import label bl label……
说明标号label可以被其他文件引定义了标号label说明标号label可以被其他文件引引用了标号label
1、用自然语言描述解决给问题的算法,可以尽可能的抽象!
2、建立工程并建立源文件score.s并把输入(复制)上面内容,并将该文件添加到工
程;
3、建立文件maxoftwo.s,在文件中实现子程序getmax,调用者传入的参数位于
r0、r1中,要求找出r0、r1中的较大值,并把较大值保存在r0
当中,该文件架构如下:
;maxoftwo.s
;两个要比较的数在r0,r1中
;比较所得的最大数放在r0当中
area max,code,readonly
getmax
end
4、建立文件init.s,通过调用maxoftwo.s和score.s完成任务,自己编写代码,
注意下页有该文件的参考代码,但希望同学在实验课上尽量不看参考代码或少看代码!
import scores
import numofstudent
import maxscore
import getmax
area init,code,readonly
entry
ldr r2,=scores;指向学成成绩
ldr r3,=numofstudent
ldrb r3,[r3];获取学生人数
ldrb r0,[r2];获取第一个学生的成绩,并暂时认为它是最大的loop
cmp r3,#0
beq exit;判断是否比较结束
ldrb r1,[r2],#1;获取要比较的数
bl getmax
sub r3,r3,#1;人数减一
b loop
exit
ldr r1,=maxscore
strb r0,[r1];将结果保存在maxscore中b.
end。

相关文档
最新文档