Operating System 2

Download Report

Transcript Operating System 2

Computer Architecture
and Assembly Language
By Juthawut Chantharamalee
Suan Dusit Rajabhat University (Computer Science)
1
บทที่ 12 โครงสร้างควบคุม
(Control Structure)
บทที่ 2
Suan Dusit Rajabhat University (Computer Science)
2
คำสั่งทำงตรรกศำสตร์
 คาสัง่ ในกลุม่ นีเ้ ป็ นคาสัง่ ประมวลผลข้อมูลระดับบิต โดยจะนาค่ าในแต่ละบิตของข้อมูลมา
ประมวลผลทางตรรกศาสตร์. คาสัง่ ในกลุม่ นีไ้ ด้แก่ คาสัง่ AND คาสัง่ OR
คาสัง่ XOR และคาสัง่ NOT รูปแบบการใช้งานของคาสัง่ AND คาสัง่
OR และคาสัง่ XOR จะมีลกั ษณะเหมือนกัน คือจะรับโอเปอร์แรนด์สองตัว และจะนา
ข้อมูลในโอเปอร์แรนด์ตวั แรกมากระทากับข้อมูลตัวทีส่ อง และจะเก็บผลลัพธ์ของการ
กระทานัน้ ในโอเปอร์แรนด์ตวั แรก ส่วนในกรณีของคาสัง่ NOT จะรับโอเปอร์แรนด์ตวั
เดียว และจะทาการกลับค่าในบิตแล้วเก็บผลลัพธ์ลงในโอเปอร์แรนด์ตวั นัน้ เลย ตาราง
ค่าความจริงของการกระทาทางตรรกศาสตร์เป็ นดังตารางที่ 12.1
Suan Dusit Rajabhat University (Computer Science)
3
ตารางที่ 12.1 ค่าของการกระทาทางตรรกศาสตร์
Suan Dusit Rajabhat University (Computer Science)
4
คำสั่ง AND
ผลลัพธ์ ของคาสัง่ AND จะมีบติ ทีเ่ ป็ น 1 เมือ่ บิตของข้อมูลตัวตัง้ ทัง้ สองตัวมีค่าเป็ น 1 (ตาราง 12.1)
ตัวอย่าง
Suan Dusit Rajabhat University (Computer Science)
5
คำสั่ง OR
 ผลลัพธ์ ของคาสัง่ OR จะมีบติ ทีเ่ ป็ น 1 เมือ่ บิตของข้อมูลตัวตัง้ ตัวใดตัวหนึง่ หรือทัง้ สองตัวมีค่าเป็ น 1
(ตาราง 12.1)
ตัวอย่าง
Suan Dusit Rajabhat University (Computer Science)
6
คำสั่ง XOR
 การทางานของคาสัง่ XOR จะคล้ายกับคาสัง่ OR แต่ในกรณีทขี่ อ้ มูลมีบติ ทีเ่ ป็ นหนึง่ ทัง้ คู่ ผลลัพธ์ ทไี่ ด้
จะมีค่าเป็ นศูนย์ (ตาราง 12.1) ลักษณะของการ XOR จะคล้ายกับการพิจารณาเหตุการณ์ทเี่ ป็ นไป
ได้ทงั้ สองเหตุการณ์ แต่ไม่สามารถเป็ นจริงพร้อมกันได้
ตัวอย่าง
Suan Dusit Rajabhat University (Computer Science)
7
คำสั่ง NOT
 คาสัง่ NOT จะสลับบิตของโอเปอร์ แรนด์จากศูนย์เป็ นหนึง่ และหนึง่ เป็ นศูนย์ (ตาราง 12.1)
ตัวอย่าง
mov
not
ax,1234h
ax
; ax = not(0001 0010 0011 0100)
; ax = (1110 1101 1100 1011) = 0EDCBh
Suan Dusit Rajabhat University (Computer Science)
8
คำสั่ง TEST
 คาสัง่ TEST จะทางานเหมือนคาสัง่ AND ทุกประการ แต่ผลลัพธ์ จากการ AND จะไม่เขียนค่าลง
