基于arm的汇编实验报告
基于arm的汇编实验报告
基于arm的汇编实验报告竭诚为您提供优质文档/双击可除基于arm的汇编实验报告篇一:汇编实验报告实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用eDIT、mAsm、LInK、Debug等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为Abc。
DATAsegmenTbuFDb23h,16h,08h,20h,64h,8Ah,91h,35h,2bh,7FhcneQu$-buF DATAenDs coDesegmenT Assumecs:coDe,Ds:DATA sTART:pushDsxoRAx,AxpushAxmoVAx,DATAmoVDs,AxmoVbx,oFFseTbuF moVcx,cnDeccxmoVAL,[bx]IncbxLp:cmpAL,[bx] JbenexTmoVAL,[bx]nexT:IncbxDeccxJnZLpmoVAh,4chInT21hcoDeenDsenDsTART键入以下命令:c:\>eDITAbc.Asm此时屏幕的显示状态如图1所示。
1图1用eDIT编辑Abc.Asm程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,mAsm汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.obJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在Dos状态下,采用宏汇编程序mAsm 对源程序文件进行汇编,其操作过程如图2所示。
arm实验1 汇编指令实验.
实验1 汇编指令实验一、实验目的:1.掌握ADS1.2集成开发环境及ARMulator软件仿真2.了解ARM汇编指令用法,并能够编写简单的汇编程序3.掌握指令的条件执行,掌握LDR/STR指令,完成存储器的访问4.掌握使用多寄存器传送指令进行数据复制二、实验设备:1.硬件PC机SeaARM5.02.软件ADS1.2、AXD三、实验内容:1.用LDR指令读取0x40003100地址上的数据,将该数据加1,若结果大于10,把0写入原地址, 否则使用STR指令将结果写入原地址。
2.用SrcData表示源数据地址,DstData表示目标地址,用LDMIA指令加载32字节(即8个字)数据到寄存器R2~R9;用STMIA 存储寄存器R2~R9到目标地址。
四、实验步骤1.启动ADS1.2,使用ARM Executable Image工程模板建立一个工程。
如Test12.建立汇编源文件Tset1.s3.设置工程连接地址R0 Base 0x40000000,RW Base 0x40003000。
设置调试入口地址Image Entry point 为0x40000000。
4.编译、连接工程,选择Project Debug ,启动AXD软件仿真调试。
5.打开寄存器窗口(ProcessorRegister,监视R0、R1的值,,打开存储器观察窗口(Memory)设置观察地址0x40003100,显示方式为32bit,监测0x40003100上的值。
6.可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器0x40003100上的值,运行结果见图1。
7.仿照上述步骤1-6做实验内容中第个2题目。
图1 ARM实验内容1的运行结果五、实验参考程序内容1:AREA TEST1, CODE,READONLYENTRYCODE32STARTLDR R1,=COUNTMOV R0,#0STR R0,[R1]LOOPLDR R1,=COUNTLDR R0,[R1]ADD R0,R0,#1CMP R0,#10MOVHS R0,#0STR R0,[R1]B LOOPCOUNT EQU 0X40003100END内容2:AREA TEST2,CODE,READONL YENTRYCODE32START LDR R0,=SrcData ; 设置源数据地址LDR R1,=DstData ; 设置目标地址LDMIA R0,{R2-R9} ; 加载32字节(即8个字)数据到寄存器R2~R9STMIA R1,{R2-R9} ; 存储寄存器R2~R9到目标地址B .AREA Example2_dat, DATA, READWRITESrcData DCD 0, 1, 2, 3, 4, 5, 6, 7DstData SPACE 32END。
ARM汇编指令实验
实验1 ARM汇编指令实验1、实验目的:●熟悉ADS开发环境和wiggler调试环境。
●掌握简单的ARM汇编指令的使用方法。
2、实验设备●PC机、JTAG调试板、S3C2410开发板。
3、实验内容●熟悉ARM开发环境的建立。
●使用ARM汇编指令设置GPIO口的相应寄存器,控制LED灯的亮灭。
4、实验原理下面介绍本实验用到的一些汇编指令。
1).LDR/STR指令说明:LDR/STR指令用于加载/存储寄存器。
举例说明:示例:LDR r3,[r0],#4 //从r0表示的地址中读取数据分别存放到r3中,然后将r0加4。
STR r3, [r1],#4 //将r3中的数据保存到r1表示的地址中,然后将r1加4。
LDMIA/STMIA指令说明:LDM/STM指令用于加载/存储多个寄存器,举例示例:LDMIA r0!,{r4---r11}//从r0表示的地址中顺利取出8个字数据分别存放到r4-r11中。
2).程序分支指令B指令说明:B指令为ARM的分支指令,将引起处理器转移到制定标号处执行。
示例:B Label //处理器转移到Label标号处执行BEQ stop//Z标记置位,则跳转到stop标号处执行;否则继续下一条指令BNE octcopy//Z标记清0,则跳转到octcopy标号处执行;否则继续下一条指令3).其他指令SUBS说明:该指令有SUB指令加上S后缀组成,S后缀标志根据执行结果更新条件标志码。
示例:SUBS r3,r3,#1//如果r3等于0,则Z位清0MOVS指令说明:该指令由MOV指令加上后缀S组成,S后缀标志根据执行结果更新条件标志码。
示例:MOVS r3,r2,LSB#3//将r2右移3位即除以8,然后赋值给r3。
5、实验相应寄存器说明GPFCON-端口配置寄存器。
GPFDAT-端口数据寄存器GPFUP-端口上拉电阻使能寄存器6、实验电路图7.实验程序实现利用ARM汇编语言实现跑马灯程序/* asm.s */GPFCON EQU 0x56000050GPFDAT EQU 0x56000054GPFUP EQU 0x56000058EXPORT LEDTESTAREA LEDTESTASM,CODE,READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读LEDTEST;设置GPF4-GPF7为outputldr r0,=GPFCONldr r1,=0x5500str r1,[r0];禁止GPF4-GPF7端口的上拉电阻ldr r0,=GPFUPldr r1,=0xff00str r1,[r0];将数据端口F的数据寄存器的地址赋值给寄存器r2ldr r2,=GPFDAT;跑马灯循环ledloop1ldr r1,=0xf0str r1,[r2] ;使GPF7输出高电平,D9-D12灯会灭bl delay1 ;调用延迟子程序ledloop2ldr r1,=0x0str r1,[r2] ;使GPE7输出低电平 D9-D12灯亮bl delay2 ;调用延迟;延迟程序delay1ldr r3,=0x1ffff ;设置延迟的时间delay3sub r3,r3,#1 ;r3=r3-1cmp r3,#0x0 ;将r3的值与0相比较bne delay3 ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句b ledloop2mov pc,lr ;返回;延迟程序delay2ldr r3,=0x2ffff ;设置延迟的时间delay4sub r3,r3,#1 ;r3=r3-1cmp r3,#0x0 ;将r3的值与0相比较bne delay4 ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句b ledloop1mov pc,lr ;返回END ;程序结束符。
实验一 ARM汇编程序的编写以及启动代码的分析
实验ARM汇编程序的编写以及启动代码的分析一、实验目的:练习ARM汇编程序的编写,对提供的程序的启动代码进行分析,了解S3C2410初始化过程, 初始化代码主要是包含在start.s中。
二、实验原理:启动程序要完成的任务包括:硬件初始化,系统存储系统的配置,复制二级中断向量表。
启动程序过程●系统硬件初始化系统上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,执行完,系统进行堆栈和存储器的初始化。
使用了外设,则需要设置相关的寄存器,确定其刷新频率、总线宽度等信息。
●代码段复制到RAM中运行需要把系统的代码复制到RAM中运行。
映像文件内部共有三种输出段:RO段、RW段和ZI段。
ARMLink同时还产生了这三种输出段的起始和终止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$RW$Limit、Image$ZI$Base和Image$$ZI$$Limit。
可以在程序中使用这些定位信息。
将ROM中的代码和数据搬移到RAM中。
●建立二级中断向量表在ARM系统中,中断向量表位于0X0开始的地址处,意味着无论运行什么样的上层软件,一旦发生中断,程序就得到Flash存储器中的中断向量表里去,降低系统的运行效率。
因此在RAM中建立自己的二级中断向量表,当中断发生后,程序直接从RAM中取中断向量进入中断子程序。
尤其是在中断频繁发生的系统里,这种方法可以大大提高系统的运行效率。
三、实验内容:1.运行一个简单的串口程序,单步执行初始化代码,观察寄存器变化。
2.分析系统上电后的初始化工作包括哪些内容。
3.分析中断的处理过程,包括中断向量表的建立、中断源的识别及中断IRQ 服务程序是如何进入的。
ARM汇编实验报告
ARM汇编实验报告一、实验目的本次实验旨在通过编写ARM汇编程序,加深对ARM架构和指令集的理解,并掌握ARM汇编程序的设计和调试技巧。
二、实验内容本次实验分为两个部分,分别是基础部分和进阶部分。
1.基础部分基础部分要求编写一个ARM汇编程序,实现输入一个整数n,并输出从1到n的所有奇数的和。
具体要求如下:(1)使用汇编语言实现。
(2)使用r0寄存器保存输入的整数n。
(3)使用r1和r2寄存器保存计算中的临时变量。
(4)使用r3寄存器保存输出的结果。
(5)使用ldr指令从内存中加载数据,str指令将数据保存到内存中。
(6)使用循环实现计算。
(7)使用swi指令终止程序。
2.进阶部分进阶部分要求实现一个排序算法,将从键盘输入的n个整数进行排序,并输出排序后的结果。
具体要求如下:(1)使用汇编语言实现。
(2)使用r0寄存器保存排序的整数个数n。
(3)使用r1寄存器保存指向数组的指针。
(4)使用r2和r3寄存器保存计算中的临时变量。
(5)使用ldr指令从内存中加载数据,str指令将数据保存到内存中。
(6)使用循环实现排序算法。
(7)使用swi指令终止程序。
三、实验步骤1.基础部分实现:(1)将输入的整数n保存到r0寄存器中。
(2)初始化r1和r3寄存器,将计算所需的临时变量置为0。
(3)使用ldr指令读取r0寄存器的值到r2寄存器。
(4)使用循环实现奇数求和的计算,将结果保存到r3寄存器。
(5)使用str指令将r3寄存器的值保存到内存中。
(6)使用swi指令终止程序。
2.进阶部分实现:(1)将输入的整数n保存到r0寄存器中。
(2)使用ldr指令将数组的首地址保存到r1寄存器。
(3)使用循环结构实现排序算法。
(4)使用str指令将排序后的结果保存到内存中。
(5)使用swi指令终止程序。
四、实验结果经过编写和调试,基础部分程序可以正确输入整数n,并输出从1到n的所有奇数的和。
进阶部分程序可以正确输入整数n,并对输入的n个整数进行排序,并输出排序后的结果。
实验二_ARM汇编语言程序设计
实验二ARM汇编语言程序设计实验目的1、了解ARM汇编语言程序的结构特点2、了解ARM汇编语言程序的编写方法3、掌握用ARM汇编语言设计简单程序实验仪器设备及软件ARM实验箱,计算机,ADS程序开发软件实验原理1、存储空间的格式ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。
字节还可以按小端格式或大端格式排列。
ARM实验箱中存储器的配置见附录C。
2、ARM的寄存器ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。
每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。
因此可以编写出更精简的程序。
3、ARM指令的条件执行状态寄存器中的N,Z,C,V是数据处理指令影响的标志。
几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。
条件执行的指令后缀参考教材。
4、桶形移器ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。
利用移位器,一条ARM 指令可以完成更多功能。
移位操作有:LSL 逻辑左移LSR 逻辑右移ASL 算术左移ASR 算术右移ROR 循环右移RRX 带扩展循环右称实验内容1、把内存中ramaddr开始的ramword个字清零(1)用后变址法ramaddr equ 0x31000000ramword equ 64clrrammov r0,#0mov r1,#ramwordldr r2,=ramaddrclrram1str r0,[r2],#4subs r1,r1,#1bne clrram1mov pc,lrLTORG(2)用前变址法clrrambakmov r0,#0mov r1,#ramwordldr r2,=ramaddr-4clrram2str r0,[r2,#4]!subs r1,r1,#1bne clrram2mov pc,lrLTORG2、把寄存器中,r0-r12的32位无符号32位数进行求和,和的低32位保存在r1中,高32位保存在r0中。
实验一 ARM汇编指令实验
大连理工大学软件学院《嵌入式系统原理与设计》实验报告(每组一份,打印)姓名:刘华一学号:201492405 班级:软1411姓名:李军学号:201493076 班级:软日1401实验时间:16年9月30日实验室:嵌入式实验室指导教师:邱铁成绩:实验一:ARM汇编指令一、实验目的和要求1. 熟悉ARM Developer Suite v1.2集成开发环境2.ARM汇编语言指令功能训练二、实验原理和内容RAM是32位体系结构,每个内存单元是32位的,对于64位的数需要两个字才能存储。
题目:熟悉ARM Developer Suite v1.2集成开发环境逐条试验ARM汇编语言指令功能,并观寄存器\存储器的变化三、主要仪器设备及软件编程环境硬件:PC机软件:ARM Developer Suite v1.2集成开发环境,Windows 98/2000/NT/XP四、实验步骤与编程1.打开软件ARM Developer Suite v1.2,选择file中的新建,在project中选择第一个,输入project name2.在同一个界面选择file,建立一个.s文件,打开此文件后就可以在里面进行编写汇编指令3.输入示例代码后,在原有的project对话框中鼠标右键连接到你所建的工程文件下的.s文件,再点击编译。
4.在新弹出的界面中,打开左边的寄存器列表,再点击单步调试,就可以看到每条指令执行时相应寄存器的变化以及相应要执行的下一条指令。
五、实验数据与结果分析数据传送类指令:算数运算类指令:逻辑运算类指令:比较指令:乘法指令:六、讨论、建议由于对于软件尚未熟悉,且windows系统兼容性原因,在开始配置阶段浪费了较多时间,由于时间有限,只是大体练习了一遍,在批量读取及存储方面仍存在较大问题,需要回去后勤加练习。
实验二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)调试 连接目标机 下载 运行(打开源文件、设置断点) 浏览(寄存器、内存)
汇编指令实验报告一
实验步骤和结果:
(1)打开Keil uVision,在“Project”—>“New uVision Project”新建一个名为41的工程并为其选择ARM芯片,如下图:
(2)在新建的工程里新建一个名为a.s的文件,在“Project workpace”将文件导入工程中,如下图
(3)在a.s文件里输入如下汇编代码:
AREA EX4_41,CODE,READONLY
ENTRY
CODE32
START LDR R0,=0x90010;变量X的地址送入R0
LDR R1,[R0],#4 ;变量X的值读入R1
LDR R2,[R0],#4 ;变量Y的值读入R1
ADD R1,R1,R2 ;X+Y结果存入R1
STR R1,[R0] ;结果存入Z中
B START
END
(4)在“project”—>“Options for Target”Target1””—>“Target”做相应设置;,结果如下图:
分配只读内存范围
去掉最上面的勾
在“Debug”选项添加“Debug.ini”文件
(5)编译运行代码,并调试代码,寄存器地址变化结果如下图:
(6)控制台地址栏输入地址查看。
arm汇编语言编程实验报告
arm汇编语言编程实验报告实验二ARM汇编语言编程实验.doc班级计算机科学与技术(嵌入式)学号课程名称ARM体系结构姓名实验成绩日期指导教师冯灵霞实验报告院系信息工程学院一、实验目的1、掌握ADT IDEARM开发环境中基本的工程设置以及程序编译方法。
2、掌握ADT IDEARM开发环境中基本的程序调试方法。
3、掌握基本的ARM汇编语言编程方法。
二、实验内容用汇编语言编写一个程序实现如下目的:从源地址拷贝num个字(num*4个字节)的数据到目的地址dst中。
三、预备知识1、ARM汇编语言的基础知识。
2、程序调试的基础知识和方法。
四、实验设备1、硬件:JXARM9-2440教学实验箱、PC机。
2、软件:PC机操作系统Windows 98(2000、XP)+ADT IDE开发环境。
五、基础知识ADT IDE集成了GNU汇编器arm-elf-as、编译器arm-elf-gcc和链接器arm-elf-ld。
在ADT IDE中编写的程序必须符合GNU的语法规则。
下面介绍一些基本的GNU汇编知识以及本实验用到的ARM 汇编指令。
1、GUN汇编语言语法及规则1)_start_start为程序默认入口点,代码段默认起始地址为0x800,如果需要修改可以在链接脚本文件中指定。
2)标号语法:symbol:symbol为定义的符号。
说明:上述代码定义一个标号,它表示程序中当前的指令或数据地址。
如果在程序中出现两个相同的标号,汇编器将会产生一个警告,且只有第一个标号有效。
2、GNU汇编语言伪操作1).equ伪操作语法:.equ symbol,exprexpr为基于寄存器的地址值、程序中的标号、32位的地址常量或位的常量。
symbol为.equ伪操作为expr定义的字符名称。
说明:该操作符为数字常量、基于寄存器的值和程序中的标号定义一个字符名称,相当于C语言中的宏定义。
示例:.equ USERMODE,0x102).global伪操作符语法:.global symbolsymbol为声明的符号的名称。
arm报告
ARM嵌入式系统上机实验报告实验一:ARM汇编语言程序设计一、实验目的:1、通过实验掌握ARM指令的特点和寻址方式;2、掌握简单的ARM汇编语言的程序设计;3、了解集成开发环境Embest IDE及其开发软件的应用;二、实验环境:Embest IDE 应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备的面向嵌入式系统的开发和调试工具。
其开发软件Embest IDE for ARM 是集编辑器、编译器、调试器、工程管理器(projectmanager)于一体的高度集成的窗口环境,用户可以在Embest IDE 集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应用程序。
三、实验步骤及结果:2、编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位)。
(1)、编辑源程序:(a)[File]-->[Newworkplace];[File]-->[New];(b)在编辑框编辑源程序如下:.global _start.text_start:mov r1,r2,LSR#24orr r3,r1,r3,LSL#8stop:b stop.end(c)保存.s文件;(d)[Projectsource]-->[Add File...]。
(2)、编译链接:(a)[Project]-->[Setting],分别设置Process、Remote:(b)编译;编译成功后[Project]-->[Setting]-->[Debug]:(3)、运行调试:(a)[Debug]-->[Remote connect];(b)[Debug]-->[Download];(4)、实验结果:单步跟踪后的结果:存储器的结果显示:寄存器的结果显示:R1低八位←R2高8位:R3左移,R3低八位←R1低8位:3、实现64位的加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中。
ARM实验报告汇编调用C语言
XI`AN TECHNOLOGICAL UNIVERSITY 实验报告西安工业大学实验报告一丶实验目的1)阅读Embest Arm EduKit II 启动代码,观察处理器启动过程;2)学会使用Embest IDE 辅助信息窗口来分析判断调试过程和结果;3)学会在Embest IDE 环境中编写、编译与调试汇编和C 语言相互调用的程序。
二、实验内容用汇编语言编写一段程序,调用C语言程序进行运算,并输出结果三、实验原理程序只要遵守ATPCS 相应规则,就可以使用不同的源代码编写程序。
程序间的相互调用最主要的是解决参数传递问题。
应用程序之间使用中间寄存器及数据栈来传递参数,其中,第一个到第四个参数使用R0-R3,多于四个参数的使用数据栈进行传递。
这样,接收参数的应用程序必须知道参数的个数。
但是,在应用程序被调用时,一般无从知道所传递参数的个数。
不同语言编写的应用程序在调用时可以自定义参数传递的约定,使用具有一定意义的形式来传递,可以很好地解决参数个数的问题。
常用的方法是把第一个或最后一个参数作为参数个数(包括个数本身)传递给应用程序。
四、实验过程1)打开Embest IDE Pro软件,选择菜单项File-->New Workspace,系统弹出对话框,创建名为explasm的新工程,并同时创建一个与工程名相同的工作区。
此时在工作窗口将打开该工作区和工程。
2)编写源代码文件并分别保存为randtest.c,random.s和ldscript,并把它们加入到工程里面。
3)基本配置:选择菜单项Project-->Settings,弹出工程设置对话框,在工程设置对话框中,选择Processor设置对话框,选择ARM7对目标板所用处理器进行配置。
4)生成目标代码:选择菜单项Build-->Build xxx_a.s,生成目标代码。
5)调试设置:使用快捷键Alt+F7,弹出设置对话框,在工程设置对话框中,选择Remote设置对话框,对相应模块进行配置。
(实验二)基于ARM的汇编语言程序设计指导书
实验二基于ARM的汇编语言程序设计一、实验目的1. 了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程二、实验内容1. 用汇编语言编写一个简单的应用程序三、实验设备1. PentiumII以上的PC机。
2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真调试驱动程序四、汇编语言简介1.ARM汇编的一些简要的书写规范ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。
ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。
在ARM 汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
2.ARM汇编语言程序的基本结构在ARM汇编语言程序中,是以程序段为单位来组织代码。
段是相对独立的指令或数据序列,具有特定的名称。
段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。
一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。
可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。
◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。
源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
3.简单的小例子下面是一个代码段的小例子AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, [R0]LDR R0, =0x3F50008LDR R1, 0x1STR R1, [R0]……END在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。
ARM汇编实验报告(精品文档)_共42页
《嵌入式系统原理与应用B》课程实验报告ARM汇编语言编程与调试要求完成的主要实验1、给出的数据中寻找最大、最小数问题2、两种求和运算的编程与调试3、第四章作业第9题4、排序冒泡程序的调试与总结5、第四章作业第11题说明:标注完成的实验,未完成的给予说明专业名称:通信工程班级:1510班学生姓名:石龙飞学号(8位):03151307指导教师:刘钊远给出的数据中寻找最大、最小数问题一、实验目的1、学习汇编软件的安装、使用,熟悉汇编环境。
2、学会使用汇编软件,如何新建一个工程,如何书写源代码,如何进行链接、编译,以及如何调试。
3、尝试一些简单的指令,学会用汇编指令写一些简单的程序。
二、实验内容编写一个汇编程序,要求在给定的一组数中找到最大数和最小数。
三、实验主要步骤1、首先建立一个工程2、再新建.s的源文件,添加到工程中3、编写源代码,这里主要是实现在一组数中寻找最大数和最小数,最后将找到的两个数放到相应的寄存器中。
型以及在哪里出错。
5、进行debug调试,查找代码中的逻辑错误,若无逻辑错误,可在debug界面查看运行结果,其最需要的关注的几个地方是菜单栏的一组运行按钮、源码执行的步骤以及断点、左边的寄存器状态、下方的存储器状态,将这些综合起来,就可以很明确的回到程序如何运行,运行结果如何。
四、实验代码AREA symbol,CODE,READONLYENTRYCODE32STARTLDR R0, =numsMOV R2, #1INITNUMSSTR R2, [R0], #4ADD R2, R2, #2CMP R2, #101BNE INITNUMSLDR R0, =numsLDR R2, [R0]LDR R3, [R0]MOV R1, #1FINDMAXMINLDR R4, [R0], #4CMP R2, R4MOVCC R2, R4CMP R3, R4MOVCS R3, R4ADD R1, R1, #1CMP R1, #101BNE FINDMAXMINSTOPb STOPAREA Data, DATA, READWRITEnums SPACE100END五、实验总结与分析1、实验结果分析其中用红色方框框起来的是最后程序运行的结果,也就是在R3中保存了最小数在R2中保存了最大数,完成了实验要求。
ARM体系结构实验5 ARM汇编程序设计实验报告
实验目的和要求1.掌握ARM伪指令和伪操作2.掌握结构化程序的设计3.掌握各种调试方法实验内容与分析设计1.练习教材P334 7.6的实验。
(此操作可以不写在实验报告中)2.已知有32位数X存放在存储器的地址0x90010中,要求实现:若X大于0,则Y=1;若X=0,则Y=0;否则,Y=-1.其中Y的值存放在0X90014中。
3.编写一个汇编程序,要求求两个数组DATA1和DA TA2对应的数据之和,并把和存储在新数组SUM中,即实现SUM[i]=DATA1[i]+DATA2[i].实验步骤与调试过程实验1:1.启动MDK开发环境,建立工程test6,分别编辑汇编源程序文件为test1.s,test2.s,test3.s;2.编译并链接程序test1.s,使用寄存器观察器,同时将程序反汇编格式显示出来,运用单步执行方式调试程序test1.s;3.编译并链接程序test2.s,使用寄存器观察器,运用单步执行方式调试程序;4.编译并链接程序test3.s,使用寄存器观察器,运用单步执行方式调试程序。
实验2:1.启动MDK开发环境,建立工程test,编辑汇编源程序文件test.s;2.编译并链接程序test.s,运用单步执行方式调试程序。
实验3:1.启动MDK开发环境,建立工程test,编辑汇编源程序文件test.s;2.编译并链接程序test.s,运用单步执行方式调试程序。
实验结果由于电脑问题,没有截图,但是工程及程序完整,望老师见谅。
主要算法和程序清单实验1(部分代码):test1.spreserve8area reset,code,readonlyentrycode32mov r0,#1b startdata1 dcb "strin"align 4startbl func1bl func2b startfunc1ldr r0,=startldr r1,=darea+12ldr r2,=darea+400mov pc,lrltorgfunc2ldr r3,=darea+60ldr r4,=darea+6004mov pc,lrdarea space 4000end实验2:AREA Exam,CODE,READONL YENTRYSTART LDR R1,=0x90010LDR R2,[R1]CMP R2,#0BEQ ZEROBGT PLUSMOV R0,#-1B FINISHLPUS MOV R0,#1B FINISHZERO MOV R0,#0FINISH STR R0,[R1]END实验3:AREA BlockData,DA TA,READWRITE DA TA1 DCD 2,5,0,3,-4,5,0,10,9DA TA2 DCD 3,5,4,-2,0,8,3,-10,5 SUM DCD 0,0,0,0,0,0,0,0,0AREA Exam,CODE,READONL YENTRYSTART LDR R1,=DA TA1LDR R2,=DA TA2LDR R3,=SUMMOV R0,#0LOOP LDR R4,[R1],#4LDR R5,[R2],#4ADDS R4,R4,R5ADD R0,R0,#1STR R4,[R3],#4BNE LOOPB STARTEND。
ARM实验三 基于ARM的汇编编程实验
实验三基于ARM的汇编编程实验一,实验目的1.熟悉ADS1.2软件开发环境;2.掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序;3.掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。
4.掌握ARM乘法指令的使用方法;5.了解子程序编写及调用。
二,实验设备硬件:PC机一台。
软件:Windows98/XP/2000系统,ADS1.2集成开发环境。
三,实验内容实验内容一:1.使用LDR指令读取0x30003100上的数据,将数据加1,若结果小于10,则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。
2.使用ADS1.2软件仿真,单步,全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0,R1的值,打开存储器观察窗口(Memory)监视0x30003100上的值。
实验内容二:1.使用STMFD/LDMFD,MUL指令编写一个整数乘方的子程序,然后使用BL 指令调用子程序计算X n的值。
2.X n= X*X*X …… *X,其中相乘的X的个数为n个。
先将X的值装入R0和R1,使用寄存器R2进行计数,循环n-1次R0=R0*R1,运算结果就保存在R0中。
(不考虑溢出问题)3.注意:若n=0,则运算结果直接赋1;若n=1,则运算结果直接赋X。
四,实验步骤实验内容一的步骤:1.启动ADS1.2,使用ARM Executable Image工程模板建立一个工程arm1.mcp。
如图5.1所示。
图5.1 新建工程对话框2.建立汇编源文件arm1.s,编写实验程序,然后添加到工程中。
如图5.2所示。
图5.2 新建汇编文件对话框3.设置工程连接地址RO Base为0x30000000,RW Base为0x30003000,设置调试口地址Image entry point为0x30000000。
图5.3 DebugRel Settings对话框4.编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。
ARM实验报告综合实验
ARM实验报告综合实验摘要:ARM微处理器已经在各种电子产品中得到广泛应用。
本实验旨在通过对ARM实验板的详细学习,深入理解和掌握ARM微处理器的工作原理及应用。
通过搭建实验平台,完成基本的指令执行、数据传输和I/O操作等功能。
通过实验,掌握ARM汇编语言的基本语法和实现方法,同时提升对嵌入式系统的理解和应用能力。
关键词:ARM微处理器、实验平台、指令执行、数据传输、I/O操作、汇编语言1.引言ARM(Advanced RISC Machines)微处理器是一种精简指令集(RISC)的微处理器架构,以其高性能、低功耗和广泛应用等特点受到了广泛的关注和应用。
本实验旨在通过对ARM实验板的学习和研究,深入理解ARM微处理器的工作原理和应用。
2.实验目的2.1理解ARM微处理器的工作原理;2.2掌握ARM汇编语言的基本语法和实现方法;2.3学习搭建实验平台,完成指令执行、数据传输和I/O操作等功能;2.4提升对嵌入式系统的理解和应用能力。
3.实验内容3.1搭建实验平台3.2学习ARM汇编语言通过阅读相关资料,了解ARM汇编语言的基本语法和寄存器等特点,了解ARM微处理器的指令集和指令执行方式。
3.3编写实验程序根据实验指导书中的要求,编写实验程序,包括基本的指令执行、数据传输和I/O操作等功能实现。
3.4调试和测试经过编写程序后,需要进行调试和测试,确保程序能够正确执行,并达到预期的功能。
4.实验结果通过实验,成功搭建了ARM实验平台,并且实现了基本的指令执行、数据传输和I/O操作等功能。
通过对ARM汇编语言的学习和实践,掌握了其基本语法和实现方法。
5.结论本实验通过对ARM实验板的学习和研究,深入理解了ARM微处理器的工作原理和应用。
通过搭建实验平台和编写实验程序,进一步掌握了ARM 汇编语言的基本语法和实现方法。
通过调试和测试,验证了程序的正确性和功能实现。
通过本实验,提升了对嵌入式系统的理解和应用能力。
ARM汇编指令实验
ARM 汇编指令实验一一. 实验目的1.初步学会使用μVision IDE for ARM 开发环境及ARM 软件模拟器;2.通过实验掌握简单 ARM 汇编指令的使用方法。
二. 实验设备1.硬件:PC 机一台;2.软件:μVision IDE for ARM 集成开发环境,Windows 98/2000/NT/XP。
三. 实验内容1.熟悉开发环境的使用并使用 ldr/str,mov 等指令访问寄存器或存储单元;2.使用 add/sub/lsl/lsr/and/orr 等指令,完成基本算术/逻辑运算。
四. 实验原理ARM 处理器共有37 个寄存器:31 个通用寄存器,包括程序计数器(PC)。
这些寄存器都是32 位的;6 个状态寄存器。
这些寄存器也是32 位的,但是只是使用了其中的12 位。
1. ARM 通用寄存器通用寄存器(R0-R15)可分为三类:1)不分组寄存器 R0~R7不分组寄存器R0~R7 在所有处理器模式下,它们每一个都访问一样的32 位寄存器。
它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
2)分组寄存器 R8~R14分组寄存器R8~R14 对应的物理寄存器取决于当前的处理器模式。
若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。
寄存器R8~R12 各有两组物理寄存器:一组为FIQ 模式,另一组为除了FIQ 以外的所有模式。
寄存器R8~R12 没有任何指定的特殊用途,只是在作快速中断处理时使用。
寄存器R13,R14 各对应6 个分组的物理寄存器,1 个用于用户模式和系统模式,其它5 个分别用于5 种异常模式。
寄存器R13 通常用做堆栈指针,称为SP;寄存器R14 用作子程序链接寄存器,也称为LR。
3)程序计数器 PC寄存器R15 用做程序计数器(PC)。
在本实验中,ARM 核工作在用户模式,R0~R15 可用。
2. 存储器格式ARM 体系结构将存储器看作是从零地址开始的字节的线性组合。
实验2基于ARM的汇编语言程序设计
实验2基于ARM的汇编语⾔程序设计实验⼆基于ARM的汇编语⾔程序设计⼀、实验⽬的了解ARM汇编语⾔的基本框架,学会使⽤ARM的汇编语⾔编程。
⼆、实验设备标准硬件。
三、实验内容⽤汇编语⾔编写“连续发送128个ASCII字符”的应⽤程序。
四、实验原理ARM汇编语⾔程序中,是以程序段为单位来组织代码。
段是相对独⽴的指令或数据序列,具有特定的名称。
段可以分为代码段和数据段,代码段的内容为执⾏代码,数据段存放代码运⾏时所需的数据。
⼀个汇编程序⾄少应该有⼀个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成⼀个可执⾏⽂件。
因此在进⾏汇编时除了要了解其书写规范外,还要能理解段的应⽤。
下⾯是⼀个代码段的⼩例⼦,实现数据的装载AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, [R0]LDR R0, =0x3F50008LDR R1, 0x1STR R1, [R0]…END上述程序,在汇编程序中,⽤AREA指令定义⼀个段,并说明定义段的相关属性,其格式为AREA 段名,属性1,属性2,…,属性n。
本例中定义了段名为Init的属性为代码段,只读。
ENTRY伪指令标识程序的⼊⼝,即代码从此处开始执⾏,程序的末尾为END指令,该伪指令告诉编译器源⽂件的结束,每⼀个汇编⽂件都要以END结束。
AREA DataArea, DATA, NOINIT, ALIGN=2DISPBUF SPACE 200RCVBUF SPACE 200…DATA为数据段的标识。
本程序段名为DataArea,属性数据段,不含初始化,采⽤align表达式对其⽅式2表达式次⽅。
五、实验步骤1.打开ADS1.2开发环境,打开\基础实验\实验五\asm.mcp项⽬⽂件,然后进⾏compile和make⽣成*.axf⽂件。
2.编译通过后,进⼊ADS1.2调试界⾯,加载\基础实验\实验五\asm_Data\Debug中的映象⽂件asm.axf。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除基于arm的汇编实验报告
篇一:汇编实验报告
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计
一、实验目的及要求:
1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用eDIT、mAsm、LInK、Debug等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境
1.汇编语言源程序的建立
本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为Abc。
DATAsegmenT
buFDb23h,16h,08h,20h,64h,8Ah,91h,35h,2bh,7Fh cneQu$-buF
DATAenDs
coDesegmenT
Assumecs:coDe,Ds:DATA
sTART:pushDs
xoRAx,Ax
pushAx
moVAx,DATA
moVDs,Ax
moVbx,oFFseTbuF
moVcx,cn
Deccx
moVAL,[bx]
Incbx
Lp:cmpAL,[bx]
JbenexT
moVAL,[bx]
nexT:Incbx
Deccx
JnZLp
moVAh,4ch
InT21h
coDeenDs
enDsTART
键入以下命令:
c:\>eDITAbc.Asm
此时屏幕的显示状态如图1所示。
1
图1用eDIT编辑Abc.Asm程序窗口
程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件
一般情况下,mAsm汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.obJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在Dos状态下,采用宏汇编程序mAsm 对源程序文件进行汇编,其操作过程如图2所示。
图2mAsm宏汇编程序工作窗口
汇编过程的错误分警告错误(warningerrors)和严重
错误(severeerrors)两种。
其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。
这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
3.用连接程序生成可执行程序文件
经汇编以后产生的目标程序文件(.obJ文件)并不是可执行程序
文件,必须经过连接以后,才能成为可执行文件(即扩展名为.exe)。
2
连接过程如图3所示。
图3LInK连接程序工作窗口
上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。
连接以后,便可以产生可执行程序文件(.exe文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在Dos状态下执行该程序。
如:c:\>Abc
本程序当中没有用到Dos中断调用指令,所以在屏幕上
看不到程序执行的结果。
实验二(2)分支及循环程序设计
一、实验目的及要求
熟练掌握转移指令,掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成条件和判断条件的方法和技巧。
掌握循环程序设计的方法(单重循环结构和两重循环结构),正确分配与使用寄存器,根据实际问题选择控制循环的方法(循环次数已知和循环次数未知)。
二、实验内容
编写下列程序并调试通过。
1.通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。
2.编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:
1)如果三个数都不相等,显示0;
2)如果三个数都两个相等,显示1;
3)如果三个数都相当,显示2。
3
3.编写一个程序,要求通过键盘接收一个个位数n,然后显示n个字母‘$’。
4.从键盘上输入一个8位二进制数,在显示器上显示其相应的十六进制数。
(教材p170习题5)
5.要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。
6.用15行*16列的表格形式显示AscII码为10h-FFh的所有字符。
三、实验设计方案说明
实验1
流程图:
实验完整代码:
DATAssegmenT
;此处输入数据段代码
DATAsenDs
sTAcKssegmenT
;此处输入堆栈段代码
sTAcKsenDs
coDessegmenT
Assumecs:coDes,Ds:DATAs,ss:sTAcKs
;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段
sTART:moVAx,DATAs
moVDs,Ax;初始化数据段的段地址
moVcL,3
L:moVAh,01h;输入一个小写字母,常用Dos功能调用,
入口参数为Ah
InT21h
cmpAL,61h
JbL
cmpAL,7Ah
JAL
moVbL,AL
moVDL,0Dh;回车
moVAh,02h;常用Dos功能调用,入口参数为Ah
4
;对输入进行判断,确保输入的字符为a~z
InT21h
moVDL,0Ah;换行
moVAh,02h
InT21h
subbL,01h;按顺序输出三个字母
cmpbL,61h;判断前导字母是否合法
JnbL1ADDbL,1AhmoVDL,bLmoVAh,02h
InT21h
subbL,19hJmpL2
L1:moVDL,bL;输出录入字母的前导字母
moVAh,02hInT21hIncbL
L2:moVDL,bL;输出录入字母本身
moVAh,02hInT21hIncbLcmpbL,7Ah;判断后续字母是否
合法JnAL3subbL,1Ah
L3:moVDL,bL;输出录入字母的后续字母
moVAh,02h;常用Dos功能调用,入口参数为AhInT21h moVAh,4ch
InT21h
coDesenDs
enDsTART
5
篇二:汇编实验报告终
实验一汇编语言源程序的输入
一、实验目的
1.通过实验了解和熟悉微机系统的配置。
2.学习在Debug状态下输入汇编源程序的方法。
3.初步掌握调试(在Debug状态下)的过程。
二、实验原理
1.本实验要求在Debug状态下输入汇编源程序,并用Debug命令
进行调试。
用单步跟踪的方法验证指令的功能。
2.以下是给定的参考程序,并在实验时在每条指令的“;”
符号右边
按要求填写指令的执行结果。
注:⑴微机进入Debug状态下之后,一切立即数和地址数据均被默
认为十六进制数,在输入时数的后面不加后缀“h”;
⑵在Debug状态下执行程序时,“InT20h”指令可使系统执行完该
指令前的程序时返回到“-”提示符状态,并且恢复cs 和Ip寄存器原来的
值。
参考程序:
moVAx,2000;AL=00h
moVDs,Ax;Ds=2000h
noTAx;Ax=DFFFh
xoRAx,Ax;Ax=0000h
DecAx;Ax=FFFFh
IncAx;Ax=0000h
moVbx,2030;bh=20h
moVsI,bx;sI=2030h
moV[sI],bL;[2030h]=30h
moVwoRDpTR[sI],10F;[2030h]=0Fh[2031h]=01h
moVDI,sI;DI=2030h。