ARM体系结构与编程作业
来源:互联网 发布:sql 最大值 最小值 编辑:程序博客网 时间:2024/06/05 01:04
作业一
AREA exone,CODE,READWRITEENTRY CODE32 MOV r0,#100 ;向寄存器中存入要比较的次数 MOV r1,#1 ;初始的两个数 MOV r2,#0loop ADD r2,r2,r1 ;两两相加 ADD r1,r1,#1;自动加一 SUB r0,r0,#1;要加的数减一 CMP r0,#0 ;判断比较次数是否为零 BNE loop LDR r3,=RESULTSTR r2,[r3]RESULTDCD 0STOPB STOP
作业二
AREA extwo, CODE,READWRITE ENTRYCODE32;排序:将目标地址处的数据进行冒泡排序,从小到大MOVS r2, #1 ;r2 = 排序完成标志,1表示未完成againLDR r0, =data ;r0 = 目的数据块地址MOV r1, #40;r2 = 排序字数量SUBS r1, r1, #4ANDS r2, r2, #1;判断排序是否完成BEQ stop;若r2=0,完成MOVS r2, #0;否则,标志设置为0;STMFD sp!, {r4} ;保存工作寄存器judge LDR r3, [r0];读出r0地址处得值到r3LDR r4, [r0,#4];读出r0地址处得值到r4CMP r3, r4;比较二者的大小BLS next;若r3<=r4,跳到nextexchangeMOVS r2, #1;发生数据交换,就设置标志为1STR r3, [r0,#4];交换二者的值STR r4, [r0]next ADDS r0, r0, #4;目标地址加4SUBS r1, r1, #4;计数值减1BNE judge;本趟排序未结束,跳到judge_2B again;否则下一趟LDMFD sp!, {r4};恢复工作寄存器;将程序的控制权转交给调试器stopdata DCD 9,4,6,7,8,1,3,2,0,5STOP B STOP
作业三
;add.s汇编程序stack_top equ 0x40002000PRESERVE8EXPORT addAREA add,CODE,READONLYIMPORT sumexport startentrystartldr r13,=stack_top mov r0,#1mov r1,#100BL sumldr r5,=resultstr r0,[r5]resultdcd 0end//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 0x40002000PRESERVE8AREA sum,CODE,READONLYexport add1import mainexport startstart ldr r13,=stack_topb mainentryadd1 ADD r2,r2,r0 ;两两相加 ADD r0,r0,#1;自动加一 SUB r1,r1,#1;要加的数减一 CMP r1,#0 ;判断比较次数是否为零 BNE add1MOV pc,lrEND//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.sstack_top equ 0x40002000PRESERVE8AREA scopy,CODE,READONLYexport strcopyimport mainexport startstart ldr r13,=stack_topb mainentrystrcopyLDRB r2,[r1],#1STRB r2,[r0],#1CMP r2,#0BNE strcopyMOV pc,lrend//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.sstack_top equ 0x40002000PRESERVE8export copyAREA copy,CODE,READONLYimport copystrexport startENTRYstart ldr r13,=stack_topldr r0,=srcldr r1,=dstBL copystrsrc dcb "abcdefghij"dstdcb "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,#15startcmp r0,r1bne judgebeq stopsub1sub r0,r0,r1sub2sub r1,r1,r0judgecmp r0,r1bgt sub1blt sub2stopb stopend2、arry_size equ 10area text,code entrystartmov r2,#10ldr r0,=arry_dataldr r3,[r0]b addnextsaveldr r4,=resultb stopaddnextldr r1,[r0,#4]!add r3,r1,r3sub r2,r2,#1cmp r2,#0beq savebne addnextarry_datadcd 1,2,3,4,5,6,7,8,9,0space arry_sizeresultdcd 0stopb stopend3、STACK_TOP EQU 0x40001000AREA MYEX,CODEENTRYMOV R0,#0MOV R1,#1MOV R2,#2MOV R3,#3MOV R4,#4MOV R5,#5MOV R6,#6LDR R13,=STACK_TOPSTMFD R13!,{R0-R6} ;事前递减方式,保存现场LDMFD R13!,{R3,R4,R6} ;事后递增方式,恢复现场LDMFD R13!,{R5}LDMFD R13!,{R0,R1,R2}datadcd 1,2,3STOPB STOP4、area test4,code entrystartldr r5,=dataldr r0,[r5]mov r1,#0x000000FFmov r2,#0x0000FF00mov r3,#0x00FF0000mov r4,#0xFF000000;看书完成向左移位之后再加起来and r1,r0lsl r1,#24ldr r0,[r5]and r2,r0lsl r2,#8ldr r0,[r5]and r3,r0lsr r3,#8ldr r0,[r5]and r4,r0lsr r4,#24add r1,r1,r2add r3,r3,r4add r0,r1,r3b stopdatadcd 0xAABBCCDDstopb stopend
- ARM体系结构与编程作业
- ARM体系结构与编程
- ARM体系结构与编程
- ARM体系结构与编程 书
- ARM体系结构与编程笔记
- ARM体系结构与编程-2
- ARM体系结构与编程-3
- ARM体系结构与编程-4
- ARM体系结构与编程-5
- ARM体系结构与编程笔记
- 【嵌入式Linux+ARM】ARM体系结构与编程(ARM概述)
- 【嵌入式Linux+ARM】ARM体系结构与编程(ARM汇编指令)
- 《ARM体系结构与编程》中的严重错误
- ARM体系结构与编程学习(一)
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(三)
- ARM体系结构与编程学习(四)
- ARM体系结构与编程学习(五)
- 《算法引论》学习笔记(1)
- iphone开发证书 纠结许久
- Android FrameWork——PackageManager框架
- 1005错误解决办法
- Android常用方法总结
- ARM体系结构与编程作业
- Spring+iBatis整合(业务层聚合SqlMapClientTemplate)
- Win32控件使用——通用函数
- 协方差的意义
- 浅谈C++多态性
- Java笔记之字符串
- hdu 1978 How many ways
- 2012华东架构师大会将于2012年11月18日在上海举办
- Android自动测试工具MonkeyRunner之一:基础知识