中南大学试题_第1页
中南大学试题_第2页
中南大学试题_第3页
中南大学试题_第4页
中南大学试题_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、; 用汇编语言实现实现冒泡排序,并将排序后的数输出 DATAS SEGMENTA dw 3 10 8 56 22 36 1 43 31 3N=$-A ; 计算数字所占的字节数DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,N/2-1CALL BUBBLE;SI 遍历数字 ; 前一个数的地址;设置循环次数,M(M=N/2个数需要,循环M-1次;调用BUBBL将原来的数排序; 输出排序后的数MOV CX,N/2MOV SI,0MOV DI,0;循环M次输出排序后的M个数

2、 ;SI 遍历排序后的数 ;用DI记录数字的位数MOV BP,N+5 ;BP 用于遍历存储的转化后的字符的位置SHOW: PUSH CX; 循环次数入栈MOV DX,0; 由于将要进行 16位除需要置高 16位为 0MOV AX,SI ;低 16位为排序后的数CALL DTOC;调用DTO将十进制数转换为字符串CALL SHOW_STR调用SHOW_S将一个数转化得到的字符串输出ADD SI,2; 下一个数POP CX; 循环次数出栈栈LOOP SHOWMOV AH,4CHINT 21H ; 冒泡排序BUBBLE PROCL1: PUSH CXLEA SI,AL2: MOV AX,ASICMP

3、 AX,ASI+2JBE NEXTXCHG AX,ASI+2; 将循环次数入栈;SI遍历DATA数据段的数字; 将前一个数存于 AX; 比较前后两个数; 如果前一个数小于或等于后一个数则继续本轮的比较 ; 否则,交换前后两个数的位置MOV ASI,AXNEXT:ADD SI,2LOOP L2POP CXLOOP L1RET BUBBLE ENDP; 下一个数; 注意内层循环的次数已经确定了; 将循环次数出栈; 下一轮比较将十进制数转换为字符串并储存起来DTOC PROCS:MOV CX,10;CALL DIVDWADD CL,30H将除数10,放入CX中;调用DIVDV程序;把数字转换为ASC

4、II码,这样就能显示了MOV DS:BP,CL ;把ASCII码放到内存中INC DIPUSH AXADD AX,DXJZ BACKPOP AXDEC BP;JMP S; 用 DI 记录循环的次数; 将低 16位入栈; 将高位与低位相加,接着判断是否已经除尽; 除尽后返回调用处 ; 将低1 6位出栈 逆序存放转化后的字符,便于主程序调用 SHOW_STRBACK:POP AX;RETDTOC ENDP为了得到正确的IP值,需要出栈一次; 子程序定义开始 , 功能是分离被除数的各个位的数字; 公式: X/N=int(H/N)*65536+rem(H/N)*65536+L/NDIVDW PROC

5、PUSH AXMOV AX,DXMOV DX,0DIV CXMOV BX,AXPOP AXDIV CX;MOV CX,DX;MOV DX,BX;RET ;DIVDW ENDP; 低 16位入栈;将高16位写入AX,; 将高16位置零; 将新的数除 10,;将商int(H/N)转移到BX 默认余数rem(H/N)在DX; 将低16位出栈,将rem(H/N)*65536+L除 10,默认余数在 DX 将余数转移到 CX将商 int(H/N)转移到 dx,相当于 int(H/N)*65536 子程序定义结束; 实现字符串的输出SHOW_STR PROCS2:MOV AH,2MOV DL,DS:BPI

6、NT 21HINC BPDEC DIJZ OKJMP S2; 输出数字转化后的字符串; 顺序输出; 数字的位数减一; 字符串输出完了就结束; 否则继续输出OK:MOV AH,2 ;输出空格MOV DL,0INT 21HRETSHOW_STR ENDPCODES ENDSEND START第一个累加和的源码:AREA TEXT,CODE,READWRITEENTRYMOV R0,#100 ;循环数目MOV R1,#0;初始化数据LOOPADD R1,R1,R0 ;将数据进行相加,获得最后的数据SUBS R0,R0,#1 ;循环数据 R0减去1CMP R0,#0;将R0与0比较看循环是否结束BNE

7、 LOOP ;判断循环是否结束,接受则进行下面的步骤LDR R2,=RESULTSTR R1,R2RESULTDCD 0STOPB STOP第二个排序的源码附上:;排列算法:先将所有的数据与第一个进行比较,最后取出最小的数据放到第一个内存 单元中;然后再从第二个内存单元开始进行比较,将第二小的数据放到第二个内存单元中,;以此内推则能将十个数据进行排列。AREA TEXT,CODE,READWRITEENTRYLDR RO,=DATA;获得DATA数据的起始地址MOV R1,R0MOV R5,#9;开始的循环数目是10次,所以应该从 9开始MOV R6,R5COMPAREADD R0,R0,#4

8、SUB R6,R6,#1LDR R2,R1;将R0所存储的地址+4表示为下一个要比较的数的地址;循环1次减1将放在寄存器中的数据取出进行大小比较LDR R3,R0CMP R3,R2MOVCC R7,R2 ;MOVCC R2,R3如果后面的地址的数值比前一个小则交换他们的数据MOVCC R3,R7STR R2,R1STR R3,R0CMP R6,#0将数据存储到相应的内存单元中;看每次的循环是否结束BNE COMPAREADD R1,R1,#4MOV R0,R1SUB R5,R5,#1;每次循环结束以后将初始的指向的内存地址后移一个单元;重新初始化上个循环中的寄存器中保存的地址;每次循环以后上面

9、在以后的循环中的次数都会减MOV R6,R5CMP R5,#0判断所有的循环是否结束BNE COMPAREDATADCD 9,4,6,7,8,1,3,2,0,5STOPB STOPARM匚编编程-实现双层for循环AREA Block, CODE;声明代码段ENTRY; for(i = 0; i 10; i+);for(j = i+1; j=10; j+);z +=1STARTMOV R1, #0; i = 0MOV R0, #0; ZLOOPCMP R1, #10; i 10BEQ STOPADD R2, R1, #1; j = i+1LOOP1CMP R2, #10+1; j=10ADDN

10、E R0, R0, #1; z +=1ADDNE R2, R2, #1; j+BNE LOOP1ADD R1, R1, #1; i+B LOOPSTOPMOV RO, #0x18LDR R1, =0x20026SWI 0x123456END数据块拷贝,利用LDR/STR旨令num EQU 10;声明数据段;定义十个数声明代码段AREA BlockData, DATAsrc DCD 0,1,2,3,4,5,6,7,8,9dst SPACE 10*4AREA Block, CODEENTRYSTARTLDR R1, =srcLDR R2, =dstMOV R3, #numLOOPLDR R0, R

11、1, #4STR R0, R2, #4SUBS R3, R3, #1BNE LOOPSTOPMOV R0, #0x18LDR R1, =0x20026SWI 0x123456END汇编语言程序示例;例五:利用跳转表实现程序跳转Example5.s;项目名:Example5.mcp,文件名:AREA Jump, CODE, READONLYnu mEQU 2ENTRYstartMOV R0, #0MOV R1, #3MOV R2, #2BLarithfu ncBarithf uncCMP R0, #numMOVHSPC, LRADR R3, JumpTableLDR PC, R3,R0,LSL

12、#2JumpTableDCD DoAddDCD DoSubDoAddADD R0, R1, R2MOV PC, LRDoSubSUBO, R1, R2MOV PC, LREND3、存储器从0x400000开始的100个单元中存放着ASCII码,编写程序,将其 所有的小写字母转换成大写字母,对其它的ASCII码不做变换。解:MOVR0, #0x400000MOVR1, #0LPLDRBR2, R0,R1CMPR2, #0x61BLONEXTCMPR2, #0x7B ;0x61-0x7A 为小写字母的 ASCSUBLOR2, R2, #0x20STRBLCR2, R0,R1NEXTADDR1, R

13、1, #1CMPR1, #100BNELP8、编写一简单ARM匚编程序段,实现1+2+100的运算。解:MOVR2, #100MOVR1, #0LOOPADDR1, R1, R2 ;R1中为累加和SUBSR2, R2, #1;R2控制循环BNELOOP4、编写程序,比较存储器中0x400000和0x400004两无符号字数据的大小,并 且将比较结果存于0x400008的字中,若两数相等其结果记为 0,若前者大于后 者其结果记为1,若前者小于后者其结果记为-1。解:MOVR0,#0x400000LDRR1,R0;取第1个数LDRR2,R0, #4;取第2个数CMPR1,R2;两个数相比较MOVH

14、IR1,#1;R1大MOVLO1,# -1;R1小MOVEQ1,#0;两个数相等STRR1, R0,#87、编写一程序,存储器中从0x400200开始有一个64位数。(1)将取反,再 存回原处;(2)求其补码,存放到0x400208处。解:LDRR0, =0x400200LDRR2, =0xFFFFFFFFLDRR1,R0;取低32位数EORR1, R1, R2;取反STRR1, R0;存低32位反码ADDSR1, R1, #1;又加1为求补STRR1, R0, #8;存低32位补码LDRR1, R0, #4;取高 32 位数EORR1, R1, R2;取反STRR1, R0, #4;存咼32

15、位反码ADCR1, R1, #0;高32位求补STRR1, R0 , #12;存高32位补码Example7Example7.OC例七:汇编语言与C/C+勺混和编程项目名: Example7.mcp文件名:Example7_asm.s文件名:Example7_c.c;Example7_asm.sAREA Asm_C, CODE, READONLYENTRYLDRSP,=0x4000IMPORT mainBL_mai nBEND#i nclude int main()prin tf(Hello worldn);return 0;中南大学考试试卷(答案)2012-2013 学年2学期时间100分钟

16、2013年6月4日嵌入式系统课程32学时2.0学分考试形式:开卷专业年级:测控10级 总分100分,占总评成绩70 %注:此页不作答题纸,请将答案写在答题纸上一.填空题(每空1分,共20分)1. 嵌入性、专用性与计算机系统是嵌入式系统的3个基本要素。2. ARM7微处理器采用 冯.诺依曼 总线架构;ARM9微处理器采用 哈佛 总线架构。3. ARM有三种含义,分别是 公司名称、一类处理器的通称 与技术名称。4. 在RISC中,完成数据在寄存器和外部存储器之间的传输采用独立的load与store 指令。5. ARM核有两个指令集,分别是 ARM、THUMB。6. ARM公司提供的专门用于 ARM

17、相关应用开发和调试的综合性软件为:ADS1.2。7. ARM微处理器的工作状态一般有两种,两种状态之间的切换采用BX指令。8. 当程序状态寄存器的内容为 0xA030时,说明处理器运行 THUMB状态和 用户 模式下。9. ARM核中的R14(或LR)寄存器,常用作保存子程序的返回地址。10.汇编语言的源程序主要由指令、伪指令、语句标号 与 注释 等四部分组成。二简答题(56分,每小题7分)1 简述嵌入式系统的概念、组成及特点。答:嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁减软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。一般由嵌入式微处理器、外围硬件设

18、备、嵌入式操作系统以及用户的应用程序等四个部分组成。其特点有1)嵌入式系统通常是面向特定应用的2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余 4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中6)嵌入式系统本身不具有自主开发能力。2 S3C2440A中的中断控制器可以从多个中断源接收中断请求,简述中断控制器请求的 FIQ及IRQ中断机制。3. 试说明看门狗Watchdog的作