ในโอเปอร์ แรนด์ตวั แรก ผลจากการใช้คาสัง่ นีจ้ ะปรากฏในแฟล็ก เรานิยมใช้คาสัง่ นีใ้ นการทดสอบว่าข้อมูลใน
บิตทีต่ ้องการมีค่าเป็ นหนึง่ หรือไม่ โดยเราจะพิจารณาผลลัพธ์ จากแฟล็กทด
ตัวอย่าง
Suan Dusit Rajabhat University (Computer Science)
9
กำรประยุกต์ใช้งำนคำสั่งทำงตรรกศำสตร์
 เราสามารถนาคาสัง่ ทางตรรกศาสตร์ มาใช้ในการประมวลผลข้อมูลระดับบิตได้ จากตารางที่ 12.1 เรา
สามารถสร้างตารางที่ 12.2 ซึง่ แสดงผลของการใช้คาสัง่ ทางตรรกศาสตร์ กบั ข้อมูลได้
ตำรำงที่ 12.2 ผลของการใช้คาสัง่ ทางตรรกศาสตร์ กบั ข้อมูล
จากตารางเราจะพบว่าถ้าเราต้องการให้บติ ใดของข้อมูลมีค่าเป็ นหนึง่ โดยทีบ่ ติ อืน่ มีค่าคงเดิม เราสามารถใช้
คาสัง่ AND ได้ และถ้าเราต้องการจะทาให้บติ ใดของข้อมูลมีค่าเป็ นศูนย์โดยไม่มผี ลกระทบกับแฟล็กอืน่ ๆ
เราสามารถใช้คาสัง่ OR สาหรับคาสัง่ XOR เราจะใช้ในกรณีทตี่ ้องการกลับบิตของข้อมูลจากศูนย์เป็ นหนึง่
Suan Dusit Rajabhat University (Computer Science)
10
ตัวอย่ำงกำรประยุกต์ใช้งำนคำสั่งทำงตรรกศำสตร์
 โปรแกรมตัวอย่างต่อไปนีจ้ ะเปลีย่ นบิตที่ 1 และ 2 ของ AL ให้มคี ่าเป็ นศูนย์ (การนับบิตจะนับบิตทีม่ ี
นัยสาคญต่าสุดเป็ นบิตที่ 0) และเปลีย่ นบิตที่ 4 และ 6 ให้มคี ่าเท่ากับ 1 พร้อมทัง้ กลับบิตที่ 3 ให้มคี ่า
ตรงกันข้าม การทางานคร่ าวจะมีลกั ษณะดังรูปที่ 12.1
Suan Dusit Rajabhat University (Computer Science)
11
คำสั่งเลื่อนบิต
 การประมวลผลอีกรูปแบบทีเ่ ราสามารถกระทากับข้อมูลในระดับขัน้ ของบิตได้แก่การเลือ่ น
บิต ลักษณะการเลือ่ นบิตเป็ นดังรูปที่ 12.2 ในการเลือ่ นบิตเราสามารถเลือ่ นได้ทงั้
ทางซ้ายและทางขวา โดยคาสัง่ สาหรับการเลือ่ นบิตไปทางซ้ายได้แก่ คำสั่ง SHL
(Shift Left) คาสัง่ สาหรับการเลือ่ นบิตไปทางขวาได้แก่ คำสั่ง SHR (Shift
Right) เรานิยมใช้การเลือ่ นบิตในการประมวลผลทีต่ ้องการประมวลผลข้อมูลทีละบิต
และมีการประมวลผลเป็ นแบบวงรอบ
Suan Dusit Rajabhat University (Computer Science)
12
คำสั่งเลื่อนบิต
รูปแบบของคาสัง่ เลือ่ นบิตมีลกั ษณะดังนี้
SHR regs,1
SHR mem,1
SHR regs,CL
SHR mem,CL
SHR regs,number
SHR mem,number
โดยรูปแบบของคาสัง่ SHL จะมีลกั ษณะเหมือนคาสัง่ SHR รูปแบบทีส่ ามจะใช้ได้กบั
หน่วยประมวลผล 80286 ขึน้ ไปเท่านัน้ โดยในการทีเ่ ราจะใช้รูปแบบของคาสัง่ ของ
80286 ในโปรแกรมเราจะต้องระบุ คำสั่งเทียม 286 ลงในโปรแกรมด้วย โดยใส่
คาสัง่ นีก้ ่อนหน้าการใช้งานคาสัง่ ครัง้ แรก
Suan Dusit Rajabhat University (Computer Science)
13
ตัวอย่างการใช้งานคาสัง่ เลือ่ นบิต
 โปรแกรมตัวอย่างต่อไปนีเ้ ป็ นโปรแกรมนับจานวนบิตทีม่ คี ่าเป็ นหนึง่ ใน AX โดยจะให้
