arm实验例题.docx

上传人:b****2 文档编号:1012888 上传时间:2022-10-15 格式:DOCX 页数:7 大小:15.21KB
下载 相关 举报
arm实验例题.docx_第1页
第1页 / 共7页
arm实验例题.docx_第2页
第2页 / 共7页
arm实验例题.docx_第3页
第3页 / 共7页
arm实验例题.docx_第4页
第4页 / 共7页
arm实验例题.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

arm实验例题.docx

《arm实验例题.docx》由会员分享,可在线阅读,更多相关《arm实验例题.docx(7页珍藏版)》请在冰豆网上搜索。

arm实验例题.docx

arm实验例题

arm实验例题

例4.1简单分支程序。

寄存器r0和r1中有两个正整数,求这两个数的最大公约数,结果存储在r0中。

程序代码:

AREAexample1,CODE

ENTRY

MOVr0,#15

MOVr1,#9

start

CMPr0,r1

SUBLTr1,r1,r0

SUBGTr0,r0,r1

BNEstart

stop

Bstop

END

例4.2复杂分支程序。

寄存器R0、R1和R2中有三个数,求其中最大的一个,结果存储在R3中。

程序代码:

AREAexample2,CODE

ENTRY

MOVR0,#10

MOVR1,#30

MOVR2,#20

start

CMPR0,R1

BLElbl_a

CMPR0,R2

MOVGTR3,R0

MOVLER3,R2

Blbl_b

lbl_a

CMPR1,R2

MOVGTR3,R1

MOVLER3,R2

lbl_b

B.

END

例4.3利用跳转表实现分支转移。

寄存器R1、R2中有两个数,若R0为0则求R1与R2的和,若R0为1则求R1与R2的差。

结果存储在R0中

C语言代码

intDoAdd(inta,intb)

{

returna+b;

}

intDoSub(inta,intb)

{

returna-b;

}

voidmain()

{

intR0=0;

intR1=3;

intR2=2;

int(*arithfunc)();

swith(R0)

{

case0:

arithfunc=DoAdd;

R0=arithfunc(R1,R2);

break;

case1:

arithfunc=DoSub;

R0=arithfunc(R1,R2);

break;

default:

break;

}

while

(1);

}

汇编.S文件

AREAexample3,CODE,READONLY;

numEQU2

ENTRY

Start

MOVR0,#0

MOVR1,#3

MOVR2,#2

BLfunction

B.

function

CMPR0,#num

MOVHSPC,LR

ADRR3,JumpTable

LDRPC,[R3,R0,LSL#2]

;

;

JumpTable

DCDFuncAdd

DCDFuncSub

FuncAdd

ADDR0,R1,R2

MOVPC,LR

FuncSub

SUBR0,R1,R2

MOVPC,LR

END

例4.4中断向量表

AREAexample4,CODE,READONLY

LDRPC,Reset_Addr

LDRPC,Undefined_Addr

LDRPC,SWI_Addr

LDRPC,Prefetch_Addr

LDRPC,Abort_Addr

NOP

LDRPC,IRQ_Addr

LDRPC,FIQ_Addr

Reset_AddrDCDReset_Handler

Undefined_AddrDCDUndefined_Handler

SWI_AddrDCDSWI_Handler

Prefetch_AddrDCDPrefetch_Handler

Abort_AddrDCDAbort_Handler

DCD0

IRQ_AddrDCDIRQ_Handler

FIQ_AddrDCDFIQ_Handler

IMPORT__main

Reset_Handler

B__main

Undefined_Handler

movpc,lr

SWI_Handler

movpc,lr

Prefetch_Handler

movpc,lr

Abort_Handler

movpc,lr

IRQ_Handler

movpc,lr

FIQ_Handler

movpc,lr

END

例4.5数据块复制。

编程实现将从地址src开始的num个字的数据复制到地址dst去。

汇编代码:

AREAexample5,CODE,READONLY

numEQU25

ENTRY

Start

LDRR0,=src

LDRR1,=dst

movR2,#num

Blockcopy

MOVSR3,R2,LSR#3

BEQwordcopy

STMFDSP!

{R4-R11}

copy

LDMIAR0!

{R4-R11}

STMIAR1!

{R4-R11}

SUBSR3,R3,#1

BNEcopy

wordcopy

ANDSR2,R2,#7

BEQStop

CopyLoop

LDRR3,[R0],#4

STRR3,[R1],#4

SUBSR2,R2,#1

BNECopyLoop

Stop

B.

AREAoriData,DATA,READWRITE

srcDCD0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4

dstSPACE25*4

END

例4.6多重循环,对n个数进行从小到大排序。

汇编代码:

AREAexample6,CODE,READONLY

numEQU10

ENTRY

start

LDRR0,=src

MOVR2,#num-1

LOOP1

LDRR4,[R0,R2,LSL#2]

SUBSR3,R2,#1

LOOP2

LDRPLR5,[R0,R3,LSL#2]

CMPR5,R4

STRGTR4,[R0,R3,LSL#2]

STRGTR5,[R0,R2,LSL#2]

MOVGTR4,R5

SUBSR3,R3,#1

BPLLOOP2

SUBSR2,R2,#1

BHILOOP1

B.

AREADataArea,DATA,READWRITE

srcDCD6,1,9,8,4,5,0,7,3,2

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1