Operating System 2

Download Report

Transcript Operating System 2

Computer Architecture
and Assembly Language
By Juthawut Chantharamalee
Suan Dusit Rajabhat University (Computer Science)
1
บทที่ 6 แฟล็กและคำสั่งคณิตศำสตร์
(Flags ang Mathematics Instruction)
บทที่ 2
Suan Dusit Rajabhat University (Computer Science)
2
แฟล็ก (Flags)
แฟล็กเปรียบเสมือนรีจสิ เตอร์ตวั หนึง่ แต่แทนทีจ่ ะใช้เก็บค่าต่าง ๆ แฟล็กจะเก็บสถานะของ
การคานวณทางคณิตศาสตร์ทผี่ า่ นมา ตัวอย่างของสถานะของการคานวณ เช่น การมี
บิตทด มีการเก็บค่าล้นหลักหรือผลลัพธ์มคี ่าเป็ นศูนย์เป็ นต้น ใน 8086 แฟล็กจะมี
ขนาด 16 บิต โดยในแต่ละบิตจะเก็บค่าของสถานะการคานวณแบบหนึง่ ๆ ดังรูป
Suan Dusit Rajabhat University (Computer Science)
3
แฟล็ก (Flags)
ค่าในบิตของแฟล็กนัน้ ๆ จะมีค่าเป็ น 1 เมือ่ สถานะนัน้ เป็ นจริง เราจะเรียกสถานะทีแ่ ฟล็กเป็ น
1 ว่า แฟล็กเซ็ต (flag set) และถ้าแฟล็กมีค่าเป็ นศูนย์เราจะเรียกว่าแฟล็กเคลียร์
(flag cleared) โดยทัว่ ไปแล้วคาสัง่ ทีจ่ ะมีผลกับแฟล็กจะเป็ นคาสัง่ เกีย่ วกับการ
คานวณทางคณิตศาสตร์ ส่วนคาสัง่ ในกลุม่ ของการโอนย้ายข้อมูล เช่น คาสัง่ MOV
จะไม่เปลีย่ นแปลงค่าในแฟล็ก
Suan Dusit Rajabhat University (Computer Science)
4
แฟล็ก (Flags)
ความหมายของแฟล็กแต่ละบิตเป็ นดังต่อไปนี้
1. แฟล็กศูนย์ (Zero flag)
แฟล็กศูนย์จะมีค่าเป็ นหนึง่ (flag set) เมือ่ ผลการคานวณมีค่าเท่ากับศูนย์
ตัวอย่ำงคำสั่ง
Suan Dusit Rajabhat University (Computer Science)
5
แฟล็ก (Flags)
2. พำริต้ ีแฟล็ก (Parity flag)
พาริต้แี ฟล็กจะมีค่าเป็ นหนึง่ เมือ่ ในผลลัพธ์มจี านวนบิตทีม่ คี ่าเป็ น 1 เป็ นจานวนคู่
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
6
แฟล็ก (Flags)
3. แฟล็กเครื่องหมำย
แฟล็กเครือ่ งหมายจะเซ็ตเมือ่ ผลลัพธ์มคี ่าเป็ นลบ (เมือ่ คิดว่าผลลัพธ์นนั้ เก็บตัวเลข
แบบคิดเครื่องหมายแบบ 2’Complement)
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
7
แฟล็ก (Flags)
4. แฟล็กทด (Carry flag)
แฟล็กทดจะเซ็ตเมือ่ การคานวณมีการทดหรือมีการยืม ในการพิจารณาเราจะพิจารณา
ค่าของข้อมูลแบบไม่คดิ เครื่องหมาย แฟล็กทดนีย้ งั ใช้ในการเก็บบิตข้อมูลในคาสัง่ เกีย่ วกับ
การเลือ่ นบิตด้วย
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
8
แฟล็ก (Flags)
5. โอเวอร์โฟล์แฟล็ก (Overflow flag)
ในการพิจารณาโอเวอร์โฟล์แฟล็กเราจะพิจารณาค่าของข้อมูลเป็ นแบบคิดเครือ่ งหมาย
โดยโอเวอร์โฟล์แฟล็กจะมีค่าเป็ นหนึง่ เมือ่ ผลลัพธ์มคี วามผิดพลาด เช่น การบวกค่าที่
มากกว่าขอบเขตทาให้ผลลัพธ์ทไี่ ด้ มีเครือ่ งหมายทีผ่ ดิ เป็ นต้น
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
9
แฟล็ก (Flags)
6. แฟล็กเสริม (Auxiliary Flag)
แฟล็กเสริมจะเป็ นแฟล็กทีใ่ ช้ในการปรับค่าของการคานวณเลขแบบ BCD
7. แฟล็กทิศทำง (Direction Flag)
แฟล็กทิศทางเป็ นแฟล็กทีใ่ ช้ในการระบุทศิ ทางของการปรับค่ารีจสิ เตอร์ ดชั นีในการ
ประมวลผลคาสัง่ เกีย่ วกับสายข้อมูล
Suan Dusit Rajabhat University (Computer Science)
10
แฟล็ก (Flags)
8. แทรปแฟล็ก (Trap Flag)
แทรปแฟล็กเป็ นแฟล็กทีใ่ ช้ระบุให้หน่วยประมวลผลสร้างสัญญาณขัดจังหวะเมือ่
ประมวลผลคาสัง่ เสร็จสิน้ หนึง่ คาสัง่ โดยแฟล็กนีจ้ ะใช้ในการตรวจสอบการทางานของ
โปรแกรม
9. อิ นเตอร์รัพท์แฟล็ก (Interrupt Flag)
แฟล็กนีใ้ ช้ระบุว่าหน่วยประมวลผลจะตอบสนองการขัดจังหวะจากอุ ปกรณ์ฮาร์ดแวร์
หรือไม่
Suan Dusit Rajabhat University (Computer Science)
11
แฟล็ก (Flags)
คำสั่งเกี่ยวกับกำรกำหนดค่ำของแฟล็ก
เราสามารถกาหนดค่าของแฟล็กทด แฟล็กทิศทาง และอินเตอร์รพั ท์แฟล็กได้โดยใช้คาสัง่
ต่อไปนี้
ตารางที่ 6.1 คาสัง่ สาหรับการกาหนดค่าแฟล็ก
Suan Dusit Rajabhat University (Computer Science)
12
คำสั่งทำงคณิตศำสตร์
คาสัง่ ทางคณิตศาสตร์ใน 8086 ทีเ่ แบ่งได้เป็ นกลุม่ ใหญ่ ๆ 3 กลุม่ ดังนี้
1. กลุ่มคำสั่งบวกและลบ
คำสั่งเพิม่ และลดค่ำ : INC [Increment] และ DEC [Decrement]
คาสัง่ INC จะเพิม่ ค่าของโอเปอร์แรนด์ขน้ ึ หนึง่ ส่วนคาสัง่ DEC จะลดค่าของโอ
เปอร์แรนด์ลงหนึง่ คาสัง่ นีม้ ผี ลกระทบกับแฟล็กทัง้ หมดยกเว้นแฟล็กด .
รูปแบบของทัว่ ไปของคาสัง่ INC และ DE
INC
register
DEC register
INC
memory
DEC memory
Suan Dusit Rajabhat University (Computer Science)
13
คำสั่งทำงคณิตศำสตร์
คำสั่งเพิม่ และลดค่ำ : INC [Increment] และ DEC [Decrement]
Suan Dusit Rajabhat University (Computer Science)
14
คำสั่งทำงคณิตศำสตร์
คำสั่งบวกและบวกรวมตัวทด
: ADD [Addition] และ ADC [Add with carry]
คาสัง่ บวกจะนาค่าของโอเปอร์แรนด์ตวั ทีส่ องมาบวกกับค่าของโอเปอร์แรนด์ตวั ทีห่ นึง่
แล้วนาค่าทีไ่ ด้เก็บในโอเปอร์แรนด์ตวั ทีห่ นึง่ . คาสัง่ ADD และ ADC มีผลกระทบ
กับแฟล็กทางคณิตศาสตร์ทุกแฟล็ก เรานิยมใช้คาสัง่ ADC ในการบวกข้อมูลทีต่ ้องนา
บิตทีท่ ดจากการบวกครัง้ ก่อนมารวมด้วย เช่น การบวกข้อมูลทีเ่ ก็บอยู่ในหลายรีจสิ เตอร์
ต่อเนือ่ งกันเป็ นต้น
รูปแบบของทัว่ ไปของคาสัง่ ADD และ ADC เป็ นดังนี้
Suan Dusit Rajabhat University (Computer Science)
15
คำสั่งทำงคณิตศำสตร์
รูปแบบของทัว่ ไปของคาสัง่ ADD และ ADC เป็ นดังนี้
Suan Dusit Rajabhat University (Computer Science)
16
คำสั่งทำงคณิตศำสตร์
คำสั่งลบและลบรวมตัวยืม : SUB [Substraction] และ SBB
[Subtract with borrow]
คาสัง่ SUB และ SBB จะทางานคล้ายกับคาสัง่ ADD และ ADC เพียงแต่เป็ น
การนาค่าในโอเปอร์แรนด์ตวั ทีส่ องไปลบออกจากโอเปอร์แรนด์ตวั ทีห่ นึง่ ลักษณะของการ
ใช้งานคาสัง่ SBB จะคล้ายคลึงกับการใช้คาสัง่ ADC นัน่ คือจะนิยมใช้ในกรณีทมี่ กี าร
ลบเลขทีเ่ ก็บอยู่ในรีจสิ เตอร์หลายตัวต่อเนือ่ งกัน
รูปแบบของคาสัง่ SUB และ SBB จะมีลกั ษณะเช่นเดียวกับคาสัง่ ADD และคาสัง่
ADC โดยมีรูปแบบทัง้ หมดดังนี้
Suan Dusit Rajabhat University (Computer Science)
17
คำสั่งทำงคณิตศำสตร์
คำสั่งลบและลบรวมตัวยืม : SUB [Substraction] และ SBB
[Subtract with borrow]
Suan Dusit Rajabhat University (Computer Science)
18
คำสั่งทำงคณิตศำสตร์
ตัวอย่ำงคำสั่ง
Suan Dusit Rajabhat University (Computer Science)
19
คำสั่งทำงคณิตศำสตร์
ตัวอย่ำงคำสั่ง
Suan Dusit Rajabhat University (Computer Science)
20
คำสั่งทำงคณิตศำสตร์
คำสั่งเปรียบเทียบ : CMP [Compare]
คาสัง่ CMP จะมีการทางานเหมือนกับคาสัง่ SUB ทุกประการ แต่จะไม่มกี ารเปลีย่ น
ค่าในโอเปอร์แรนด์ใด ๆ โดยผลลัพธ์ทแี่ ท้จริงของคาสัง่ นีค้ อื การเปลีย่ นค่าในแฟล็กต่าง ๆ
เพือ่ แสดงผลลัพธ์ของการลบ เราจะใช้คาสัง่ นีใ้ นการเปรียบเทียบค่าต่าง ๆ และนาผลทีไ่ ด้
ในแฟล็กไปใช้ในการกาหนดเงือ่ นไขของการกระโดด
รูปแบบของคาสัง่ CMP จะเหมือนคาสัง่ SUB โดยมีรูปแบบทัว่ ไปเป็ นดังนี้
Suan Dusit Rajabhat University (Computer Science)
21
คำสั่งทำงคณิตศำสตร์
ตัวอย่ำงคำสั่ง
Suan Dusit Rajabhat University (Computer Science)
22
คำสั่งทำงคณิตศำสตร์
คำสั่งเปลี่ยนเครื่องหมำย : NEG [Negation]
คาสัง่ เปลีย่ นเครือ่ งหมายจะเปลีย่ นค่าในโอเปอร์แรนด์ซงึ่ จะพิจารณาเป็ นตัวเลขแบบคิด
เครือ่ งหมายเป็ นค่าลบของค่านัน้ . โดยการเปลีย่ นค่านัน้ จะเปลีย่ นแบบ 2’s
complement ผลจากคาสัง่ นีจ้ ะทาให้แฟล็กด มีค่าเป็ น 1 เสมอ
รูปแบบของคาสัง่ NEG
NEG register
NEG memory
Suan Dusit Rajabhat University (Computer Science)
23
คำสั่งทำงคณิตศำสตร์
ตัวอย่ำงคำสั่ง
Suan Dusit Rajabhat University (Computer Science)
24
คำสั่งทำงคณิตศำสตร์
2. กลุ่มคำสั่งคูณและหำร
คำสั่งคูณแบบคิดเครื่องหมำยและไม่คิดเครื่องหมำย : IMUL [Integer
multiplication] และ MUL [Multiplication]
การคูณใน 8086 นัน้ ค่าของตัวตัง้ ของการคูณ และค่าผลลัพธ์ของการคูณนัน้ จะต้อง
เก็บในรีจสิ เตอร์ทกี่ าหนดไว้ โดยขึน้ กับขนาดของการคูณ รีจสิ เตอร์ทกี่ าหนดไว้เป็ นดังนี้
การคูณข้อมูล 8 บิต :ตัวตัง้ AL ผลลัพธ์ AX.
การคูณข้อมูล 16 บิต :ตัวตัง้ AX ผลลัพธ์ DX, AX
[16 บิตบนที่ DX 16 บิตล่างที่ AX]
Suan Dusit Rajabhat University (Computer Science)
25
คำสั่งทำงคณิตศำสตร์
เราจะระบุตวั คูณและขนาดของการคูณทีโ่ อเปอร์แรนด์ของคาสัง่ IMUL หรือ MUL
ทัง้ สองคาสัง่ มีรูปแบบดังนี้
IMUL register
MUL register
IMUL memory
MUL memory
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
26
คำสั่งทำงคณิตศำสตร์
คำสั่งหำรแบบคิดเครื่องหมำยและไม่คิดเครื่องหมำย :
IDIV [Integer division] และ DIV [Division]
เช่นเดียวกับคาสัง่ คูณ ตัวตัง้ และผลลัพธ์สาหรับการประมวลผลคาสัง่ หารใน 8086
จะต้องเก็บรีจสิ เตอร์ซงึ่ กาหนดไว้ โดยจะขึน้ กับขนาดของการหารตัวเลขเช่นเดียวกัน
การหารข้อมูล 8 บิต : ตัวตัง้ AX
ผลลัพธ์ AL เศษ AH
การหารข้อมูล 16 บิต : ตัวตัง้ DX, AX ผลลัพธ์ AX เศษ DX
คาสัง่ IDIV และ DIV มีรูปแบบดังนี้
IDIV register
DIV register
IDIV memory
DIV memory
Suan Dusit Rajabhat University (Computer Science)
27
คำสั่งทำงคณิตศำสตร์
ตัวอย่างคาสัง่
คาสัง่ DIV และ IDIV จะไม่มผี ลกระทบกับแฟล็กใด ๆ แต่ถา้ ในการหารมีการหารด้วยศูนย์ หรือ
เกิดการหารทีไ่ ม่สามารถเก็บผลลัพธ์ลงในรีจสิ เตอร์ทตี่ ้องการได้ เช่นการหาร 1234 5678h
ด้วย 2h หน่วยประมวลผลจะสร้างสัญญาณการขัดจังหวะขึน้ เพือ่ แจ้งกับโปรแกรมทีจ่ ดั การระบบต่อไป
การเกิดการขัดจังหวะในลักษณะนีเ้ ราเรียกว่าเกิด Exception
Suan Dusit Rajabhat University (Computer Science)
28
คำสั่งทำงคณิตศำสตร์
3. กลุ่มคำสั่งแปลงขนำดตัวเลข
จากข้อจากัดของการใช้คาสัง่ หารทีต่ วั ตัง้ จะต้องมีขนาดมากกว่าตัวหาร ทาให้ใน
บางครัง้ ทีเ่ ราต้องการหารข้อมูลทีม่ ขี นาดเท่ากัน เราจะต้องแปลงตัวตัง้ ให้มขี นาดทีเ่ หมาะสม
เสียก่อน สาหรับการแปลงขนาดของเลขไม่คดิ เครือ่ งหมายนัน้ เราสามารถกระทาได้โดย
กาหนดให้ขอ้ มูลนัยสาคัญสูงทีข่ ยายเพิม่ มานัน้ มีค่าเป็ นศูนย์ ตัวอย่างเช่น การขยาย AL
ทีเ่ ป็ นตัวเลขแบบไม่คดิ เครือ่ งหมายให้เป็ นข้อมูล 16 บิตใน AX สามารถกระทาได้โดย
กาหนดค่าศูนย์ให้กบั AH แต่ในกรณีของตัวเลขแบบคิดเครือ่ งหมายนัน้ ถ้าตัวเลขมีค่า
เป็ นลบการกาหนดค่าศูนย์ให้กบั ข้อมูลนัยสาคัญสูงทีข่ ยายเพิม่ มานัน้ จะทาให้ค่าของเลขทีไ่ ด้
มีความผิดพลาดได้ ในการขยายขนาดของเลขคิดเครือ่ งหมายเราจึงต้องใช้คาสัง่ ที่
เหมาะสม
Suan Dusit Rajabhat University (Computer Science)
29
คำสั่งทำงคณิตศำสตร์
คำสั่งแปลงจำกไบต์เป็ นเวิร์ด : CBW [Convert byte to word]
คาสัง่ นีจ้ ะแปลงเลขแบบคิดเครือ่ งหมายขนาด 8 บิตใน AL เป็ นเลขคิดเครือ่ งหมาย
ขนาด 16 บิตใน AX
รูปแบบของคาสัง่
CBW
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
30
คำสั่งทำงคณิตศำสตร์
คำสั่งแปลงจำกเวิร์ดเป็ นดับเบิลเวิร์ด : CWD [Convert word to
doubleword]
คาสัง่ นีจ้ ะแปลงเลขแบบคิดเครือ่ งหมายขนาด 16 บิตใน AX เป็ นเลขคิดเครือ่ งหมาย
ขนาด 32 บิตใน DX,AX
รูปแบบของคาสัง่
CWD
ตัวอย่างคาสัง่
Suan Dusit Rajabhat University (Computer Science)
31
ตัวอย่างการใช้คาสัง่ ทางคณิตศาสตร์
Suan Dusit Rajabhat University (Computer Science)
32
ผลกระทบของคาสัง่ ทางคณิตศาสตร์ต่อแฟล็ก
Suan Dusit Rajabhat University (Computer Science)
33
ผลกระทบของคาสัง่ ทางคณิตศาสตร์ต่อแฟล็ก
ตัวอย่ำงกำรเปลี่ยนแปลงของแฟล็กในกำรทำงำนของคำสั่งต่ำง ๆ
ตัวอย่ำงที่ 1
Suan Dusit Rajabhat University (Computer Science)
34
ผลกระทบของคาสัง่ ทางคณิตศาสตร์ต่อแฟล็ก
ตัวอย่ำงกำรเปลี่ยนแปลงของแฟล็กในกำรทำงำนของคำสั่งต่ำง ๆ
ตัวอย่ำงที่ 2
Suan Dusit Rajabhat University (Computer Science)
35
ผลกระทบของคาสัง่ ทางคณิตศาสตร์ต่อแฟล็ก
ตัวอย่ำงกำรเปลี่ยนแปลงของแฟล็กในกำรทำงำนของคำสั่งต่ำง ๆ
ตัวอย่ำงที่ 3
Suan Dusit Rajabhat University (Computer Science)
36
สรุป
 แฟล็ก (Flags) เป็ นรีจสิ เตอร์ขนาด 16 บิตทีใ่ ช้บ่งบอกผลลัพธ์ ทไี่ ด้จากการ
คานวณ คาสัง่ ทีเ่ กีย่ วข้องกับการคานวณจะส่งผลกระทบให้แฟล็กเปลีย่ นแปลงค่าไป การ
คัดลอกข้อมูลจะไม่ทาให้แฟล็กเปลีย่ นแปลง ค่าแฟล็กเปรียบเสมือนรีจสิ เตอร์ตวั หนึง่ แต่
แทนทีจ่ ะใช้เก็บค่าต่าง ๆ แฟล็กจะเก็บสถานะของการคานวณทางคณิตศาสตร์ ทผี่ า่ นมา
ตัวอย่างของสถานะของการคานวณ เช่น การมีบติ ทด มีการเก็บค่าล้นหลัก หรือ
ผลลัพธ์มคี ่าเป็ นศูนย์เป็ นต้น ใน 8086 แฟล็กจะมีขนาด 16 บิต โดยในแต่ละบิตจะ
เก็บค่าของสถานะการคานวณแบบหนึง่ ๆ ดังรูป
Suan Dusit Rajabhat University (Computer Science)
37
The End
Lesson 6
Suan Dusit Rajabhat University (Computer Science)
38