19、用和原理?答:在嵌入式应用中,CPU必须可靠工作,即使因为某种原因进入了一个错误状态,系统也应该可以自动恢复。看门狗的用途就是使微控制器在进入错误状态后的一定时间内复位。其工作原理是在系统正常工作时,用户程序每隔一段时间执行喂狗动作,如果系统岀错,喂 狗时隔超过看门狗溢岀时间,那么看门狗将会产生复位信号,使系统复位。4. 简要说明一下 ARM的异常的响应和返回的过程。答:A 异常的进入:(1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的 位置重新开始执行。(2)将CPSR复制到相应的SPSR中。(3)根据异常类型,强制设置CPSR的运行模式位。(4)强制PC从相

20、关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序。也可以设置中断禁止位来阻止其他无法处理的异常嵌套。B 异常的返回:(1)将链接寄存器LR的值减去相应的偏移量后送到 PC中。(2)将SPSR复制回CPSR中。(3)如果进入时设置了中断禁止位,那么清除该标志。5. 在C语言与汇编程序混合编程中,子程序调用的ATPCS规定了哪些基本规则。 简 要说明寄存器使用 规则。答:基本规则有三个方面内容,分别是寄存器的使用规则及其相应的名字,数据栈的使用规贝U,参数传递规则。A寄存器的使用规则:(1)子程序通过寄存器 R0R3来传递参数。这时寄存器可以记作:A0A3, 被调用的 子程序在返回前

21、无需恢复寄存器R0R3的内容。(2)在子程序中,使用 R4R11来保存局部变量,这时寄存器R4R11可以记作:V1V8 如果在子程序中使用到 V1V8的某些寄存器,子程序进入 时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。在THUMB程序中,通常只能使用寄存器 R4R7来保存局部变量。(3)寄存器R12用作子程序间scratch 寄存器,记作ip ;在子程序的连接代码段中经常会有这种使用规则。(4)寄存器R13用作数据栈指针,记做SP;在子程序中寄存器 R13不能用做其他用途。寄存器SP在进入子程序时的值和退岀子程序时的值必须相等。(

22、5)寄存器R14用作连接寄存器,记作lr ;它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则 R14可用作其它的用途。(6)寄存器R15是程序计数器,记作PC ;它不能用作其他用途。(7) ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的。6. 简述ARM处理器的寻址方式,并回答在ATPCS规则中,规定数据栈采用那种类型。答:ARM指令系统支持以下7种寻址方式:(1)寄存器寻址;(2)立即寻址;(3)寄存器间接寻址;(4)变址寻址;(5)寄存器移位寻址;(6)多寄存器寻址; (7)堆栈寻址。在ATPCS规则中,规定数据栈采用满递减类型。7 .如果S3C2440A的UART

23、时钟为40MHz,要将UART0设为正常工作模式 ,并且为偶 校验,停止位1 位,数据位7位,波特率为230400bps,该怎么设置,UART0的线控制寄存 器为ULCON0波特率设置寄 存器为UBRDIV0。答:UBRDIV0=0X09; ULCO N0&=0XFFFFFF00; ULC0N0|=0X2A;三程序设计(24分,每小题12分)1、通过控制 GPF0,GPF1,GPF2,GPF3的控制实现对LED1,LED2,LED3,LED4轮流亮灭的控 制。LED灯通过电源与限流电阻与ARM的I/O 口相连,当I/O 口为低电平时,点亮LED.要求将程序缺失的部分补全。(12分)AREA |

24、DATA|,CODE,READONLY ENTRY ldr r13,=0x1000 IMPORT LedMain b LedMain END #define GPFCON (volatile unsigned *)0x56000050) #define GPFDAT(volatile unsigned *)0x56000054) #defineGPFUF(*(volatile unsigned *)0x56000058) int LedMain() void Delay(unsigned int); unsigned char Iedtab=0xfe,0xfd,0xfb,0xf7;int i;

25、 GPFUP&=0XFFFFFFF0 ; GPFCON&=0XFF00 ; GPFCON|( 0X0055;) while(1) for(i=0;i4;i+)( GPFDAT=ledtabi; ) Delay(70); return(0); /使能上拉 F3-6 / 将 F3-6 设为输出口 voidDelay(unsigned int x ) unsigned int i,j,k; for(i=0;i=x;i+) for(j=0;j=0xff;j+)for(k=0;kv=0xff;k+); 2、EINT2接S3C2440A的GPF2,并接上拉电阻,下降沿触发中断,试将主程序和中断服 务程序缺

26、失的部分补全。(12 分)int Main () Eint_Init(); Enable_Eint() While(1) Uart_Printf( main is running ”; void Eint_Init(void) rGPFCON= rGPFCON &(34)|(15); rGPFUP|=(12); rEXTINT0=( rEXTINT 0&(78)|(28); plSR_EINT2=(unsigned)Eint2_ISR; void Enable_Eint(void) rEINTPEND=Oxffffff; rEINTMASK=(119); rSRCPND|=BIT_EINT2;

27、rlNTPND|= BIT_EINT2; rlNTMSK=( BIT_EINT2); static void_irq Eint2_ISR(void) ClearPending(BIT_EINT2); Uart_Printf(eint2 is running ” 一填空题(每空1分,共 20分)1嵌入式系统的设计可以分成三个阶段: 分析、 设计 , 实现。 2微处理器有两种总线架构,使用数据和指令使用同一接口的是冯诺依曼 , 分开的指令和数据接口、取指和数据访问可以并行进行的是哈佛结构。3. ARM核有两个指令集,分别是ARM、 THUMB4. 嵌入性 ,专用性, 与 计算机系统是嵌入式系统的

28、3 个基本要素。5. 工业嵌入式系统的发展趋势是网路化、智能化和控制的分散化。 。6. GPIO 口的功能是通过相应的 端口控制寄存器 来设定端口引脚的功 能。7. 看门狗定时器有三个控制其操作专用寄存器: 分别为WTCONWTDATWTCNT8. 端口 F端口控制寄存器包括 GPFCONGPFDATGPFUP9. ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件为:ADS1.210. DMA勺主要优点就是其传输数据不受CPU的干涉。二简答题 (56 分,每小题 7 分 )1 嵌入式开发环境主要包括那些组件 答:嵌入式系统开发需要交叉编译和在线调试的开发环境, 主要包括 a. 宿主

29、 机b. 目标机c. 基于 Jtag 的 ICD 仿真器、或调试监控软件、或在线仿真器 ICEd. 运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境e. 嵌入式操作系统2. ARM核中什么寄存器用于存储 PC?R13!常用来存储什么? R14通常用来存储 什么? 答:R15用于程序计数器PC,R13通常用来做堆栈指针寄存器,R14通常 用来做链接寄存器,保存函数调用的返回地址。4简述嵌入式系统的概念、组成及特点。 答:嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁减软硬件,适 用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。一般 由嵌入式微处理器 、外围

30、硬件设备、嵌入式操作系统以及用户的应用程序等四 个部分组成。其特点有 1) 嵌入式系统通常是面向特定应用的 2) 嵌入式系统是 将先进的计算机技术、 半导体技术和电子技术与各个行业的具体应用相结合后的 产物 3) 嵌入式系统的硬件和软件都必须高效率地设计, 量体裁衣、去除冗余 4) 嵌入式系统和具体应用有机地结合在一起, 它的升级换代也是和具体产品同步 进行 5) 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存 储器芯片或单片机本身中 6) 嵌入式系统本身不具有自主开发能力。5. 试说明 看门狗 Watchdog 的作用和原理?答:在嵌入式应用中,CPU必须可靠工作,即使因为某

