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

[ تمت الإجابة ]عملية الادخال والاخراج في الاسمبلي

بدأه aderfiad في 14 أغسطس 2009 · 7 رد · 3,683 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لاوضح الامور هدا كود سي بلس بلس اريد كتابته بالاسمبلي


main()
{
int num1 , num2;
cout << "Numero 1:\n " ;
cin >> num1;
cout << " Numero 2:\n";
cin >> num2;
cout << "Resulta est: " << num1+num2;
return 0;
}
# include <iostream.h>

استعمل WinAsm + MASM32

لو امكن شرح واضح

تم تعديل هذه المشاركة بواسطة aderfiad في 14 أغسطس 2009 في 21:38

#2

لا يوجد من يرد

#3

وعليكــم السـلام ورحمة الله وبركاتـه..

أخي الكريم لقد قمت بكتابت هذا الكود اللذي يقوم بحساب الأعداد اللتي مجموعها تحت 9

لأن جمع الأرقام فوق 9 يتطلب خوارزمية أخرى

وأنا مستعد لكتابتها إن تريد

الكود في المرفقات

The_code.zip

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#4

شكرا لك

جاري المطالعة

ممكن شرح الكود اخي لو سمحت

الاوامر مفهومة لدي لكن الطريقة او الهيكلة التي يستعملها البرنامج

الخوارزمية ان صح التعبير

#5

بسم الله الرحمن الرحيم

سوف أقوم بشرح الكود حسب طلب Aderfiad

نلاحظ في البداية أنه تم أعطاء num1 و num2 قيمتين متساويتين وهي الصفر ويجب الملاحظة انه تم وضع القيمة بنظام السداسي عشري Hexadecimal

كما في هذا الكود:

num1 db 0h
num2 db 0h
total db 0h,'$'

ونلاحظ أيضاً أن تم ربط إشارة $ مع القيمة الموجودة في total

وسبب ذلك أنه عندما قمنا بعرض النتيجة أستخدمنا مسجل كامل هو DX

كما في الكود

lea dx, total
mov ah, 9
int 21h

عندما نقوم بجمع رقيمين ولفرض هما 5 و4 يجب الأنتباه على نوع الرقمين هل هما بنظام العد العشري أم السداسي عشري أم ثنائي عشري

حيث مم سبق تم أدخال الرقمين بالسداسي عشري

وعندما يقوم الحاسب بحساب الرقمين يعتمد ASCII في الحساب

حيث يتم وضع قيمة للرقم 5 وتكون 35H ويضع قيمة للرقم 4 وتكون 34H

وهكذا يكون الناتج 69H وعندما نقوم بالطباعة يتم طباعة 69H وهذا في الغالب ما يكون رمز فيASCII

والطريقة اللتي أستخدمتها قمت بالأفادة من أن الأرقام 0-9 تكون 30h-39h في ASCII

حيث نفرض أنه تم أدخال 5 ووضعت له قيمة 35h

ثم نقوم بطرح 30h

كما في الكود

mov ah,1
int 21h
mov num1,al
sub num1,30h

ثم نقوم بأدخال الرقم الثاني وهو 4 فتوضع له قيمة 34h

ونطرح منه 30h أيضاً

mov ah,1
int 21h
mov num2,al
sub num2,30h

وهكذا يكون لدينا في المتغرين 4h و5h بعد الطرح

نقوم بجمع الأرقام الموجودة في المتغرين فيصبح لدينا 9h

ثم نضيف 30h إلى المجموع فيصبح 39h وهذا يقابل الرقم 9 في ASCII

لاحظ كيف يتم ترتيب الأرقام في ASCII

post-209213-1250993824_thumb.jpg

ومن هذه الطريقة نجد أنه بالأمكان حساب مجموع الأرقم اللتي تكون مجموعها أقل من 9

وعندما تفهم هذه الطريقة سوف أشرح كيف يتم جمع أعداد مجموعها لايتجاوز 18 أو 198 أو أعلى....

بالتوفيق

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#6

شكرا لك اخي الكريم ، شرح واضح وضوح الشمس والطريقة اصبحت مهضومة (:

هل لك ان تشرح الجمع على اعداد كبيرة لتعم الافادة

شكرا لك

#7

السلام عليكــم ورحمـة الله وبركاتــه ،،

أخي الكريم عندما نقوم بجمع أي عددين مؤلفين من خانتين "آحاد وعشارات" ولفرض 99+99=198

نقوم بأستخدام العملية التالية

post-209213-1251026309_thumb.jpg

ويمكن تنفيذ هذه الطريقة بلغة التجميع كما في هذه الخوارزمية

post-209213-1251026418_thumb.jpg

يرجى الملاحظة أنه في الخوارزمية لم أقم بطرح أو جمع 30H

فعند كتابة الأكواد يجب الأنتباه

يجب الأنتباه أيضاً أنه عندما نقوم بأدخال الرقم الأول أو الثاني ليس من الشرط أن يكون مؤلف من عشرات أي احاد فقط فمثلاً أن كنا نريد أن ندخل الرقم 3 نقوم بالأدخال 03

وإن أردت يمكن أن أوضح طريقة إذا تم أدخال رقم ثم الضغط على Enter يقوم البرنامج بنفسه الأدخال القيمة 03 للرقم

لم أكتب الأكواد لأنني أريد أن تقوم أنت بكتابتها وإن وجدت أية مشاكل الرجاء أخباري فقد أستطيع المساعدة

بالتوفيق :happy:

تم تعديل هذه المشاركة بواسطة Prelware D في 23 أغسطس 2009 في 14:32

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#8

شكرالك

ان شاء الله احاول كتابتها

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…