Suan Dusit Rajabhat University (Computer Science)
14
ควำมหมำยทำงคณิตศำสตร์ของกำรเลื่อนบิต
 ตารางที่ 12.3 แสดงผลลัพธ์ ของการเลือ่ นบิตของข้อมูลต่าง ๆ จากตารางจะ
สังเกตได้ว่านอกจากการเลือ่ นบิตจะมีความหมายโดยตรงคือการเลือ่ นบิตไปทางซ้าย
หรือทางขวาแล้ว การเลือ่ นบิตยังมีความหมายทางคณิตศาสตร์อกี ด้วย
ตารางที่ 12.3 ตัวอย่างผลลัพธ์ของการเลือ่ นบิตของข้อมูลต่าง ๆ
Suan Dusit Rajabhat University (Computer Science)
15
ควำมหมำยทำงคณิตศำสตร์ของกำรเลื่อนบิต
 สังเกตว่าการเลือ่ นบิตไปทางซ้ายจะมีผลลัพธ์ เหมือนกับการคูณด้วยกาลังของสอง
ยกตัวอย่างเช่น การเลือ่ นบิตไปทางซ้าย 1 บิตจะเหมือนกับการคูณด้วยสอง. และการ
แต่เราจะต้องพิจารณากรณีทขี่ อ้ มูลอยู่ในขอบเขตด้วย เช่นกรณีของการเลือ่ น 0010
1110 ไปทางซ้าย 3 บิต (คูณด้วย 8) ผลลัพธ์ทไี่ ด้จะมีความผิดพลาด. การ
เลือ่ นบิตไปทางขวาจะให้ผลลัพธ์ตรงกันข้ามกับการเลือ่ นบิตไปทางขวา นัน่ คือจะเสมือน
การหารด้วยกาลังสอง (สังเกตว่าผลลัพธ์ทไี่ ด้จะมีการปัดเศษเนือ่ งจากบิตทีเ่ ลือ่ นจะ
หายไป เช่นในตัวอย่างทีเ่ ลือ่ นบิตทางขวา 3 บิต)
Suan Dusit Rajabhat University (Computer Science)
16
คำสั่งเลื่อนบิตแบบคิดเครื่องหมำย : คำสั่ง SAL และคำสั่ง SAR
 ถ้าเราใช้การเลือ่ นบิตแทนการคูณหรือหารด้วยกาลังของสองกับตัวเลขแบบคิด
