מרכיבים עיקריים של מערכת מבוססת מיקרו מחשב
DESCRIPTION
מרכיבים עיקריים של מערכת מבוססת מיקרו מחשב. זכרון קריאה בלבד ROM. זכרון קריאה/כתיבה RAM. יחידת ממשק Interface. יחידת עיבוד מרכזית CPU. ADDRESS BUS. שעון clock. DATA BUS. - PowerPoint PPT PresentationTRANSCRIPT
מרכיבים עיקריים של מערכת מבוססת מיקרו מחשב
יחידתעיבוד
מרכזית
CPU
זכרון קריאה בלבדROM
זכרון קריאה/כתיב
הRAM
יחידת ממשקInterface
ADDRESS BUS
DATA BUS
CONTROL BUS
שעון
clock
עיקרון עבודת המערכת מבוססת מיקרו מחשב
מערכת מבוססת מיקרו מחשב כוללת את שלושת המרכיבים הבאים:
•CPU - Central Processing Unit (Microprocessor) ) יחידת עיבוד מרכזית )מעבד - •Main Memory - בזמן ביצוע ונתונים של התוכנית פקודות זיכרון ראשי בו מאוחסנים•Input/Output Devices – התקנים ליצירת קשר בין המעבד לבין המשתמש•Memory and I/O Subsystem – פסים להעברת מידע בין המעבד לבין הזיכרון
קלט/פלט ובין המעבד לבין התקני•Address Bus מעביר כתובת גישה ממעבד לתאי זיכרון או להתקני קלט/פלט - •Data Bus מעביר נתונים -•Control Busמעביר אותות בקרה לניהול גישה לזיכרון ו להתקני קלט/פלט -
אל מרכיבי המערכת. כל CPUכל מסלול הוא למעשה אוסף של קווים המקשרים את ה- ‹ במקביל .CPUמרכיבי המערכת מחוברים אל ה-
כל משימה שהמערכת צריכה לבצע , כתובה כתוכנית בשפת תכנות כלשהי, מתורגמת•לשפת מכונה ע"י קומפיילר ומאוחסנת בזיכרון כאוסף נתונים בינאריים בסדר מסוים
)Set of Operation Codes - OpCodes.(
פונה לאזור בזיכרון הראשי איפה נמצאת התוכנית המקודדת, CPUאלמנת לבצע המשימה ה-• ומבצע Opcode, מפענח את ה- CPU של הפקודה הנוכחית מזיכרון אל ה-Opcodeמביא את ה-
את הפקודה, שוב פעם פונה לזיכרון להבאת פקודה הבאה וכך עד סוף התוכנית.
CPUהבאת פקודה לביצוע מהזיכרון אל ה- Opcode Fetch Cycle
Address Bus
Opcode
Address=N
Opcode
N
CPU Main Memory
ClkRd
Data Bus
Control Bus
Program counter
Instruction Register
, counter Program פונה לאזור בזיכרון הראשי עליו מצביע ה- CPUה-•, מפענח CPUשל הפקודה הנוכחית מזיכרון אל ה-Opcodeמביא את ה-
אותה ומבצע את הפקודה. שוב פונה לזיכרון להבאת הפקודה הבאה מפענח ומבצע וכך עד סוף
התוכנית.
מבחינה אחת לפחות, המיקרופרוססור הוא מכונה פשוטה מאוד. הוא חוזר כל הזמן על הרצף:
Fetchהבא את ההוראה הבאה מהזיכרון- •Execution בצע את ההוראה - •.1 לך לשלב •
ארבע שלבי ביצוע הפקודה•Instruction Fetch הבאתOpcode -של הפקודה לביצוע מזיכרון ראשי אל ה
CPU. •Instruction decode (פענוח הפקודה Opcode) שנמצאת באוגרIP ע"י
החומרה•Execution ) ביצוע הפקודה )עיבוד אריתמטי , אחסון זמני •Write backכתיבת התוצאות העיבוד חזרה לזיכרון הראשי
פס מחזורי חמישה או שונות פעולות חמש קיימות בסך-הכל אפשריים:
קריאה מהזיכרון.• כתיבה לזיכרון.• קריאה מקלט/פלט.• כתיבה לקלט/פלט.• סרק )פעולה פנימית שאינה דורשת גישה לזיכרון או למיפתח קלט/פלט(.•
8086תכונות של המעבד .1978 בשנת INTEL יוצר ע"י חברת 8086המעבד
בעל תכונות הבאות:8086המעבד
סיביות16- רוחב פס נתונים• סיביות , זאת אומרת שהוא יכול לעבד נתונים 16רוחב אוגרים פנימיים - •
סיביות בפעולות אריתמטיות - לוגיות16בעלי , זאת אומרת שהוא יכול לגשת סיביות20כלפי זיכרון - רוחב פס כתובות•
Mbyte 1 = 1,048,576 = 220בגודל לזיכרון ראשי , זאת אומרת שהוא סיביות16רוחב פס כתובות כלפי התקני קלט/פלט - •
Devices 64535 = 216יכול להתחבר למספר התקנים:
אוbyte 1 יכול לגשת לזיכרון להבאת נתונים בגודל 8086המעבד •1 word=2 byte.בגישה אחד, תלוי בפקודה
חוץ מרוחב פס נתונים חיצוני 8086 דומה מאוד למעבד 8088המעבד •שהוא
פעמיים 8088 המעבד word=2 byte 1 סיביות - להבאת נתון בגודל 8בעל ניגש לזיכרון .
7
קווי כתובת20•
קווי נתונים8•
8088
הצגת נתון במיקרו מחשב
נתונים לא מסומנים
1 byte – 8 bit
MSB
LSB
LSB
1 word – 16 bit
MSB
נתונים מסומניםMSB LSB
MSB LSB
Sign
Sign
1 byte
1 word
תיזמון מחזור הפס
BUSיחידת הקשר ל- - BIU - BUS INTERFACE UNIT – EU - EXECUTION UNIT - יחידות הביצוע-
8086מיבנה פנימי של המעבד מורכב בתוכו משתי יחידות CPU נקרא גם כן 8086המעבד •
פונקציונאליות יקאריות:oיחידה להבאת נתון מזיכרון– BIU – Bus Interface Unit
יחידה זאת בונה את כתובת גישה לזיכרון , פונה לזיכרון , קוראת את הפקודה ומאחסנת אותה לחוצץ CPUהבאה מהזיכרון לפס נתונים , מעבירה אותה ל-
של).QUEUEבתים - תור פקודות( 6
Code Segment,Data Segment - אוגרי סגמנט 4 כוללת BIUיחידת Stack Segment,Extra Segment ואוגר - Instruction Pointer – 16 (כולם
סיביות)
o – יחידת ביצועEU – Execution Unit0.BIUיחידה זאת לוקחת פקודות מהחוצץ ומבצעת אותן ללא תלות ביחידת
– הפקודה שהוכנסה ראשונה לתור FIFO) עובד בעיקרון של QUEUEהחוצץ ( .EU יוצת ראשונה לביצוע ע"י יחידת BIUהפקודות ע"י יחידת
o-שתי היחידות האלו מפצלות את עומס עבודת הCPU כדי לעלות את מהירותו ואת יעילותו של המעבד.
8086אוסף אוגרים של המעבד
ES 16 bitCS 16 bit
SS 16 bit
DS 16 bit
IP 16 bit
AH 8 bit
BH 8 bit
CH 8 bit
DH 8 bit
AL 8 bit
BL 8 bit
CL 8 bit
DL 8 bit
SP 16 bitBP 16 bitSI 16 bitDI 16 bit
FLAGS 16 bit
AX 16 bitBX 16 bit
CX 16 bit
DX 16 bit
Extra SegmentCode Segment
Stack SegmentData SegmentInstruction Pointer
Accumulator
Base RegisterCount RegisterData RegisterStack PointerBase PointerSource Index RegisterDestination Index Register
EU registers16 bit arithmetic
BIU registers(for 20 bit address
generation)
חלוקת זיכרון למקטעים
FFFFFHSegment Registers
EXTRA
DATA
STACK
CODE
MEMORY
00000H
64K DataSegment
64K Code Segment
CS:0
IP )PC(
SI, BX
SS:0
64K Stack Segment
DS:0
SP
Address DI64K Extra Seg
ES:0
8086אופן גישה לזיכרון ראשי של המעבד
).CD-ROMכל תוכנית באופן קבוע מאוחסנת בזיכרון משני (דיסקט, דיסק קשיח, •בהזמנת תוכנית לביצוע מערכת הפעלה מעתיקה את התוכנית ,שהוזמנה בשמה , •
מזיכרון משני לזיכרון ראשי ומשם התוכנית ניתנת לגישה מצד המעבד. סיביות וכולל 20 ניתן לגישה ע"י פס כתובות בעל 8086זיכרון ראשי של המעבד •
2^20 = 1 Mbyte סיביות כל תא אחד.8 תאים ברוחב סיביות ובעזרת אוגר אחד 16 בעלי רוחב 8086האוגרים הפנימיים של המעבד •
סיביות רוחב.20אי-אפשר לבנות כתובת גישה לזיכרון בעלת בגלל זה הזיכרון הראשי מחולק למקטעים כך שכל תוכנית ,שרצה במעבד , מקבלת•
מקטעים) בהם מאוחסנים: 4מספר מוגבל של המקטעים (עד , Data Segment or Extra Segment-ב- , נתוניםCode Segmentתוכנה – ב-
. Stack Segmentמחסנית – ב-מערכת הפעלה מנהלת את הזיכרון וממקמת את כל התוכניות שעולות לביצוע •
) בהתאם.CS, DS, SS, ESבסגמנטים משלהם וטוענת את אוגרי המקטעים ( כל תוכנית שרצה יכולה להשתמש אך ורק בתאי הזיכרון שבתוך המקטעים ולגשת•
סיביות בלבד)16אליהם ע"י אוגרי הצבעה פנימיים של המעבד ( בעלי KBytes 64 = 16^2הגודל המכסימלי של המקטע – •
אופן גישה לזיכרון ע"י שילוב אוגר מקטע ואוגר הצבעה
סיביות20כתובת פיזית וכוללת כתובת מלאה של התא בזיכרון הראשי נקראת • 16בעל הכתובת הזאת נבנה ע"י זוג אוגרים : אוגר מקטע ואוגר הצבעה ,שכל אחד מהם •
סיביות סיביות עליונות של כתובת התחלתית של המקטע נטענת לאוגר מקטע ע"י מערכת 16•
ונקראת הפעלהכתובת התחלתית של המקטע
•CPU 16 מצביע לתוך המקטעים ע"י אוגרי הצבעה וכתובת זאת )בתוך המקטע( בעלת )Effective Addressכתובת אפקטיבית ( או ) Offsetכתובת יחסית ( סיביות נקראת
טוען תוכן של אוגר CPU סיביות משני האוגרים, ה-20כדי לבנות כתובת פיזית בעלת •המקטע לאוגר
הזזה, מזיז אותה בארבע סיביות כלפי שמאל, מחבר אליו תוכן של אוגר ההצבעה ומפיק את תוצאת החיבור לפס כתובות של המערכת
, משייך את אוגרי ההצבעה למקטעים באופן הבא:ברירת מחדל ,באופן CPUה- • : Code Segment מצביע לתוך IP (Instruction Pointer ) or PC ( Program Counter)אוגר ‹
CS:IP Data Segment : DS:SI, DS:DI, DS:BX מצביעים לתוך SI,DI,BXאוגרים ‹Stack Segment : SS:SP, SS:BP מצביעים לתוך SP,BPאוגרים ‹ String - משתמשים במקטע זה רק לפעולות עם מחרוזות – Extra Segmentאין ברירת מחדל ל- ‹
OperationsDS:BP אפשר לשנות את ברירת המחדל ע"י כתיבת זוג אוגרים בפקודה: •
דוגמה לחישוב כתובת פיזית
.
Memory
Segment Register
Offset
Physical orAbsolute Address
0
+
CS:
IP
04000H
0056H
40000H
40056H
04000
0056
040056H
CS:IP = 4000:56Logical Address
0FFFFFH
0H
Programmer’s Model of the 8086 CPU
אופן שימוש באוגרים כלליים
סיביות 16 אוגרים בעלי רוחב 8 כוללת 8086הארכיטקטורה של המעבד הבאות: למתרות כלליות של אחסון נתונים ולמתרות מיוחדות
•AX )accumulator( -- צובר תוצאות של פקודות אריתמטיות•BX )base register( – אוגר הצבעה למקטע הנתונים בזיכרון ראשי –
מחזיק כתובת יחסית של הנתונים •CX )counter( -- משמש כמונה לולאות בפקודהLOOP•DX )data):
לאוגר ‹ )בנוסף הרחבה כאוגר החלק AXמשמש לשמירת אריתמטיות לפעולות ) העליון של התוצאה.
משמש כאוגר אצבעה להתקני קלט/פלט – מחזיק כתובת גישה להתקני קלט/פלט‹•SI & DI )Source Index & Destination Index):
אוגר הצבעה למקטע הנתונים בזיכרון ראשי ‹אוגרי הצבעה למחרוזות‹
•SP )stack pointer(-- אוגר הצבעה לראש המחסנית, משתנה אוטומטית עקב (לא מומלץ לטעון או לשנות אותו ידניתפקודות גישה למחסנית )
•BP )base pointer(אוגר הצבעה לתוך המחסנית – מותר לשימוש חופשי --
דירוג של שפות תכנות
שפות תכנות מדורגות בשלוש רמות:•High level language שפת – C# , Visual C ,Visual Basic
השפות האלו לא מתייחסות למבנה פנימי של המעבד אלא להיגיון של המשימה בגדול.
•Low level language - Assembly Languageלמבנה פנימי של המעבד ומפרטת למעבד את כל שלבי ביצוע מתייחסתהשפה זו
של המשימה בהתאם לאוסף פקודות של שפת אסמבלי שמוכר למעבד הזה.
•Machine languageשפת מכונה – לביצוע מוכנה וישר בינארי בקוד למספרים מקודדת התוכנית זאת ע"י בשפה
המעבד.מכובה בשפת לפקודה קומפיילר ע"י מתורגמת אסמבלי שפת של פקודה כל
וכוללת Operation Code – OPCODE שדות הבאות: קידוד של פקודה עצמה שניקרא
) כלפיהם מתבצעת את הפקודהOPERANDSומשתנים ( כל תוכנית שכתובה בשפה עלית או בשפת אסמבלי חייבת לעבור תרגום •
לשפת מכונה.
8086תרגום לשפת מכונה של המעבד
8086 לשפת מכונה של המעבד ASM86תרגום משפת אסמבלי •מתבצעת בשני שלבים :
לזיהוי טעויותListing עם יצירת קובץ TASM Compilerתרגום עצמו ע"י ‹TLINK TASM Linker - וקישור בין חלקי התוכנית ע"י ‹
• TASM/l My_Prog.ASM My_Prog.OBJ , My_Prog.LST • TLINK My_Prog.OBJ My_Prog.EXE
My_Prog.EXE – Executable File
High-levellanguageprogram
Assemblylanguageprogram
Machinelanguageprogram
Compiler Assembler
שיטות מיעון• Register -אוגר - MOV DX,AX
• Immediate - - מיידיMOV DX,20 ; אופרנט המקור הוא מספר
• Direct – ישיר - TWENTY DW 20h ; גישה לנתון לפי כתובתו MOV DX,TWENTY ; DX 0020h
• Register Indirect - עקיף -MOV DX,[SI] ; גישה לנתון בעזרת אוגרהצבעה
oהכתובת יחסית של התא במקטע בזיכרון הראשי הצבעה זהו ערך באוגרoסוגריים מרובעות [ ] מסמנות מעון עקיף o בברירת מחדל האוגריםBX, DI, SI -מצביעים לתוך ה Data Segment בזוג עם האוגר DSo בברירת מחדל האוגרBP-מצביע לתוך ה Stack Segment בזוג עם האוגר SSo אפשר לשנות את ברירת המחדל ע"י כתיבת זוג בפקודהES:BX; SS:SI
MOV DX,[SS: SI]
• Based Indexed - MOV AX, [BX+DI] גישה לנתון בעזרת זוג אוגרי ; הצבעה
Pair of registers for use: BX+DI; BX+SI; BP+DI; BP+SI
• Based Indexed Plus Displacement - MOV AL, [BP+SI+DISP]
גישה לנתון בעזרת זוג אוגרי הצבעה ועוד היסט מספרי
Data Transfer Instructions
• MOV target, source› reg, reg› mem, reg› reg, mem› mem, immed› reg, immed
שני אופרנטים חייבים להיות באותו גודל•אופרנט המקור יכול להיות :אוגר, תא בזיכרון או קבוע )מספר(•אופרנט המקור יכול להיות :אוגר או תא בזיכרון•אי-אפשר להעביר נתון מתא בזיכרון לתא בזיכרון באופן ישיר•
Data Transfer Instructions – Examples
• MOV Data,67h• MOV AX, [BX]• MOV BX,CS:Data+4• MOV AX,[SS:SI]• MOV AX, [BX+SI+7]• MOV AX,[BP+SI+2]• MOV AX,BL – Impossible• MOV Data1, Data2 – Impossible
פקודות קפיצה עם תנאי
• JE / JZ Jump equal or jump zero Z=1• JNE / JNZ Jump not equal or jump not zero Z=0
Jump Based on Unsigned Data• JA / JNBE Jump above or jump not below/ equal C=0 & Z=0• JAE / JNB Jump above/ equal or jump not below C=0• JB / JNAE Jump below or jump not above/ equal C=1• JBE / JNA Jump below/ equal or jump not above C=1 or Z=1•
Jump Based on Signed Data • JG / JNLE Jump greater or jump not less/ equal S=0 & Z=0• JGE / JNL Jump greater/ equal or jump not less S=0• JL / JNGE Jump less or jump not greater/ equal S=1• JLE / JNG Jump less/ equal or jump not greater S=1 or Z=1
דוגמה של תוכנית פשוטה בשפת אסמבלי : מילוי זיכרון ”A “בנתון
SSeg SEGMENT STACK ; Open the Stack Segment DW 50 DUP (?) ; The Stack Size Is 50
WordsSSeg ENDS ; Close the Stack SegmentDSeg SEGMENT ; Open the Data Segment block DB 100 DUP (0) ; Block for Filling bl_length DW 50 ; Number of Data for FillingDSeg ENDS ; Close the Data SegmentCSeg SEGMENT ; Open the Code SegmentASSUME CS: CSeg, DS: DSeg,SS:SSeg main: MOV AX, DSeg MOV DS,AX MOV DI, OFFSET block MOV AL,’A’ MOV CX, bl_lengthnext: MOV [DI],AL INC DI LOOP next INT 3CSeg ENDS ; Close the Code Segment
END main ; End the Program Code
הייצוג תוכנית בזיכרון ראשי
• Code segment )CS(, which defines the main program or instructions.
• Data segment )DS(, which defines the data you used.
• Stack segment )SS(, which defines the stack.
CS
DS
SS
0100:0000
1750:0000
3230:0000
Address
Directivesהנחיות של שפת אסמבלי -
הנחיות הן לא פקודות לביצוע ע"י המעבד אלא קובעות לקומפיילר
איך לתרגם את התוכנית ואיך לארגן את הזיכרון
• SEGMENTפותח את המקטע ומגדיר את סוגו -- • ENDSסגירת המקטע – • ORGקובע מיקום יחסי של נתון או פקודה בתוך המקטע – • ASSUME משייך את שמו המקטע לאוגר המקטע המתאים – • DB - Define byte הגדרת נתון בגודל - byte• DW - Define wordהגדרת נתון בגודל - word• DD – Define double word - הגדרת נתון בגודל wordכפול • EQU) הגדרת קבוע - Constant ( - מסמן את המקום הנוכחי (כתובת ) בשלב הקומפילציה$ •
x x x x OF DF IF TF SF ZF x AF x PF x CF
0158086אוגר דגלים של המעבד
) שהוא אוסף של Flag Register כולל אוגר דגלים ( EUיחידת ביצוע דגלי מצב וסיביות בקרה.
דגלי מצב מושפעים מפקודות אריתמטיות או פקודות השווה ומזהים את מצבו הנוכחי של המעבד •סיביות בקרה קובעות למעבד את אופן עבודתו•
› -CF Carry Flag- Bit 0 -אם יש גלישה מגודל האוגר1עולה ל › -PF Parity Flag- Bit 2 -אם תוכן של האוגר 1 עולה ל ALזוגי - › -AF Auxiliary Carry Flag- Bit 4 -אם יש גלישה מ-1עולה ל format BCD › -ZF Zero Flag- Bit 6 -0 אם תוצאת הפעולה האריתמטית או הלוגית האחרונה היא 1עולה ל. › -SF Sign Flag- Bit 7 ( מזהה סימן – ערכו כערכה של הסיבית השמאלית MSB של התוצאה )
בפעולות חיבור/חיסור ובפעולות לוגיות.› -TF Single Step Trap Flag- Bit 8 סיבית בקרה – מאפשר ביצוע תוכנית בשלבים › -IF Interrupt Enable Flag- Bit 9 סיבית בקרה – מאפשר קבלת בקשות פסיקה מהחומרה
החיצונית› -DF String Instruction Direction Flag- Bit 10 סיבית בקרה – קובעת כיוון סריקת הזיכרון
בפעולות עם מחרוזות› -OF Overflow Flag- Bit 11 -אם יש גלישה בפעולות אריתמטיות עם מספרים 1עולה ל
מסומנים›Bits 1, 3, 5, 12-15לא מוגדרות –
ZERO FLAG- דגל האפס1דוגמאות לפעולות שאחריהן דגל האפס יקבל את נערך " ":
:כאשר אנו כותבים את הפקודותDEC CXJZ FINISH
בודקת את מצב הדגל, ועפ"י מצבו מחליטה אם לקפוץ .JZ אנו למעשה נעזרים בדגל האפס,הפקודה
דוגמא נוספת:CMP DL,4JE GOOD
MOV AL,4
SUB AL,4
MOV CL,0FFH
ADD CL,1
0FFH ( לאחר1הוא למעשה )- .0 התשובה היא 1הוספת
תוצאת השוואה משנה את " 1הדגלים, דגל האפס יעלה ל- "
.,מכיוון שקיים שיוויון
MOV DH,5
CMP DH,5
1באלו מהמקרים הבאים דגל הסימן יעלה ל-" "?
1. MOV DL,0
2. MOV AL,5SUB AL,5
3. MOV AL,0FFHADD AL,1
4. MOV CX,36HCMP CX,’6’
5. MOV AH,-2CMP AH,0FEH
CARRY FLAGדגל הנשא – 1דוגמאות לפעולות שאחריהן דגל הנשא יקבל את נערך " ":
1111 1111
0001 00000000 0000 1 דגל הנשא
+
OVERFLOW FLAGדגל הגלישה – mov cl,7fh
add cl,5
84שהוא תוצאת , H את הערך CLהפקודה מציבה באוגר
החיבור, למרות שהמספר יכול להיות מוכל באוגר התבצע גלישה , מכיוון שהוספנו למספר חיובי מספר והתקבלה תשובה שלילית.
mov ah,0ffh
add ah,3
FFH
2 , הערך 2 התשובה היא 3-( ולכן כאשר מוסיפים לו 1שווה בערכו ) מיוצג ולכן דגל הגלישה יהיה 0 לוגי יכול להיות
MOV DL,81H
SUB DL,3
827 נקבל )3אם נפחית ממנו -( . FH 81הוא הערך השלילי של H
לא ניתן להציג ערך כזה באוגרDL.ולכן תהיה גלישה
• AND - Logical And• Usage: AND dest,src dest=dest)and(src• Modifies flags: CF OF PF SF ZF )AF undefined(• Operands • reg,reg • mem,reg • reg,mem • reg,immed • mem,immed • accum,immed • • OR - Inclusive Logical OR• Usage: OR dest,src dest=dest)or(src• Modifies flags: CF OF PF SF ZF )AF undefined(• Operands • reg,reg • mem,reg • reg,mem • reg,immed • mem8,immed8 • mem16,immed16 • accum,immed
• XOR - Exclusive OR• Usage: XOR dest,src dest=dest)xor(src• Modifies flags: CF OF PF SF ZF )AF undefined(• Operands • reg,reg • mem,reg • reg,mem • reg,immed • mem,immed • accum,immed • • NOT - One's Compliment Negation )Logical NOT(• Usage: NOT dest• Modifies flags: None• Inverts the bits of the "dest" operand forming the 1s complement.• Operands • reg • mem
• NEG - Two's Complement Negation• Usage: NEG dest• Modifies flags: AF CF OF PF SF ZF• 2מבצע משלים ל- • Operands • reg • mem • • TEST - Test For Bit Pattern• Usage: TEST dest,src• Modifies flags: CF OF PF SF ZF )AF undefined(• אך לא שומרת את הפתרון אלא מעדכנת דגלים בלבד. AND -פקודה זו מבצעת את פעולת ה
.נעדיף להשתמש בפקודה זו לבדיקה של סיבית מסוימת• Operands • reg,reg • reg,mem • mem,reg • reg,immed • mem,immed • accum,immed
4F0H באוגר 1קטע תוכנית הבודקת את הנתון בכתובת בכתובת. אם המספר שלילי יוצב CX באוגר 0 . אם המספר חיובי יוצב CX. • MOV CX,0• TEST BYTE PTR DS:[4F0H],80H• JZ POSITIVE• MOV CX,1• POSITIVE: NOP
הנחית של שפת אסמבלי להגדרת נתונים
של • באזור המקרים ברוב שמורים תוכנית של Dataנתונים Segment :ומוגדרים בצורה הבאה
•<variable name< DB | DW | DD <value<• V1 DB 25h• V2 DW 28A5h• V3 DB 11001010b
מערך נתונים מוגדר בצורה הבאה:•<arrayname< DB | DW <size<dup (<element<) • Array DB 10 dup(?)<arrayname< DB | DW value1, value2, value3• Integers DB 0, 1, 2, 3, 4
מוגדר בצורה הבאהASCIIמחרוזת נתונים בקוד •• <stringname< DB ‘<string<$’
• String DB “HELLO$”
אופן שמירת נתונים בזיכרון ראשי
•Word, Double word שמורים בזיכרון בסדר -הפוך
Directive
Data1 DW 35DAh
Data2 DW 256
Data3 DD 1234567H
Bytes in Storage
00000
FFFFFh
Data1
Data2
Data3
DAh
35h
00
01h
67h
45h
23h
01h
Constantsהגדרת קבועים -
• name EQU expression בהמשך התוכניתללא שינויהגדרת קבוע
sample EQU 7Fh ; ערך מספרי message EQU <This is a message> ; מחרוזת
• Name = expression בהמשך התוכנית – ערך מספרי עם שינויהגדרת קבוע
בלבדmax_int = 7FFFhcount = 1count = count * 2
Basic structure of Code Segment
•Code Segment -מקטע שכולל תוכנית מקודדת לביצוע המשימה ע"י המעבד 8086 זוהי אוסף פקודות שמוכרות למעבד ASM86תוכנית בשפת אסמבלי •כל פקודה בנויה לפי תבנית הבאה:•
<Label>:<Mnemonic> <Destination_Operand,Source_Operand> ; <Comment>
•>label name< -תווים , לא מתחיל מספרה , לא מילה שמורה31 - תווית - שם סימבולי קטן מ
•>Mnemonic< 8086 - שם הפקודה מאוסף , מוכר למעבד
•>Destination_Operand,Source_Operand< - שני אופרנטים שמשתתפים בפקודהלאופרנט היעד העברת הנתון תמיד מתבצעת מאופרנט המקור‹בפעולות אריתמטיות/לוגיות תוצאה תמיד נכנסת לאופרנט היעד‹
•>Comment< - טקסט שמלווה את הפקודה אלמנת להסביר תוכנית
• L1: MOV Data_Addr ,86h ;Load number 86h to Data_Addr in Main Memory
הגדרת תת-שיגרה
<procedure name> PROC {FAR | NEAR}
: : ;***your )main/ sub( program here***
<procedure name> ENDP•<procedure name<חייב להיות מיוחד - •PROCהנחיה לקומפיילר להתחיל תת-שיגרה - •ENDPהנחיה לקומפיילר לסיים תת-שיגרה - •Far-תת-שיגרה נקראת מחוץ ל – Code Segment הנוכחי •Near תת-שיגרה נקראת אותו - Code Segment הנוכחי
Main Program
Proc1 Proc2 Proc3
Segmentation Example: MOV AX,[BX]
MOV Instruction ⇒ DSEffective Address = BXLogical Address = DS:BX = 2100:0123
Segmentation Example: MOV AX,[BX+SI+7]
Segmentation Example: MOV AX,[BP+SI+2]
Change data size operator - ptr
<type< PTR <expression< Operator ptr for change data size definition )from double word to byte or to word for example(
Data DW 1234H
MOV byte ptr Data,55h ; [Data] 1255hMOV AL, byte ptr Data+1 ; AL12h
פקודת החלפה
• XCHG target, source› reg, reg› reg, mem› mem, regFor example:
DATA DW 20
• XCHG BL, AH• XCHG DATA, AX
אי-אפשר לבצע את XCHG ו- MOVבפקודות •העברת הנתונים בין שני תאי זיכרון
Address Loading Instructions•LEA <reg16>, <EA< ; טעינת כתובת יחסית של הנתון במקטע נתונים לאוגר
הצבעה•MOV <reg16>, offset<data< טעינת כתובת יחסית של הנתון במקטע נתונים ;
לאוגר הצבעה•LDS < reg16>,<Mem32< סיביות ובנוסף אוגר 16; טעינת אוגר הצבעה בעל
בנתון ששמור בזיכרון כדי להכין כתובת DS מקטע חדשה מלאה
LES < reg16>,<Mem32< ; סיביות ובנוסף אוגר 16טעינת אוגר הצבעה בעל בנתון ששמור בזיכרון כדי להכין כתובת ES מקטע
חדשה מלאהDSEG SEGMENT
ORG 10H Data DD 12345670H
------› LDS SI, Data ;SI <= 5670H, DS <=1234H› LEA DI,Data ;DI <=10H offset of Data from Data Segment
Beginning› MOV DI, offset Data ; the same operation
אופן הגדרת המחסנית בתוכנית
זמני בשלושה • באופן נתונים לשמירת ראשי שמיועדת מזיכרון חלק היא מחסנית מקרים:
PUSHביצוע פקודות שמירה - ‹ procedure callקריאה לתת-שגרות - ‹interrupt executionביצוע פסיקות - ‹
הגדרת גודל המחסנית מתבצעת בהנחיה הבאה:•DW <size of stack< dup)<initial value<(
לדוגמה:Stack_Seg SEGMENT STACK
DW 100h dup(0) Stack_Seg ENDS
המחסנית נוצרת בזמן שהתוכנית עולה לביצוע לזיכרון הראשי••Stack segment register )SS( מקבל ערך התחלתי ממערכת הפעלה - •Stack pointer )SP( המחסנית להגדרת בהתאם המחסנית ראש את קובע -
(SP200h) byte אי-אפשר לשמור נתונים בגודל , word מוגדר כ- 8086רוחב המחסנית במעבד •SP,BP :שני אוגרים מצבעים באופן ברירת מחדל לתוך המחסנית•
מושפע מכל פעולת גישה למחסנית באופן אוטומטיSPאוגר ‹ ניתן להצבעה חופשית בתוך המחסניתBPאוגר ‹
Push,Pop אופן גישה למחסנית עם פקודות
Main Memory
SP=200h
SS
Push Direction
top of stack
00000
FFFFEh
16 bit
Pop Direction
00001
FFFFFh פקודה Pushמאחסנת נתון במחסנית :הפקודה מתבצעת בשני שלבים
SP SP - 2א.SS:SP[ data [ב.
הוצא נתון במחסניתPopפקודה • הפקודה מתבצעת בשני שלבים:•
SS:SP[ data [א.• SP SP + 2ב. •
פקודות קלט/פלט
כל התקן קלט/פלט מחובר למערכת המיקרופרוססור דרך פורטים בעלי כתובת גישה• אבל מנוצלים הרבה פחות כתובות - FFFFh 0000מסוים. סך הכול מרחב כתובות הוא
תלוי במבנה המערכת
• IN AL, IN_PORT ; סיביות8 סיביות מפורט כניסה בכתובת בעלת 8קליטת נתון בעל • IN AX, IN_PORT ; סיביות8 סיביות מפורט כניסה בכתובת בעלת 16קליטת נתון בעל • MOV DX, IN_PORT ; סיביות16בכתובת גישה לפורט אם הכתובת בעלת DX טעינת אוגר• IN AL, DX סיביות16 סיביות מפורט כניסה בכתובת בעלת 8קליטת נתון בעל ;• IN AX, DX סיביות16 סיביות מפורט כניסה בכתובת בעלת 16קליטת נתון בעל ; • OUT IN_PORT, AL ; סיביות8 סיביות מפורט כניסה בכתובת בעלת 8פליטת נתון בעל • OUT IN_PORT, AX ; סיביות8 סיביות מפורט כניסה בכתובת בעלת 16פליטת נתון בעל • MOV DX,OUT_PORT ; סיביות16בכתובת גישה לפורט אם הכתובת בעלת DX טעינת אוגר• OUT DX, AL ; סיביות16 סיביות מפורט כניסה בכתובת בעלת 8פליטת נתון בעל • OUT DX, AX ; סיביות16 סיביות מפורט כניסה בכתובת בעלת 16פליטת נתון בעל
)Additionפקודות אריתמטיות – חיבור(
ADD dest, source ; חיבור בין שני נתונים ADC dest, source ; חיבור בין שני נתונים ועוד סיבית הנשא INC dest ; לתוכן האוגר או תא בזיכרון1הוספת DAA ; Decimal adjust for addition
Package BCD )הפקודה מתקנת את תוצאת החיבור בין שני מספרים בצופן בלבדALהפקודה מתבצעת כלפי אוגר ( .Package BCDלצופן
AAA ; ASCII adjust for addition לצופן ASCII)הפקודה מתקנת את תוצאת החיבור בין שני מספרים בצופן
Un-package BCD ) הפקודה מתלעת כלפי אוגרALבלבד
Addition Example for Package BCD data
Data 1 DB 52H ;Data 2 DB 89H ; Result DW 0 ; 0141H………………………….. 52HMOV AL, Data1 + 89H ADD AL, Data2 EBhDAA + )6()6( MOV byte ptr RESULT,AL 0141HADC byte ptr RESULT+1,0
Addition Example for ASCII data
Data 1 DB ‘8’ ;38H Data 2 DB ‘7’ ;37HResult DW 0 ; ’17’ = 3135H…………………………..MOV AL, Data1 38HADD AL, Data2 +37H
6FhAAA ; AX 0105HADD AX,3030h ; AX 3135H )’15’(MOV RESULT,AX
Addition Example – Sum of Block
BLOCK DW 8H, 407H, 1054H, 8DH, 4AC2HOREH DW 5RESULT DD 0-------------------------------------------------------------------
LEA SI, BLOCK MOV CX,OREHNEXT: MOV AX, [SI] ADD WORD PTR RESULT,AX ADC WORD PTR RESULT+2,0 INC SI INC SI LOOP NEXT
)Subtractionפקודות אריתמטיות – חיסור(
• SUB dest, source חיסור בין שני נתונים ;• SBB dest, source חיסור בין שני נתונים עם מלווה ;• DEC dest מתוכן האוגר או תא בזיכרון1החסר ;• DAS ;Decimal adjust for subtract
)הפקודה מתקנת את תוצאת החיבור בין שני (BCD לצופן BCDמספרים בצופן
בלבדALהפקודה מתבצעת כלפי אוגר • AAS ;ASCII adjust for subtract
)הפקודה מתקנת את תוצאת החיבור בין שני (Un-package BCD לצופן ASCII מספרים בצופן
בלבדALהפקודה מתלעת כלפי אוגר • NEG dest ;dest<= - dest• CMP dest, source השווה בין המקור לבין היעד ללא שינוי ;
היעד הפקודה מעדכנת דגלים בהתאם לתוצאת ההשוואה
שני האופרנטים חייבים להיות באותו גודל
MUL andפקודות אריתמטיות – כפל וחילוק (DIV(
• MUL {<register> | <memory>}; כפל בין שני מספרים לא מסומנים
• IMUL {<register> | <memory>}; -כפל בין שני מספרים מסומנים 2בשיטה משלים ל AX <= AL * source )source = 8 bit(
DX:AX <= AX * source )source = 16 bit(• DIV {<register> | <memory>} ; חילוק בין שני מספרים לא מסומנים • IDIV {<register> | <memory>} ; חילוק בין שני מספרים מסומנים בשיטה משלים
2ל- AL< = חלק שלם )AX / source( , AH<=שארית; source = 8 bit
AX = חלק שלם ) DX:AX / source(, DX <= שארית; source = 16 bit• AAM ; Adjust AL for multiplication –
בלבד (ALכלפי אוגר אחרי הכפל )Un-package BCD המרת מספר בינארי לצופן • AAD ;Adjust AX for division
בלבד (ALכלפי אוגר למספר בינארי לפני החילוק )Un-package BCD המרת מספר בצופן
• CBW ; convert byte to word for signed division• CWD ; convert word to double word for signed division
MUL andפקודות אריתמטיות – כפל וחילוק (DIV(
• 1מכפיל הפקודה תוצאה 2מכפיל
• MUL CL ; CL (byte) * AL => AX• MUL BX ; BX (word) * AX => DX : AX
• ארית חלק שלם מחבה מונה הפקודה
• DIV CL ; AX / CL (byte) => AL AH• DIV BX ; DX: AX / BX (word)=> AX DX
פקודות קפיצה
• Unconditional Jump Instruction
• JMP {<address> | <label> | <register>} o Long Jump in Code Segment– במקטע שהוא כל למקום ערוכה קפיצה
פקודות
• Conditional Jump Instruction
• JXX {<address> | <label>}o Short Jump Instructions – + בתים ממקום 128 -127קפיצה קצרה להיסט
הפקודה
2פקודות קפיצה עם תנאי -
Arithmetic Jump
• JS Jump sign S=1• JNS Jump no sign S=0• JC Jump carry C=1• JNC Jump no carry C=0• JO Jump overflow O=1• JNO Jump not overflow O=0• JP / JPE Jump parity even P=1• JNP / JPO Jump parity oddP=0• LOOP <label<• The LOOP instruction, which serves the above purpose,
requires an initial value in the CX register. It will decrement the CX register and branches to the target location if the CX register does not contain 0.
Push,Popפקודות גישה למחסנית –
MAIN MEMORY
SP<=top of stack
1234h
SS
Push Direction
next elementto be pushed
00000
FFFFE h
16 bit
5679h
LSBMSB
00001
Pop DirectionFFFFF h
12 34
56 79Mov AX,1234hMov BX,5679hPush AXPush BX
קריאה לתת-שיגרה
• CALL <label>• RET <immediate>• <procedure name< PROC {FAR | NEAR}• : : ***your )main/ sub( program here***
» RET (RET n)• <procedure name< ENDP
• The CALL instructions take the same forms as the JMP instructions • The return RET instruction returns control to the caller of a
subroutine. It does so by popping the return address off the stack and transferring control to the instruction at the return address. Near call returns pop a 16-bit return address off the stack into the IP register. A far call returns pop a 16-bit offset into the IP register and a 16-bit segment value into the CS register.
CALL procedure
• The FAR CALL instruction does the following:• .Pushes the CS register onto the stack.• .Pushes the 16-bit offset of the next instruction following the
call onto the stack.• .Copies the 32-bit effective address into the CS:IP register.• .Execution continues at the first instruction of the subroutine.
• The NEAR CALL instruction does the following:• .Pushes the 16-bit offset of the next instruction following the
call onto the stack.• .Copies the 16-bit effective address into the IP register.• .Execution continues at the first instruction of the subroutine.
Simple Logic Function
• . The instructions for Boolean logic are AND, OR, XOR, and NOT. The syntax are:
• AND {register| memory} , {register | memory | immediate}• OR {register| memory} , {register | memory | immediate}• XOR {register | memory} , {register | memory | immediate}• NOT {register | memory}• TEST { register | memory} , {register | memory | immediate}
The TEST Instruction executes the AND Operation without changing the Destination Operand – only sets the Status Flags (Zero Flag)
Rotate & Shift Instructions
• Commands Explanation
• SHL {<register<, <memory<}, {1 | CL} ;Shift Left• SHR {<register<, <memory<}, {1 | CL} ;Shift Right• SAL {<register<, <memory<}, {1 | CL} ;Shift arithmetic left• SAR {<register<, <memory<}, {1 | CL}; Shift arithmetic right• ROL {<register<, <memory<}, {1 | CL};Rotation to left• ROR {<register<, <memory<}, {1 | CL};Rotation to right• RCL {<register<, <memory<}, {1 | CL}; Rotation through
carry bit left• RCR {<register<, <memory<}, {1 | CL};Rotation through
carry bit right
Rotate & Shift Instructions
0C
C
C
C0
C
C
C0
SHL/ SAL SHR
RORROL
RCL RCR
SAR
String Operations• String - Array of characters )byte or word(• DS:SI - Source array• ES:DI - Destination array• DF )Direction Flag( indicates if SI and DI are to be incremented )0( or• decremented )1( after operation• Byte operations increment/decrement by 1; Word - by 2.• CLD/STD - Clear/Set DF flag• MOVSB / MOVSW - Move byte/word at DS:SI location to ES:DI location• LODSB / LODSW - Load AL/AX with byte/word at DS:SI location• STOSB / STOSW - Store byte/word from AL/AX to ES:DI location• CMPSB / CMPSW - Compare the two bytes/words
› Flags are set based on source )DS:SI( minus destination )ES:DI(• SCASB / SCASW - Compare byte/word in AL/AX to that at location ES:DI
Repetitive String OperationsRepeat string operation using CX to indicate how many timesREP xx - where xx is a string operationREPE / REPZ xx - where xx is compare or scan; repeat xx until
CX = 0 or ZF=0 where ZF set by comparison.REPNE / REPNZ xx - where xx is compare or scan; repeat xx until CX = 0 or ZF =1 by comparison
Compare character by character:STRNG1 DB 5 DUP)?(STRNG2 DB 5 DUP)?( MOV CX,5 LEA SI,STRNG1 ;STRNG1 in DS LEA DI,STRNG2 ;STRNG2 in ES REPE CMPSB JE EQL JB NEQLEQL: ... ;What to do if two are equalNEQ ... ;What to do if two are not equal
Interrupt Instruction
• Interrupts execution of a program so that system can take special action.
› INT <interrupt number<• INT instruction calls the system routines and other special
subroutines )make a system call(. The system supports a maximum of 256 different interrupt service routines.
• The CPU provides a 256 entry interrupt vector table beginning at address 0:0 in memory. This is a 1K table containing a 256 4-byte entries. Each entry in this table contains a segmented address that points at the interrupt service routine in memory. Generally, we will refer to interrupts by their interrupt value, so interrupt INT 0 address is at memory location 0:0, interrupt INT 1 address is at address 0:4, etc.
Interrupt Types
• There are 3 Different Types of Interrups:• 1. System Interrupt ) Called by System – Divide 0 for example(• 2. Software Interrupts ) Called by Instruction INT <n< -
BIOS,DOS(• 3. Hardware Interrupt ) Called by Interrupt Request from
External • Source used Interrupt Controller by Intr Pin of the
Microprocessor Chip(
• The CLI )clear Interrupt Flag( instruction tells the assembler to prevent any hardware interrupt from this point
• The STI )set Interrupt Flag( instruction allows any hardware interrupt raised
Interrupt Execution
When an interrupt occurs, the CPU does the following:
• 1. The CPU pushes the flags register onto the stack.• 2. The CPU pushes a far return address )CS:IP( onto the stack,• segment value first.• 3. The CPU determines the interrupt number and fetches • four-byte interrupt vector from the correspondence address.• 4. The CPU transfers control to the routine specified by• the interrupt vector table entry. After the completion of the steps, the interrupt service routine takes control. When the interrupt service routine wants to return the control, it must execute an IRET (interrupt return) instruction. The interrupt return, similar as RET instruction, pops the far return address and the flags off the stack
Writing the Interrupt Service Routine - ISR
• The ISR has a very special restriction: they must preserve the state of the CPU. In particular, these ISRs must preserve all registers they modify. For example,
• SimpleISR PROC FAR
• PUSH AX
• MOV AX, 0
• …
• …
• POP AX
• IRET
• SimpleISR ENDP
BIOS Interrupts BIOS interrupt: it uses the INT instruction to transfer the control directly to BIOS.
• BIOS Interrupts service the simply IO Operations:› Video Display Services -- INT 10h› Serial Port )COM( Services -- INT 14h› Keyboard Read Services – INT 16h› Timer and Real-Time Clock Services – 1Ah
• Every Type) <n< ( of BIOS Interrupts provides the set of the Functions for different IO operations.• The service number of the Function loaded to AH register for operation’s
definition• There are numbers of the functions which needed the Input Parameters
load to Processor Registers • There are numbers of the functions which return the Output Parameters
to Processor Registers • There are numbers of the functions which needed the Input Parameters
and return the Output Parameters
BIOS interrupt for Video Display - INT 10h
Service No. Explanation 00h Set video mode 02h Set cursor position 06h Scroll window up 08h Read character and attribute at cursor position 09h Write character and attribute at cursor position 0Ch Write pixel 0Fh Get video mode
•some service for screen handling, with different service number
Text mode video
BIOS Interrupt Example• Screen Window Creating ,Coloring and Scrolling using BIOS
interrupt INT 10h Service 06h
Registers Input Parameter -Purpose Initial Value
AH Interrupt Service Code 06h
AL Number of lines scrolled up 00 for full screen, other constant for number of lines
BH Specify the color See below
CH Starting row Any value )Suggestion: 00 for full screen(
CL Starting column Any value )Suggestion: 00 for full screen(
DH Ending row Any value )Suggestion: 18h for full screen(
DL Ending column Any value )Suggestion: 4Fh for full screen (
I
7 6 5 4 3 2 1 0
blinking bit
Background color bits
Foreground color bits
r g b r g br - redg - greenb – blueI - intencityB - blinking
B
Internal structure for color definition - VGA Attribute Byte
BIOS Interrupt Example
• This example would create a window at the center of the • screen with its own parameters • WINDOW PROC NEAR
MOV AH, 06hMOV AL, 00hMOV BH, 01000001b ;red/blueMOV CX, 0A1Ch ;top coordinatesMOV DX, 0E34h ;lower
coordinatesINT 10hRET
WINDOW ENDP
DOS Interrupt - INT 21h• DOS interrupt: it uses the INT instruction to transfer the control
directly to DOS. As DOS is portable to any PC machine, DOS interrupt can be used in any I/O devices.
• Interrupt 21h provides some service for keyboard and screen handling, with different service number.
• For Example:
Service No. Explanation 01h Keyboard input with echo 02h Display output 07h Keyboard input without echo )no check for Ctrl-C( 08h Keyboard input without echo )check for Ctrl-C( 09h Display string 0Ah Receive String from Keyboard 4Ch Terminate program – Return to DOS
DOS Interrupt Examples• Read a character from keyboard buffer & display the char on screen:
› MOV AH, 01h› INT 21h› AL<= ASCII Code of the pressed Key (Output Parameter(
• Input a String from keyboard & display the string on screen:
DATA_SEG SEGMENTNAMESTRING DB 10, ?, 10 dup (?)DATA_SEG ENDSCODE_SEG SEGMENT
ASSUME CS: CODE_SEG, DS: DATA_SEGMOV AH, 0Ah
LEA DX, NAMESTRING INT 21h CODE_SEG ENDS
NAMESTRING[0] – Input Parameter – Max Number of The Characters in the String
NAMESTRING[1] – Output Parameter – Real Number or The Characters was pressed
NAMESTRING[2] – String Buffer Beginning for input string saving
של תוויםASCIIטבלת
• CR = “carriage return” (Windows: move to beginning of line)• LF = “line feed” (Windows: move directly one line below)• SPC = “blank space”
BCDהצגת מספרים עשרוניים בקוד
•BCD format ) סיביות בינאריות4 ) מוצגת ע"י 9 – 0 – כל ספרה עשרונית
•Unpackaged BCD format - ) 1 ) מוצגת ע"י 9..0כל ספרה עשרונית byte
5 <= 00000101b 58 <= 00000101 00001000b
•Packaged BCD format - 1ספרות עשרונית מוצגות ע"י שתי byte
58 <= 0101 1000b
Unpackaged BCD formatהמרת נתון שהוא ספרה עשרונית מ- •ASCII formatל-
5 <= 00110000b+00000101b =00110101b = 35h=‘5’
8086 CPU Block Diagram
AHAL
BHBL
CHCL
DHDL
SP
BP
SI
DI
ES – Extra Segment
CS – Code Segment
SS – Stack Segment
DS – Data Segment
IP –Instruction Pointer
6
5
4
3
2
1
ARITHMETIC – LOGIC UNIT
OPERANDS
FLAG REGISTER
+
Instruction Stream Byte
Queue
BIU – BusInterface Unit
EU Execution Unit
I/0 AND MAIN MEMORY INTERFACE
INTERNAL BUS
OPCODE DECODER
+
Addr generationBus Controller