الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارجو التصحيح

مغلق
بدأه محمد الطنه في 21 أبريل 2004 · 3 رد · 605 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
.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

365159135_b0fcd2be76_o.jpg

365163463_a76592857a.jpg
#2

المقاطعة 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

فكر بطريقة أخرى

#3

السلام عليكم,

هناك أولا بعض الأخطاء الكتابية مثل tt حين نستعملها كعلامة تكون متبوعة بنقطتين حتى يتعرف عليها الكمبايلر وهناك add x,al هل x معرفة من قبل أم تقصد cx أو رجستر آخر وأضن أنه يجب طرح السؤال بتدقيق حتى تسهل الإجابة للذين يودون ذلك.

وكما ذكر الأخ walcom فحين ندخل رقما مثلا من 0 إلى 9 فسيكون عندنا كود أسكي للرقم لذا يجب أن ننقص منه 30 هكس حتى نجد الرقم وحين نقوم بالعمليات الحسابية نزيد من جديد 30 هكس حتى يكون عندنا كود أسكي للرقم النتيجة هذا إذا كان الرقم من 0 إلى 9 وفي الحالات الأخرى يجب معالجة كل رقم على حدة .

إلى اللقاء.

#4

السلام عليكم:

اخي عليك الانتباه الى الامور التالية:

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

هذا الموضوع مغلق.

مواضيع مشابهة