ورود

View Full Version : سوال: لطفا کمک کنید



iamir4g
شنبه 08 آذر 1393, 10:39 صبح
با عرض سلام
استاد برنامه ای به شرح : 20عدد حداقل 4 رقمی از ورودی بگیرید و در ارایه ذخیره کنید و سپس ان ها را sortکنید.
من این برنامه رو نوشتم ضمیمه کردم ولی اشکالی دارد
خواهشا راهنمایی کنید ممنون
اینم کدش
; multi-segment executable file template.

data segment
; add your data here!
Arr DW 20 dup(?)
pkey db "press any key...$"
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

mov cl,20
nextnumber:mov si,0
mov ch,4
getdigit:mov ah,7h
int 21h
cmp al,0Dh
jnz checkdigit
cmp ch,4
je getdigit
jmp putinarr
checkdigit:cmp al,30h
jb getdigit
cmp al,39h
ja getdigit
mov dl,al
mov ah,02
int 21h
sub al,30h
mov bl,al
mov ax,10
mul si
mov si,ax
mov bh,0
add si,bx
dec ch
jnz getdigit
putinarr:mov arr[di],si
add di,2
dec cl
jnz nextnumber
;sort
mov ch,19
mov si,0
l2:mov cl,ch
mov di,si
l1:add di,2
mov ax,arr[si]
cmp ax,arr[di]
jbe nochange
xchg ax,arr[di]
mov arr[si],ax

nochange: dec cl
jnz l1
add si,2
dec ch
jnz l2
;show
mov bx,10
mov ch,20
mov si,0
t3:mov cl,0
t1:mov dx,0
mov ax,arr[si]
div bx
push dx
inc cl
cmp ax,0
jnz t1
t2:pop dx
add dl,30
mov ah,02h
int 21h
dec cl
jnz t2
add si,2
dec ch
jnz t3



lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key....
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h
ends

end start ; set entry point and stop the assembler.

masoud.8086
شنبه 08 آذر 1393, 11:34 صبح
مشکلت تو قسمت حلقه های sort..
این قطعه کدی که میزارم رو به جای اون قرار بده اینجا باید دو تا حلقه باشه (تودرتو) که هر بار حلقه بیرونی یک بار اجرا میشه یک بار از تعداد حلقه های داخلی کم بشه چون هر بار که حلقه بیرونی اجرا میشه ی خونه مرتب شده قطعا مشکل اصلی شرط خروج از حلقه بود که چون مقدار ax تغییر میکرد شرط به اتمام نمیرسید همچنین بعد از قسمت sort برنامت بازم برنامت مشکل چاپ اعداد داره برای چاپ اعداد باید اونارو به رشته تبدیل کنی و بعد چاپ کنی. n رو هم از نوع word تعریف کن.
.موفق باشی



;sort
mov n,19
mov cx,n


l2:
mov si,0
mov di,2
push n
l1:
cmp n,0
je exit
mov ax,arr[si]
cmp ax,arr[di]
jb nochange
xchg ax,arr[di]
mov arr[si],ax
add si,2
add di,2
dec n
jmp l1
nochange:
add si,2
add di,2
dec n
jmp l1


exit:
pop n
dec n
loop l2

iamir4g
شنبه 08 آذر 1393, 11:49 صبح
سلام و بسیار ممنون
الان من کد رو جای گزین کردم از من یک ارور بابت n میگیره؟؟ این n چیه؟؟؟ همون شمارنده هست ؟؟ میتونم ب جاش از ch که خودمم استفاده کردم استفاده کنم
باز هم ممنونم

iamir4g
شنبه 08 آذر 1393, 11:50 صبح
مشکلت تو قسمت حلقه های sort..
این قطعه کدی که میزارم رو به جای اون قرار بده اینجا باید دو تا حلقه باشه (تودرتو) که هر بار حلقه بیرونی یک بار اجرا میشه یک بار از تعداد حلقه های داخلی کم بشه چون هر بار که حلقه بیرونی اجرا میشه ی خونه مرتب شده قطعا مشکل اصلی شرط خروج از حلقه بود که چون مقدار ax تغییر میکرد شرط به اتمام نمیرسید همچنین بعد از قسمت sort برنامت بازم برنامت مشکل چاپ اعداد داره برای چاپ اعداد باید اونارو به رشته تبدیل کنی و بعد چاپ کنی. n رو هم از نوع word تعریف کن.
.موفق باشی



;sort
mov n,19
mov cx,n


l2:
mov si,0
mov di,2
push n
l1:
cmp n,0
je exit
mov ax,arr[si]
cmp ax,arr[di]
jb nochange
xchg ax,arr[di]
mov arr[si],ax
add si,2
add di,2
dec n
jmp l1
nochange:
add si,2
add di,2
dec n
jmp l1


exit:
pop n
dec n
loop l2



سلام و بسیار ممنون
الان من کد رو جای گزین کردم از من یک ارور بابت n میگیره؟؟ این n چیه؟؟؟ همون شمارنده هست ؟؟ میتونم ب جاش از ch که خودمم استفاده کردم استفاده کنم
باز هم ممنونم

masoud.8086
شنبه 08 آذر 1393, 12:04 عصر
اصلا توضیحاتی که گذاشتو نخوندی!!! گفتم که n رو داخل دیتا سگمت تعریف کن!!! از نوع word..

? n dw


نه از ch نمیتونی استفاده کنی چون در پایین داریم اونا push , pop میکنیم و اگر از ch استفاده کنیم خطا میده هچنین n داره مقدار دوتا حلقتو تنظیم میکنه ...

iamir4g
شنبه 08 آذر 1393, 12:05 عصر
اصلا توضیحاتی که گذاشتو نخوندی!!! گفتم که n رو داخل دیتا سگمت تعریف کن!!! از نوع word..
? n dw

من عذر میخوام !!! :)