math.haifa.ac.ilmath.haifa.ac.il/ronn/braudeasm/wordfiles2016b/notes2.docx · web viewאוגרי...
TRANSCRIPT
בכדי לראות את הקידוד של תוכניתאסמבלי:
D:\eronn\asmprogs>path c:\tasm;%path%
D:\eronn\asmprogs>notepad hello1a.asm
D:\eronn\asmprogs>tasm /la hello1a.asm
Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International
Assembling file: hello1a.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 444
D:\eronn\asmprogs>notepad HELLO1A.LST
טיפים בכל הקשורלתכנות אסמבלי
תכנות אסמבלי לא חייב להיות קשה, החוכמה היא לעשות
אותו בשלבים: כתובו ודבגו את התוכנית-
)או בשפהCקודם כל בשפת עילית אחרת ( ורק אז
מאדתתרגמו לאסמבלי. קשה למצוא שגיאות לוגיות
בתוכנית אסמבלי, תנסולחסוך מעצמכם את זה.
בתרגום לאסמבלי, לפחות- בשלב ראשון, תשמשו
באותם משתנים כמו
אלבתוכנית בשפה העילית. תנסו להשתמש באוגרים בתור משתנים, זה מתקון
בטוח לטעויות. אחרי שיש לכם תוכנית שעובדת, אפשר
לנסות לייעל. במידה ולא ברור לכם איך-
עושים משהו באסמבלי, בדרך כלל תוכלו לגלות זאת
שלtcc –Sע"י הטכניקה של .Cתוכנית
CPUאוגרי המעבד Registers
במעבד, מתכנתים יכולים רק על ערכילהשפיע .האוגרים
:28החל מעמוד מספר האוגרים בכל
מעבד בדרך כלל לא עולהעל כמה עשרות.
אוגרים מתחלקים לכמהסוגים:
האבחנה הבסיסית:כללייםאוגרים -.מיוחדיםאוגרים -
מתפקדיםאוגרים כלליים משתניםבעצם כמו
בשפות תכנות עיליות, רקשהם במעבד.
אוגרים מיוחדים קשורים להתנהלות הפנימית של
המעבד.בין השאר:
מצבעים לפקודה הבאה-לביצוע
מצבעים על שטחי זיכרון-משקפים סטטוס המעבד-
גםבמעבדים מתקדמים מנגנוני הגנהמנהלים
ומנגנונים נוספים.
8086/8קבוצת האוגרים ב- אוגרים הכלליים:8
AX, BX, CX, DX, SI, DI, BP, SP
אוגרים מיוחדים:6IP, CS, DS, SS, ES, FLAGS
. ביט16כל האוגרים הללו היו לכל אוגר יש איזה שהיא
.מיוחדת רק לו תכונה
האוגרים הכלליים: Data נקראים 8 מתוך ה-4
registers:AX-ה - Accumulator
BX - Base Register
CX – Count Register
DX- Data Register
ניתן להתייחס בפקודת מכונה לחצאים העליונים והתחתונים
של האוגרים הללו. פירושואקומולטורהמילה
"אוגר ראשי לחישוביםאריתמטיים".
( )כמעט(DX )וגם AXמן הסתם .צובריםתמיד משמשים כ
למשל כפל וחילוק של שלמים מערבים תמיד את האוגרים
AX-ו DX. בסדרהAX הוא שותף ל-DXה-
של פקודות בעלות מעמדמיוחד )בין השאר כפל וחילוק(.
הוא היחיד מתוך ה-BXאוגר ה-DATA Registersשיכול לשמש
)] [(. אחרת הואמצביעכ.צוברמשמש כ
משמש במספרCXאוגר ה- שלכמונהפקודות מכונה
פקודת מכונה. אחרת הוא.צוברמשמש כ
SI - Source Index
DI – Destination Index
BP – Base Pointer
SP – Stack Pointer
שמסוגלים הם אוגרים SI,DIה- , וזה אולי השימושלהצביע
העיקרי שלהם. יש פקודות מכונה מסוימות שהן משמשות
)מצביעים יחסיתכאינדקסים לנקודת התחלה(. יתר הזמן הם
כצוברים.משמשים משרתיםSP וה-BPאוגרי ה-
מבנה נתונים מיוחד שנקרא.מחסנית המערכת
.הצביע יכול לBPהאוגר סה"כ האוגרים שמסוגלים
להצביע )] [( הם:
בשפות עיליות הקומפיילר הוא שדואג לקוד המתחזק
אותם.:8086ב-
IP - Instruction Pointerאוגר
מצביע )לא לבד( לפקודההבאה לביצוע
ארבעה אוגרי סגמנטים:CS – Code – החלק הביצועי
DS – Data- חלק המידעSS – Stack- מחסניתES – (Extra)
אוגרי הסגמנטים מצביעים זיכרון )אבל אינםלשטחי
נקודותפיונטרים שמצביעים לזיכרון(
CSמצביע לחלק הביצועי – של התוכנית
DSלמשתנים הגלובליים – והסטטיים
SSלשטח המחסנית – ES - מצביע לשטחלא
מוגדר, הוא מעין "מצביעלשטחים כלשהם".
ברמת התוכנית, כל גישה.גישה יחסיתלזיכרון היא
שיטת העבודה הזו נקראת.סגמנטציה
ש: למה במחשב הזה )ובכל המחשבים המודרניים(
?יחסיתגישה לזיכרון היא
הפוינטרים לא מוגדרים במושגים של כתובות
מוחלטות. ת: אנחנו עובדים היום תחת
, ובנסיבותמערכת הפעלה היכן לדעת אפשראיהללו
התוכנית שלנו תטען.לזיכרון
לשטחהתוכנית שלנו תטען הפנוי באותו רגעהזיכרון
שהתוכנית מופעלת. תחת מערכת הפעלה, איזה
.נזילשטח פנוי הוא דבר
אינו יכולהשטח אינו קבוע ו בזמן התכנותלהיות ידוע
והתרגום שלו. איך נממש משתנה
)שהגישה אליו צריכה להיות עקבית בריצה של תוכנית(
אם איננו יכולים לדעת איזהכתובות יעמדו לרשותינו?
פתרון: כל גישה לזיכרון גורמים:משנימורכבת
שטח של נקודת ההתחלה- זיכרון שנקבע ע"י מערכת
ברגע טעינתההפעלה .התוכנית
היסט לתוך השטח שנקבע- בזמן התכנות /
.הקומפילציה
גישה למשתנה היא בתוך ריצה עקבית
. של תוכניתמסוימת על פניאיננה עקביתהיא
שונות שלשני ריצות אבל אין צורךהתוכנית,
.בכך בעצם, תוכן אוגרי
אתמנטרליםהסגמנטים אי ידיעתההשפעה של
שטחי הזיכרוןמיקוםשלנו בזמן התכנות.
FLAGSאוגר הדגלים
.הסטטוס המעבדמכיל את מערך שלאוגר הדגלים הוא
)דגלים( ששינוי כלביטים ביט משנה את התנהגות
המעבד במידה כזו אואחרת.
.386מעבר ל-.23דיאגרמה בעמוד
,AX, BXהאוגרים הכלליים ) ביט32ל-…( הורחבו
( (EAX, EBX… ו-EFLAGSכנ"ל אוגר הדגלים
EIP
16אוגרי הסגמנטים נשארו FS: 2ביט אבל צורפו להם עוד
(ES )דומים ל-GSו-
ובנוסף נוספו סידרה גדולה של )מחוץ לחומרמיוחדיםאוגרים
של הקורס הזה(שימוש בטורבו דבאגר:
D:\eronn\asm>tasm /zi hello1a.asm
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International
Assembling file: hello1a.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 438k
D:\eronn\asm>tlink /v HELLO1A.OBJ > errsD:\eronn\asm>type ERRS