Intro to 8086 Assembly Language
Download
Report
Transcript Intro to 8086 Assembly Language
מרכיבים עיקריים של מערכת מבוססת מיקרו
מחשב
יחידת ממשק
Interface
זכרון
קריאה/כתיבה
RAM
זכרון קריאה בלבד
ROM
יחידת
עיבוד
מרכזית
ADDRESS BUS
שעון
CPU
DATA BUS
CONTROL BUS
clock
עיקרון עבודת המערכת מבוססת מיקרו מחשב
מערכת מבוססת מיקרו מחשב כוללת את שלושת המרכיבים הבאים:
•
•
•
•
•
•
•
- )Microprocessor( Central Processing Unit - CPUיחידת עיבוד מרכזית (מעבד )
- 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
Program counter
Address=N
Address Bus
Opcode
Data Bus
Instruction
Register
Opcode N
Main Memory
•
Control Bus
Clk
Rd
CPU
ה CPU -פונה לאזור בזיכרון הראשי עליו מצביע ה ,Program counter -מביא
את הOpcode -של הפקודה הנוכחית מזיכרון אל ה ,CPU-מפענח אותה
ומבצע את הפקודה.
שוב פונה לזיכרון להבאת הפקודה הבאה מפענח ומבצע וכך עד סוף התוכנית.
מבחינה אחת לפחות ,המיקרופרוססור הוא מכונה פשוטה מאוד .הוא חוזר
כל הזמן על הרצף:
הבא את ההוראה הבאה מהזיכרוןFetch -
•
בצע את ההוראה Execution -
•
לך לשלב .1
•
ארבע שלבי ביצוע הפקודה
•
•
•
•
Instruction Fetchהבאת Opcodeשל הפקודה לביצוע מזיכרון ראשי אל ה-
. CPU
Instruction decodeפענוח הפקודה( )Opcodeשנמצאת באוגר IPע"י החומרה
Executionביצוע הפקודה (עיבוד אריתמטי ,אחסון זמני )
Write backכתיבת התוצאות העיבוד חזרה לזיכרון הראשי
בסך-הכל קיימות חמש פעולות שונות או חמישה מחזורי פס אפשריים:
•
•
•
•
•
קריאה מהזיכרון.
כתיבה לזיכרון.
קריאה מקלט/פלט.
כתיבה לקלט/פלט.
סרק (פעולה פנימית שאינה דורשת גישה לזיכרון או למיפתח קלט/פלט).
תכונות של המעבד 8086
המעבד 8086יוצר ע"י חברת INTELבשנת .1978
המעבד 8086בעל תכונות הבאות:
•
•
רוחב פס נתונים 16 -סיביות
רוחב אוגרים פנימיים 16 -סיביות ,זאת אומרת שהוא יכול לעבד נתונים בעלי
16סיביות בפעולות אריתמטיות -לוגיות
רוחב פס כתובות כלפי זיכרון 20 -סיביות ,זאת אומרת שהוא יכול לגשת
לזיכרון ראשי בגודל 220 = 1,048,576 = 1 Mbyte
רוחב פס כתובות כלפי התקני קלט/פלט 16 -סיביות ,זאת אומרת שהוא יכול
להתחבר למספר התקנים216 = 64535 Devices :
•
המעבד 8086יכול לגשת לזיכרון להבאת נתונים בגודל 1 byteאו
1 word=2 byteבגישה אחד ,תלוי בפקודה.
•
המעבד 8088דומה מאוד למעבד 8086חוץ מרוחב פס נתונים חיצוני שהוא
בעל 8סיביות -להבאת נתון בגודל 1 word=2 byteהמעבד 8088פעמיים ניגש
לזיכרון .
•
•
•
20קווי כתובת
•
8קווי נתונים
7
הצגת נתון במיקרו מחשב
נתונים לא מסומנים
MSB
LSB
1 byte – 8 bit
MSB
LSB
1 word – 16 bit
נתונים מסומנים
Sign
MSB
LSB
1 byte
Sign
MSB
LSB
1 word
תיזמון מחזור הפס
BUS - יחידת הקשר ל- BIU - BUS INTERFACE UNIT –
EU - EXECUTION UNIT - יחידות הביצוע-
מיבנה פנימי של המעבד 8086
• המעבד 8086נקרא גם כן CPUמורכב בתוכו משתי יחידות
פונקציונאליות יקאריות:
oיחידה להבאת נתון מזיכרון – BIU – Bus Interface Unit
יחידה זאת בונה את כתובת גישה לזיכרון ,פונה לזיכרון ,קוראת את הפקודה
הבאה מהזיכרון לפס נתונים ,מעבירה אותה ל CPU-ומאחסנת אותה לחוצץ של
6בתים -תור פקודות( .)QUEUE
יחידת BIUכוללת 4אוגרי סגמנט Code Segment,Data Segment -
- Stack Segment,Extra Segmentואוגר ( Instruction Pointerכולם – 16
סיביות)
oיחידת ביצוע – EU – Execution Unit0
יחידה זאת לוקחת פקודות מהחוצץ ומבצעת אותן ללא תלות ביחידת .BIU
החוצץ ( )QUEUEעובד בעיקרון של – FIFOהפקודה שהוכנסה ראשונה לתור
הפקודות ע"י יחידת BIUיוצת ראשונה לביצוע ע"י יחידת .EU
oשתי היחידות האלו מפצלות את עומס עבודת ה CPU-כדי לעלות את מהירותו ואת
יעילותו של המעבד.
8086 אוסף אוגרים של המעבד
ES 16 bit
CS 16 bit
SS 16 bit
DS 16 bit
IP 16 bit
BIU registers
(for 20 bit address
generation)
AX 16 bit
BX 16 bit
CX 16 bit
DX 16 bit
EU registers
16 bit arithmetic
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 bit
BP 16 bit
SI 16 bit
DI 16 bit
FLAGS 16 bit
Extra Segment
Code Segment
Stack Segment
Data Segment
Instruction Pointer
Accumulator
Base Register
Count Register
Data Register
Stack Pointer
Base Pointer
Source Index Register
Destination Index Register
חלוקת זיכרון למקטעים
DI
Segment Registers
EXTRA
DATA
MEMORY
Address
64K Extra Seg
FFFFFH
ES:0
SI, BX
64K Data
Segment
DS:0
SP
STACK
64K Stack
Segment
SS:0
CODE
IP (PC)
64K Code
Segment
CS:0
00000H
אופן גישה לזיכרון ראשי של המעבד 8086
•
•
•
•
•
•
•
•
כל תוכנית באופן קבוע מאוחסנת בזיכרון משני (דיסקט ,דיסק קשיח.) CD-ROM ,
בהזמנת תוכנית לביצוע מערכת הפעלה מעתיקה את התוכנית ,שהוזמנה בשמה ,
מזיכרון משני לזיכרון ראשי ומשם התוכנית ניתנת לגישה מצד המעבד.
זיכרון ראשי של המעבד 8086ניתן לגישה ע"י פס כתובות בעל 20סיביות וכולל
2^20 = 1 Mbyteתאים ברוחב 8סיביות כל תא אחד.
האוגרים הפנימיים של המעבד 8086בעלי רוחב 16סיביות ובעזרת אוגר אחד אי-
אפשר לבנות כתובת גישה לזיכרון בעלת 20סיביות רוחב.
בגלל זה הזיכרון הראשי מחולק למקטעים כך שכל תוכנית ,שרצה במעבד ,מקבלת
מספר מוגבל של המקטעים (עד 4מקטעים) בהם מאוחסנים:
תוכנה – ב ,Code Segment -נתונים -ב, Data Segment or Extra Segment -
מחסנית – ב. Stack Segment -
מערכת הפעלה מנהלת את הזיכרון וממקמת את כל התוכניות שעולות לביצוע
בסגמנטים משלהם וטוענת את אוגרי המקטעים ( ) CS, DS, SS, ESבהתאם.
כל תוכנית שרצה יכולה להשתמש אך ורק בתאי הזיכרון שבתוך המקטעים ולגשת
אליהם ע"י אוגרי הצבעה פנימיים של המעבד ( בעלי 16סיביות בלבד)
הגודל המכסימלי של המקטע – 2^16 = 64 KBytes
אופן גישה לזיכרון ע"י שילוב אוגר מקטע ואוגר
הצבעה
•
•
•
•
•
•
כתובת מלאה של התא בזיכרון הראשי נקראת כתובת פיזית וכוללת 20סיביות
הכתובת הזאת נבנה ע"י זוג אוגרים :אוגר מקטע ואוגר הצבעה ,שכל אחד מהם בעל 16סיביות
16סיביות עליונות של כתובת התחלתית של המקטע נטענת לאוגר מקטע ע"י מערכת הפעלה
ונקראת
כתובת התחלתית של המקטע
CPUמצביע לתוך המקטעים ע"י אוגרי הצבעה וכתובת זאת (בתוך המקטע) בעלת 16סיביות
נקראת כתובת יחסית ( ) Offsetאו כתובת אפקטיבית ( ) Effective Address
כדי לבנות כתובת פיזית בעלת 20סיביות משני האוגרים ,ה CPU-טוען תוכן של אוגר המקטע
לאוגר
הזזה ,מזיז אותה בארבע סיביות כלפי שמאל ,מחבר אליו תוכן של אוגר ההצבעה ומפיק את
תוצאת החיבור לפס כתובות של המערכת
ה, CPU -באופן ברירת מחדל ,משייך את אוגרי ההצבעה למקטעים באופן הבא:
›
›
›
›
•
אוגר ) IP (Instruction Pointer ) or PC ( Program Counterמצביע לתוך : Code Segment
CS:IP
אוגרים BX,DI,SIמצביעים לתוך DS:SI, DS:DI, DS:BX : Data Segment
אוגרים BP,SPמצביעים לתוך SS:SP, SS:BP : Stack Segment
אין ברירת מחדל ל - Extra Segment -משתמשים במקטע זה רק לפעולות עם מחרוזות – String
Operations
אפשר לשנות את ברירת המחדל ע"י כתיבת זוג אוגרים בפקודהDS:BP :
דוגמה לחישוב כתובת פיזית
0H
CS:
40000H
04000H
IP
40056H
0056H
CS:IP = 4000:56
Logical Address
Memory
Segment Register
04000 0
Offset
+
Physical or
Absolute Address
040056H
.
0056
0FFFFFH
Programmer’s Model of the 8086
CPU
אופן שימוש באוגרים כלליים
•
•
•
•
הארכיטקטורה של המעבד 8086כוללת 8אוגרים בעלי רוחב 16סיביות למתרות
כלליות של אחסון נתונים ולמתרות מיוחדות הבאות:
) -- AX (accumulatorצובר תוצאות של פקודות אריתמטיות
) – BX (base registerאוגר הצבעה למקטע הנתונים בזיכרון ראשי –
מחזיק כתובת יחסית של הנתונים
-משמש כמונה לולאות בפקודה LOOP)CX (counter
): DX (data
› משמש כאוגר הרחבה (בנוסף לאוגר ) AXלפעולות אריתמטיות לשמירת החלק העליון של
התוצאה.
› משמש כאוגר אצבעה להתקני קלט/פלט – מחזיק כתובת גישה להתקני קלט/פלט
•
): SI & DI (Source Index & Destination Index
› אוגר הצבעה למקטע הנתונים בזיכרון ראשי
› אוגרי הצבעה למחרוזות
•
•
) -- SP (stack pointerאוגר הצבעה לראש המחסנית ,משתנה אוטומטית עקב
פקודות גישה למחסנית ( לא מומלץ לטעון או לשנות אותו ידנית)
) -- BP (base pointerאוגר הצבעה לתוך המחסנית – מותר לשימוש חופשי
דירוג של שפות תכנות
שפות תכנות מדורגות בשלוש רמות:
• – High level languageשפת Visual C ,Visual Basic , C#
השפות האלו לא מתייחסות למבנה פנימי של המעבד אלא להיגיון של המשימה בגדול.
• Assembly Language - Low level language
השפה זו מתייחסת למבנה פנימי של המעבד ומפרטת למעבד את כל שלבי ביצוע
של המשימה בהתאם לאוסף פקודות של שפת אסמבלי שמוכר למעבד הזה.
• – Machine languageשפת מכונה
•
בשפה זאת התוכנית מקודדת למספרים בקוד בינארי וישר מוכנה לביצוע ע"י המעבד.
כל פקודה של שפת אסמבלי מתורגמת ע"י קומפיילר לפקודה בשפת מכובה וכוללת
שדות הבאות :קידוד של פקודה עצמה שניקרא Operation Code – OPCODE
ומשתנים ( ) OPERANDSכלפיהם מתבצעת את הפקודה
כל תוכנית שכתובה בשפה עלית או בשפת אסמבלי חייבת לעבור תרגום
לשפת מכונה.
8086 תרגום לשפת מכונה של המעבד
High-level
language
program
Compiler
Assembly
language
program
Assembler
Machine
language
program
8086 לשפת מכונה של המעבדASM86 • תרגום משפת אסמבלי
: מתבצעת בשני שלבים
לזיהוי טעויותListing עם יצירת קובץTASM Compiler › תרגום עצמו ע"י
TASM Linker - TLINK › וקישור בין חלקי התוכנית ע"י
• TASM/l My_Prog.ASM My_Prog.OBJ , My_Prog.LST
• TLINK My_Prog.OBJ My_Prog.EXE
My_Prog.EXE – Executable File
שיטות מיעון
- MOV DX,AXאוגר • Register -
אופרנט המקור הוא מספר ; - MOV DX,20מיידי • Immediate -
גישה לנתון לפי כתובתו ; - TWENTY DW 20hישיר – • Direct
; DX 0020h
MOV DX,TWENTY
גישה לנתון בעזרת אוגר הצבעה ; ] - MOV DX,[SIעקיף • Register Indirect -
o
o
o
o
ערך באוגר הצבעה זהו הכתובת יחסית של התא במקטע בזיכרון הראשי
סוגריים מרובעות [ ] מסמנות מעון עקיף
בברירת מחדל האוגרים BX, DI, SIמצביעים לתוך ה Data Segment -בזוג עם האוגר DS
בברירת מחדל האוגר BPמצביע לתוך ה Stack Segment -בזוג עם האוגר SS
oאפשר לשנות את ברירת המחדל ע"י כתיבת זוג בפקודה 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
]- MOV AL, [BP+SI+DISP
• Based Indexed Plus Displacement
גישה לנתון בעזרת זוג אוגרי הצבעה ועוד היסט מספרי
Data Transfer Instructions
• MOV target, source
› reg, reg
› mem, reg
› reg, mem
› mem, immed
› reg, immed
•
•
•
•
שני אופרנטים חייבים להיות באותו גודל
אופרנט המקור יכול להיות :אוגר ,תא בזיכרון או קבוע (מספר)
אופרנט המקור יכול להיות :אוגר או תא בזיכרון
אי-אפשר להעביר נתון מתא בזיכרון לתא בזיכרון באופן ישיר
Data Transfer Instructions – Examples
•
•
•
•
•
•
•
•
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
Data,67h
AX, [BX]
BX,CS:Data+4
AX,[SS:SI]
AX, [BX+SI+7]
AX,[BP+SI+2]
AX,BL – Impossible
Data1, Data2 – Impossible
פקודות קפיצה עם תנאי
• JE / JZ
• JNE / JNZ
Jump equal or jump zero
Z=1
Jump not equal or jump not zeroZ=0
Jump Based on Unsigned Data
•
•
•
•
•
JA / JNBE
JAE / JNB
JB / JNAE
JBE / JNA
Jump above or jump not below/ equal
Jump above/ equal or jump not below
Jump below or jump not above/ equal
Jump below/ equal or jump not above
C=0 & Z=0
C=0
C=1
C=1 or Z=1
Jump Based on Signed Data
• JG / JNLE
• JGE / JNL
• JL / JNGE
Jump greater or jump not less/ equal
Jump greater/ equal or jump not less
Jump less or jump not greater/ equal
S=0 & Z=0
S=0
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 Words
SSeg
ENDS
; Close the Stack Segment
DSeg SEGMENT
; Open the Data Segment
block
DB 100 DUP (0)
; Block for Filling
bl_length
DW 50
; Number of Data for Filling
DSeg ENDS
; Close the Data Segment
CSeg SEGMENT
; Open the Code Segment
ASSUME
CS: CSeg, DS: DSeg,SS:SSeg
main: MOV
AX, DSeg
MOV
DS,AX
MOV
DI, OFFSET block
MOV
AL,’A’
MOV
CX, bl_length
next:
MOV
[DI],AL
INC
DI
LOOP next
INT 3
CSeg ENDS
; Close the Code Segment
END
main
; End the Program Code
הייצוג תוכנית בזיכרון ראשי
Address
• Code segment (CS), which
defines the main program
3230:0000
or instructions.
CS
• Data segment (DS), which 1750:0000
defines the data you used.
DS
• Stack segment (SS), which
defines the stack.
0100:0000
SS
הנחיות של שפת אסמבלי Directives -
הנחיות הן לא פקודות לביצוע ע"י המעבד אלא קובעות לקומפיילר
איך לתרגם את התוכנית ואיך לארגן את הזיכרון
•
•
•
•
•
•
•
•
•
-- SEGMENTפותח את המקטע ומגדיר את סוגו
– ENDSסגירת המקטע
– ORGקובע מיקום יחסי של נתון או פקודה בתוך המקטע
– ASSUMEמשייך את שמו המקטע לאוגר המקטע המתאים
- Define byte - DBהגדרת נתון בגודל byte
- Define word - DWהגדרת נתון בגודל word
- Define double word – DDהגדרת נתון בגודל wordכפול
- EQUהגדרת קבוע ( ) Constant
- $מסמן את המקום הנוכחי (כתובת ) בשלב הקומפילציה
0
אוגר דגלים של המעבד 8086
x OF DF IF TF SF ZF x AF x PF x CF
15
x
x
x
יחידת ביצוע EUכולל אוגר דגלים ( ) Flag Registerשהוא אוסף של
דגלי מצב וסיביות בקרה.
• דגלי מצב מושפעים מפקודות אריתמטיות או פקודות השווה ומזהים את מצבו הנוכחי של המעבד
• סיביות בקרה קובעות למעבד את אופן עבודתו
› - CF Carry Flag- Bit 0עולה ל 1-אם יש גלישה מגודל האוגר
› - PF Parity Flag- Bit 2עולה ל 1-אם תוכן של האוגר - ALזוגי
› - AF Auxiliary Carry Flag- Bit 4עולה ל 1-אם יש גלישה מBCD format-
› - ZF Zero Flag- Bit 6עולה ל 1-אם תוצאת הפעולה האריתמטית או הלוגית האחרונה היא . 0
› - 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
תוצאת השוואה משנה את הדגלים,
דגל האפס יעלה ל, "1" -מכיוון
שקיים שיוויון.
MOV DH,5
CMP DH,5
MOV CL,0FFH
ADD CL,1
MOV AL,4
SUB AL,4
0FFHהוא למעשה ( )-1לאחר הוספת
1התשובה היא .0
כאשר אנו כותבים את הפקודות:
DEC CX
JZ FINISH
אנו למעשה נעזרים בדגל האפס,הפקודה JZבודקת את מצב הדגל ,ועפ"י מצבו מחליטה אם לקפוץ .
דוגמא נוספת:
CMP DL,4
JE GOOD
?"1"-באלו מהמקרים הבאים דגל הסימן יעלה ל
1.
MOV DL,0
2.
MOV AL,5
SUB AL,5
3.
MOV AL,0FFH
ADD AL,1
4.
MOV CX,36H
CMP CX,’6’
5.
MOV AH,-2
CMP AH,0FEH
דגל הנשא – CARRY FLAG
דוגמאות לפעולות שאחריהן דגל הנשא יקבל את נערך ":"1
1111 1111
+ 0000 0001
1 0000 0000
דגל הנשא
דגל הגלישה – OVERFLOW FLAG
הפקודה מציבה באוגר CLאת הערך ,84Hשהוא תוצאת
החיבור ,למרות שהמספר יכול להיות מוכל באוגר התבצע גלישה ,מכיוון
שהוספנו למספר חיובי מספר והתקבלה תשובה שלילית.
FFH
שווה בערכו ( )-1ולכן כאשר מוסיפים לו 3התשובה היא , 2הערך 2יכול
מיוצג ולכן דגל הגלישה יהיה 0לוגי להיות
81Hהוא הערך השלילי של 7FHאם נפחית ממנו 3נקבל (.(- 82
לא ניתן להציג ערך כזה באוגר DLולכן תהיה גלישה.
mov cl,7fh
add cl,5
mov ah,0ffh
add ah,3
MOV DL,81H
SUB DL,3
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
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
•
•
•
•
•
.CX באוגר0 אם המספר חיובי יוצב. CX באוגר1 אם המספר שלילי יוצב.קטע תוכנית הבודקת את הנתון בכתובת בכתובת4F0H
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$”
אופן שמירת נתונים בזיכרון ראשי
Bytes in Storage
FFFFFh
שמורים בזיכרון בסדר הפוך-Word, Double word
•
01h
Directive
Data1 DW
Data2 DW
Data3 DD
23h
35DAh
256
1234567H
45h
67h
Data3
01h
00
Data2
35h
DAh
Data1
00000
Constants - הגדרת קבועים
• name EQU expression
הגדרת קבוע ללא שינוי בהמשך התוכנית
sample
EQU 7Fh ; ערך מספרי
message
EQU <This is a message> ; מחרוזת
• Name = expression
הגדרת קבוע עם שינוי בהמשך התוכנית – ערך מספרי בלבד
max_int = 7FFFh
count = 1
count = count * 2
Basic structure of Code Segment
•
-Code Segmentמקטע שכולל תוכנית מקודדת לביצוע המשימה ע"י המעבד
•
•
תוכנית בשפת אסמבלי ASM86זוהי אוסף פקודות שמוכרות למעבד 8086
כל פקודה בנויה לפי תבנית הבאה:
><Label>:<Mnemonic> <Destination_Operand,Source_Operand> ; <Comment
•
> - <label nameתווית -שם סימבולי קטן מ 31-תווים ,לא מתחיל מספרה ,לא מילה שמורה
•
> - <Mnemonicשם הפקודה מאוסף ,מוכר למעבד 8086
•
> - <Destination_Operand,Source_Operandשני אופרנטים שמשתתפים בפקודה
› העברת הנתון תמיד מתבצעת מאופרנט המקור לאופרנט היעד
› בפעולות אריתמטיות/לוגיות תוצאה תמיד נכנסת לאופרנט היעד
•
> - <Commentטקסט שמלווה את הפקודה אלמנת להסביר תוכנית
;Load number 86h to Data_Addr in Main Memory
L1: MOV Data_Addr ,86h
•
שיגרה-הגדרת תת
Main Program
Proc1
Proc2
Proc3
<procedure name> PROC {FAR | NEAR}
:
:
;***your (main/ sub) program here***
<procedure name> ENDP
חייב להיות מיוחד- <procedure name>
שיגרה- הנחיה לקומפיילר להתחיל תת- PROC
שיגרה- הנחיה לקומפיילר לסיים תת- ENDP
הנוכחיCode Segment -שיגרה נקראת מחוץ ל- – תתFar
הנוכחיCode Segment שיגרה נקראת אותו- תת- Near
•
•
•
•
•
Segmentation Example: MOV AX,[BX]
MOV Instruction ⇒ DS
Effective Address = BX
Logical 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
MOV AL, byte ptr Data+1
; [Data] 1255h
; AL12h
פקודת החלפה
• XCHG target, source
› reg, reg
› reg, mem
› mem, reg
For 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
; the same operation
› MOV DI, offset Data
אופן הגדרת המחסנית בתוכנית
•
מחסנית היא חלק מזיכרון ראשי שמיועדת לשמירת נתונים באופן זמני בשלושה מקרים:
› ביצוע פקודות שמירה 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
רוחב המחסנית במעבד 8086מוגדר כ , word -אי-אפשר לשמור נתונים בגודל byte
שני אוגרים מצבעים באופן ברירת מחדל לתוך המחסנית BP,SP:
› אוגר SPמושפע מכל פעולת גישה למחסנית באופן אוטומטי
› אוגר BPניתן להצבעה חופשית בתוך המחסנית
אופן גישה למחסנית עם פקודות Push,Pop
Pop Direction
פקודה Pushמאחסנת נתון במחסנית
הפקודה מתבצעת בשני שלבים:
אSP SP - 2 .
ב[SS:SP] data .
• פקודה Popהוצא נתון במחסנית
• הפקודה מתבצעת בשני שלבים:
•א[SS:SP] data .
•בSP SP + 2 .
Push Direction
FFFFEh
top of stack
FFFFFh
SP=200h
SS
16 bit
00000
Main Memory
00001
פקודות קלט/פלט
•
כל התקן קלט/פלט מחובר למערכת המיקרופרוססור דרך פורטים בעלי כתובת גישה
מסוים .סך הכול מרחב כתובות הוא FFFFh 0000אבל מנוצלים הרבה פחות
כתובות -תלוי במבנה המערכת
קליטת נתון בעל 8סיביות מפורט כניסה בכתובת בעלת 8סיביות; IN AL, IN_PORT
קליטת נתון בעל 16סיביות מפורט כניסה בכתובת בעלת 8סיביות ; IN AX, IN_PORT
טעינת אוגר DXבכתובת גישה לפורט אם הכתובת בעלת 16סיביות ; MOV DX, IN_PORT
IN AL, DX
קליטת נתון בעל 8סיביות מפורט כניסה בכתובת בעלת 16סיביות ;
IN AX, DX
קליטת נתון בעל 16סיביות מפורט כניסה בכתובת בעלת 16סיביות ;
פליטת נתון בעל 8סיביות מפורט כניסה בכתובת בעלת 8סיביות ; OUT IN_PORT, AL
פליטת נתון בעל 16סיביות מפורט כניסה בכתובת בעלת 8סיביות ; OUT IN_PORT, AX
טעינת אוגר DXבכתובת גישה לפורט אם הכתובת בעלת 16סיביות ; MOV DX,OUT_PORT
OUT DX, AL
פליטת נתון בעל 8סיביות מפורט כניסה בכתובת בעלת 16סיביות ;
OUT DX, AX
פליטת נתון בעל 16סיביות מפורט כניסה בכתובת בעלת 16סיביות ;
•
•
•
•
•
•
•
•
•
•
פקודות אריתמטיות – חיבור( )Addition
חיבור בין שני נתונים
חיבור בין שני נתונים ועוד סיבית הנשא
הוספת 1לתוכן האוגר או תא בזיכרון
Decimal adjust for addition
(הפקודה מתקנת את תוצאת החיבור בין שני מספרים בצופן Package BCD
לצופן ) .Package BCDהפקודה מתבצעת כלפי אוגר ALבלבד
;
;
;
;
ADD dest, source
ADC dest, source
INC dest
DAA
; ASCII adjust for addition
AAA
(הפקודה מתקנת את תוצאת החיבור בין שני מספרים בצופן ASCIIלצופן
)Un-package BCDהפקודה מתלעת כלפי אוגר ALבלבד
Addition Example for Package BCD data
Data 1 DB 52H ;
Data 2 DB 89H ;
Result DW 0
; 0141H
…………………………..
52H
MOV AL, Data1
+ 89H
ADD AL, Data2
EBh
DAA
+ (6)(6)
MOV byte ptr RESULT,AL
0141H
ADC byte ptr
RESULT+1,0
Addition Example for ASCII data
Data 1 DB ‘8’
Data 2 DB ‘7’
Result DW 0
…………………………..
MOV AL, Data1
ADD AL, Data2
AAA
ADD AX,3030h
MOV RESULT,AX
;38H
;37H
; ’17’ = 3135H
38H
+37H
6Fh
; AX 0105H
; AX 3135H )’15’(
Addition Example – Sum of Block
BLOCK
OREH
RESULT
DW 8H, 407H, 1054H, 8DH, 4AC2H
DW 5
DD 0
-------------------------------------------------------------------
LEA SI, BLOCK
MOV CX,OREH
NEXT: 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
(הפקודה מתקנת את תוצאת החיבור בין שני
מספרים בצופן ASCIIלצופן )Un-package BCD
הפקודה מתלעת כלפי אוגר 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
• CWD
; convert byte to word for signed division
; convert word to double word for signed division
)MUL and DIV( פקודות אריתמטיות – כפל וחילוק
• הפקודה
1 מכפיל
• MUL CL ;
• MUL BX ;
CL (byte) *
BX (word) *
•
הפקודה
מונה
• DIV CL ; AX
/
• DIV BX ; DX: AX /
2 מכפיל
מחבה
AL
AX
תוצאה
=>
=>
חלק שלם
CL (byte) => AL
BX (word)=> AX
AX
DX : AX
ארית
AH
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 – פקודות גישה למחסנית
5679h
Push Direction
FFFFF h
MSB
Mov AX,1234h
Mov BX,5679h
Push AX
Push BX
1234h
12
56
Pop Direction
FFFFE h
34
79
LSB
SP<=top of stack
next element
to be pushed
SS
16 bit
00001
MAIN MEMORY
00000
שיגרה-קריאה לתת
• 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
C
0
0
C
SHR
SHL/ SAL
C
C
ROL
ROR
C
C
RCR
RCL
0
C
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 Operations
Repeat string operation using CX to indicate how many times
REP xx - where xx is a string operation
REPE / 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
NEQL
EQL:
...
;What to do if two are equal
NEQ
...
;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
AX
AX, 0
SimpleISR
PUSH
MOV
…
…
POP
IRET
ENDP
AX
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
•some service for screen handling, with different service number
Service No.
00h
02h
06h
08h
09h
0Ch
0Fh
Explanation
Set video mode
Set cursor position
Scroll window up
Read character and attribute at cursor position
Write character and attribute at cursor position
Write pixel
Get video mode
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
BH
Specify the color
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 )
00 for full screen, other constant for number of lines
See below
Internal structure for color definition - VGA Attribute Byte
B
r g b
7
6
5
4
blinking bit
Background color bits
I
3
r g b
2
1
0
Foreground color bits
r - red
g - green
b – blue
I - intencity
B - blinking
BIOS Interrupt Example
• This example would create a window at the center of the
• screen with its own parameters
• WINDOW PROC NEAR
MOV AH, 06h
MOV AL, 00h
MOV BH, 01000001b
;red/blue
MOV CX, 0A1Ch
;top coordinates
MOV DX, 0E34h
;lower coordinates
INT
10h
RET
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.
01h
02h
07h
08h
09h
0Ah
4Ch
Explanation
Keyboard input with echo
Display output
Keyboard input without echo (no check for Ctrl-C)
Keyboard input without echo (check for Ctrl-C)
Display string
Receive String from Keyboard
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 SEGMENT
NAMESTRING
DB
10, ?, 10 dup (?)
DATA_SEG ENDS
CODE_SEG SEGMENT
ASSUME
CS: CODE_SEG, DS: DATA_SEG
MOV
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כל ספרה עשרונית ( ) 9 – 0מוצגת ע"י 4סיביות בינאריות
•
- Unpackaged BCD formatכל ספרה עשרונית ( ) 9..0מוצגת ע"י 1 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
I/0 AND MAIN MEMORY INTERFACE
+
BIU – Bus
Interface Unit
ES – Extra Segment
Addr generation
Bus Controller
6
5
4
CS – Code Segment
3
SS – Stack Segment
2
Instruction
Stream Byte
Queue
1
DS – Data Segment
IP –Instruction Pointer
OPCODE DECODER
INTERNAL BUS
AH
AL
BH
BL
CH
CL
DH
DL
SP
BP
SI
DI
ARITHMETIC – LOGIC UNIT
EU
Execution Unit
OPERANDS
FLAG REGISTER