08.11.2014 Views

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />

2.7.3 LDM および STM によるブロッ クコピー<br />

例 2-8 は、 一 度 に 1 ワー ド ずつコ ピーする こ と に よ り 、 ソ ース 位 置 の 一 連 の<br />

ワー ド をデス テ ィ ネーシ ョ ンに コ ピーする <strong>ARM</strong> コードルーチンを 示 してい<br />

ます。 このサンプルは、 メ インサンプルディレク ト リの<br />

install_directory\RVDS\Examples に word.s という 名 前 で 収 録 されています。 この<br />

サンプルをアセンブル、 リ ン ク、 および 実 行 する 方 法 については、 「サンプル<br />

コード」 (ページ 2-2) を 参 照 して 下 さい。<br />

例 2-8 LDM および STM によるブロッ クコピー<br />

AREA Word, CODE, READONLY ; name this block of code<br />

num EQU 20 ; set number of words to be copied<br />

ENTRY<br />

; mark the first instruction called<br />

start<br />

LDR r0, =src ; r0 = pointer to source block<br />

LDR r1, =dst ; r1 = pointer to destination block<br />

MOV r2, #num ; r2 = number of words to copy<br />

wordcopy<br />

LDR r3, [r0], #4 ; load a word from the source and<br />

STR r3, [r1], #4 ; store it to the destination<br />

SUBS r2, r2, #1 ; decrement the counter<br />

BNE wordcopy ; ... copy more<br />

stop<br />

MOV r0, #0x18 ; angel_SWIreason_ReportException<br />

LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />

SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />

AREA BlockData, DATA, READWRITE<br />

src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4<br />

dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<br />

END<br />

このモジュールは、 できるだけ 多 くのコピーできる 部 分 に LDM 命 令 と STM 命 令<br />

を 使 用 する こ と で、 効 率 化 で き ます。 この <strong>ARM</strong> コードで 指 定 されているレジ<br />

ス タ の 数 か ら、 一 度 に 転 送 する ワー ド 数 は 8 ワードが 妥 当 です。 コピーするブ<br />

ロックに 8 ワード 単 位 のブロ ッ クがい くつあるかは、 以 下 を 使 用 して 検 出 で<br />

きます (r2 = コ ピーする ワー ド 数 の 場 合 )。<br />

MOVS r3, r2, LSR #3 ; number of eight word multiples<br />

この 値 を 使 用 して、 一 度 に 8 ワードずつコピーするループ 内 の 繰 り 返 しの 回<br />

数 を 制 御 できます。 残 りのワード 数 が 8 ワー ド に 満 たない 場 合 は、 以 下 を 使 用<br />

して 残 りのワード 数 を 検 出 できます (r2 が 破 損 していないこ と を 前 提 と した<br />

場 合 )。<br />

2-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />

Non-Confidential

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!