实验五 (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。
实验五 ARM 指令系统实验二
实验五ARM指令系统实验二注意:本实验在模拟环境下进行,请不要打开实验箱电源!!一、实验目的:1、掌握MDK开发环境下多文件编程的方法;二、实验原理我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。
这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM汇编程序员的角度理解这种关系为:一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import和export实现。
例如:三、实验任务下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore,score.s的内容如下:;score.sarea score,data,readwritescoresdcb65,78,92,47,77,83,59,93,82,97;学生成绩numofstudentdcb10;学生人数maxscoredcb0;存放最高分数end四、实验步骤;A.s……export labellabel……;B.s……import label bl label……说明标号label可以被其他文件引定义了标号label说明标号label可以被其他文件引引用了标号label1、用自然语言描述解决给问题的算法,可以尽可能的抽象!2、建立工程并建立源文件score.s并把输入(复制)上面内容,并将该文件添加到工程;3、建立文件maxoftwo.s,在文件中实现子程序getmax,调用者传入的参数位于r0、r1中,要求找出r0、r1中的较大值,并把较大值保存在r0当中,该文件架构如下:;maxoftwo.s;两个要比较的数在r0,r1中;比较所得的最大数放在r0当中area max,code,readonlygetmaxend4、建立文件init.s,通过调用maxoftwo.s和score.s完成任务,自己编写代码,注意下页有该文件的参考代码,但希望同学在实验课上尽量不看参考代码或少看代码!import scoresimport numofstudentimport maxscoreimport getmaxarea init,code,readonlyentryldr r2,=scores;指向学成成绩ldr r3,=numofstudentldrb r3,[r3];获取学生人数ldrb r0,[r2];获取第一个学生的成绩,并暂时认为它是最大的loopcmp r3,#0beq exit;判断是否比较结束ldrb r1,[r2],#1;获取要比较的数bl getmaxsub r3,r3,#1;人数减一b loopexitldr r1,=maxscorestrb r0,[r1];将结果保存在maxscore中b.end。
5_ARM实验报告
实验五数码管显示实验实验目的:通过实验掌握 LED 的显示控制方法;掌握对存储区进行访问的方法。
一.实验内容:编写程序使实验板上八段数码管循环显示0到9字符。
二.实验原理:1.八段数码管的结构八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母。
见图5-1-2。
图5-1-2 八段数码管的结构2八段数码管的硬件电路原理EMBEST ARM EDUKIT II教学电路中,使用的是共阳极八段数码管,数码管的控制通过芯片ZLG7290 控制,各段的控制信号是芯片ZLG7290 的SEGA ~SEG G 引脚控制,需要显示的段码通过IIC 总线传送到该芯片。
如图5-1-1、图5-1-2、图5-1-3所示。
图5-1-1 八段数码管控制电路图5-1-2 八段数码管控制电路3.八段数码管的类型八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管。
工作原理以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,制信号为高电平时点亮。
电平信号按照dp→g→f→e……a的顺序组合形成的数据字称为该字符对应的段码,常用字的段码表如下:4.八段数码管的显示方式有两种,分别是静态显示和动态显示。
静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。
动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。
三.实验工具:硬件:Embest Arm EduKit II 实验平台,Embest ARM标准/增强型仿真器套件,PC机;软件:Embest IDE Pro 2004集成开发环境,Windows 98/2000/NT/XP操作系统。
实验二_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培训实验指导书(第一版)
NXP 大学计划指定民大实验教材ARM与嵌入式技术版本:2008年1月第一版目录实验一熟悉Embest IDE集成开发环境 (1)实验二ARM汇编指令实验(1) (4)实验三ARM汇编指令实验(2) (9)实验三存储器实验.................................................................................... 错误!未定义书签。
实验四I/O接口实验............................................................................... 错误!未定义书签。
实验五中断实验........................................................................................ 错误!未定义书签。
实验六串口通信实验................................................................................ 错误!未定义书签。
实验七数码管(LED)显示实验 ............................................................ 错误!未定义书签。
实验八RTC及数码管显示实验(设计性实验).................................... 错误!未定义书签。
实验九液晶显示实验................................................................................ 错误!未定义书签。
实验十键盘控制实验................................................................................ 错误!未定义书签。
ARM实验指导书(wjq)
实验一、ARM开发环境的建立一、实验目的学会安装ADS集成环境及连接仿真硬件平台。
二、实验设备硬件:嵌入式实验平台一套、仿真器一个、PC机一台。
软件:Windows 98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。
三、实验内容正确安装完全版ARM ADS1.2集成环境,并了解JTAG硬件仿真环境的一些设置和工作方法。
四、实验原理ARM ADS (ARM DEVELOPER SUITE )是ARM平台集成开发环境,它包括两个部分:CodeWarrior for ARM Developer Suite 和AXD debugger 。
AXD调试通过Windows驱动程序及中间件软件与JTAG接口连接,并通过JTAG接口与硬件平台连接本实验使用ARMJtagDebugFinal中间件软件通过LPT1并行接口经JTAG协议转换连接ARM目标板。
五、实验操作步骤1、安装ADS1.2集成开发环境, 把ADS1.2_Licence.rar中的license.dat文件copy到“C:\Program Files\ARM\ADSv1_2\licenses”路径中,覆盖原来的license.dat,若安装目录设置为其他目录,必须copy到相应目录中。
2、启动CodeWarrior for ARM Developer Suite集成开发环境,设置许可证文件指向最新license.dat文件。
3、首次使用时,①把文件夹ARMJtagDebugFinal.rar中的文件copy到“C:\Program Files\ARM\ADSv1_2\ARMJtagDebugFinal”目录中或其他安装目录;②先安装ARMJtagDebugFinal驱动软件(以后不用再安装),即执行文件夹中的“安装驱动.exe”程序,并点击安装按钮,分别安装“并口驱动”和“OCX”;③在桌面建立Arm7Agent和Arm9Agent 两给快捷连接,分别指向ARMJtagDebugFinal目录中的Arm9.exe, Arm7.exe ;4 安装完毕驱动后,每次调试前,必须先启动运行Arm7Agent或Arm9Agent调试代理软件(中间件),调试过程始终不要关闭调试代理程序,启动并正确连接硬件目标系统之后,既可以开始调试ARM7系统或ARM9系统;5、如果在以后的使用过程中发现程序无法启动,重新执行“安装驱动.exe”即可;6、在ADW(SDT)/AXD(ADS)的调试配置选项里选择remote_a.dll7、在ADW/AXD的调试配置里IP地址必须填写:127.0.0.18、具体的调试使用可以参考"jtag.exe"的使用方法六、常见问题1、THUMB/ARM混合编程时断点设置要素当CPU处于一种CPU模式时(THUMB或ARM) 断点只可以设置在当前模式下的指令处不可以设置在另一种模式下的指令解决方案设置一个断点在CPU模式切换指令处(如BX) 当程序运行到此指令并停下来后然后通过单步执行(Step)进入另一种状态这时候就可以在当前模式下任意设置断点了;2、THUMB/ARM混合编程时因为ADW/AXD启动时默任的CPU模式为ARM模式如果你启动调试前你的ARM CPU 正在执行Thumb模式指令那么将会导致调试错误解决方案按一下你的板子的复位键,然后再启动ADW/AXD即可;3、为了加快软件影响单步执行速度现在暂时屏蔽了semihosting 功能如果你需要此功能可以EMAIL索取;4、如果出现无法逼使CPU进入调试的提示只需要复位你的板子,重新启动软件即可;5、如果发现软件没有任何动作把它关了再启动;6、如果发现软件根本无法运行看不到其运行界面那么执行“安装驱动.exe”,重新驱动OCX即可;7、如果出现打开并口失败,那么执行安装驱动.exe , 重新并口驱动即可;8、如果提示检测不到ARM核如果你的CPU没坏供电正常那么就一定是你的JTAG板子问题了,应该参考常用的那种"SDT"或"Wiggler"接线然后在JTAG调试软件选择对应的选项SDT或wiggler或自定义;9、排除这些如果出现其他的调试错误,那么就是你设置ADW/AXD或你的板子问题了10、一些常见问题请参考 上的BBS;11、有任何疑问请EMAIL sendtoyou@ Tang-ZhongGen,调程序实验二、ADS 1.2 集成开发环境练习ARM ADS(ARM Developer Suite V1.2 )是ARM公司,为开发ARM内核处理机而提供的集成开发环境(IDE)和集成调试环境(ICE)。
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处理器领域的水平,为将来的工作和研究打下坚实的基础。
5_ARM实验报告
5_ARM实验报告[实验报告]实验名称:5_ARM实验实验目的:1.了解ARM架构的特点和基本原理;2.掌握ARM指令集和编程模式;3.学会使用ARM开发工具进行编程和调试;4.实现一个简单的ARM程序并运行。
实验器材:1.ARM开发板;2.电脑;B数据线。
实验步骤:1.搭建开发环境根据实验指导书的步骤,将开发板与电脑连接,安装开发工具和驱动程序。
2.学习ARM指令集和编程模式通过阅读教材和参考资料,了解ARM指令集的基本原理和常用指令。
同时,学习ARM的编程模式,包括程序的加载、运行和调试等。
3.编写ARM程序根据实验要求,编写一个简单的ARM程序。
这个程序可以是一个简单的计算器,或者是一个LED灯的控制程序等。
编写程序时需要注意使用合适的指令和编程模式。
4.编译和烧录程序使用ARM开发工具,将编写好的程序进行编译和烧录。
编译过程会生成一个可执行的二进制文件,烧录过程会将这个二进制文件加载到开发板上。
5.调试并运行程序通过ARM开发工具进行调试,检查程序中可能存在的错误,并进行修正。
调试过程中需要注意程序的执行流程和变量的值等。
调试完成后,运行程序并观察其运行结果。
实验结果与分析:在实验中,我成功地搭建了ARM的开发环境,学习了ARM指令集和编程模式,并编写了一个简单的ARM程序。
经过编译和烧录,我成功地将程序加载到开发板上,并通过调试和运行,验证了程序的正确性。
实验中遇到的问题和解决方法:在编写程序的过程中,我遇到了一些语法错误和逻辑问题。
通过阅读资料、查找文档和与同学的讨论,我解决了这些问题。
在调试的过程中,我还遇到了一些程序运行速度过慢的问题。
通过优化代码和使用合适的编译选项,我解决了这个问题。
实验总结:通过这次实验,我对ARM架构有了更深入的了解,掌握了ARM指令集和编程模式的基本原理和使用方法。
通过编写和调试一个简单的ARM程序,我提高了自己的编程能力和解决问题的能力。
实验还让我明白了实际应用中ARM的重要性,以及它对于现代计算机系统的作用。
实验二ARM汇编语言实验精品文档
2019/10/5
1
1 实验目的与要求 2 实验内容 3 实验操作步骤 4 测试数据与实验结果
1、实验目的与要求
目的: 1)熟练使用EmbestIDE集成开发环境。 2)基本掌握 ARM 汇编语言
要求: 1)独立完成程序设计、编码与调试 2)编写实验报告
2、实验内容
按照GNU汇编程序文件格式,用ARM汇编语言编写程序, 求三个数(x、y、z)中的最大值与最小值,分别存放在寄 存器R6、R7中。三个数用伪操作定义如下:
接一起完成。 如果编译过程出错,需要修改错误,直到构建成功。
9)调试 连接目标机 下载 运行(打开源文件、设置断点) 浏览(寄存器、内存)
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) 下载符号表文件 调试目标文件 下载内存地址
3、实验操作步骤
8)构建工程 可以单独编译一个文件,也可采用build实现编译、连
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的数据处理指令实验一、实验目的1、熟悉教学ADS集成开发环境,2、懂得各种ARM寻址方式,并能自己动手写一些简单小程序,实现不同的功能。
3、能够运行程序并进行简单分析二、实验环境硬件:PC机一台。
软件:Windows98/XP/2000系统,ADS集成开发环境。
三、预备知识(1)CMP―――――比较指令指令格式:CMP{cond} Rn,operand2CMP指令用Rn 的值减去操作数operand2,并将结果的状态(Rn 与operand2 比较是大、小、相等)反映在CPSR中,以便后面的指令根据条件标志决定程序的走向。
CMP指令与SUBS指令完成的操作一样,只是CMP指令只减,不存结果。
(2)LDR 和STR——用于字和无符号字节指令格式:LDR/STR{cond}{T} Rd,<地址>LDR/STR{cond}B{T} Rd,<地址>指令LDR{cond}{T} Rd,<地址>,加载指定地址的字数据到Rd中;指令STR{cond}{T} Rd,<地址>,存储Rd中的字数据到指定的地址单元中。
LDR{cond}B{T} Rd,<地址>指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);STR{cond}B{T} Rd,<地址>指令存储Rd中的最低字节数据到指定的地址单元中。
T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。
地址部分可用的形式有4种:零偏移(zero offset) [Rn],Rn 的值作为传送数据的地址。
如:LDR R0,[R1];前索引偏移(pre-indexed offset) [Rn,Flexoffset]{!} 在数据传送之前,将偏移量Flexoffset 加到Rn 中。
其结果作为传送数据的存储器地址。
微处理器5ARM指令系统2
最低位为1?
切换到Thumb状态
切换到ARM状态
例如:
ADRL R0,T_Fun+1 BX R0
;将Thumb程序的入口地址加1存入R0 ; 跳转到R0指定的地址, ;并根据R0的最低位来切换处理器状态
杂项指令-软中断指令SWI
SWI指令用于产生软中断,主要用于用户程序调用操作系统的 服务。执行该指令时处理器将完成以下动作:
BX Rn
例如:
ADRL R0,T_Fun+1 BX R0
;将Thumb程序的入口地址加1存入R0 ; 跳转到R0指定的地址, ;并根据R0的最低位来切换处理器状态
分支指令 - BX指令
BX指令能在跳转时切换处理器状态,为绝对转移,跳 转范围不受限制。BLX为带返回的跳转和切换指令。
BX Rn
Y
N
… DISP_TAB
DCB 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8
Thumb指令
Thumb 指 令 集 可 以 看 作 是ARM指令压缩形式的
; 功能:使用BX指令切换处理器状态 AREA Example8,CODE,READONLY ENTRY
子集,它是为减小代码
Addr1 BL Label Addr2 xxx
Label xxx xxx MOV PC,LR
程序代码
xALaxdxbder12l
PC
xAxdxdr2
LR
分支指令 - BX指令
带状态切换的分支指令——BX指令除了具有跳 转功能,还能在跳转的同时切换处理器状态。该指 令为绝对转移,跳转范围不受限制。指令格式如下:
例如: BL BLDelayNLSabel ;调用子程序DelayNS
[理学]ARM工作原理实验指导书
嵌入式系统原理实验指导书目录实验一ARM集成开发工具——ADS练习 (5)1.1 实验目的 (5)1.2 实验设备 (5)1.3 实验内容 (5)1.4 实验预习要求 (5)1.5 实验步骤 (5)1.6 思考 (19)实验二汇编指令实验1 (20)2.1 实验目的 (20)2.2 实验设备 (20)2.3 实验内容 (20)2.4 实验预习要求 (20)2.5 实验步骤 (21)2.6 实验参考程序 (23)2.7 思考 (24)实验三汇编指令实验2 (25)3.1 实验目的 (25)3.2 实验设备 (25)3.3 实验内容 (25)3.4 实验预习要求 (25)3.5 实验步骤 (26)3.6 实验参考程序 (27)3.7 思考 (30)实验四GPIO控制实验 (32)4.1 实验目的 (41)4.2 实验设备 (41)4.3 实验内容 (41)4.4 实验原理 (41)4.5 实验硬件原理图 (43)4.6 实验预习 (44)4.7 实验过程 (44)4.8 实验参考程序 (44)4.9 思考 (45)实验五UART通信实验 (48)5.1 实验目的 (48)5.2 实验设备 (48)5.3 实验内容 (48)5.4 实验原理 (49)5.5 实验硬件原理图 (49)5.6 实验预习 (50)5.7 实验过程 (50)5.8 实验参考程序 (51)5.9 思考 (61)实验六中断实验 (62)6.1 实验目的 (62)6.2 实验设备 (62)6.3 实验内容 (62)6.4 实验原理 (63)6.5 实验硬件原理图 (63)6.6 实验预习 (63)6.7 实验过程 (63)6.8 实验参考程序 (63)6.9 思考 (66)总论本实验包含两部分,前面三个实验是ARM 7指令系统指令实验,使用ADS 的编译器和调试器进行仿真调试,主要目的是掌握ARM7的指令系统和开发工具的使用,理解ARM CPU的工作过程。
(实验二)基于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指令系统试验
实验二ARM指令系统试验讲师:杨行【实验目的】1、了解ARM汇编语言2、掌握简单C语言嵌套ARM汇编语言编程;3、了解APCS规范;【实验原理】一、介绍APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。
最显著的一点是对这些例程来自哪里没有明确的限制。
它们可以编译自C、Pascal、也可以是用汇编语言写成的。
APCS 定义了:对寄存器使用的限制。
使用栈的惯例。
在函数调用之间传递/返回参数。
可以被‘回溯’的基于栈的结构的格式,用来提供从失败点到程序入口的函数(和给予的参数)的列表。
APCS 不一个单一的给定标准,而是一系列类似但在特定条件下有所区别的标准。
例如,APCS-R (用于RISC OS)规定在函数进入时设置的标志必须在函数退出时复位。
在32 位标准下,并不是总能知道进入标志的(没有USR_CPSR),所以你不需要恢复它们。
如你所预料的那样,在不同版本间没有相容性。
希望恢复标志的代码在它们未被恢复的时候可能会表现失常...如果你开发一个基于ARM 的系统,不要求你去实现APCS。
但建议你实现它,因为它不难实现,且可以使你获得各种利益。
但是,如果要写用来与编译后的C 连接的汇编代码,则必须使用APCS。
编译器期望特定的条件,在你的加入(add-in)代码中必须得到满足。
一个好例子是APCS 定义a1 到a4 可以被破坏,而v1 到v6 必须被保护。
二、C语言嵌套ARM汇编语言int (*my_printf)(const char *format, ...);int main(void){int n = 5;int m = 1;int ret;my_printf = (void *)0x33f963a8;// 1 + 2 * 3 - 5__asm__ __volatile__(/*汇编程序*/"mov r0, %1\n""mov r1, %2\n""sub r2, r0, r1\n""mov %0, r2\n":"=r"(ret) /*输出部,=代表输出*/:"r"(n),"r"(m) /*输入部,r代表和寄存器相关联*/:"r0","r1","r2" /*保护部*/);my_printf("[ ret = %d]\n", ret);return 0;}三、汇编语言编程.text.global _start_start: @这个是裸板程序的入口函数@lr寄存器是程序链接寄存器,是pc的备份stmfdsp!,{r0-r12,lr} @函数跳转的时候,保存现场bl mainldmfdsp!,{r0-r12,pc} @函数跳转的时候,恢复现场【实验仪器】1、装有Linux操作系统的PC机一台;2、mini2440实验开发平台一套【实验内容】1、在u-boot环境下,使用c语言嵌套ARM汇编语言实现从串口输入两个数,并计算两个数的和,通过串口输出;以下是输入两个个位数然后计算其和;int (*my_getc)();int (*my_printf)(const char *format,...);int _start(){char ch;my_getc=(void *)0x33f965f0;my_printf=(void *)0x33f963a8;ch=my_getc();my_printf("a= %c\n",ch);a=ch-48;ch=my_getc();my_printf("b= %c\n",ch);b=ch-48;__asm__ __volatile__("mov r0,%1\n""mov r1,%2\n""add r2,r1,r0\n""mov %0,r2\n":"=r"(c):"r"(a),"r"(b):"r0","r2","r3");my_printf("%d+%d=%d\n",a,b,c);return 0;}2、在u-boot环境下,使用c语言嵌套ARM汇编语言实现从串口输入两个数,并计算两个数的积,通过串口输出;以下是计算两个个位数积的源程序int (*my_getc)();int (*my_printf)(const char *format,...);int _start(){char ch;inta,b,c;my_getc=(void *)0x33f965f0;my_printf=(void *)0x33f963a8;ch=my_getc();my_printf("a= %c\n",ch);a=ch-48;ch=my_getc();my_printf("b= %c\n",ch);b=ch-48;__asm__ __volatile__("mov r0,%1\n""mov r1,%2\n""mul r2,r1,r0\n""mov %0,r2\n":"=r"(c):"r"(a),"r"(b):"r0","r2","r3");my_printf("%d*%d=%d\n",a,b,c);return 0;}3、在u-boot命令行输入一个数,先写入0x30008000地址然后从从0x30008000地址读出数据。
实验二 ARM汇编语言编程实验.doc
实验二:ARM 汇编语言编程实验一、实验目的1、掌握ADT IDE ARM 开发环境中基本的工程设置以及程序编译方法。
2、掌握ADT IDE ARM 开发环境中基本的程序调试方法。
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 为定义的符号。
说明:上述代码定义一个标号,它表示程序中当前的指令或数据地址。
如果在程序中出现两个相同的标号,汇编器将会产生一个警告,且只有第一个标号有效。
课程名称 ARM 体系结构 实验成绩 指导教师 冯灵霞实 验 报 告 院系 信息工程学院班级计算机科学与技术(嵌入式) 学号 姓名 日期2、GNU汇编语言伪操作1).equ伪操作语法:.equ symbol,exprexpr为基于寄存器的地址值、程序中的标号、32位的地址常量或位的常量。
symbol为.equ 伪操作为expr定义的字符名称。
说明:该操作符为数字常量、基于寄存器的值和程序中的标号定义一个字符名称,相当于C语言中的宏定义。
示例:.equ USERMODE,0x102).global伪操作符语法:.global symbolsymbol为声明的符号的名称。
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实验二1061170110 贺凌潇1 外部中断【实验目的】1、学习LPC系列处理器向量中断控制器VIC的功能原理;2、掌握外部中断引脚功能设置及外部中断的工作模式设置;3、了解中断服务函数的编写方法。
【实验原理】一、LPC系列处理器中断控制器的原理重点要掌握向量中断控制器、外部中断引入以及系统控制寄存器中对外部中断的设置。
LPC1700含有4个外部中断,分别为EINT0、EINT1、EINT2和EINT3。
四个相关寄存器:EXTINT包含中断标志,INTW AKE包含使能唤醒位,EXTMODE和EXTPOLAR指定引脚使用电平或边沿激活方式。
二、实验板上的外部中断1.原理图2.说明实验板上使用EINT0(P2.10)脚引入外部中断,在实验板上用一个按键实现。
EINT0引脚先被上拉电阻上拉为高电平,当按键按下时,电平下降为低电平,因此中断方式应设置为下降沿触发。
三、程序说明1、LED_init:LED初始化,将P2.0-P2.78个IO口设置为输出;2、LED_On与LED_Off:根据num的不同数值点亮或熄灭不同的LED。
3、EINT0_init:设置外部中断0的工作模式。
4、EINT0_IRQHandler:外部中断0的中断服务函数。
清中断标志,中断计数(eint0_counter)加1。
【实验内容与步骤】一、阅读程序仔细阅读提供的main.c和EINT.c源程序。
二、运行、调试将参考程序进行编译、链接,并下载到实验板上运行,观察程序运行结果是否正确。
三、修改程序在参考程序的基础上,对程序相关部分进行修改,改变相应外部中断时板子不同的相应效果,比如LED闪烁形式、频率等等。
外部中断按键实验程序:extern volatile int eint0_counter;#include "LPC17xx.h"#include "led.h"#include "eint.h"int main (void){LED_init();EINT0_init();while(1){if(eint0_counter >= 8)eint0_counter = 0;LED_On(eint0_counter);LED_Off((eint0_counter-1)%8);}}2 按键【实验目的】5、学习LPC系列处理器GPIO口的使用方法;6、了解LPC系列处理器GPIO口的功能原理;7、掌握扫描按键的开断控制LED的亮灭。
3.2 ARM汇编指令实验二
3.2 ARM汇编指令实验二
1
实验目的
2
实验原理
实验操作步骤
一、实验目的
通过实验掌握使用LDM/STM,b,bl 等指令完成较为复杂的存储区访问和 程序分支,学习使用条件码,加强对 CPSR的认识。
二、实验设备
硬件:PC机 软件:Embest IDE 2003集成开发环境, Windows 98/2000/NT/XP
三、实验内容
熟悉开发环境的使用并完成一块存储 区的拷贝。 完成分支程序设计,要求判断参数, 根据不同参数,调用不同的子程序。
四、实验原理
ARM程序状态寄存器
CPSR与SPSR的格式 ARM工作模式
10. 11.
五、实验操作步骤
实验B步骤
1.
2. 3.
ARM汇编指令实验一和实验参考程序,在当 前工作区添加新工程asm1_b。 参照实验A的步骤完成目标代码的生成与调 试。 理解和掌握实验后,完成实验练习题。
4. 5. 6. 7.
五、实验操作步骤
实验A步骤
8. 9. 打开memory窗口,观察地址0x8054~0x80A0的内 容,与地址0x80A4~0x80f0的内容; 单步执行程序并观察和记录寄存器与memory的值 变化,注意观察步骤8里面的地址的内容变化,当 执行STMFD,LDMFD,LDMIA和STMIA指令的 时候,注意观察其后面参数所指的地址段或寄存 器段的内容变化; 结合实验内容和相关资料,观察程序运行,通过 实验加深理解ARM指令的使用; 理解和掌握实验后,完成实验练习题。
嵌入式系统实验2 ARM微处理器工作模式实验
实验2 ARM 微处理器工作模式实验一、实验目的(1)掌握学会使用MSR/MRS 指令实现ARM 处理器工作模式的切换(2)观察不同模式下的寄存器,加深对CPU 结构的理解。
二、实验设备(1)硬件:嵌入式实验平台一套、仿真器一个、PC 机一台。
(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP。
三、实验内容(1)通过ARM 汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;(2)掌握ARM 不同模式的进入与退出。
四、实验原理1.ARM 处理器模式ARM 体系结构支持7种处理器模式:(1) 用户模式USR:正常程序执行模式;(2) 快速中断模式FIQ:支持快速数据传送或通道处理;(3) 外部中断模式IRQ:用于通用中断处理;(4) 管理模式SVC:操作系统保护模式;(5) 中止模式ABT:实现虚拟存储器和/或存储器保护(6)未定义模式UND:支持硬件协处理器的软件仿真(7)系统模式SYS: 运行特权操作系统任务在软件控制下可以改变模式,外部中断或异常处理也可以引起模式发生改变。
大多数应用程序在用户模式下执行。
当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。
这允许适当编写操作系统来控制系统资源的使用。
除用户模式外的其他模式成为特权模式。
它们可以自由地访问系统资源和改变模式。
其中5 种称为异常模式,即:FIQ (Fast Interrupt Request)、IRQ (Interrupt Request)、管理(Supervisor)、中止(Abort)、未定义(Undefined)。
当特定的异常出现时,进入相应的模式。
每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。
其余模式是系统模式。
仅ARM 体系结构V4 以及以上的版本有该模式。
不能由于任何异常而进入该模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五 ARM 指令系统实验二
注意:本实验在模拟环境下进行,请不要打开实验箱电源!!
一、 实验目的:
1、 掌握MDK 开发环境下多文件编程的方法;
二、 实验原理
我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。
这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM 汇编程序员的角度理解这种关系为:
一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import 和export 实现。
例如:
三、 实验任务
下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore ,score.s 的内容如下:
;score.s
area score,data,readwrite
scores
dcb 65,78,92,47,77,83,59,93,82,97;学生成绩
numofstudent
dcb 10;学生人数
maxscore
dcb 0;存放最高分数
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。