中南大学试题.docx
- 文档编号:4485984
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:23.23KB
中南大学试题.docx
《中南大学试题.docx》由会员分享,可在线阅读,更多相关《中南大学试题.docx(15页珍藏版)》请在冰豆网上搜索。
中南大学试题
RevisedonNovember25,2020
中南大学试题
;用汇编语言实现实现冒泡排序,并将排序后的数输出
DATASSEGMENT
Adw3108562236143313
N=$-A;计算数字所占的字节数
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,0;SI遍历数字;前一个数的地址
MOVCX,N/2-1;设置循环次数,M(M=N/2)个数需要,循环M-1次
CALLBUBBLE;调用BUBBLE将原来的数排序
;输出排序后的数
MOVCX,N/2;循环M次输出排序后的M个数
MOVSI,0;SI遍历排序后的数
MOVDI,0;用DI记录数字的位数
MOVBP,N+5;BP用于遍历存储的转化后的字符的位置
SHOW:
PUSHCX;循环次数入栈
MOVDX,0;由于将要进行16位除需要置高16位为0
MOVAX,[SI];低16位为排序后的数
CALLDTOC;调用DTOC将十进制数转换为字符串
CALLSHOW_STR;调用SHOW_STR将一个数转化得到的字符串输出
ADDSI,2;下一个数
POPCX;循环次数出栈栈
LOOPSHOW
MOVAH,4CH
INT21H
;冒泡排序
BUBBLEPROC
L1:
PUSHCX;将循环次数入栈
LEASI,A;SI遍历DATAS数据段的数字
L2:
MOVAX,A[SI];将前一个数存于AX
CMPAX,A[SI+2];比较前后两个数
JBENEXT;如果前一个数小于或等于后一个数则继续本轮的比较
XCHGAX,A[SI+2];否则,交换前后两个数的位置
MOVA[SI],AX
NEXT:
ADDSI,2;下一个数
LOOPL2;注意内层循环的次数已经确定了
POPCX;将循环次数出栈
LOOPL1;下一轮比较
RET
BUBBLEENDP
;将十进制数转换为字符串并储存起来
DTOCPROC
S:
MOVCX,10;将除数10,放入CX中
CALLDIVDW;调用DIVDW程序
ADDCL,30H;把数字转换为ASCII码,这样就能显示了
MOVDS:
[BP],CL;把ASCII码放到内存中
INCDI;用DI记录循环的次数
PUSHAX;将低16位入栈
ADDAX,DX;将高位与低位相加,接着判断是否已经除尽
JZBACK;除尽后返回调用处
POPAX;将低16位出栈
DECBP;逆序存放转化后的字符,便于主程序调用SHOW_STR
JMPS
BACK:
POPAX;为了得到正确的IP值,需要出栈一次
RET
DTOCENDP
;子程序定义开始,功能是分离被除数的各个位的数字
;公式:
X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
DIVDWPROC
PUSHAX;低16位入栈
MOVAX,DX;将高16位写入AX,
MOVDX,0;将高16位置零
DIVCX;将新的数除10,
MOVBX,AX;将商int(H/N)转移到BX,默认余数rem(H/N)在DX
POPAX;将低16位出栈,
DIVCX;将[rem(H/N)*65536+L]除10,默认余数在DX
MOVCX,DX;将余数转移到CX
MOVDX,BX;将商int(H/N)转移到dx,相当于int(H/N)*65536
RET;子程序定义结束
DIVDWENDP
;实现字符串的输出
SHOW_STRPROC
S2:
MOVAH,2;输出数字转化后的字符串
MOVDL,DS:
[BP]
INT21H
INCBP;顺序输出
DECDI;数字的位数减一
JZOK;字符串输出完了就结束
JMPS2;否则继续输出
OK:
MOVAH,2;输出空格
MOVDL,0
INT21H
RET
SHOW_STRENDP
CODESENDS
ENDSTART
第一个累加和的源码:
AREATEXT,CODE,READWRITE
ENTRY
MOVR0,#100;循环数目
MOVR1,#0;初始化数据
LOOP
ADDR1,R1,R0;将数据进行相加,获得最后的数据
SUBSR0,R0,#1;循环数据R0减去1
CMPR0,#0;将R0与0比较看循环是否结束
BNELOOP;判断循环是否结束,接受则进行下面的步骤
LDRR2,=RESULT
STRR1,[R2]
RESULT
DCD0
STOP
BSTOP
第二个排序的源码附上:
;排列算法:
先将所有的数据与第一个进行比较,最后取出最小的数据放到第一个内存单元中
;然后再从第二个内存单元开始进行比较,将第二小的数据放到第二个内存单元中,
;以此内推则能将十个数据进行排列。
AREATEXT,CODE,READWRITE
ENTRY
LDRR0,=DATA;获得DATA数据的起始地址
MOVR1,R0
MOVR5,#9;开始的循环数目是10次,所以应该从9开始
MOVR6,R5
COMPARE
ADDR0,R0,#4;将R0所存储的地址+4表示为下一个要比较的数的地址
SUBR6,R6,#1;循环1次减1
LDRR2,[R1];将放在寄存器中的数据取出进行大小比较
LDRR3,[R0]
CMPR3,R2
MOVCCR7,R2;如果后面的地址的数值比前一个小则交换他们的数据
MOVCCR2,R3
MOVCCR3,R7
STRR2,[R1];将数据存储到相应的内存单元中
STRR3,[R0]
CMPR6,#0;看每次的循环是否结束
BNECOMPARE
ADDR1,R1,#4;每次循环结束以后将初始的指向的内存地址后移一个单元
MOVR0,R1;重新初始化上个循环中的寄存器中保存的地址
SUBR5,R5,#1;每次循环以后上面在以后的循环中的次数都会减1
MOVR6,R5
CMPR5,#0;判断所有的循环是否结束
BNECOMPARE
DATA
DCD9,4,6,7,8,1,3,2,0,5
STOP
BSTOP
;
;ARM汇编编程-实现双层for循环
;
AREABlock,CODE;声明代码段
ENTRY
;for(i=0;i<10;i++)
;for(j=i+1;j<=10;j++)
;z+=1
START
MOVR1,#0;i=0
MOVR0,#0;Z
LOOP
CMPR1,#10;i<10
BEQSTOP
ADDR2,R1,#1;j=i+1
LOOP1
CMPR2,#10+1;j<=10
ADDNER0,R0,#1;z+=1
ADDNER2,R2,#1;j++
BNELOOP1
ADDR1,R1,#1;i++
BLOOP
STOP
MOVR0,#0x18
LDRR1,=0x20026
SWI0x123456
END
;
;数据块拷贝,利用LDR/STR指令
;
numEQU10
AREABlockData,DATA;声明数据段
srcDCD0,1,2,3,4,5,6,7,8,9;定义十个数
dstSPACE10*4
AREABlock,CODE;声明代码段
ENTRY
START
LDRR1,=src
LDRR2,=dst
MOVR3,#num
LOOP
LDRR0,[R1],#4
STRR0,[R2],#4
SUBSR3,R3,#1
BNELOOP
STOP
MOVR0,#0x18
LDRR1,=0x20026
SWI0x123456
END
汇编语言程序示例
;例五:
利用跳转表实现程序跳转
;项目名:
,文件名:
———————————————————————————————————————
AREAJump,CODE,READONLY
numEQU2
ENTRY
start
MOVR0,#0
MOVR1,#3
MOVR2,#2
BLarithfunc
B.
arithfunc
CMPR0,#num
MOVHSPC,LR
ADRR3,JumpTable
LDRPC,[R3,R0,LSL#2]
JumpTable
DCDDoAdd
DCDDoSub
DoAdd
ADDR0,R1,R2
MOVPC,LR
DoSub
SUBR0,R1,R2
MOVPC,LR
END
3、存储器从0x400000开始的100个单元中存放着ASCII码,编写程序,将其所有的小写字母转换成大写字母,对其它的ASCII码不做变换。
解:
MOVR0,#0x400000
MOVR1,#0
LP
LDRBR2,[R0,R1]
CMPR2,#0x61
BLONEXT
CMPR2,#0x7B;0x61---0x7A为小写字母的ASC
SUBLOR2,R2,#0x20
STRBLOR2,[R0,R1]
NEXT
ADDR1,R1,#1
CMPR1,#100
BNELP
8、编写一简单ARM汇编程序段,实现1+2+…+100的运算。
解:
MOVR2,#100
MOVR1,#0
LOOP
ADDR1,R1,R2;R1中为累加和
SUBSR2,R2,#1;R2控制循环
BNELOOP
4、编写程序,比较存储器中0x400000和0x400004两无符号字数据的大小,并且将比较结果存于0x400008的字中,若两数相等其结果记为0,若前者大于后者其结果记为1,若前者小于后者其结果记为-1。
解:
MOVR0,#0x400000
LDRR1,[R0];取第1个数
LDRR2,[R0,#4];取第2个数
CMPR1,R2;两个数相比较
MOVHIR1,#1;R1大
MOVLOR1,#-1;R1小
MOVEQR1,#0;两个数相等
STRR1,[R0,#8]
7、编写一程序,存储器中从0x400200开始有一个64位数。
(1)将取反,再存回原处;
(2)求其补码,存放到0x400208处。
解:
LDRR0,=0x400200
LDRR2,=0xFFFFFFFF
LDRR1,[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位反码
ADCR1,R1,#0;高32位求补
STRR1,[R0,#12];存高32位补码
例七:
汇编语言与C/C++的混和编程
项目名:
文件名:
文件名:
———————————————————————————————————————
;
AREAAsm_C,CODE,READONLY
ENTRY
LDRSP,=0x4000
IMPORT__main
BL__main
B.
END
———————————————————————————————————————
#include<>
intmain()
{
printf("Helloworld\n");
return0;
}
中南大学考试试卷(答案)
2012--2013学年2学期时间100分钟
2013年6月4日嵌入式系统
课程32学时学分
考试形式:
开卷
专业年级:
测控10级总分100分,占总评成绩70%注:
此页不作答题纸,请将答案写在答题纸上
一.填空题(每空1分,共20分)
1.嵌入性、专用性与计算机系统是嵌入式系统的3个基本要素。
2.ARM7微处理器采用冯.诺依曼总线架构;ARM9微处理器采用哈佛总线架构。
3.ARM有三种含义,分别是公司名称、一类处理器的通称与技术名称。
4.在RISC中,完成数据在寄存器和外部存储器之间的传输采用独立的load与store指令。
5.ARM核有两个指令集,分别是ARM、THUMB。
6.ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件为:
。
微处理器的工作状态一般有两种,两种状态之间的切换采用BX指令。
8.当程序状态寄存器的内容为0xA030时,说明处理器运行THUMB状态和用户模式下。
9.ARM核中的R14(或LR)寄存器,常用作保存子程序的返回地址。
10.汇编语言的源程序主要由指令、伪指令、语句标号与注释等四部分组成。
二.简答题(56分,每小题7分)
1.简述嵌入式系统的概念、组成及特点。
答:
嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁减软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。
其特点有1)嵌入式系统通常是面向特定应用的2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中6)嵌入式系统本身不具有自主开发能力。
2.S3C2440A中的中断控制器可以从多个中断源接收中断请求,简述中断控制器请求的FIQ及IRQ中断机制。
3.试说明看门狗Watchdog的作用和原理
答:
在嵌入式应用中,CPU必须可靠工作,即使因为某种原因进入了一个错误状态,系统也应该可以自动恢复。
看门狗的用途就是使微控制器在进入错误状态后的一定时间内复位。
其工作原理是在系统正常工作时,用户程序每隔一段时间执行喂狗动作,如果系统出错,喂狗时隔超过看门狗溢出时间,那么看门狗将会产生复位信号,使系统复位。
4.简要说明一下ARM的异常的响应和返回的过程。
答:
A.异常的进入:
(1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
(2)将CPSR复制到相应的SPSR中。
(3)根据异常类型,强制设置CPSR的运行模式位。
(4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序。
也可以设置中断禁止位来阻止其他无法处理的异常嵌套。
B.异常的返回:
(1)将链接寄存器LR的值减去相应的偏移量后送到PC中。
(2)将SPSR复制回CPSR中。
(3)如果进入时设置了中断禁止位,那么清除该标志。
5.在C语言与汇编程序混合编程中,子程序调用的ATPCS规定了哪些基本规则。
简要说明寄存器使用规则。
答:
基本规则有三个方面内容,分别是寄存器的使用规则及其相应的名字,数据栈的使用规则,参数传递规则。
A寄存器的使用规则:
(1)子程序通过寄存器R0~R3来传递参数。
这时寄存器可以记作:
A0~A3,被调用的子程序在返回前无需恢复寄存器R0~R3的内容。
(2)在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作:
V1~V8。
如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。
在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量。
(3)寄存器R12用作子程序间scratch寄存器,记作ip;在子程序的连接代码段中经常会有这种使用规则。
(4)寄存器R13用作数据栈指针,记做SP;在子程序中寄存器R13不能用做其他用途。
寄存器SP在进入子程序时的值和退出子程序时的值必须相等。
(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时钟为40MHz,要将UART0设为正常工作模式,并且为偶校验,停止位1位,数据位7位,波特率为230400bps,该怎么设置,UART0的线控制寄存器为ULCON0,波特率设置寄存器为UBRDIV0。
答:
UBRDIV0=0X09;ULCON0&=0XFFFFFF00;ULCON0|=0X2A;
三程序设计(24分,每小题12分)1、通过控制GPF0,GPF1,GPF2,GPF3的控制实现对LED1,LED2,LED3,LED4轮流亮灭的控制。
LED灯通过电源与限流电阻与ARM的I/O口相连,当I/O口为低电平时,点亮LED.要求将程序缺失的部分补全。
(12分)
AREA|DATA|,CODE,READONLYENTRYldrr13,=0x1000IMPORTLedMainbLedMainintLedMain(){voidDelay(unsignedint);unsignedcharledtab[]={0xfe,0xfd,0xfb,0xf7};
inti;GPFUP&=(0XFFFFFFF0);GPFCON&=(0XFF00);GPFCON|=(0X0055;)while
(1){for(i=0;i<4;i++){(GPFDAT=ledtab[i];)Delay(70);}}return(0);}嵌入性,专用性,与计算机系统是嵌入式系统的3个基本要素。
5.工业嵌入式系统的发展趋势是网路化、智能化和控制的分散化。
。
6.GPIO口的功能是通过相应的端口控制寄存器来设定端口引脚的功能。
7.看门狗定时器有三个控制其操作专用寄存器:
分别为WTCON、WTDAT、WTCNT。
8.端口F端口控制寄存器包括GPFCON、GPFDAT、GPFUP。
9.ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件为:
10.DMA的主要优点就是其传输数据不受CPU的干涉。
二.简答题(56分,每小题7分)
1.嵌入式开发环境主要包括那些组件
答:
嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括a.宿主机
b.目标机
c.基于Jtag的ICD仿真器、或调试监控软件、或在线仿真器ICE
d.运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境
e.嵌入式操作系统
2.ARM核中什么寄存器用于存储PCR13通常用来存储什么R14通常用来存储什么答:
R15用于程序计数器PC,R13通常用来做堆栈指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址。
4.简述嵌入式系统的概念、组成及特点。
答:
嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁减软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。
其特点有1)嵌入式系统通常是面向特定应用的2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中6)嵌入式系统本身不具有自主开发能力。
5.试说明看门狗Watchdog的作用和原理
答:
在嵌入式应用中,CPU必须可靠工作,即使因为某种原因进入了一个错误状态,系统也应该可以自动恢复。
看门狗的用途就是使微控制器在进入错误状态后的一定时间内复位。
其工作原理是在系统正常工作时,用户程序每隔一段时间执行喂狗动作,如果系统出错,喂狗时隔超过看门狗溢出时间,那么看门狗将会产生复位信号,使系统复位。
6.如果S3C2440A的UART时钟为40MHz,要将UART0设为正常工作模式,并且为偶校验,停止位1位,数据位7位,波特率为230400bps,该怎么设置,UART0的线控制寄存器为ULCON0,波特率设置寄存器为UBRDIV0。
答:
UBRDIV0=0X09;ULCON0&=0XFFFFFF00;ULCON0|=0X2A;
7在C语言与汇编程序混合编程中,子程序调用的ATPCS规定了哪些基本规则。
简要说明寄存器使用规则。
答:
基本规则有三个方面内容,分别是寄存器的使用规则及其相应的名字,数据栈的使用规则,参数传递规则。
A寄存器的使用规则:
(1)子程序通过寄存器R0~R3来传递参数。
这时寄存器可以记作:
A0~A3,被调用的子程序在返回前无需恢复寄存器R0~R3的内容。
(2)在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作:
V1~V8。
如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。
在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量。
(3)寄存器R12用作子程序间scratch寄存器,记作ip;在子程序的连接代码段中经常会有这种使用规则。
(4)寄存器R13用作数据栈指针,记做SP;在子程序中寄存器R13不能用做其他用途。
寄存器SP在进入子程序时的值和退出子程序时的值必须相等。
(5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 试题