ماذا تفعل توجيه ORG في رمز التجميع؟
سؤال
للرجوع اليها، الرمز هو موتورولا 68008.
قل لدي رمز مثل ما يلي:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
هل أنا صحيح في التفكير بأن A0 سيعقد القيمة 200 و A1 القيمة 205؟
واحدة من أسئلة الامتحانات في الورقة السابقة كانت: "ما هي العناوين المادية للتسلسل والتسديدة؟"، هل ستكون الجواب "200 و 205"، أو سيكون "200-204 و 205-209"؟
رأيت بضعة قطع من التعليمات البرمجية مع توجيهات متعددة الأورغ، على سبيل المثال؛
ORG 100.
Array1: D.B 4
ORG 300.
هل أنا في الاعتقاد بأن آخر توج من توجيه ORG يتبع، على سبيل المثال في هذه الحالة، يشير Array1 إلى 300؟
المحلول
- نعم، هذا يبدو صحيحا. عنوان
sequenceN
هو 5 بايت بعدsequence0
. - "هذا يعتمد"، أعتقد ... لأنه "عناوين" في صيغة الجمع، أعتقد أنهم يريدون النطاق بأكمله، وفي هذه الحالة يكون إجابتك الأخيرة صحيحة.
- لا، كنت أتوقع المتعدد
org
S للتقديم فقط إلى التعليمات البرمجية بعدها، لذلك في هذه الحالةarray1
سيكون عند 100 دولار. نظرا لعدم وجود رمز أو جيل بيانات يحدث بعد الأخيرorg
, ، يتم تجاهلها أساسا من قبل المجمع.
نصائح أخرى
أفترض أن "ORG" تعني "الأصل" - العنوان الأول الذي سيتم تعيينه للرمز أو شريحة البيانات التي يتم تنشيطها.
نعم، 200 و 205
يبدأ التسلسل 0 في 200 ويمتد لمدة 5 بايت إلى 204
لا، يبدأ Array1 في 100، أي شيء بعد أن تبدأ شركة ORG 300 عند 300
أنت تستخدم: MOVE.W #sequenceO, A0
لذلك، أنت تقوم بتحميل الكلمة السفلى فقط (16 بت) من العنوان A0
. وبعد هذا سوف يعمل فقط في ذاكرة منخفضة جدا ( A0
تحت $00010000
)
بشكل عام باستخدام MOVE.W
على سجل العنوان يحصل صعبة.
يحاول: LEA #sequence0, A0
(تحميل عنوان 32 بت A0
)
معظم المجمعين سوف تفعل أيضا:
MOVEA.L #sequence0, A0
شكرا، ديف صغير