HosseinProgrammer
جمعه 18 آبان 1386, 12:04 عصر
سلام. کد زیر معادل کد مرتب کردن یک آرایه به صورت نزولی (و یا صعودی) در زبان C++ است ولی اشتباه عمل نمیکنه! به جای مرتب شدن اعدادی مثل 1539 و ... به آرایه اضافه میشه. مشکل کجاست؟
کد اسمبلی:
data segment
Array DW 3,6,4,1
N Dw 4
ends
stack segment
dw 128 dup(0)
ends
code segment
MAIN PROC FAR
ASSUME CS:Code,DS:data,SS:stack
mov ax, data
mov ds, ax
mov bx,OFFSET Array
mov si,0
L1: mov dx,N
sub dx,1
cmp si,dx
JNB end_for1
mov di,si
add di,1
L3: mov ax,N
cmp di,ax
JNB end_for2
mov cx,[bx+si]
cmp cx,[bx+di]
JNA L2
mov cx,[bx+si]
mov dx,[bx+di]
mov [bx+di],cx
mov [bx+si],dx
L2: add di,1
JMP L3
end_for2:
add si,1
JMP L1
end_for1:
mov ah,4ch ; exit to operating system.
int 21h
MAIN ENDP
code ENDS
END MAIN
معادل این کد در زبان CPP:
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>b[j])
{
temp=a[i];
a[i]=b[j];
b[j]=temp;
}
از زمانی که برای حل این مشکل میگذارید ، بسیار ممنونم. :چشمک:
کد اسمبلی:
data segment
Array DW 3,6,4,1
N Dw 4
ends
stack segment
dw 128 dup(0)
ends
code segment
MAIN PROC FAR
ASSUME CS:Code,DS:data,SS:stack
mov ax, data
mov ds, ax
mov bx,OFFSET Array
mov si,0
L1: mov dx,N
sub dx,1
cmp si,dx
JNB end_for1
mov di,si
add di,1
L3: mov ax,N
cmp di,ax
JNB end_for2
mov cx,[bx+si]
cmp cx,[bx+di]
JNA L2
mov cx,[bx+si]
mov dx,[bx+di]
mov [bx+di],cx
mov [bx+si],dx
L2: add di,1
JMP L3
end_for2:
add si,1
JMP L1
end_for1:
mov ah,4ch ; exit to operating system.
int 21h
MAIN ENDP
code ENDS
END MAIN
معادل این کد در زبان CPP:
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>b[j])
{
temp=a[i];
a[i]=b[j];
b[j]=temp;
}
از زمانی که برای حل این مشکل میگذارید ، بسیار ممنونم. :چشمک: