admin 管理员组文章数量: 1086019
2024年12月31日发(作者:smart案例分析)
第四章
1. 什么是计算机语言?一般可以分为哪几种?各自的优缺点?
答:计算机语言是计算机可以识别、理解的语言。计算机语言分为三类:机
器语言,汇编语言和高级语言。
机器语言(Machine Language)是由0和1二进制代码表示和存储的指
令与数据。它的特点是能被机器直接识别与执行;程序所占内存空间较少。
其缺点是难认、难记、难编、易错。
汇编语言是一种面向物理层操作的计算机语言。不同的处理器类型,具
有不同的汇编语言。使用汇编语言编写程序能够直接利用硬件系统的特性
(如寄存器、标志、中断系统等),可直接对位、字节、字寄存器或存储单
元、I/O端口进行处理,同时也能直接使用CPU指令系统提供的各种寻址方
式,编制出高质量的程序,这样的程序不但占用内存空间少,而且执行速度
快。 缺点:由于汇编语言不直接支持复杂的抽象数据类型,在描述目标系
统模型时,需要程序员自己组织各种抽象数据类型的存储方式,使得汇编语
言程序设计较高级语言困难的多,需要较多的软件开发时间,也增加了程序
设计过程中出错的可能性,程序维护也麻烦。
高级语言(High Level Language)是脱离具体机器(即独立于机器)的
通用语言,不依赖于特定计算机的结构与指令系统。与目标系统的数学模型
之间有着良好的对应关系,可在各种机器上通用,具有很好的通用性和可移
植性。缺点:处理器是不能直接执行这种用高级语言编写的源程序,需要先
将它翻译成对应的目标程序(即机器语言程序),才能运行。
2. 简述ARM汇编语言上机操作过程。
答:⑴设计、编辑汇编语言源程序;
⑵汇编、连接、下载到目标系统;
⑶调试运行;
3. 简述编写一个汇编语言源程序的基本步骤。
答:⑴ 分析目标系统,建立数学模型,确定算法
⑵ 根据算法设计流程图
⑶ 合理分配寄存器,存储空间和外设资源
⑷ 根据流程图编写源程序
⑸ 上机调试程序
⑹ 形成文档
4. 循环程序设计中,循环的基本结构有几种?其循环控制方法有几种?各自的
应用特点?
答:循环程序的基本结构:
⑴ 初始化部分:建立循环初始值。
⑵ 循环体:是循环程序的主体部分。
⑶ 修改部分:为执行下一次循环而修改某些参数。
⑷ 控制部分:通过判断循环结束条件是否成立,决定是否继续执行循环。
⑸ 结束处理部分:对循环结束进行适当处理,如存储结果和打印输出等。
循环程序设计中一个重要环节就是如何控制循环次数。循环控制方法:
⑴ 用计数控制循环。特点:循环比较次数是已知的,因此可以用计数器控制循
环。
⑵ 用条件控制循环。有些情况无法确定循环次数,但循环结束的条件是已
知的,这时可通过循环测试结束条件是否满足的方法,条件满足结束循环,否则
继续循环。
5. 汇编子程序传递参数有哪几种方式?
答:⑴ 寄存器传递参数方式
⑵ 存储区域传递参数方式
⑶ 堆栈传递参数方式
6. C语言和ARM汇编语言进行程序编制时常用的开发方法有哪些?
答:使用C语言和ARM7汇编语言进行程序编制时常用的开发方法:混合
编程和交叉编程。
7. 简述APCS规则。
答:⑴ 寄存器使用规则。ARM处理器寄存器组中的{R0-R11}用来保存局部
变量;{R12-R15}用于系统专用:R12用于子程序内部调用的片段寄存器;R13
当前模式的堆栈指针;R14链接寄存器,保存子程序的返回地址;R15用作程序
计数器。其中,由于{R4-R11}用来保存局部变量,对于遵守APCS规则的函数,
在进入该函数的时候,程序员必须注意保存{R4-R11}中会被函数使用的寄存器,
当返回时,再返回它们的值。
⑵ 堆栈使用规则。APCS规则中的堆栈为FD类型,也就是满递减堆栈,并且
堆栈的操作是8字节对齐的,所以需要在汇编程序中用伪指令PRESERVE8来告诉
连接器,本程序使用的堆栈是字节对齐的。
⑶ 参数传递规则。ARM7处理器寄存器组中{R0-R3}用于程序间的参数传
递,其中R0传递第一个参数,R1传递第二个参数,以此类推;如果参数数
目超过4个,那么必须使用堆栈进行传递。
8. 实现将某个寄存器中的字数据拆分成4组字节数据的功能。
答:不妨设数据在R0中,拆成的数据存放在R1~R4中,程序代码如下。
为清零
9. 实现统计任意字符串包含的字符个数的功能。(约定:字符串以0为结束标志)
答:
LDR R0,string; 将一个字符串的地址放到R0中。
MOV R1,0; 将字符串结束符放R1中
MOV R3,0; 将统计长度的放入R3中
LDR R2,[R0]; 将字符串的第一个字符放入R2
count:
CMP R2,R1; 将R2中内容与结束符0进行比较
BEQ next; 如果相等,说明比较结束
ADD R3,R3,#1; 如果不等长度值加1
LDR R2,[R0+#1];讲下一个字节装入R2
B count; 分支结构,返回至比较处,继续比较。
next: ;跳出这个算法的标号
MOV R1,R0
AND R1,R1,#0xFF ;
MOV R2,R0,LSR 0x08
AND R2,R2,#0xFF
MOV R3,R0,LSR #0x08
AND R3,R3,#0xFF
MOV R4,R0,LSR 0x08
AND R4,R4,#0xFF
程序执行完之后,四组字节的数据存放在R1~R4的低八位,高24
10. 实现10个64位有符号数的相加运算。
答答:
不妨假设这10个64位数紧密排列存储在存储器中,每个64位数占用
8个字节的内存空间,按小端模式存放,首地址为sp
LDR R0,SP;
LDR R1,[R0];
LDR R2,[R0, #-4];
MOV R3,#9;
count:
CMP R3,#0;
BEQ next;
LDR R4,[R0, #-8];
ADC R1,R1,R4;
LDR R5,[R0, #-12];
ADD R2,R2,R5;
SUB R0,R0,#8;
SUB R3,R3,#1
CLR C;
next:
目标达到,10个数相加的结果高32位放在R1中,低32位放在R2中。
11.实现如下功能:已知BUF1中有N1个按从小到大顺序排列的互不相等的字符
号数,BUF2中有N2个从小到大顺序排列的互不相等的字符号数,将BUF1和
BUF2中的数合并到BUF3中,并按从小到大顺序排列且互不相等。
答:
AREA COPY,CODE,READONLY
ENTRY
CODE32
start
LDRB R2,=BUF1
LDRB R3,=BUF2
LDRB R4,=BUF3
LDR R5,=N1
LDR R6,=N2
ADD R5,R5,R6
MOV R1,#0
BL LOOP
stop
MOV R0,#0x18
LDR R1,=0x20026
SWI 0x123456
LOOP
CMP R5,R1
BEQ stop
LDRB R0,[R2]
LDRB R6,[R3]
CMP R0,R6
BLS COPY1
BHI COPY2
COPY1
LDRB R0,[R2],#1
STRB R0,[R4],#1
ADD R1,R1,#1
CMP R0,#0
BEQ LOOP
COPY2
LDRB R0,[R3],#1
STRB R0,[R3],#1
ADD R1,R1,#1
CMP R0,#0
BEQ LOOP
AREA COPYDATA,DATA,READWRITE
BUF1 DCB "whos speaking",0
BUF2 DCB "this is ",0
BUF3 DCB "A",
N1 DCD 8
N2 DCD 6
版权声明:本文标题:什么是计算机语言一般可以分为哪几种各自的优缺点 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1735689061a1682781.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论