31、种原因进入了一个错误 状态,系统也应该可以自动恢复。 看门狗的用途就是使微控制器在进入错误状态 后的一定时间内复位。 其工作原理是在系统正常工作时,用户程序每隔一段时 间执行喂狗动作 , 如果系统出错,喂狗时隔超过看门狗溢出时间,那么看门狗将 会产生复位信号,使系统复位。6.如果S3C2440A的UART时钟为40MHz要将UART(设为正常工作模式 ,并且 为偶校验,停止位1位,数据位7位,波特率为230400bps,该怎么设置,UART0 的线控制寄存器为ULCON0波特率设置寄存器为 UBRDIV0答: UBRDIV0=0X09; ULCON0&=0XFFFFFF00; ULCON0|=

32、0X2A;7在C语言与汇编程序混合编程中,子程序调用的ATPCS规定了哪些基本规则简 要说明寄存器使用规则。答:基本规则有三个方面内容, 分别是寄存器的使用规则及其相应的名字, 数据 栈的使用规则,参数传递规则。 A 寄存器的使用规则 :(1)子程序通过寄存器R0R3来传递参数。这时寄存器可以记作:A0A3 ,被调用的子程序在返回 前无需恢复寄存器R0R3的内容。(2)在子程序中,使用R4R11来保存局部变量,这时寄存器R4R11可以记作:V1V&如果在子程序中使用到 V1V8的某 些寄存器, 子程序进入时必须保存这些寄存器的值, 在返回前必须恢复这些寄存 器的值,对于子程序中没有用到的寄存器则不必执行这些操作。在THUM程序中,通常只能使用寄存器R4R7来保存局部变量。(3)寄存器R12用作子程序间scratch 寄存器,记作 ip ;在子程序的连接代码段中经常会有这种使用规则。 (4) 寄存器R13用作数据栈指针,记做SP在子程序中寄存器R13不能用做其他用 途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。(5)寄存器R14用作连接寄存器,记作lr ;它用于保存子程序的返回地址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论