アセンブラでバブルソート

職業訓練の中でアセンブラのプログラミングをやった。課題で作ったプログラムをさらす。
プログラムの内容はアルゴリズムの定番、ソートのプログラム。
バブルソートと選択ソート、クイックソートの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: ;プログラムを考えなさい。

;;; bubble sort

;;; R0 = &left         .. Address
;;; R1 = &cursor_right .. Address
;;; R2 = &cursor_left  .. Address (next to cursor_right)
;;; R3 = &right        .. Address
;;; R4 = *R1           .. Long Word (cursor_right)
;;; R5 = *R2           .. Long Word (cursor_left)
        
    MOVA  DATA, R0
    MOV   R0,   R3
    ADD #((10 - 1) * 4), R3
        
LOOP_A:
    MOV   R3,   R1
        
LOOP_B:
        
        MOV   R1,   R2
        ADD  #-4,   R2

        MOV.L @R1, R4
        MOV.L @R2, R5

        CMP/GT R4, R5           ; cursor_left(R5) > cursor_right(R4)
        BF SKIP
        NOP

        ;; BT

        MOV.L  R5, @R1
        MOV.L  R4, @R2

SKIP:
        ADD   #-4, R1
        CMP/HI R0, R1           ; &cursor_right(R1) > &left(R0)
        BT LOOP_B               ;  = &left(R0) < &cursor_right(R1)
        NOP

LOOP_B_END:

    CMP/HI R0, R3               ; &right(R3) > &left(R0)
    BT/S LOOP_A                 ;  = &left(R0) < &right(R3)
    ADD    #4, R0               ; delay slot

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