还剩6页未读,继续阅读
文本内容:
Line16Col9实验九数据处理指令/数据加载存储指令实验ARM
(2)然后再通过单步运行程序,观察相
1、实验目的关寄存器和存储器相应地址上的值的变化情况,核对程序掌握基本的数据处理指令使用方法,并能够完成简单的数据处理操作的准确性学会使用条件码标志掌握基本的单寄存器传送指令和多寄存器传送指令的使用方法
2、实验内容任务一ARM运算指令的使用
(1)请按以前实验要求创建项目,并添加exp5」」.s源文件,文件内容如下,要求补充完整代码:叵|区£j exp5_l_l.s mJ|▼{1}▼▼[iq▼J▼Path D:\temp\ads\newproject\newpro\exp5_l_l.s◊源程序;expb_l_l.s AREALabi,CODE,ENTRY READONLYSTARTR0z#0x3FRlz#0x2CR2,#0xl0R3,#0x5;计算口山+4=11;计算并更新标志R5=RO-R1位并更新标志位;W£R6=R1-RO;计算R7=R2+8R3STOPB STOPENDooooWV任务二利用数据处理指令实现位处理
(1)在项目中删除exp5」」.s,并添加exp5_2」.s源文件,文件内容如下,同样要求补充完整代码,目的在于将Ox3FCO的第4-11位用OxDD替换,即变成Ox3DDO回13;-exe5_2_l.s区\temp\ads\newproject\newpro\exe5_2_l.源程序;exp5_2l.s AREALab2,CODE,READONLYENTRYSTART;要被替操的数Rl,#0x3FC0R2z#0xFF0;用在掩码R3z#0xDD;清除中对应枚,使其成为0x3FC00x3000|;通过移位,将与要替换的位域对齐UxDD;将对应位置入目的操作数R1STOPB STOPENDLine9Col64
(2)然后阅读代码手工计算每一步的执行结果,并填入表1中(注意只需完成START部分的代码即可)完成后再通过单步运行程序,观察相关寄存器和存储器相应地址上的值的变化情况,核对和之前你在表上填的值是否一致执行File-Reload CurrentImage命令可以重新加载和运行当前映像文件表1exp5_2_l.s单步运行结果序号执行指令指令执行后的变化情况(用十六进制表示)寄存器R1R2R3R1500x0x0x0x800—10x3FC00x00x00x8004OMBMMMOOOVVVRRVOCI2Ox3FCO0XFF00x00x80083Ox3FCO OXFFOOxDD0x800C40x3000OXffO OxDD0x801050x3000OXfTO OxddO0x801460x3dd0OxffO OxddO0x8018任务三乘法指令的使用1在项目中删除exp5_2」.s,并添加exp5_3」.s源文件,文件内容如下,同样要求补充完整代码:2然后阅读代码手工计算每一步的执行结果,并填入表2中注意只需完成START部分的代码即可完成后再通过单步运行程序,观察相关寄存器和存储器相应地址上的值的变化情况,核对和之前你在表上填的值是否一致执行File-Reload CurrentImage命令可以重新加载和运行当前映像文件表2exp5_3_l.s单步运行结果序号执行指指令执行后的变化情况用十六进制表示令寄存器R0RI R2R3R4R5R6R7R8R9R10R1500x00x00x00x00x00x00x00x00x00x00x00x8000—1x3F0x800420x3F0x3D0x800830x3F0x3D OXffOOOOOO0x8c40x3f0x3d Oxff,OOOOOO Ox3fcO0x801050x3f0x3d OxffOOOOOOOx3fcO OxfO30x801460x3f0x3d OxffOOOOOOOx3fcO0xf420x801870x3f0x3d OxffOOOOOO0x3fc00x400000000x801c80x3f0x3d OxffOOOOOO0x3fc00x40000000Ox3f8O0x802090x3f0x3d OxffOOOOOO0x3fc00x40000000OxffffffcO0x8024任务四ARM单寄存器传送指令的使用1在项目中删除exp5_3」.s,并添加exp6」」.s源文件,文件内容如下:i Sexp6_l_l.s回区13▼{}▼▼母▼if▼Path D\temp\ads\newproject\ne...\exp6_l_l.!g二源程序□;exp6_l_l.sAREA Labi,CODE,READONLY;ENTRYSTART指向ADR RIzSRC;R1SRC2加指向口ADR R2,DST251COPY;加戟第一个字LDR RO,[RI];将它存入STR R0,[R2]DSTADD RI,RI,#0x4ADD R2,R2z#0x4LDR RO,[RI]STR R0z[R2]ADD R2,R2,#0x4LDR RO,[RI]STR RO,[R2]STOP BSTOP;源数据()DCB one small!3SRC ALIGN;4;目标数据DCB three bigDST11END▼44Line24Col111±1程序解读•程序的功能是将存储器SRC处的源数据通过数据传送指令送到DST处•代码
(2)伪指令ADR是将一个寄存器相关表达式或程序相关表达式的地址存入寄存器,在例子中相当于使R1指向SRC地址,R2指向DST地址,即初始化地址指针;•代码
(3)DCB的作用是分配一组字节内存并定义其内容为指定字符串,也可以用“二”代替例如SRC=onesmall”DST=threebig”•代码
(4)ALIGN的作用是以字边界对齐当前内存段注伪指令并不是ARM的汇编语言,没有相应的机潜码,它是由汇编器提供的,在程序中的作用是为程序做准备工作另外,不同的汇编器支持的伪指令可能不同
(2)请先阅读程序,手工计算每一步的执行结果,并填入表3中(注意只需完成START部分的代码即可)然后再通过单步运行程序,观察相关寄存器和存储器相应地址上的值的变化情况,核对和之前你在表上填的值是否一致执行File-Reload CurrentImage命令可以重新加载和运行当前映像文件表3exp6_l_l.s单步运行结果指令执行后的变化情况指向指序号寄存器(值用十六进制表示)存储器(值用十六进制表示)令R0RI R2PC0x80300x80310x80320x80330x80340x80350x80360x80370x80380x803900x00x00x00x80000x740x680x720x650x650x200x620x690x670x2110x80300x800420x803c0x800830x20656e6f0x8c40x80100x6f0x6e0x650x2050x80340x801460x80400x801870x6c6l6d730x801c80x80200x730x6d0x61Ox6c90x80440x8024100x802811Ox802c任务五多寄存器存储/加载指令的使用
(1)在项目中删除exp6」」.s,并添加exp6_2」.s源文件,文件内容如下:泡目回区|exp6_2_l・s;expb_
2、h▼{.}▼▼母▼d▼Path D\temp\ads\newpr...\exp6_2_l.s◊源程序_
1.SSTARTAREA Lab2zCODE,READONLY|ENTRYSTOPB STOPAREADblockzDATA;1NUM DCD0x12,0x34,0x56,0x78;2ENDLine2Col36|程序解读•程序的功能是计算给定数组各项和的平均值,方法是先将数据各项加载到寄存器中,然后利用数据处理指令计算,最后再将结果存入存储器中•代码
(1)定义一个名为Dblock的数据区域•代码
(2)伪指令DCD的作用是分配一组字内存并定义其内容,分配的内存一定是4的倍数也可以用“”代替,例如NUM0xl20x34,0x56,0x78
(2)请先阅读程序,手工计算每一步的执行结果,并填入表4中(注意只需完成START部分的代码即可)然后再通过单步运行程序,观察相关寄存器AMsDDDoTLLAARMDDDVRDDFsDRRRRRRLR123sRR和存储器相应地址上的值的变化情况,核对和之前你在表上填的值是否一致执行File-Reload CurrentImage命令可以重新加载和运行当前映像文件表4exp6_2_l.s单步运行结果指令执行后的变化情况序号执行指令寄存器(值用十六进制表示)存储器(值用十六进制表示)R0R1R2R3R4SP PC0x80240x80280x802C0x80300x803800x0x0x0x0x0x0x8000x120x340x560x780x10—10x00x00x00x00x00x80240x80040x120x340x560x780x1020x120x340x560x78Oxe8OOe8OO0x80380x8008Ox120x340x560x780x1030x120x340x560x780x460x80380x800c0x120x340x560x780x1040x120x340x560x780x9c0x80380x80100x120x340x560x780x1050x120x340x560x780x9c0x80380x80140x120x340x560x780x1060x120x340x560x780x270x80380x80180x120x340x560x780x1070x120x340x560x780x270x80380x801c0x120x340x560x780x27任务六程序改进
(1)实验exp6」」.s是零变址形式,请将其程序分别改为前变址和后变址形式说明零变址寻址LDR R(),[R1]前变址寻址LDRROJR1,#4]后变址寻址LDR RO,[Rl],#4
(2)利用多寄存器传送指令修改exp6_l_l.s程序。
个人认证
优秀文档
获得点赞 0