הוראת ארגוני וההיסט בפועל

כתב ויתור על תוכן KB שהוצא משימוש

מאמר זה נכתב על מוצרים ש- Microsoft כבר לא תומכת בהם. לכן, מאמר זה מוצע "כפי שהוא" והוא לא יעודכן עוד.

סיכום

ההוראה ארגוני ב- MASM לא הפיק בהכרח היסט בפועל המתאים להיסט שצוין "ארגוני XXX". לדוגמה, אם אתה משתמש ב- "ארגוני 100h" בתוכנית שלך, הקוד הבאה לא תמיד תתחיל בהיסט 100h ביחס תחילת המקטע.


כאשר אתה משתמש בקובץ המקור. COM וישנו מודול אחד בלבד, "ארגוני 100h" יביא היסט בפועל של 100h עבור קוד שלאחר המשפט ארגוני. אופן פעולה זה מתרחש גם עם מקטעים עם AT לשלב סוג (ובמקרה מקטעים לא משולבים על-ידי מקשר הנתונים או קוד לא מוגדר).


עם זאת, אם ברשותך מודולים מרובים ו/או אתה לא להתעסק עם קובץ מקור. COM, "ארגוני 100h" מפיקה היסט בפועל, בה במידה מסוימת גדול מ- 100h.


אופן פעולה זה מתרחש מכיוון מקשר, בנסיבות אלה, יבצע מסוימים ריפוד אשר אין לך שליטה מעל.

מידע נוסף

באיור הבא (אילו עסקאות עם מודולים מקור להלן), שים לב כי ההוראה ארגוני גדל המקומית מוסט לפי י 100, וכתוצאה מכך ההיסט של ההוראה דחיפה ב- example2 כעת 100h (כלומר, מה היא הדוח בקובץ הרישום). עם זאת, כאשר מודולים אלה מקושרים, כל החלקים של קטע קוד משורשרים. לכן, EXAMPLE2.asm:code:100h מומר לתוך קוד: 113 h. סדר שרשור הוא הסדר של קישור.


הדוגמה הבאה ממחישה את התרחיש:

     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 - סקירה אחרונה: 17 בינו׳ 2017 - תיקון: 1

משוב