מבנה המחשב ושפות סף תרגול 2.

Slides:



Advertisements
Similar presentations
תרגול 4 Assembly. – 2 – text binary Compiler ( gcc -S ) Assembler ( gcc or as ) Linker ( gcc or ld ) C program ( p1.c p2.c ) Asm program ( p1.s p2.s )
Advertisements

NEG Instruction Change operand content into two’s complement (negative value) and stored back into its operand mov bl, b neg bl; bl = mov.
Department of Computer Science and Software Engineering
ACOE2511 Assembly Language Arithmetic and Logic Instructions.
ADD Instruction ADD destination,source ADD AX,BX ADD SUM,EAX
Gursharan Singh Tatla 21-Nov-20101www.eazynotes.com.
8086 : INSTRUCTION SET By, Pramod Sunagar Assistant Professor
8-1 ECE 424 Design of Microprocessor-Based Systems Haibo Wang ECE Department Southern Illinois University Carbondale, IL x86 Instructions Part.
Assembly Language for Intel-Based Computers
9-1 ECE 424 Design of Microprocessor-Based Systems Haibo Wang ECE Department Southern Illinois University Carbondale, IL x86 Instructions Part.
Shift and Rotate Instructions
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Microcomputer & Interfacing Lecture 3
Integer Arithmetic COE 205 Computer Organization and Assembly Language
COSC 456 Lesson 8 Cool Codes ADD AL,SIAL AL + SI ADD AL,[SI]AL AL + [SI] INC BXBX BX + 1 INC [BX]Ambiguity error INC BYTE PTR [BX][BX] [BX] + 1 INC WORD.
11.1/36 Repeat: From Bits and Pieces Till Strings.
Arithmetic Flags and Instructions
Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 4 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
Integer Arithmetic Computer Organization and Assembly Languages Yung-Yu Chuang 2007/12/24 with slides by Kip Irvine.
ICS312 Lecture13 String Instructions.
Processing String Data and Binary Data (continue)
8086 μP Instruction Set.
LEA instruction The LEA instruction can be used to get the offset address of a variable Example ORG 100h MOV AL, VAR1 ; check value of VAR1 by moving it.
Irvine, Kip R. Assembly Language for Intel-Based Computers. Chapter 7: Integer Arithmetic Slides to Accompany Assembly Language for Intel-Based Computers,
Assembling and Linking An assembly language program is turned into an executable file in two steps Assembling turns the source code into object code (.obj.
COMP 2003: Assembly Language and Digital Logic Chapter 2: Flags and Instructions Notes by Neil Dickson.
Assembly Language Wei Gao. Assembler language Instructions.
K.K. Leung Fall 2008Introductory Pentium Programming1 Pentium Architecture: Introductory Programming Kin K. Leung
Multiplication and Division instructions Dr.Hadi AL Saadi.
Introduction to assembly programmıng language
Chapter Nov-2010
Data Transfers, Addressing, and Arithmetic
Computer Architecture and Assembly Language
16.317: Microprocessor System Design I
Practical Session 2.
Today we are going to discuss about,
Instruction Set of 8086 Microprocessor
Microprocessor Systems Design I
Instruksi Set Prosesor 8088
Chapter 4 Data Movement Instructions
EE3541 Introduction to Microprocessors
EE3541 Introduction to Microprocessors
INSTRUCTION SET.
Assembly IA-32.
INSTRUCTION SET.
Assembly Language Programming Part 2
Microprocessor & Interfacing
4.2 Arithmetic Instructions
INSTRUCTION SET OF 8086 PAWAN KUMAR SINGH.
اصول اساسی برنامه نویسی به زبان اسمبلی
CS 301 Fall 2002 Assembly Instructions
X86’s instruction sets.
Chapter 4: Instructions
SQL בסיסי – הגדרה אינדוקטיבית
فصل پنجم انشعاب و حلقه.
ارايه دهنده : حسن عسكرزاده
اصول اساسی برنامه نویسی به زبان اسمبلی
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
ADDITION Register Addition. ADD AX,BX AX=AX+BX 2. Immediate Addition.
Assembly Language for Intel-Based Computers, 4th Edition
UNIT-I : 8086 ARCHITECTURE Contents Functional Diagram
X86 Assembly Review.
Chapter 5 Arithmetic and Logic Instructions
UNIT-II Assembly Language Programs Involving Logical
CNET 315 Microprocessor & Assembly Language
Computer Architecture and Assembly Language
UNIT-II ADDRESSING MODES & Instruction set
Presentation transcript:

מבנה המחשב ושפות סף תרגול 2

הפקודה MOV מבנה הפקודה: MOV אופרנד מקור , אופרנד יעד העברת תוכן אופרנד המקור לאופרנד היעד. רק אופרנד היעד משנה את ערכו. אופרנד היעד יכול להיות אוגר או זיכרון. אופרנד המקור יכול להיות אוגר, זיכרון או קבוע. מגבלה: אופרנד היעד והמקור לא יכולים להיות שניהם זיכרון. אופרנד היעד והמקור צריכים להיות באותו גודל. בפקודה זו, אוגרי הסגמנט (CS,DS,SS,ES) יכולים להיות אופרנד המקור, וכולם חוץ מ CS יכולים להיות אופרנד היעד. אופרנד היעד והמקור לא יכולים להיות שניהם אוגרי סגמנט. אופרנד המקור לא יכול להיות קבוע כאשר אופרנד היעד הוא אוגר סגמנט.

הפקודה XCHG מבנה הפקודה: XCHG אופרנד1 , אופרנד2 ערכי שני האופרנדים מתחלפים. אופרנד1 לא יכול להיות קבוע, ואופרנד2 לא יכול להיות קבוע. האופרנדים לא יכולים להיות שניהם זיכרון.

הפקודות PUSH ו POP מבנה פקודת PUSH: PUSH אופרנד דחיפת אופרנד בגודל 16 ביט למחסנית. האופרנד יכול להיות כל אוגר פרט לאוגרים IP ו FLAGS, האופרנד יכול להיות אופרנד זיכרון, ויכול להיות קבוע. מבנה פקודת POP: POP Op16 שליפת אופרנד מהמחסנית והצבתו לתוך Op16. Op16 יכול להיות כל אוגר פרט ל IP, FLAGS וCS , יכול להיות התייחסות לזיכרון 16 ביט. Op16 לא יכול להיות קבוע.

הפקודה PUSHF: דחיפת את אוגר הדגלים לתוך המחסנית. הפקודה POPF: שליפת 16 ביטים מהמחסנית והצבתם בתוך אוגר הדגלים. ב 386 ואילך פקודות הדחיפה למחסנית והשליפה מהמחסנית הן PUSHDF ו POPDF עבור אוגר הדגלים המורחב EFLAGS.

הפקודה ADD מבנה הפקודה: ADD אופרנד1, אופרנד2 יחשב אופרנד1+אופרנד2=אופרנד2. הפקודה ADC היא חיבור עם שארית (carry). הכללים לגבי האופרנדים זהים לכללים בפקודה MOV. דוגמה: נניח שמוגדרים המשתנים הבאים: .DATA Var1 DW 100 Var2 DW 130 Var3 DW ? נחשב Var3 = Var1+Var2: MOV AX,Var1 ADD AX,Var2 MOV Var3,AX

דוגמה נוספת: אם מוגדרים המשתנים: Var4 DD 71234 Var5 DD 45678 חישוב Var4=Var4+Var5 באוגרים 16 ביט של ה-8086: MOX AX , WORD PTR Var5 ADD WORD PTR Var4 , AX MOV AX , WORD PTR Var5+2 ADC WORD PTR Var4+2 , AX

הפקודה SUB מבנה הפקודה: SUB אופרנד1, אופרנד2 יחשב אופרנד1-אופרנד2=אופרנד2 הפקודה SBB היא חיסור עם שארית (borrow). הכללים לגבי האופרנדים זהים לכללים בפקודה MOV. דוגמה: נחשב Var3 = Var1-Var2: MOV AX,Var1 SUB AX,Var2 MOV Var3,AX חישוב Var4=Var4-Var5 באוגרים 16 ביט של ה- 8086: MOV AX,WORD PTR Var5 SUB WORD PTR Var4,AX MOV AX,WORD PTR Var5+2 SBB WORD PTR Var4+2,AX

הפקודות INC, DEC ו NEG מבנה הפקודה INC: INC אופרנד קידום האופרנד ב-1. האופרנד יכול להיות אוגר או זיכרון. מבנה הפקודה DEC: DEC אופרנד הפחתת האופרנד ב-1. מבנה הפקודה NEG: NEG אופרנד היפוך הסימן

הפקודה MUL מבנה: MUL אופרנד כפל מספרים חסרי סימן. הפקודה IMUL מבצעת כפל מספרים בעלי סימן באופן דומה. האופרנד יכול להיות אוגר (בגודל בית 1 או 2) או זיכרון (בית 1 או 2) אם האופרנד הוא בגודל בית 1 אז מתבצע: אופרנד AX = AL * למשל: הפקודה MUL CL תבצע: AX = AL * CL.

אם האופרנד הוא בגודל 2 בתים אז מתבצע: אופרנדDX : AX = AX * למשל: הפקודה MUL CX תבצע: DX : AX = AX * CX AX מקבל את החלק המשמעותי פחות של התוצאה, ו DX מקבל את החלק המשמעותי יותר. אם תוצאת הכפל חורגת מגודל האופרנדים, נראה זאת בדגלים CF ו OF. ב 386 ואילך, עבור אופרנד בגודל 4 בתים אז מתבצע: אופרנדEDX : EAX = EAX * ב- 386 ואילך, פקודת IMUL תומכת גם בפקודת 2 אופרנדים כאשר שניהם יכולים להיות רק אוגרים 32 ביט. למשל: הפקודה IMUL ESI,EDI תבצע: ESI = ESI * EDI. לא ניתן להתמודד עם תוצאת כפל החורגת מגודל האופרנדים המקוריים.

הפקודה DIV מבנה: DIV אופרנד חילוק מספרים חסרי סימן. הפקודה IDIV תבצע חילוק מספרים בעלי סימן. האופרנד יכול להיות אוגר (בגודל בית 1 או 2) או זיכרון (בית 1 או 2) אם האופרנד הוא בגודל בית 1 אז מתבצע: אופרנדAX/ התוצאה ללא שארית תוצב ב AL והשארית ב AH. למשל: MOV AX,1003 MOV BL,4 DIV BL אז AL יהיה 250 ו AH יהיה 3

אם האופרנד הוא בגודל 2 בתים אז מתבצע: אופרנדDX:AX/ התוצאה ללא שארית תוצב ב AX והשארית ב DX. למשל: אם מוגדרים המשתנים: .DATA Var1 DW 5000 Var2 DW 1300 אז כדי לחשב Var1/Var2 נרשום: MOV AX,Var1 MOV DX,0 DIV Var2 הערך של AX יהיה 3 והערך של DX יהיה 100.

כאשר מחלקים מספרים באותו גודל ע"י DIV יש לאפס את AH כאשר המספרים בגודל 8 ביט, ואת DX כאשר המספרים בגודל 16 ביט. עבור IDIV נשתמש בפקודה CBW להמרת AL ל AX תוך התחשבות בסימן, או ב CWD להמרת AX ל DX:AX תוך התחשבות בסימן. ב 386 ואילך, עבור אופרנד בגודל 4 בתים הפקודה אופרנד DIV תבצע: תוצאת החילוק ללא השארית תוצב ב EAX והשארית תוצב ב EDX. על מנת לבצע חלוקה של שני מספרים 32 ביט, במקרה של DIV יש לאפס את EDX. במקרה של IDIV נשתמש בפקודה CDQ שממירה את EAX ל EDX:EAX. ישנה פקודה CWDE שממירה את AX ל EAX. אם תוצאת החילוק לא יכולה להיכנס ל AL/AX/EAX בגלל גודלה מתרחשת חריגה שנקראת Divide Overflow.

הפקודה CMP מבנה: CMP אופרנד1, אופרנד2 השוואה בין האופרנדים ע"י פעולת חיסור. האופרנדים לא משנים את ערכם.

פקודות בקרה CALL – בקרה לרוטינה , קפיצה עם אכסון ה IP במחסנית (ואפשר גם ה-CS). RET – פקודה הפוכה ל CALL INT- הסתעפות לפסיקת תוכנה

פקודות קפיצה JMP – קפיצה בלתי מותנית. פקודת לולאה: LOOP – הפחתת CX, וקפיצה לתוית אם CX לא התאפס כתוצאה מההפחתה. LOOPE/Z – כמו LOOP אך סיום הלולאה הוא כאשר CX שווה 0 או ZF=0. LOOPNE/NZ – כמו LOOP/Z אך התנאי הנוסף הוא ZF=1. JCXZ – קפיצה רק אם CX=0 .

פקודות קפיצה מותנות: בדרך כלל השימוש שלהם הוא בשילוב עם הפקודה CMP למשל: CMP AX,BX JE label ואז משמעות הפקודות הן: JE – קפוץ אם AX שווה ל BX. JNE – קפוץ אם AX שונה מ BX. JG – קפוץ אם AX > BX כמספרים עם סימן. JGE – קפוץ אם AX ≥ BX כמספרים עם סימן. JL - קפוץ אם AX < BX כמספרים עם סימן. JLE – קפוץ אם AX ≤ BX כמספרים עם סימן. JA – קפוץ אם AX > BX כמספרים חסרי סימן. JAE – קפוץ אם AX ≥ BX כמספרים חסרי סימן. JB - קפוץ אם AX < BX כמספרים חסרי סימן. JBE – קפוץ אם AX ≤ BX כמספרים חסרי סימן.

פעולות ביטיות מבנה הפקודה XOR: XOR אופרנד1, אופרנד2 מבנה הפקודה AND: AND אופרנד1, אופרנד2 מבצעת AND לוגי על הביטים של אופרנד1 ואופרנד2 (אם שני הביטים הם 1 התוצאה תהיה 1, בכל מקרה אחר התוצאה היא 0), התוצאה תהיה באופרנד2. מבנה הפקודה OR: OR אופרנד1, אופרנד2 מבצעת OR לוגי על הביטים של אופרנד1 ואופרנד2 (אם שני הביטים הם 0 התוצאה תהיה 0, בכל מקרה אחר התוצאה היא 1), התוצאה תהיה באופרנד2. מבנה הפקודה XOR: XOR אופרנד1, אופרנד2 מבצעת XOR לוגי על הביטים של אופרנד1 ואופרנד2 (אם רק אחד מהביטים הוא 1 התוצאה תהיה 1, בכל מקרה אחר התוצאה היא 0), התוצאה תהיה באופרנד2.

מבנה הפקודה NOT: NOT אופרנד מבצעת NOT לוגי על הביטים של האופרנד (אם הביט הוא 1 התוצאה תהיה 0, אם הביט הוא 0 התוצאה תהיה 1). הפקודה TEST: מבצעת AND בלי לשנות את האופרנדים. (רק הדגלים מושפעים)

פקודות הזזה וסיבוב SHL dest,source הזזה של dest ב source ביטים שמאלה. הביט המשמעותי ביותר נכנס ל carry . לתוך הביטים הנמוכים יכנס 0. דוגמה: נניח שהתוכן של DL הוא 10000001 ו CF=1 ,אז אחרי הפקודה SHL DL,1 הערך שלDL הוא 00000010 ו CF=1. SHR dest,source הזזה של dest ב source ביטים ימינה. הביטים המשמעותיים ביותר מתאפסים. הביטים הנמוכים נאבדים. דוגמה: נניח שהתוכן של DL הוא 10000001 ו CF=1 ,אז אחרי הפקודה SHR DL,1 הערך שלDL הוא 01000000 ו CF=1.

ROR dest,source כמו SHR אבל הביט הפחות משמעותי עובר לתוך הביט המשמעותי ביותר וגם לתוך ה CF דוגמה: נניח שהתוכן של DL הוא 10000001 ו CF=0 ,אז אחרי הפקודה ROR DL,1 הערך שלDL הוא 11000000 ו CF=1. ROL – כמו ROR אך הכיוון הוא שמאלה. RCR – כמו ROR אך CF הוא חלק מהאופרנד: הביט הפחות משמעותי עובר לתוך ה CF וערך ה CF עובר לתוך הביט המשמעותי ביותר. דוגמה: נניח שהתוכן של DL הוא 10000001 ו CF=0 ,אז אחרי הפקודה ROR DL,1 הערך שלDL הוא 01000000 ו CF=1. RCL – כמו RCR אך הכיוון הוא שמאלה.

פקודות במחרוזות LODSB – הכנסת תוכן הבית שכתובתו DS:SI לאוגר AL וקידום/הפחתת SI ב-1. LODSW – הכנסת תוכן המילה שכתובתה DS:SI לאוגר AX וקידום/הפחתת SI ב-2. STOSB – העתקת הבית הנמצא ב AL לכתובת ES:DI וקידום/הפחתת DI ב-1. STOSW – העתקת המילה הנמצאת ב AX לכתובת ES:DI וקידום/הפחתת DI ב-2. ערך הדגל DF קובע אם יתבצע קידום או הפחתה. אם DF=0 מתבצע קידום. אם DF=1 מתבצעת הפחתה. הפקודה CLD מציבה 0 ל DF. הפקודה STD מציבה 1 ל DF.

דוגמה: נניח שמוגדר המערך הבא: Word_Arr DW 2,4,6 והפקודות הן: STD MOV SI,OFFSET Word_Arr+2 LODSW אז ב AX תהיה המילה השנייה במערך, כלומר AX=4 ו יתבצע SI=SI-2.

דוגמה נוספת: נניח שמוגדר המערך הבא: Word_Arr DW 2,4,6 והפקודות הן: STD MOV AX,8 MOV DI,OFFSET Word_Arr+2 STOSW אז המילה השנייה במערך תשתנה ל 8, ויתבצע DI=DI-2.

REP – פקודת המחרוזת תחזור על עצמה כמספר הפעמים שהוא הערך של CX REP – פקודת המחרוזת תחזור על עצמה כמספר הפעמים שהוא הערך של CX. בכל ביצוע של הפקודה, CX יופחת ב 1. דוגמה: נניח שמוגדר המערך הבא: W_array DW 1,2,3,4,5,6,7,8 והפקודות הן: MOV SI , OFFSET W_array MOV BX , SEG W_array MOV CX , 8 MOV AX , 1000 MOV ES,BX CLD REP STOSW אז אברי המערך יהיו כולם 1000.

MOVSB – העתקת הבית שכתובתו DS:SI לכתובת ES:DI וקידום/הפחתת DI ו SI ב-1. MOVSW – העתקת המילה שכתובתה DS:SI לכתובת ES:DI וקידום/הפחתת DI ו SI ב-2. SCASB – השוואת הבית הנמצא ב AL לבית שכתובתו ES:DI וקידום/הפחתת DI ב-1. SCASW – השוואת המילה הנמצאת ב AX לבית שכתובתו ES:DI וקידום/הפחתת DI ב-2. CMPSB – השוואת תוכן הבית שכתובתו DS:SI לתוכן הבית שכתובתו ES:DI וקידום/הפחתת DI ו SI ב-1. CMPSW – השוואת תוכן המילה שכתובתה DS:SI לתוכן המילה שכתובתה ES:DI וקידום/הפחתת DI ו SI ב-2.