ユーザーから 5 つの文字列を入力として取得し、これらの文字列を並べ替えて、並べ替えた結果を出力として出力する 8086 アセンブリ プログラムを作成したいと考えています。私は実際にすべてを行いますが、ソート部分に大きな問題があります。たとえばバブルソートを使用して、特定のアドレスから始まる配列内のアイテムをソートする方法を知っていますが、ここには同じ配列にない5つの異なる文字列があります。各文字列には、独自のアドレスと独自の文字があります。各文字列の最後の文字を互いに比較しようとし、一方が他方よりも大きい場合は、文字列全体を交換し、すべての文字列の文字全体に対してそれを最初の文字列と比較します。
たとえば、入力文字列が次の場合:
eab
abe
cbd
cda
adb
最初にすべての文字列の最後の文字をソートすると、次のようになります。
cda
eab
adb
cbd
abe
次に、それらを真ん中の文字で比較します。
eab
cbd
abe
cda
adb
そして最後に最初の文字ですべてがソートされます:
abe
adb
cbd
cda
eab
しかし、それは実際に私の頭の中にあるものであり、私の仕事のために誰がそれを実装するのかわかりません.
; マルチセグメント実行可能ファイル テンプレート。 データセグメント data1 デシベル 64,?,64 重複(?) data2 デシベル 64,?,64 複製(?) data3 デシベル 64,?,64 重複(?) data4 デシベル 64,?,64 重複(?) data5 デシベル 64,?,64 重複(?) change db 66 複製(?) msg db 0ah,0dh,"間違ったオプションを入力しました",0ah,0dh,"再試行",0ah,0dh,"$" prompt db 0ah,0dh,"オプションを選択してください:",0ah,0dh,"$" prompt1 db ".a: 昇順で並べ替え",0ah,0dh,"$" prompt2 db ".d: 降順で並べ替え",0ah,0dh,"$" prompt3 db ".q: 終了",0ah,0ah,0dh,"$" enter db 0ah,0ah,0dh,"5 つの文字列を入力してください:",0ah,0dh,"$" pkey db 0ah,0dh,"任意のキーを押してください...$" 終わる スタック セグメント dw 128 デュプ(0) 終わる コード セグメント メインプロセスファー ; セグメント レジスタを設定します。 移動斧、データ ムーブDS、斧 移動、斧 また: ; ユーザーへのプロンプトの出力 lea dx、プロンプト 移動ああ、09h 整数 21h lea dx、prompt1 移動ああ、09h 整数 21h lea dx、prompt2 移動ああ、09h 整数 21h lea dx、prompt3 移動ああ、09h 整数 21h ; 入力としてユーザーから文字を取得する 移動ああ、01h 整数 21h ; ユーザーが選択するオプションの決定 cmp al、「a」 昇順 cmp al、「d」 降りて cmp al, 'q' やめた ; これは、ユーザーが間違った文字を入力したときのためのものです lea dx、メッセージ 移動ああ、09h 整数 21h jmp 再び; 再びアプリケーションを呼び出して開始する 上昇: 通話入力 AscendSort を呼び出す jmp 再び; 再びアプリケーションを呼び出して開始する 降順: 通話入力 DescendSort を呼び出す jmp 再び; 再びアプリケーションを呼び出して開始する 終了する: lea dx、pkey 動くああ、9 int 21h ; ds:dx の出力文字列 ; キーを待ちます.... 移動ああ、1 整数 21h 移動斧、4c00h ; オペレーティング システムを終了します。 整数 21h メインエンド ;................................................................ ; このサブルーチンはユーザーからの入力を取得します 入力プロシージャ lea dx、入力してください 移動ああ、09h 整数 21h 改行を呼び出す 動くああ、0ああ lea dx、data1 整数 21h 改行を呼び出す 動くああ、0ああ lea dx、data2 整数 21h 改行を呼び出す 動くああ、0ああ lea dx、data3 整数 21h 改行を呼び出す 動くああ、0ああ lea dx、data4 整数 21h 改行を呼び出す 動くああ、0ああ lea dx、data2 整数 21h 改行を呼び出す 戻る 入力端 ;................................................................ ; 文字列を昇順にソートする AscendSort プロシージャ mov si, 65 リー dx、変更 移動、data1[si] cmp al, data2[si] ja l1 ??????? 戻る AscendSort endp ;................................................................ ; 文字列を降順にソートする DescendSort プロシージャ 戻る DescendSort endp ;................................................................ ; 改行 改行プロシージャ ムーブああ、02h mov dl、0ah 整数 21h mov dl, 0dh 整数 21h 戻る 改行 endp 終わる メインを終了します。エントリポイントを設定し、アセンブラを停止します。
これらの文字列全体をソートするための他のアルゴリズムも高く評価されます。