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


本文标签: 循环 程序 汇编语言 寄存器 语言