السلام عليكم
لقد قمت بكتابة هذا البرنامج باستخدام لغة الآله SIM
لجمع وطرح هذه الأعداد
(15+8+33)-(44+54+64)
الكود هو:
0004
2001
2002
1006
3001
2003
2004
ffff
44t
54t
64t
15t
8t
33t
0000
لكن النتيجة لم تكن صحيحه
ماهو الخطأ؟
وشكراً
السلام عليكم
لقد قمت بكتابة هذا البرنامج باستخدام لغة الآله SIM
لجمع وطرح هذه الأعداد
(15+8+33)-(44+54+64)
الكود هو:
0004
2001
2002
1006
3001
2003
2004
ffff
44t
54t
64t
15t
8t
33t
0000
لكن النتيجة لم تكن صحيحه
ماهو الخطأ؟
وشكراً
وين المساعدة يا أخوان
ستنتظر طويلاً، السبب أنك تعمل في شئ ربما لم يعمل به أحد منّا من قبل ولم يضطر إلى هذا.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
ماذا لو أردت كتابة نفس هذا البرنامج بالاسمبلي؟
الفكرة أنو الكود 0004
يعني ld في لغة الأسمبلي
2005 يعني add
الفكرة أني استخدم Hex بدلاً من الرموز.
لو أردنا كتابته بالاسمبلي
هل سيكون كالتالي
ld 1
add 2
add 3
st 4
add 6
add 7
st 8
sub 9
st 4
st 8
halt
dw 64t
dw 54t
dw 44t
dw 33t
dw 8t
dw 15t
dw 0
هل صحيح
تم تعديل هذه المشاركة بواسطة PROGRAMMER_15 في 13 نوفمبر 2008 في 19:12
لا أستطيع الجزم لذلك سأناقشك
ld 1 add 2 add 3 st 4
سأكتبه بشكل عبارات فصحح لي لو ذكرت شئ خاطئ
load 64t > stack
add 54t > stack
add 44t > stack
store stack > local.4 ?
- هل 64t هي قيمة عشرية؟
- بعد الجمع، أليس من المفترض أن يكون st 1 لأنك تخزن في متغير محلي وليس على الـ stack ؟ (أنا مشوش قليلاً لأن هذه الأسمبلي قريبة نوعاً ما من الـ MSIL)
add 6 add 7 st 8
ألا يجب أن تقوم بتحميل loc.5 ثم تضيف لها loc.6 ثم loc.7 وتقوم بحفظ القيمة st 2 ؟
تقريباً كما حدث في الأعلى
ثم
sub 9 st 4 st 8
لا أدري بالضبط ما الفكرة، ما رأيك بـ
ld arg.1 ld arg.2 sub st loc.3
يعني بالمختصر المفيد وبشكل Pseudo:
load loc.1
add loc.2
add loc.3
store arg.1
load loc.4
add loc.5
add loc.6
store arg.2
load arg.1
load arg.2
sub
store arg.3
halt
بالمناسبة أنا غير متأكد هل يتم تحميل قيمتين ثم يتم استخدام add أم يجوز استخدام add مع قيمة في الذاكرة.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
مشكور على الرد
بالنسبة 64t , نعم هي قيمة عشرية.
هل تعني loc متغير محلي؟
بعد halt ستكون القيم
dw 64t
dw 54t
dw 44t
dw 33t
dw 15t
dw 8t
dw 0
هل صحيح كتابة القيم بالشكل أعلاه بعد الأمر halt
أجريت بعض التعديلات على الكود بالشكل التالي
ld n1
add n2
add n3
st fg
ld n4
add n5
add n6
st sg
ld fg
ld sg
sub 7
st result
halt
n1: dw 64t
n2: dw 44t
n3: dw 54t
n4: dw 33t
n5: dw 8t
n6: dw 13t
0 result: dw
لكن عند التنفيذ يحدث خطأ
تم تعديل هذه المشاركة بواسطة PROGRAMMER_15 في 13 نوفمبر 2008 في 20:54
لم تجبني على كل أسئلتي, وكما لاحظت أنا قلت لك لم أكتب بهذه الطريقة من قبل ولم أكتب على SIM هذه التي تتكلم عنها، أنا فقط أحاول مجاراة ما تقوم بكتابته من خلال ما رأيته كثيراً في تطبيقات MSIL (يعني في تطبيقات .NET بشكلها Intermediate Language)
بالنسبة للبيانات لا أعلم إن كانت هذه هي الطريقة الصحيحة في SIM التي تستخدمها، لو وضعت مراجع أو روابط أو حتى تعريف بها لكان أفضل، صراحة لن أقوم بالبحث عنها بنفسي.
هل هناك شئ على الأقل يوضح "structure" استخدام التعليمات، في MSIL لا تستطيع جمع ثلاث متحولات مباشرة حسبما أذكر
تقوم بتحميل قيمة للذاكرة، تقوم بتحميل قيمة أخرى، تنفذ عملية جمع فيتم جمع آخر قيمتين في الذاكرة وتخزينهم في متحول محلي (نعم loc أقصد بها متحول في برنامجك وليس شئ في الذاكرة)
أعود وأذكرك، أنت تكتب في شئ لم يكتب به أحد من قبل، عليك بتعريفنا بهذا الشئ حتى نستطيع مساعدتك من خلال التعرف عليه بسرعة من خلال ما كسبناه خلال هذا الوقت من القدرة على التعلم السريع.
إن شاء الله طبعاً
السلام عليكم
تم تعديل هذه المشاركة بواسطة Xacker في 13 نوفمبر 2008 في 22:33
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
أنا أكتب برنامج بلغة الألة
أنت تعرف أن الكمبيوتر لا يتعرف سوى على 01 فقط
فأنا إذا أريد أن اقول للمعالج أجمع يجب أن أكتب:
0010000000000101
أول أربعه bit تسمى operation code
إما 12 bit الباقيه فهي عنوان الذاكره
هذه الطريقة سوف تكون صعبه إذا قررنا الكتابةbinary numbers
لذلك لدينا برنامج اسمه sim وظيفته أننا بدلاً من نكتب instructions عن طريق binary numbers نستطيع كتابته بـ hexdecimal numbers بمعنى:
الأمر 0010000000000101
يكون Hex 2005
برنامج sim يقوم بتحويل Hex إلى binary ألي هو لغة الآله.
أيضاً الكتابة بلغة الأله صعبه جداً ، لذلك تم إيجاد لغة الاسمبلي كبديل حيث أنها تستخدم الرموز بدلاً من الأرقام
الأمر load يكتب في لغة الاسمبلي ld
وفي برنامج sim :
0004
وفي لغة الآلة
0000000000000100
تطور الموضوع وأصبح لدينا لغات عالية المستوى كـ السي بلس بلس والجافا.
إذا أردت أن تجمع رقمين في لغة عالية المستوى كـ الجافا يكون بالشكل التالي:
;int a=5
;int b=5
;int c
c=a+b
وانتهى الموضوع
في لغة المستوى الآول كـ الاسمبلي:
ld 1
add 2
st 3
halt
dw t5
dw t5
dw 0
في لغة الأله
0000000000000100
0010000000000101
0001000000000110
1111111111111111
0000000000001111
0000000000000101
0000000000000101
0000000000000000
انظر الفرق بين مستوى اللغات وكيف التطور التقني.
لكن لغة الاسمبلي تبقى صاحبة قوة برمجية تقدمها للمطور
على العموم بالنسبة للبرنامج أنا وصلت لنتيجة لكن لست متأكد من ناتج العملية الحسابية وهذا هو الكود بلغة الأسمبلي:
ld n1
add n2
add n3
st 4
ld n4
add n5
add n6
st 5
ld 4
ld 5
sub 7
st result
halt
n1: dw 44t
n2: dw 54t
n3: dw 64t
n4: dw 33t
n5: dw 15t
n6: dw 8t
result: dw 0
وهذا هو الكود بلغة الألة بشكل Hex:
0004
2001
2002
1004
0005
2003
2004
1005
0006
0007
3009
1006
ffff
44t
54t
66t
33t
15t
8t
0000
وإذا أردته بشكل Binary Number
توقع أن ترى شكلاً كهذا:
0000000000000000100
0010000000000000101
وهكذا
تم تعديل هذه المشاركة بواسطة PROGRAMMER_15 في 14 نوفمبر 2008 في 00:57
أخي هل نسيت أنك في قسم الأسمبلي؟ :)
أنا لم أخطئ القسم ودخلته معتقداً أنه للفيجوال بيسك
ما تكلمت عنه أعرفه من سنوات، ما كتبته لك في الأعلى شئ مختلف تماماً عما كتبته لي ولم تقدم لي شئ حتى أستطيع مساعدتك.
أنت تكتب بلغة تسميها SIM، حسناً لم أسمع بها، هل لك أن تخبرني هل لها برنامج تجميع تستخدمه، هل لها تعليمات معينة، هل لها مراجع، هل لها موقع؟
هذا ما أطلبه منك، شئ للتعرف على البيئة التي تكتب بها برنامج الأسمبلي حتى أستطيع مساعدتك فيما تقوم بكتابته.
بالمناسبة الكمبيوتر دارات الكترونية، نحن نستخدم 0 و 1 حتى نفهم فقط ما تعنيه الإشارات الكهربائية التي تمر في هذه الدارات.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
sim برنامج يحاكي H1
horizontally microprogrammed
وأيضاً V1
vertically microprogrammed
على العموم أنا توصلت لنتيجة مقاربة، ما كتبته في الأعلى للتوضيح فقط .
كما تشاء، لو أردت العودة للسؤال في هذا الموضوع مرة أخرى ستحتاج إلى جلب المزيد من التوضيح الذي ذكرته لك، لأنه في صالحك.
بالمناسبة قسم البرمجة بالـ microprocessor is down the hallway
أقصد أنه في قسم آخر لكن لم يكن هناك مانع من النقاش به هنا، لو أردت يتم نقل هذا الموضوع هناك.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget