.code mov cx,5 tt mov ah,1 int 21h add x,al loop tt mov ah,2 int 21h mov dl,a
ارجو التصحيح هو برنامج يستقبل 5 ارقام ثم يجمع و يظهر علي الشاشه
.code mov cx,5 tt mov ah,1 int 21h add x,al loop tt mov ah,2 int 21h mov dl,a
ارجو التصحيح هو برنامج يستقبل 5 ارقام ثم يجمع و يظهر علي الشاشه
تم تعديل هذه المشاركة بواسطة HGB في 21 أبريل 2004 في 20:28
المقاطعة int 21h تستقبل الأرقام بالآسكي، مثلا الرقم 1 ستستقبله على أساس أنه الرقم 33، وهكذا، وأذكر جيدا من أيام كورس الأسمبلي في الجامعة الإحباطات التي سببتها لنا في محاولتنا للحل العملي لبرامج متوقع ورودها في الامتحان، وكان الامتحان غدا. ولكن حللناها باستعمال نفس المقاطعة لاستقبال أرقام لا تزيد عن 9 ولا تقل عن -9، وعمل xor للرقم المستلم مع الرقم 3030 (هذا العدد بالنظام السادس عشري)
فقط احشر هذا سطر الxor عقب استلامك للعدد من لوحة المفاتيح:
xor myNum, 3030 ; then add your operation here ; eg: add myNum, n2 .............
وبالتوفيق بلإذن الله.
تم تعديل هذه المشاركة بواسطة walcom في 21 أبريل 2004 في 18:56
فكر بطريقة أخرى
السلام عليكم,
هناك أولا بعض الأخطاء الكتابية مثل tt حين نستعملها كعلامة تكون متبوعة بنقطتين حتى يتعرف عليها الكمبايلر وهناك add x,al هل x معرفة من قبل أم تقصد cx أو رجستر آخر وأضن أنه يجب طرح السؤال بتدقيق حتى تسهل الإجابة للذين يودون ذلك.
وكما ذكر الأخ walcom فحين ندخل رقما مثلا من 0 إلى 9 فسيكون عندنا كود أسكي للرقم لذا يجب أن ننقص منه 30 هكس حتى نجد الرقم وحين نقوم بالعمليات الحسابية نزيد من جديد 30 هكس حتى يكون عندنا كود أسكي للرقم النتيجة هذا إذا كان الرقم من 0 إلى 9 وفي الحالات الأخرى يجب معالجة كل رقم على حدة .
إلى اللقاء.
السلام عليكم:
اخي عليك الانتباه الى الامور التالية:
1-عندما تري استقبال 5 ارقام فانت تستقبلها بصورة ASCII اي ان بدلا من 1 تستقبل 31 بالميزان السادس عشر . معنى ذلك انه عليك ان تطرح من كل رقم تستقبله 30 في الميزان السادس عشر. والمهم ان هذه القيمة التي تم استقبالها تخزن في المسجل al
2_ عندما تريد اظهار النتيجة على الشاشة عليك مراعاة الامور التالية:
اذا كانت النتيجة اقل من تسعة عليك اضافة 30 بالميزان السادس عشر ثم طباعتها
اما اذا كانت النتيجة اكبر من 9 عليك تقسيم النتيجة الى خانات وطباعة كل خانة على لوحدها.
اخي لا اعلم ما هي المادة التي درستها ولكني سوف اعرض عليك حلا طويلا ولكنه بسيطا مع العلم انه هنالك العديد من الحلول القصيرة ولكنها تتطلب دوال وماكرو
الحل المقترح هو
mov dl,0
mov cx,5
mov ah,1
tt:int 21h
sub al,30h
add dl,al
loop tt
xor ax,ax
mov al,dl
mov bl,10
div bl
mov bx,ax
mov dl,bl
add dl,30H
mov ah,2
int 21h
mov dl,bh
add dl,30h
mov ah,2
int 21h
mov ah,4ch
int 21h
هذا الموضوع مغلق.