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