PDA

View Full Version : مرتب سازی حبابی



dada_vahid
شنبه 28 خرداد 1390, 22:41 عصر
سلامی دوباره
من داشتم PDF آقای نیگمهر رو مطاله می کردم چند خط کد داشتن راجب مرتب سازی حبابی بعضی از خط هارو متوجه نشدم



N DW ?
MOV CX , N
DEC CX
LOOP 1: MOV DI , CX
MOV BX , 0
LOOP2: MOV AX , A[BX]
CMP AX, A[BX+2]
JGE CONTINUE
XCHG AX, A[BX+2]
MOV A [BX] , AX
CONTINUE: ADD BX,2
LOOP LOOP2
MOV CX , DI
LOOP LOOP1


1-چرا مقدار ثبات رو در داخل ثبت دیگه ریخته MOV DI , CX و چرا دوباره در خط یکی به اخر جاشو عوض کرده
2- ای خط هم متوجه نشدم XCHG AX, A[BX+2]
MOV A [BX] , AX
با تشکر

xman_1365_x
دوشنبه 06 تیر 1390, 21:18 عصر
در صفحه 198 و 199 سورس كامل گذاشته و ايني كه شما ميگين در صفحه 89 هست


1-چرا مقدار ثبات رو در داخل ثبت دیگه ریخته MOV DI , CX و چرا دوباره در خط یکی به اخر جاشو عوض کرده
چون درون يك loop از loop ديگه استفاده كرده و لوپ بر اساس مقدار cx كار ميكنه چون حلقه دروني مقدار cx رو تغيير ميده ما اون رو نگه ميداريم و بعد در cx قرار ميديم تا حلقه بدرستي كار كنه


2- ای خط هم متوجه نشدم XCHG AX, A[BX+2]
MOV A [BX] , AX
دستور اول براي جابجا كردن دو مقدار استفاده ميشه و چون نمي تونيم دو مقدار از حافظه رو مستقيم جا بجا كنيم اول در ثبات كمكي ميريزيم و در دستور بعد به حافظه مربوطه ريخته ميشه و در عمل جاي دو عنصر حافظه رو عوض ميكنيم!(اون 2 در دستور اول هم چون به صورت dw تعريف كرديم)
سورس برنامه هم كه بخواين اجرا كنيد به اين صورت هست



org 100h
jmp start

N DW 10
A dw 1,5,6,8,4,2,0,9,7,3
start:
MOV CX , N
DEC CX
LOOP1:
MOV DI , CX
MOV BX , 0

LOOP2:
MOV AX , A[BX]
CMP AX, A[BX+2]
JGE CONTINUE
XCHG AX, A[BX+2]
MOV A [BX] , AX
CONTINUE: ADD BX,2
LOOP LOOP2

MOV CX , DI
LOOP LOOP1

ret

موفق باشي