เครือ่ งหมาย เราจะพบว่าการเลือ่ นบิตไปทางซ้ายทีแ่ สดงถึงการคูณนัน้ ยังสามารถใช้กบั
ตัวเลขแบบคิดเครือ่ งหมายได้ เนือ่ งจากหลักทีเ่ ลือ่ นเข้ามาแทนนัน้ ยังคงเป็ นเลขศูนย์
เหมือนในกรณีของเลขไม่คดิ เครือ่ งหมาย แต่ในกรณีของการเลือ่ นบิตไปทางขวาทีใ่ ช้
สาหรับการหารด้วยกาลังของสองนัน้ บิตทีเ่ ลือ่ นเข้ามาแทนอาจมีค่าเป็ น 0 หรือ 1 ก็
ได้ขน้ ึ กับเครือ่ งหมายของตัวเลขนัน้ เราจึงมีคาสัง่ เลือ่ นบิตทีใ่ ช้สาหรับเลขทีม่ องเป็ นเลข
คิดเครือ่ งหมาย คือคำสั่ง SAL (Shift Arithmetic Left) และ คำสั่ง
SAR (Shift Arithmetic Right) คาสัง่ SAL จะทางานเหมือนคาสัง่
SHL ทุกประกา ตัวอย่างการใช้งานคาสัง่ เป็ นดังตารางที่ 12.4
Suan Dusit Rajabhat University (Computer Science)
17
คำสั่งเลื่อนบิตแบบคิดเครื่องหมำย : คำสั่ง SAL และคำสั่ง SAR
ตารางที่ 12.4 ตัวอย่างผลลัพธ์ของการเลือ่ นบิตแบบคิดเครือ่ งหมาย
Suan Dusit Rajabhat University (Computer Science)
18
คำสั่งเลื่อนบิตแบบคิดเครื่องหมำย : คำสั่ง SAL และคำสั่ง SAR
ตัวอย่าง
mov
shl
add
mov
shl
mov
shl
add
bl,al
al,1
bl,al
cl,2
ax,cl
bx,ax
ax,1
bx,ax
;bl = al*3
;bx=(ax*4)+(ax*8) = ax*12
Suan Dusit Rajabhat University (Computer Science)
19
คำสั่งหมุนบิต
 คาสัง่ หมุนบิตมีความแตกต่างกับคาสัง่ เลือ่ นบิตในจุดทีว่ ่า บิตทีเ่ ลือ่ นไปแล้วไม่ได้ถูกทิ้ง
หายไป แต่จะถูกนามาใส่แทนบิตทีเ่ ลือ่ นไป โดยลักษณะการทางานคร่าว ๆ จะแสดงดัง
รูปที่ 12.3
Suan Dusit Rajabhat University (Computer Science)
20
คำสั่งหมุนบิต
 เช่นเดียวกับคาสัง่ เลือ่ นบิต คาสัง่ หมุนบิตมีลกั ษณะการหมุนสองแบบคือ หมุนไปทางซ้าย
(คำสั่ง ROL : Rotate Left) และ หมุนไปทางขวา (คำสั่ง ROR : Rotate
Right) รูปแบบของคาสัง่ ทัง้ สองจะมีลกั ษณะเหมือนคาสัง่ เลือ่ นบิต การทางานของคาสัง่
ทัง้ สองแสดงได้ดงั รูปที่ 12.4
เรานิยมใช้คาสัง่ หมุนบิตแทนคาสัง่ เลือ่ นบิตในกรณีทเี่ ราต้องการให้ค่าของข้อมูลกลับเหมือนเดิม
หลังประมวลผลครบรอบ
Suan Dusit Rajabhat University (Computer Science)
21
ตัวอย่างคาสัง่ หมุนบิต
Suan Dusit Rajabhat University (Computer Science)
22
คำสั่งหมุนบิตที่ผำ่ นแฟล็กทด
 คาสัง่ หมุนบิตอีกกลุม่ หนึง่ จะเป็ นการหมุนโดยนาบิตไปผ่านแฟล็กทด ลักษณะการทางานจะเป็ น
ดังรูปที่ 12.5 สังเกตว่าบิตทีเ่ ข้ามาแทนบิตทีห่ มุนไปจะนามาจากแฟล็กทด และบิตทีถ่ ูกหมุน
ออกไปจะเข้าไปแทนค่าในแฟล็กทด โดยคาสัง่ หมุนบิตผ่านแฟล็กทดคือคำสั่ง RCL
(Rotate Carry Left) และคำสั่ง RCR (Rotate Carry Right)
Suan Dusit Rajabhat University (Computer Science)
23
คำสั่งหมุนบิตที่ผำ่ นแฟล็กทด
 สังเกตว่าบิตทีล่ น้ ออกมาจะถูกนาไปพักทีแ่ ฟล็กทด ก่อนทีจ่ ะนามาแทนทีใ่ นข้อมูล เรา
