خوارزمية الفرز البسيط هي خوارزمية تقوم بترتيب مصفوفة من الأرقام بترتيب تصاعديًا. تستخدم هذه الخوارزمية العديد من التقنيات التي تستغرق وقتًا لإتمامها وتعد أحد الخوارزميات الأبسط للفرز.
لتنفيذ هذه الخوارزمية باستخدام لغة الجمع الأسمبلي في emu8086 نحتاج إلى:
– تعريف المصفوفة ووضع الأرقام فيها.
– إعداد التسلسل الزمني للأوامر.
– كتابة رمز المصفوفة والتفاصيل اللازمة لتنفيذ مراحل الفرز.
فيما يلي يتضمن الكود التجريبي على خوارزمية الفرز البسيط باستخدام لغة الجمع الأسمبلي في emu8086:
“`
.model small
.stack 100h
.data
array db 5, 3, 2, 4, 1 ; تعريف المصفوفة المراد فرزها
len equ ($ – array) ; تعريف طول المصفوفة
.code
main proc
mov ax, @data
mov ds, ax
mov cx, len ; إعداد التسلسل الزمني للأوامر
mov si, offset array
sort_loop:
mov di, si
add di, 1
inner_loop:
cmp di, len
je next_iteration
mov al, [si] ; مقارنة بين العنصرين
cmp al, [di]
jle no_swap ; عدم تبديلهما إذا كان أحدهما أصغر من الآخر
xchg al, [di] ; تبديل العنصرين في حالة كان العنصر اللي قبل أكبر
mov [si], al
no_swap:
add di, 1
jmp inner_loop
next_iteration:
add si, 1
loop sort_loop
mov ah, 4ch ; خروج من البرنامج
int 21h
main endp
end main
“`
يتم تعريف المصفوفة المراد فرزها في الجزء .data، وتحتوي المصفوفة في هذا المثال على الأرقام 5، 3، 2، 4، 1.
تم إعداد التسلسل الزمني للأوامر باستخدام عداد الحلقة (CX) والذي يحتوي على طول المصفوفة.
يتم استخدام المؤشر SI للإشارة إلى العنصر الحالي الذي يجري مقارنته مع العنصر المجاور، ويتم استخدام المؤشر DI للإشارة إلى العنصر المجاور.
تتم المقارنة بين العنصرين باستخدام الأمر “cmp” ثم باستخدام الشرطية “jle” يتم تحقيق ما إذا كان العنصر الحالي أصغر من العنصر المجاور. إذا كان العنصر الحالي أكبر، يتم تبديل العنصرين باستخدام الأمر “xchg” ثم يرجع الأمر “add” إلى المؤشر SI للإشارة إلى العنصر الذي يليه. ويتم تكرار العملية لجميع العناصر بحيث يتم فرز المصفوفة بالكامل.
يتم استخدام الأمر “mov” لنقل العناصر من المؤشرات SI و DI إلى السجل AL لإجراء العمليات عليه. ويتم استخدام الأمر “loop” لتكرار الحلقة حتى ينتهي العداد (CX) بالكامل.
تخرج من البرنامج باستخدام الأمر “int 21h” والدالة 4Ch.
يتم تشغيل هذا الكود عن طريق تجميعه وتشغيله في emu8086. سيتم فرز مصفوفة الأرقام بترتيب تصاعدي.