版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、写出下列各条指令的执行含义。1ADD R0,R0,#1 ;指令实现的功能是将R0+1的结果送R0是保存。2ADD R0,R1,R2 ; 指令实现的功能是将以R2中的内容为地址的单元中的值与R1相加,结果送R0保存。3LDR R0,R1+4 ; 指令实现的功能是将R1的内容加4后送R0。4LDR R0,R1+4! ;指令实现的功能是将R1的内容加4后送R0,然后R1的内容自增4个字节。5B Lable ;程序无条件跳转到标号Lable处执行。MOV R1,R0 ;指令实现的功能是将寄存器R0的值传送到寄存器R1。7CMP R1,R0 ; 指令实现的功能是寄存器R1的值与寄存器R0的值相减,根
2、据结果设置CPSR的标志位。8CMN R1,R0 ;指令实现的功能是将寄存器R1的值与寄存器R0的值相加,根据结果设置CPSR的标志位。9ORR R0,R0,#3 ;该指令设置R0的0、1位,其余位保持不变。10MRS R0,SPSR ;传送SPSR的内容到R0。11CMP R1,R2 ; 指令实现的功能是寄存器R1的值与寄存器R2的值相减,根据结果设置CPSR的标志位。12MRS R0,CPSR ;传送CPSR的内容到R013MOV R2,R0 ;指令实现的功能是将寄存器R0的值传送到寄存器R2。14ADD R1,R1,#3 ;指令实现的功能是将R1+3的结果送R1是保存。15ADD R2,
3、R1,R0 ; 指令实现的功能是将以R0中的内容为地址的单元中的值与R1相加,结果送R2保存。16LDR R1,R0+4 ; 指令实现的功能是将R0的内容加4后送R1。17LDR R1,R0+4! ;指令实现的功能是将R0的内容加4后送R1,然后R0的内容自增4个字节。18AND R0,R0,#3 ;该指令保持R0的0、1位,其余位清零。19B 0x1200 ;跳转到绝对地址0x1200处执行。20CMN R1,R2 ;指令实现的功能是将寄存器R1的值与寄存器R2的值相加,根据结果设置CPSR的标志位。1、 写一条 ARM 指令,完成操作r1 = r2 * 4MOV R1,R2,LSL #22
4、. 写一条 ARM 指令,完成操作r1 = r2 * 3ADD R1,R2,R2,LSL #13. 初始值R1=23H,R2=0FH执行指令BIC R0, R1,R2,LSL #1后,寄存器R0,R1的值分别是多少? R0=21H,R1=23H 4. 初始值R2=5,R3=9,R4=3,执行指令SUBS R2, R3,R4,LSR #2后,寄存器R2,R3的值分别是多少? R2=9,R3=95. ADDR0, R0, R0, LSL #2;执行结果R0=5*R0ADDR5, R3, R1, LSL #2;R5R3+R1*4SUB R1, R1, R2, LSR # 2 ;R1R1R2÷
5、;4,因为R2右移2位相当于R2除以4。LSL # n ;逻辑左移n位(1n31),低端空位补0。LSR # n ;逻辑右移n位(1n32) ,高端空位补06 LDR R2,R3,#0x0C ;前变址, 传数前计算地址; 读取R30x0C地址上的存储单元的内容,放入R2。STR R1,R0,#4!; R04R1,R0=R04,符号“!”表明指令在完成数据传送后应该更新基址寄存器,否则不更新;属于回写前变址。LDR R0,R1,#4 ;后变址: 先进行R1->R0操作然后R1+4->R1,操作完毕后,R1 = R1+4。不需要"!"号。7.
6、 多寄存器寻址即是一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIA R1!,R2R7,R12;将R1指向的单元中的数据读出到R2R7、R12中;(R1自动增加) LDMIA R0 !, R1, R2, R3, R4; R1R0 R2R0+4 R3R0+8 R4R0+12 STMIA R0!,R2R7,R12;将寄存器R2R7、R12的值保存到R0指向的存储单元中,; (R0自动增加)STMI
7、A R0!,R1R7;将R1R7的数据保存到存储器中。存储指针在保存第一;个值之后增加,增长方向为向上增长;R0R1;R0+4R2;R0+8R3;R0+12R4;R0+16R5;R0+20R6;R0+24R7;R0保持自动增值8. LDR R2,R3,#0x0C读取R30x0C地址上的一个字数据内容,放入R2。属前变址。参看教材第125页。STR R1,R0,#4!R04R1,R0=R04,符号“!”表明指令在完成数据传送后应该更新基址寄存器,否则不更新;属回写前变址。LDR R1,R0,R3,LSL #1将R0R3×2地址上的存储单元的内容读出,存入R1。属前变址。9 写一段 AR
8、M汇编程序:循环累加队列myarray中的所有元素,直到碰上零值元素,结果放在r4中。程序框架如下,补充代码完成上述功能。AREA total, CODE READONLYENTRYstartMOV r4, #0ADR r0, myarray;在此补充代码loopLDR r1, r0, #4ADDr4, r4, r1CMPr1, #0BNEloopstopB stopmyarrayDCD 0x11DCD0x22DCD 0x0END10并编写了如下的汇编程序:问:现执行上述程序,请列出R0,R1,R2的最终值,并告知整个程序的功能。R0=1R1=2R2=1功能:对R0和R1分别赋值0,1,在R1
9、为5的条件下循环给R0赋值R0和R1之和,给R1加1,取得RESULT的地址赋值于R2,将R0的值保存在RESULT中11读如下程序test.s:test.c:请列出上述程序执行后R0,R1的值,并说明上述程序的作用。R0=31R1=23功能:test.c调用s_program函数,将54赋值R0,23赋值R1,两者相减后,赋值给R0,R0作为返回值赋值给num,然后输出num。12有如下C语言定义的函数myproint mypro(int a, int b)a=a*b;return (a);请补充完成调用上述函数的汇编程序,实现11与22相乘,并要求将结果保存在地址为0x40001000处:
10、 area test3, code, readonlyimport myproentrycode32start mov r0,#11 (1) mov r1,#22 (2) BL mypro (3) Ldr r3,=0x40001000 (4) Str r0,r3 (5) END13程序段如下,实现下面流程图,试补充编写ARM汇编代码。程序段:MOV r2, #15MOV r3, #9start;补充代码stopB stopEND程序:Start: CMP r2,r3 SUBLT r3,r3,r2 SUBGT r2,r2,r3 BNE start14明指令STMIAr8!, r0-r7的操作功能
11、。将R0-R7八个寄存器中的32位数据,存储到R8地址指针为起始地址的内存中,地址的操作方式是先操作、后增加,并更新地址。15汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。 (写出注释能把程序写出来,给出程序能将注释写出来)例如在一个C源文件中定义了如下求和函数:int prom(int x,int y) return(x&y);调用prom ()函数的汇编程序结构如下: IMPORT prom ;声明要调用的C函数MOV r0,1MOV r1,2BL prom ;调用C函数prom16 C程序调用汇编子程
12、序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。 (写出注释能把程序写出来,给出程序能将注释写出来)例如在一个汇编源文件中定义了如下求和函数:EXPORT prom ;声明prom子程序将被外部函数调用prom ;求与子程序prom AND r0,r0,r1 MOV pc,lr 在一个C程序的main()函数中对prom汇编子程序进行了调用:extern int prom (int x,int y); /声明prom为外部函数void main() int a=1,b=
13、2,c; c= prom (a,b); /调用prom子程序 综合编程1、教材第六章关于GPIO的应用,列举了一个I/O管脚控制4个LED发光二极管的例子,但我们实验箱所提供的LED发光二极管位于不同的引脚,它们分别使用 了S3C2410 的 GPC5,GPC6,GPC7,如下图,请修改原程序段以实现三个灯的交替闪烁(注:未用引脚设置为input状态)。(写出注释能把程序写出来,给出程序能将注释写出来)博创经典版LED接线原理图相关寄存器定义:#define rGPCCON (*(volatile unsigned *)0x56000020) #define rGPCDAT (*(volati
14、le unsigned *)0x56000024) #define rGPCUP (*(volatile unsigned *)0x56000028)端口初始化:void port_init(void) rGPCCON = 0x56aa; rGPCUP = 0xff; / GPF所有端口都不加上拉电阻所有LED交替亮灭:void led_on_off(void) int i; rGPCDAT=0; /所有LED全亮 for(i=0;i<100000;i+); rGPCDAT=0xE0; /所有LED全灭 for(i=0;i<100000;i+);2. 例程:4个led灯循环亮(会配
15、置端口)#define rGPEDAT (*(volatile unsigned *)0x56000044) /Port E data#define rGPEUP (*(volatile unsigned *)0x56000048) /Pull-up control E#define rGPHCON (*(volatile unsigned *)0x56000070) /Port H control#define rGPHDAT (*(volatile unsigned *)0x56000074) /Port H data#define rGPHUP (*(volatile unsigned
16、*)0x56000078) /Pull-up control H/* 主程序 */extern void delay(int times);void xmain(void)rGPECON &= (3<<22);rGPECON |= (1<<22);/GPE11设置为outputrGPECON &= (3<<24);rGPECON |= (1<<24);/GPE12设置为outputrGPHCON &= (3<<8);rGPHCON |= (1<<8);/GPH4设置为outputrGPHCON &a
17、mp;= (3<<12);rGPHCON |= (1<<12);/GPH6设置为outputwhile(1) rGPEDAT &= (1<<11);/GPE11 output 0 rGPEDAT |= (1<<12);/GPE12 output 1 rGPHDAT |= (1<<4);/GPH4 output 1 rGPHDAT |= (1<<6);/GPH6 output 1 delay(200000);/delay rGPEDAT |= (1<<11);/GPE11 output 1 rGPEDAT
18、 &= (1<<12);/GPE12 output 0 rGPHDAT |= (1<<4);/GPH4 output 1 rGPHDAT |= (1<<6);/GPH6 output 1 delay(200000);/delay rGPEDAT |= (1<<11);/GPE11 output 1 rGPEDAT |= (1<<12);/GPE12 output 1 rGPHDAT &= (1<<4);/GPH4 output 0 rGPHDAT |= (1<<6);/GPH6 output 1
19、 delay(200000);/delay rGPEDAT |= (1<<11);/GPE11 output 1 rGPEDAT |= (1<<12);/GPE12 output 1 rGPHDAT |= (1<<4);/GPH4 output 1 rGPHDAT &= (1<<6);/GPH6 output 0 delay(200000);/delay 3. 通过对G口的操作控制CPU板左下角的LED1和LED2实现轮流闪烁。(写出注释能把程序写出来,给出程序能将注释写出来)void Main(void) int flag, i; Ta
20、rget_Init(); /进行硬件初始化操作,包括对I/O口的初始化操作 for(;) if(flag=0) for(i=0;i<1000000;i+); /延时 rGPGCON = rGPGCON & 0xffff00ff | 0x00002800; /配置第6、第7位为输出引脚 rGPGDAT = rGPGDAT & 0x8f | 0x8f; /第6位输出为低电平 第7位输出高电平 for(i=0;i<10000000;i+); /延时 flag = 1; else for(i=0;i<1000000;i+); /延时 rGPGCON = rGPGCON
21、 & 0xffff00ff | 0x00002800; /配置第6、第7位为输出引脚 rGPGDAT = rGPGDAT & 0x4f | 0x4f; /第6位输出为高电平 第7位输出低电平for(i=0;i<1000000;i+); /延时flag = 0; 4、列举了一个通过按钮产生中断请求的实验例子,但我们实验箱所提供的按钮位于不同的引脚,如下图,按键接到 INT5 中断。博创经典版中断实验电路图请修改原程序段以实现实例中要求的功能(即当按钮按下,向CPU发出中断请求,当CPU受理中断后,进入相应的中断服务程序,通过超级终端的主窗口显示当前进入的中断号)(有关EXT
22、INTn参数配置请参考附件“EXTINTn参数.doc”(注:直接在原来的程序上修改,并删除同此实验要求无关的原有代码部分)。相关寄存器定义:#define rGPFCON (*(volatile unsigned *)0x56000050) /端口F的控制寄存器#define rEXTINT0 (*(volatile unsigned *)0x56000088) /外部中断控制寄存器0#define rEINTMASK (*(volatile unsigned *)0x560000a4) /外部中断屏蔽寄存器#define rEINTPEND (*(volatile unsigned *)0
23、x560000a8) /外部中断挂起寄存器#define rINTMSK (*(volatile unsigned *)0x4a000008) /中断屏蔽寄存器#define rSRCPND (*(volatile unsigned *)0x4a000000) /源挂起寄存器#define rINTPND (*(volatile unsigned *)0x4a000010) /中断挂起寄存器中断初始化:(下面程序写出注释能把程序写出来,给出程序能将注释写出来)void int_init(void) rGPFCON=(rGPFCON & (3<<0)|(0x2<<
24、0) ; / 将GPF0配置为EINT5 pISR_EINT5=(UINT32T)int0_int; / 注册中断处理函数 rEINTPEND = 0xffffff; /清除所有外部中断挂起状态 rSRCPND = BIT_EINT5; /清除源的挂起状态 rINTPND = BIT_EINT5; /清除挂起状态 rEXTINT0 = (rEXTINT0 & (7<<0) | (0x2<<0); /EINT5下降沿触发 rINTMSK &= (BIT_EINT0); /打开INTMSK中的中断0 中断处理函数:void _irq int0_int(voi
25、d) /外部中断0处理函数 uart_printf(" EINT0 interrupt occurred.n"); ClearPending(BIT_EINT0); /清除中断源#define ClearPending(bit) rSRCPND = bit;rINTPND = rINTPND; / precent write wrong data/清除中断源,注意清除的顺序,要从源头开始清除5. 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。看门狗定时器控制寄存器(WTCON)寄存器地 址读/写描 述初 始 值WTCON0x53000000读/写看门狗定控制寄存器
26、0x8021WTCON的标识位WTCONBit描 述初 始 值Prescaler Value15:8预装比例值,有效范围值为02550x80Reserved7:6保留00Watchdog Timer5使能和禁止看门狗定时器禁止看门狗定时器使能看门狗定时器0Clock Select4:3这两位决定时钟分频因素00:1/16 01:1/3210:1/64 11:1/12800Interrupt Generation2中断的禁止和使能0=禁止中断产生1=使能中断产生0Reserved1保留0ResetEnable/Disable0禁止很使能看门狗复位信号的输出1=看门狗复位信号使能0=看门狗复位信号
27、禁止1看门狗定时器数据寄存器(WTDAT)寄 存 器地 址读/写描 述初 始 值WTDAT0x53000004读/写看门狗数据寄存器0x8000看门狗计数寄存器(WTCNT)寄 存 器地 址读/写描 述初 始 值WTCNT0x53000008读/写看门狗计数器当前值0x8000#define rWTCON (*(volatile unsigned *)0x53000000) / 第1行#define rWTDAT (*(volatile unsigned *)0x53000004) / 第2行#define rWTCNT (*(volatile unsigned *)0x53000008) /
28、 第3行void watchdog_test(void)rWTCON = (PCLK/1000000-1)<<8)|(3<<3)|(1<<2); / 第4行rWTDAT = 7812;/ 第5行rWTCNT = 7812; / 第6行rWTCON |=(1<<5); / 第7行第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。第5-6 行:对数据寄存器和计数寄存器赋值为7812。第7 行:启动看门狗。6. 阅读下
29、列与定时器有关的寄存器描述,解释每一行代码的功能。 (1)定时器预分频器配置寄存器(TCFG0)的含义(2)定时器控制寄存器(TCON)TCON位表述初始状态保留7:5保留死区40:死区使无效;1:死区使能0定时器0自动加载30不自动加载,1自动加载0定时器0输出反转20不反转,1反转0定时器0手动更新位10:无用,1:将TCNTBn/TCMPBn寄存器的值装入内部寄存器TCNTnTCMPn中0定时器0开启停止位00:停止定时器,1:开始定时器0(3):DMA模式与分频选择寄存器(TCFG1) (4)定时器计数缓冲寄存器(TCNTBn)程序:#define rTCFG0 (*(volatile
30、 unsigned *)0x51000000) /第1行#define rTCFG1 (*(volatile unsigned *)0x51000004) /第2行#define rTCON (*(volatile unsigned *)0x51000008) /第3行#define rTCNTB4 (*(volatile unsigned *)0x5100003c) /第4行n void init_Time0()/定时器输入时钟频率=PCLK/预分频值+1/分频值 rTCFG0 = 49; /预分频值=49; rTCFG1 &= (0xf<<0);
31、 rTCFG1 |= (1<<0); /4分频: rTCNTB0 =50X106/50/4; /在pclk = 50MHz下,1s的记数值rTCNTB1 = 50000000/50/4;
32、60; rTCMPB0 = 0; rTCON |= (1<<1);/手动更新 rTCON &= (0xff<<0); /清“手动更新”位, rTCON |= (1<<3)|(1<<0); /启动定时器,自动重载 rSRCPND = BIT_TIMER0; /写1来清除标志位 rINTPND = BIT_TIMER0;/ 写1来清除标志位 rINTMSK &= (BIT_TIMER0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年基金从业资格证之证券投资基金基础知识自我提分评估(附答案)
- 2025-2026学年(北京版新教材)二年级上册数学第三单元(调查与分类)测试卷附参考答案
- 胆汁性胸膜炎的护理
- 雨课堂学堂在线学堂云《蚕体解剖生理学(西南大学 )》单元测试考核答案
- 2025四川九华光子通信技术有限公司招聘产品工程师1人备考公基题库带答案解析
- 2026广西定向选调生(中央财经大学)历年真题汇编带答案解析
- 2026年质量员之土建质量专业管理实务考试题库200道含答案【培优b卷】
- 2026年投资项目管理师之投资建设项目决策考试题库200道及一套完整答案
- 2026浙江省机关事务管理局后勤服务编制单位及直属幼儿园招录(聘)人员17人历年真题汇编附答案解析
- 2025年中国科学技术大学网络信息中心劳务派遣岗位招聘4人历年真题汇编带答案解析
- 室分项目安全培训课件
- 毒蛇咬伤的救护课件
- 2025年中国免疫调节白皮书
- 房屋建筑学毕业论文
- 供热管网系统运行工三级安全教育(公司级)考核试卷及答案
- 《建筑识图与构造》课件-第7章 墙体
- 【《指向数据分析观念的教学设计国内外文献综述》4700字】
- 垃圾焚烧发电厂运行管理方案
- 2025-2030中国菲佣引进政策演变及本土化服务适应问题研究报告
- 心肺复苏与海姆立克急救法
- 市项目变更管理办法
评论
0/150
提交评论