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