นิยมใช้คาสัง่ หมุนบิตผ่านแฟล็กทดในการเลือ่ นบิตข้อมูลทีเ่ ก็บต่อเนือ่ งอยู่ในหลาย
รีจสิ เตอร์ ในการใช้งานคาสัง่ นีเ้ ราจะต้องกาหนดค่าให้กบั แฟล็กทดเสียก่อน โดยใช้
คาสัง่ STC และคาสัง่ CLC
ตัวอย่างการใช้งานคาสัง่ หมุนบิตทีผ่ า่ นแฟล็กทด
ตัวอย่างต่อไปนีเ้ ป็ นการเลือ่ นบิตของข้อมูลขนาด 32 บิตทีอ่ ยู่ในรีจสิ เตอร์ DX,AX ไป
ทางซ้าย 1 บิต
clc
rcl ax,1
rcl dx,1
Suan Dusit Rajabhat University (Computer Science)
24
คำสั่งหมุนบิตที่ผำ่ นแฟล็กทด
 สังเกตว่าบิตทีล่ น้ ออกมาจะถูกนาไปพักทีแ่ ฟล็กทด ก่อนทีจ่ ะนามาแทนทีใ่ นข้อมูล เรา
นิยมใช้คาสัง่ หมุนบิตผ่านแฟล็กทดในการเลือ่ นบิตข้อมูลทีเ่ ก็บต่อเนือ่ งอยู่ในหลาย
รีจสิ เตอร์ ในการใช้งานคาสัง่ นีเ้ ราจะต้องกาหนดค่าให้กบั แฟล็กทดเสียก่อน โดยใช้
คาสัง่ STC และคาสัง่ CLC
ตัวอย่างการใช้งานคาสัง่ หมุนบิตทีผ่ า่ นแฟล็กทด
ตัวอย่างต่อไปนีเ้ ป็ นการเลือ่ นบิตของข้อมูลขนาด 32 บิตทีอ่ ยู่ในรีจสิ เตอร์ DX,AX ไป
ทางซ้าย 1 บิต
clc
rcl ax,1
rcl dx,1
Suan Dusit Rajabhat University (Computer Science)
25
คำสั่งหมุนบิตที่ผำ่ นแฟล็กทด
Suan Dusit Rajabhat University (Computer Science)
26
ตัวอย่างการใช้งานคาสัง่ เกีย่ วกับการประมวลผลระดับบิต
Suan Dusit Rajabhat University (Computer Science)
27
สรุป
 คาสัง่ ทางตรรกศาสตร์เป็ นคาสัง่ ประมวลผลข้อมูลระดับบิต โดยจะนาค่าในแต่ละบิต
ของข้อมูลมาประมวลผลทางตรรกศาสตร์ คาสัง่ ในกลุม่ นีไ้ ด้แก่ คาสัง่ AND
คาสัง่ OR คาสัง่ XOR และคาสัง่ NOT รูปแบบการใช้งานของคาสัง่
AND คาสัง่ OR และคาสัง่ XOR จะมีลกั ษณะเหมือนกัน คือจะรับโอเปอร์แรนด์
สองตัว และจะนาข้อมูลในโอเปอร์แรนด์ตวั แรกมากระทากับข้อมูลตัวทีส่ อง และจะเก็บ
ผลลัพธ์ของการกระทานัน้ ในโอเปอร์แรนด์ตวั แรก
Suan Dusit Rajabhat University (Computer Science)
28
สรุป (ต่อ)
 ส่วนในกรณีของคาสัง่ NOT จะรับโอเปอร์แรนด์ตวั เดียว และจะทาการกลับค่าในบิต
แล้วเก็บผลลัพธ์ลงในโอเปอร์แรนด์ตวั นัน้ เลย ส่วนการประมวลผลอีกรูปแบบทีเ่ รา
สามารถกระทากับข้อมูลในระดับขัน้ ของบิตได้แก่การเลือ่ นบิต ในการเลือ่ นบิตเราสามารถ
เลือ่ นได้ทงั้ ทางซ้ายและทางขวา โดยคาสัง่ สาหรับการเลือ่ นบิตไปทางซ้ายได้แก่ คาสัง่
SHL (Shift Left) คาสัง่ สาหรับการเลือ่ นบิตไปทางขวาได้แก่ คาสัง่ SHR
(Shift Right) เรานิยมใช้การเลือ่ นบิตในการประมวลผลทีต่ ้องการประมวลผล
ข้อมูลทีละบิต และมีการประมวลผลเป็ นแบบวงรอบ
Suan Dusit Rajabhat University (Computer Science)
29
The End
Lesson 10
Suan Dusit Rajabhat University (Computer Science)
30