توجيه المنظمة وإزاحات الفعلي

ملخص

توجيه المنظمة في MASM يسفر بالضرورة عن إزاحة الفعلي الذي يطابق الإزاحة المحددة "المنظمة الثلاثين". على سبيل المثال، إذا كنت تستخدم "المنظمة 100h" في البرنامج، التعليمات البرمجية التالية لا دائماً تبدأ عند الإزاحة 100h نسبة إلى بداية المقطع.


عندما يتم استخدام ملف مصدر com. وهناك وحدة نمطية واحدة فقط، سيؤدي إلى "المنظمة 100h" إزاحة الفعلي من 100 ساعة للتعليمات البرمجية التي تلي بيان المنظمة. يحدث هذا السلوك أيضا بمقاطع بواسطة الأمر AT ضم نوع (في هذه الحالة لا يتم دمج مقاطع بالرابط ويتم تعريف لم بيانات أو تعليمات برمجية).


ومع ذلك، إذا كان لديك وحدات نمطية متعددة و/أو لم يتم التعامل مع ملف مصدر.COM، "المنظمة 100h" ينتج إزاحة الفعلية، إلى حد ما أكبر من 100 ساعة.


يحدث هذا السلوك للرابط، في ظل هذه الظروف، سيتم القيام ببعض المساحات التي لها أي سيطرة على.

مزيد من المعلومات

في الرسم التوضيحي التالي (الذي يتعامل مع الوحدات النمطية مصدر أدناه)، لاحظ أن زيادة تعليمة المنظمة المحلية يقابلها 100 ساعة، مما يؤدي إلى إزاحة التعليمة الدفع في example2 الآن 100h (أي ما على تقديم تقرير في قائمة ملف). ومع ذلك، عندما ترتبط هذه الوحدات، يتم وصل كافة أجزاء من مقطع التعليمات البرمجية. وبالتالي، يتم تحويل EXAMPLE2.asm:code:100h إلى التعليمات البرمجية: 113 ح. يتم ترتيب تسلسل ترتيب الربط.


المثال التالي يوضح السيناريو:

     Actual                      Offset     offset                      from start
from of segment
code code in module
------- ---------------
+-----------------+
0117 | ret | 0105
0116 | pop | 0103 test2.asm
0114 | mov | 0101
0113 | push | 0100
0013 | org | 0000
+-----------------+
0012 | ret | 0004
0011 | pop | 0003 test1.asm
000F | mov | 0001
000E | push | 0000
+-----------------+
000C | int | 000C
0009 | mov | 0009 testmain.asm
0006 | call | 0006
0003 | call | 0003
0000 | mov | 0000
+-----------------+
segment code


|---------------testmain.asm: |---------------test1.asm:
code segment public 'code' PUBLIC _test
assume cs:code code segment public 'code'
assume cs:code
mov ax, 0a0ah _test proc

extrn _test:proc push bp
extrn _test2:proc mov bp, sp

call _test pop bp
call _test2 ret

mov ax, 4c00h _test ENDP
int 21h code ends
code ends

END END



|---------------test2.asm:
code segment public 'code'
assume cs:code
org 100h

PUBLIC _test2
_test2 PROC

push bp
mov bp, sp

pop bp
ret

_test2 ENDP
code ends
END

خصائص

رقم الموضوع: 39441 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 2

تعليقات