配列要素間のswapをアセンブラで書いてみる

.export _swap

;二箇所のbyte配列の中身を入れ替える。引数swap(char[], int a, int b)
;呼び出し側の引数はR0,E0,R1に割り当てられる。配列はスタックフレーム上にある
_swap:
push.l ER2 ;保存
push.l ER3

mov.w R0,R2 ;配列アドレス計算(a,ポインタとしてR2を使用)
add.w E0,R2
mov.w R2,E2 ;aのアドレス保存
mov.b @(R2),R3L ;データをtempとしてR3Lへ保存

mov.w R0,R2 ;配列アドレス計算(b)
add.w R1,R2
mov.w R2,E3 ;bのアドレス保存
mov.b @(R2),R3H ;bの内容を保存

mov.w E2,R2 ;aアドレス設定
mov.b R3H,@(R2) ;b->aへコピー
mov.w E3,R2 ;bアドレス設定
mov.b R3L,@(R2) ;temp->bへコピー

pop.l ER3
pop.l ER2 ;復帰
rts

Cから利用する場合は,extern void swap(char[], int, int);でプロトタイプし
配列と指定インデクス2つを引数に与える