アセンブラで選択ソート

職業訓練の中でアセンブラのプログラミングをやった。課題で作ったプログラムをさらす。
プログラムの内容はアルゴリズムの定番、ソートのプログラム。
バブルソートと選択ソート、クイックソートの3パターンを作成し、今回のは選択ソート。


プロセッサはルネサステクノロジ社の SH-3 を使った。

;******************************************************************
;	課題3:並び替えプログラム1      FILE NAME:Kadai3.src
;	H'8C00-1200番地に、39,62,55,24,76,17,43,97,6,83の数字がセットしてある。
;	この数字郡を小さい順に並び換えるプログラムを考えなさい。
;	
;******************************************************************
STACK_SIZE	.EQU	H'400

        .export _MAIN,_STACK_BOTTOM
;
       .section MAIN,CODE,ALIGN=4		
_MAIN: ;プログラムを考えなさい。

;;; selection sort

;;; R0 = &left   .. Address
;;; R1 = &min    .. Address
;;; R2 = &cursor .. Address
;;; R3 = &right  .. Address, as a sentinel
;;; R4 = *R1     .. Long Word (min)
;;; R5 = *R2     .. Long Word (cursor)

    MOVA   DATA, R0
    MOV    R0  , R3
    ADD    #((10 - 1) * 4), R3

LOOP_A:
    MOV    R0, R1
    MOV.L @R1, R4
    MOV    R0, R2

LOOP_B:
        ADD    #4, R2
        MOV.L @R2, R5

        CMP/GT R5, R4           ; min(R4) > cursor(R5)
        BF SKIP
        NOP

        ;; BT
        
        MOV    R2, R1
        MOV    R5, R4

SKIP:
        CMP/HS R3, R2           ; &cur(R2) >= &right(R3)
        BF LOOP_B
        NOP
        
        ;; BT
        
LOOP_B_END:
    
    MOV.L @R0,  R5
    MOV.L  R5, @R1
    MOV.L  R4, @R0
    
    ADD    #4, R0
    CMP/HS R3, R0               ; &left(R0) >= &right(R3)
    BF LOOP_A
    NOP

    ;; BT

LOOP_A_END:

PEND:

;
LOOP:	BRA	LOOP
	NOP

	.ALIGN	4
STACK_BOTTOM_A:
	.DATA.L	_STACK_BOTTOM
	;
	.ORG	H'200
        
;並び替えられるデータ
DATA:	.DATA.L 39,62,55,24,76,17,43,97,6,83

;***********************************************************

;		STACK	AREA

;***********************************************************

	.SECTION STACK,STACK,ALIGN=4		
	.RES.B	STACK_SIZE
_STACK_BOTTOM:

 	.END