`

ARM体系结构与编程作业(中南大学)

阅读更多

作业一

AREA exone,CODE,READWRITE
ENTRY
  CODE32
  MOV r0,#100   ;向寄存器中存入要比较的次数
  MOV r1,#1   ;初始的两个数
  MOV r2,#0
loop
  ADD r2,r2,r1   ;两两相加
  ADD r1,r1,#1;自动加一
  SUB r0,r0,#1;要加的数减一
  CMP r0,#0 ;判断比较次数是否为零
  BNE loop 
  LDR r3,=RESULT
STR r2,[r3]
RESULT
DCD 0
STOP
B STOP 

 

作业二

 

AREA extwo, CODE,READWRITE
    ENTRY
CODE32
;排序:将目标地址处的数据进行冒泡排序,从小到大
MOVS r2, #1   ;r2 = 排序完成标志,1表示未完成
again
LDR r0, =data   ;r0 = 目的数据块地址
MOV r1, #40;r2 = 排序字数量
SUBS r1, r1, #4
ANDS r2, r2, #1;判断排序是否完成
BEQ stop;若r2=0,完成
MOVS r2, #0;否则,标志设置为0
;STMFD sp!, {r4} ;保存工作寄存器
judge 
LDR r3, [r0];读出r0地址处得值到r3
LDR     r4, [r0,#4];读出r0地址处得值到r4
CMP r3, r4;比较二者的大小
BLS next;若r3<=r4,跳到next
exchange
MOVS r2, #1;发生数据交换,就设置标志为1
STR r3, [r0,#4];交换二者的值
STR r4, [r0]
next 
ADDS r0, r0, #4;目标地址加4
SUBS r1, r1, #4;计数值减1
BNE judge;本趟排序未结束,跳到judge_2
B again;否则下一趟
LDMFD sp!, {r4};恢复工作寄存器
;将程序的控制权转交给调试器
stop

data
    DCD 9,4,6,7,8,1,3,2,0,5
STOP
    B STOP

 

 

作业三

 

;add.s汇编程序
stack_top equ 0x40002000
PRESERVE8
EXPORT add
AREA add,CODE,READONLY
IMPORT sum
export start
entry
start
ldr r13,=stack_top 
mov r0,#1
mov r1,#100
BL sum
ldr r5,=result
str r0,[r5]
result
dcd 0
end

//sum.c程序
int sum(int a,int b)
{
int sum = 0,i;
for(i=a;i<=b;i++)
sum+=i;
return sum;
}

;add1.s汇编程序
stack_top equ 0x40002000
PRESERVE8
AREA sum,CODE,READONLY
export add1
import main
export start
start 
ldr r13,=stack_top
b main
entry
add1
  ADD r2,r2,r0   ;两两相加
  ADD r0,r0,#1;自动加一
  SUB r1,r1,#1;要加的数减一
  CMP r1,#0 ;判断比较次数是否为零
  BNE add1
MOV pc,lr
END
//sum1.c
#include<stdio.h>
extern int add1(int a,int b,int c);
int main()
{
int a = 0;
printf("sum 1 to 100:");
a = add1(1,100,0);
printf("%d",a);
return 1;
}

;strcopy.s
stack_top equ 0x40002000
PRESERVE8
AREA scopy,CODE,READONLY
export strcopy
import main
export start
start 
ldr r13,=stack_top
b main
entry
strcopy
LDRB r2,[r1],#1
STRB r2,[r0],#1
CMP r2,#0
BNE strcopy
MOV pc,lr
end

//main.C程序
#include<stdio.h>
extern void strcopy(char *d,const char *s);
int main()
{
const char *srcstr = "abcdefghij";
char detstr[] = "second string";
printf("before copying:\n");
strcopy(detstr,srcstr);
printf("after copying:\n");
printf("%s\n%s\n",srcstr,detstr);
return 1;
}

;strcopy.s
stack_top equ 0x40002000
PRESERVE8
export copy
AREA copy,CODE,READONLY
import copystr
export start
ENTRY
start 
ldr r13,=stack_top
ldr r0,=src
ldr r1,=dst
BL copystr
src 
dcb "abcdefghij"
dst
dcb "helloworld"
end

//copystr.C程序
#include<stdio.h>
void copystr(char *d,char *s)
{
while((*d++=*s++)!='\0');
}

 

 

作业四

 

1、
 AREA myarea,CODE
 ENTRY
 mov r0,#9
 mov r1,#15
start
cmp r0,r1
bne judge
beq stop
sub1
sub r0,r0,r1
sub2
sub r1,r1,r0
judge
cmp r0,r1
bgt sub1
blt sub2
stop
b stop
end

2、
arry_size equ 10
area text,code
  entry
start
mov r2,#10
ldr r0,=arry_data
ldr r3,[r0]
b addnext
save
ldr r4,=result
b stop
addnext
ldr r1,[r0,#4]!
add r3,r1,r3
sub r2,r2,#1
cmp r2,#0
beq save
bne addnext
arry_data
dcd 1,2,3,4,5,6,7,8,9,0
space arry_size
result
dcd 0
stop
b stop
end

3、
STACK_TOP EQU 0x40001000
AREA MYEX,CODE
ENTRY
MOV R0,#0
MOV R1,#1
MOV R2,#2
MOV R3,#3
MOV R4,#4
MOV R5,#5
MOV R6,#6


LDR R13,=STACK_TOP
STMFD R13!,{R0-R6} ;事前递减方式,保存现场
LDMFD R13!,{R3,R4,R6} ;事后递增方式,恢复现场
LDMFD R13!,{R5}
LDMFD R13!,{R0,R1,R2}
data
dcd 1,2,3
STOP
B STOP

4、
area test4,code
  entry
start
ldr r5,=data
ldr r0,[r5]
mov r1,#0x000000FF
mov r2,#0x0000FF00
mov r3,#0x00FF0000
mov r4,#0xFF000000
;看书完成向左移位之后再加起来
and r1,r0
lsl r1,#24
ldr r0,[r5]
and r2,r0
lsl r2,#8
ldr r0,[r5]
and r3,r0
lsr r3,#8
ldr r0,[r5]
and r4,r0
lsr r4,#24
add r1,r1,r2
add r3,r3,r4
add r0,r1,r3
b stop

data
dcd 0xAABBCCDD
stop
b stop
end



 

分享到:
评论

相关推荐

    《ARM体系结构与编程》杜春雷.pdf

    根据提供的文件信息,无法直接提取出有关《ARM体系结构与编程》的具体知识点,因为【部分内容】仅提供了重复的网址信息,而没有关于ARM体系结构和编程的具体描述或内容。不过,我可以根据标题《ARM体系结构与编程》...

    ARM体系结构与编程(第二版) 杜春雷 学习笔记ppt

    **ARM体系结构与编程(第二版)学习笔记** 在计算机科学领域,ARM(Advanced RISC Machines)架构是一种广泛使用的精简指令集计算机(RISC)架构,尤其在嵌入式系统、移动设备如智能手机和平板电脑中占据主导地位。...

    arm体系结构与编程[汇编].pdf

    arm体系结构与编程[汇编].pdf

    ARM 体系结构与编程 (书)

    本书《ARM体系结构与编程》深入浅出地探讨了这一核心技术,旨在帮助读者理解和掌握ARM处理器的工作原理以及如何编写高效的ARM代码。 1. **ARM架构基础**:ARM架构以其精简指令集(RISC)设计而著名,它提供了高性能...

    ARM体系结构版本.pdf

    "ARM 体系结构版本.pdf" ARM 体系结构版本是指 ARM 指令集体系结构从最初开发至今的演变过程。ARM 体系结构版本共定义了 8 个版本,以版本号 v1~v8 表示。每个版本都有其特点和改进。 ARM 体系结构版本的发展可以...

    ARM体系结构与编程.part1.pdf

    本书全面介绍处理器的体系结构,指令系统和开发工具以及典型的设计基本技术 本书内容:  ARM体系介绍  ARM程序设计模型  ARM汇编语言程序设计  ARM C/C++语言程序设计  ARM连接器使用  ARM集成开发环境Code ...

    《ARM体系结构与编程》学习笔记.pdf

    《ARM体系结构与编程》学习笔记

    ARM体系结构与编程-自考

    ARM体系结构与编程是嵌入式技术领域中的一个重要学习主题,尤其对于广东地区的自学考试(自考)考生来说,这是12734课程的核心内容。这个压缩包可能包含了历年的试题和大纲,帮助学生更好地理解和掌握ARM处理器的...

    arm体系结构与编程 杜春雷

    《ARM体系结构与编程》是杜春雷先生撰写的一本深入探讨ARM处理器体系结构和编程技术的专业书籍。这本书因其详尽全面的内容而被广大读者誉为经典,是学习ARM技术的重要参考资料。 ARM(Advanced RISC Machines)架构...

    《ARM体系结构与编程》杜春雷

    《ARM体系结构与编程》是杜春雷先生撰写的一本专为初学者设计的书籍,旨在引导读者深入了解ARM架构,并掌握在该架构下进行程序设计的基本技能。ARM(Advanced RISC Machines)是一种广泛应用于嵌入式系统、移动设备...

    arm体系结构与编程 读书笔记——Page72

    从给定的文件信息来看,该读书笔记主要围绕着《ARM体系结构与编程》这本书的Page72内容展开,深入探讨了ARM体系结构的基本概念、特点及其发展历程。下面,我们将根据笔记中的关键信息,详细解析ARM体系结构的核心...

    arm体系结构与编程

    本书内容: ARM体系介绍 ARM程序设计模型 ARM汇编语言程序设计 ARM C/C++程序设计 ARM 连接器使用 ARM 集成开发环境 高性能调试工具ADW

    ARM体系结构与编程1.pdf

    ARM体系结构与编程教材的影印版,仅供学习之用,如需请购买正版

    ARM体系结构和编程

    ARM体系结构和编程是微电子领域和嵌入式系统开发的重要组成部分。ARM处理器是一种广泛应用于无线产品、个人数字助理(PDA)、全球定位系统(GPS)、网络设备、消费电子产品等的16/32位高性能、低成本、低功耗的嵌入式...

    ARM体系结构与编程(高清带书签) 杜春雷

    《ARM体系结构与编程》是杜春雷先生的一本经典著作,主要针对ARM处理器的架构和编程技术进行了深入探讨。ARM架构在全球范围内广泛应用于移动设备、嵌入式系统以及数据中心等多个领域,其低功耗、高性能的特点使得...

    ARM体系结构与编程嵌入式系统设计技术

    课程参考教材和资料包括杜春雷的《ARM体系结构与编程》、周立功等的《ARM微控制器基础与实战》、JEAN J.Labrosse的《μC/OS-II源码公开的实时嵌入式操作系统》等,这些书籍提供了丰富的理论和实践指导。 课程评价...

    ARM体系结构与编程 杜春雷(PDF)

    《ARM体系结构与编程》是杜春雷撰写的一本经典技术教程,深入讲解了ARM处理器的架构原理和编程方法。ARM架构在全球范围内广泛应用于移动设备、嵌入式系统以及数据中心等多个领域,其低功耗、高性能的特点使得学习和...

    ARM体系结构与编程——读书笔记.doc

    ARM体系结构与编程是嵌入式系统开发中的基础,它主要关注如何使用ARM架构的处理器进行程序设计。本文档是作者自学《ARM体系结构与编程》的读书笔记,重点介绍了ARM汇编指令集的一些基本概念和常用指令。 ARM指令集...

Global site tag (gtag.js) - Google Analytics