السلام عليكم احبتي ..
انا مبتدئ لهذه اللغة وهناك سؤال .. كيف يمكن بناء برنامج يأخذ من المستخدم عشرة ارقام بالنظام العشري ويرتبها تصاعديا
مشكور لكم
:rolleyes:
السلام عليكم احبتي ..
انا مبتدئ لهذه اللغة وهناك سؤال .. كيف يمكن بناء برنامج يأخذ من المستخدم عشرة ارقام بالنظام العشري ويرتبها تصاعديا
مشكور لكم
:rolleyes:

برأيك ماذا يجب ان يكون الكود؟ ما اساسياته؟ ما المشاكل او التصورات للمشاكل التي ستظهر؟
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
يجب ان يكون هناك مصفوفة نخزن بها الارقام num DB 10 DUP , بعد ذلك نقوم بمقارنة بين كل رقم والذي يليه فإما نبدلهم او نتركهم.
هذه الفكرة برأيي , لكني لا اعرف تطبيقها على الاسيمبلي

حسنا لنضع التصورات ولندع مسالة الكتابة الى النهاية:
المصفوفة تتكون من عشر خانات, جميعها ارقام مدخلة عشوائيا, لنفرض انها: 0, 44, 202, 6, 7, 83, 24, 222, ...
لاحظي ان المطلوب سيكتب في بيئة 16بت بالتالي اقصى قيمة نستطيع التعامل معها هنا بدون ان نزيد من تعقيد كتابة الكود هي 65535
الان ناخذ اول رقم, نفرض انه اكبر رقم ونقارن الرقم التالي له معه, ان كان الرقم التالي اكبر قمنا بالتبديل بينهما. الان ناخذ اول رقم ايضا (لاننا في حلقة وما زلنا نقارن حتى النهاية), وناخذ الرقم الثالث.. دقيقة, ليه هيك؟
لانه ليتم هذا الامر نحن بحاجة الى حلقتين, الاولى تاخذ الرقم الاول من متغير i هو ترتيب الرقم الاول, وفيها حلقة ثانية بمتغير j تقوم باخذ الرقم i+1=j, يتم مقارنة اول رقم مع جميع الارقام التي تليه ومن ثم يتم الانتقال للرقم الثاني ويتم المقارنة مع جميع الارقام التي تليه وهكذا الى النهاية..
الان, لم لا تبدأي بكتابة اسطرك الاولى وفقا لما ذكرناه
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
اخي , انا شاب من فلسطين , وايضا اخوك B) , مش مشكلة...
اعود اليك اخي Xacher بعد محاولات فاشلة للاسف .. لكن ليس يهم
المشكلة التي واجهتها هي كيف اتناول الارقام من نوع string في int 21h/ ah=6 واحولها الى ارقام من 2 bytes هذه هي المشكلة
ساعدني رجاء
.model small .data msg db "please enter the array :$" array Db 20 dup(?) ten_num DW 10 .code .startup mov dx,offset msg mov ah, 9h int 21h mov di , offset array mov cx , 10 Numbers: xor bx,bx ; get the digit k: mov dx,0FFH mov ah,6 int 21h je k ;print the digit mov dl ,al mov ah,6 int 21h ;check for enter key cmp al,0DH je stop ; multiply cx by 10 push ax; save ax mov ax,bx mul ten_num; (DX AX) = AX * 10 mov bx,ax pop ax; reload ax sub al,30h; convert to integer mov ah,0 ;mov dx,bx ;add bx ,ax add bx,ax jmp K stop: mov [di] , bh inc di mov [di] , bl inc di loop Numbers mov cx , 10 print: mov di ,offset array mov dx,[di] mov ah , 6h int 21h inc di loop print end

بسيطة باذن الله, مضطر ان انهي اتصالي الان وساعود للموضوع بعد قليل ان شاء الله.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
عذرا على التاخير فكما تعلم كود 16بت ممل لدرجة كل بايت يجب ان تقوم بتنقيحه :P
.model small .code org 100h startup: jmp main buffer db 2 dup (0); save us a buffer we will use to store number nibbles array dw 10 dup (0) msg db "Please insert array number [", "$" preceed db "]: ", "$" index db 1 pos db 0 howmany db 0 main:; real code starts here ; display msg on screen ; first part mov dx, offset msg mov ah, 9 int 21h ; now the number index mov di, offset index mov dx, [di] add dx, 30h mov ah, 2 int 21h ; finally the last part mov dx, offset preceed mov ah, 9 int 21h ; initialize array & buffer lea si, buffer lea di, array ; start getting the nibbles get: mov dx, 0FFh mov ah, 6 int 21h je get ; enter? cmp al, 0Dh je next ; backspace? cmp al, 08h je clear_pre ; ESC, close? cmp al, 1Bh je exit ; numbers only cmp al, 30h jl get cmp al, 39h ja get ; two nibbles already? cmp howmany, 2 je get ; print it mov dl, al mov ah, 6 int 21h ; save those nibbles cmp [buffer], 0 jne next_place mov [si], al inc howmany jmp get next_place: mov [si+1], al inc howmany jmp get next: ; now time to save it in the array mov howmany, 0; sub or dec may cause troubles if user enters 1 nibble and not two.. so you will have to check on that mov ah, [si] mov al, [si+1] mov [di], ax; number saved inc di; move to next inc di mov [buffer], 0; clear buffer mov [buffer+1], 0 cmp [array+18], 0000h jne sort ; clear writing position call clear jmp get sort: ; do your sorting here exit: mov ax, 4C00h int 21h clear_pre: ; get current position mov ah, 03h mov bh, 00h int 10h cmp dl, 20h je get sub dl, 1 mov ah, 02h mov bh, 00h xor dh, dh; dl holds the vertical position mov pos, dl int 10h mov dl, 20h mov ah, 2 int 21h mov ah, 02h mov bh, 00h xor dh, dh mov dl, pos int 10h cmp howmany, 0 jle get dec howmany jmp get clear proc near ; reposition cursor mov ah, 02h mov bh, 00h mov dx, 0020h int 10h mov cx, 2 clear_it: ; write two spaces here mov dx, 20h mov ah, 2 int 21h loop clear_it ; reposition cursor again mov ah, 02h mov bh, 00h mov dx, 0020h int 10h ret clear endp end startup
ادرس التالي وخبرني اذا فيه شي مش واضح او غلط.. بالتوفيق, اه بالمناسبة, ما كنت منتبه ان الاسم هو صالح.. كنت اقرأه اسم آخر, باي حال حصل خير :)
تم تعديل هذه المشاركة بواسطة Xacker في 20 أبريل 2006 في 21:23
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا شكرا اخي Xacher ولا يهمك , اسمي صلاح من فلسطين ..
مشكورلك على المتابعة معي , راح ادرسها ان شاء الله واردلك خبر بعد يومين لاني مشغول شوي
شكرا كمان مرة , والله يبارك فيك

هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…