Bubble sort با اسمبلی

شبه کد bubble sort برای یاد آوری :

دوتا حلقه تو در تو و یک شرط که در صورت درست بودن جای دو مقدار رو Swap میکند .

 
bubble sort code
  for(i=(arraySize - 1); i>=0; i--)
         for(j=1; j<=i; j++)
                 if(array[j-1] < array[j])
                 {
                      temp = array[j-1]
                      array[j-1] = array[j]
                      array[j] = temp
                 }

اینهم کد اسمبلی .دیگه فکر نکنم سخت تر از این برنامه توی امتحان سوال بیاد .

 

;Bubble Sort
;Model of program is Tiny

 org 100h
    mov     ah,2            ;Set cursor
    mov     dh,0
    mov     dl,0
    mov     bh,0
    int     10h

    mov     ah,9h           ;Print Up Stars
    mov     dx,offset Stars
    int     21h

    mov     ah,9h           ;Print msg
    mov     dx,offset SSort
    int     21h

    mov     ah,9h           ;Print Bottom Stars
    mov     dx,offset Stars
    int     21h

    call    Print

    call    Sort

    mov     column,20
    mov     TempAddress,offset Array

    call    Print

    ret                     ;Return to OS

;**********< Sort >**********
Sort  proc

Outer_Loop:

    cmp     i,0
    jz      End_Loop
    dec     i
    mov     j,0

    lea     bx,Array
    dec     bx

Inner_Loop:

    mov     cl,j
    cmp     cl,i
    ja      Outer_Loop
    inc     j
    inc     bx

    mov     al,[bx]
    mov     dl,[bx + 1]

    cmp     al,dl
    jle     No_Swap

Swap:
    mov     [bx],dl
    mov     [bx + 1],al
No_Swap:    

    jmp     Inner_Loop

End_Loop:    

    ret

Sort  endp        

;**********< Print >**********
Print proc

    mov     cx,8
    mov     bl,5
Print_Loop:
    mov     ah,2        ;Set cursor
    mov     dl,column   ;column
    mov     dh,bl       ;row
    mov     bh,0        ;Page
    int     10h
    inc     bl

    mov     ah,9        ;print
    lea     dx,SArray
    int     21h

    mov     ah,2        ;convert number to ascii and print
    mov     dl,8
    sub     dl,cl
    add     dl,'0'
    int     21h

    mov     dl,']'
    int     21h
    mov     dl,':'
    int     21h

    xchg    bx,TempAddress
    mov     dl,[bx]
    inc     bx
    add     dl,'0'
    int     21h
    xchg    bx,TempAddress
    loop    Print_Loop

    ret

Print endp     

                     ;variables

Stars db 35 dup('*'),0ah,0dh,'$'
SSort  db 10 dup('*'),'< Bubble Sort >',10 dup('*'),0ah,0dh,'$'
SArray db 'Array[','$'
Array db 9,2,5,0,7,3,4,8
TempAddress dw offset Array
i     db 7
j     db ?
column db 2

End                 ;end of program

خروجی برنامه :

ستون اول آرایه سورت نشده و ستون دوم سورت شده .

Advertisements

دربارهٔ DeltaCode

Somewhere near the sky Far away from people Far away from noise Somewhere near yourself

Posted on ژانویه 5, 2011, in برنامه نویسی and tagged , , , . Bookmark the permalink. 2 دیدگاه.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: