math.haifa.ac.ilmath.haifa.ac.il/ronn/braudeasm/wordfiles2016b/notes2.docx · web viewאוגרי...

30
תתתת תתתתת תת תתתתתת תת תתתתתת תתתתתת: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

Upload: docong

Post on 15-Apr-2019

213 views

Category:

Documents


0 download

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החל מעמוד מספר האוגרים בכל

מעבד בדרך כלל לא עולהעל כמה עשרות.

אוגרים מתחלקים לכמהסוגים:

האבחנה הבסיסית:כללייםאוגרים -.מיוחדיםאוגרים -

מתפקדיםאוגרים כלליים משתניםבעצם כמו

בשפות תכנות עיליות, רקשהם במעבד.

מתפקדיםאוגרים כללייםכ-;int xצוברים -;int *ptrמצביעים -arr[i]אינדקסים -

אוגרים מיוחדים קשורים להתנהלות הפנימית של

המעבד.בין השאר:

מצבעים לפקודה הבאה-לביצוע

מצבעים על שטחי זיכרון-משקפים סטטוס המעבד-

גםבמעבדים מתקדמים מנגנוני הגנהמנהלים

ומנגנונים נוספים.

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האוגר סה"כ האוגרים שמסוגלים

להצביע )] [( הם:

BX

SI

DI

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

Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

D:\eronn\asm>td HELLO1A.EXE