2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

H8

132 :774ワット発電中さん:2020/04/28(火) 21:10:45 ID:a56Asx87.net
配列要素間の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つを引数に与える

44 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★