8088 CPU

[หน้าแรก][หน้าต่อไป]

ประเภทของข้อมูล (Data Type)

8088 มี data type ดังต่อไปนี้ 8 bit และ 16 bit unsigned binary integers 8 bit และ 16 bit two’s complement integers Pack decimals ( two BCD digits per type) Unpacked decimals ( one BCD digit per byte; the high-order 4 bits are 0s)

รีจีสเตอร์ใน 8088 (Register Set)

8088 เป็น 16 bit Microprocessor ซึ่งประกอบไปด้วย 16 bit Special purpose registers 13 ตัว และ flag จำนวน 9 flag ซึ่ง Special purpose register แต่ละตัวก็มีจุดประสงค์ในการใช้งานแตกต่างกันไป โดย AX ใช้เป็น Accumulator ; BX ใช้เป็น Base register ; CX เป็น counter และ DX ใช้เก็บ Temporary Data 8088 มี 4 segment register และ uses segment register addressing ซึ่งจะทำให้การอ้าง Address มีประสิทธิภาพมากขึ้นจาก 16 bit เป็น 20 bit และ สามารถทำ relocating ได้โดยทั้ง 4 segment เป็นอิสระจากกัน โดยแสดงดังรูป

ชุดคำสั่งใน 8088 Instruction Set

คำสั่งของ 8088 มีทั้ง 8 บิท และ 16 บิท และใช้ register AX เป็น Accumulator สำหรับคำสั่งที่ เป็นคำสั่งทางคณิตศาสตร์ และ ตรรกศาสตร์ ซึ่งพอจะสรุปเป็นชนิดของคำสั่งได้ดังต่อไปนี้ arithmetic ( integer , decimal); SHIFT and ROTATE ( with or without carry flag ); Logical ( AND ,OR ,NOT,XOR ); string ( MOVE , COMPARE , SCAN); control transfer ( JUMP , LOOP , REPEAT , CALL,RETURN ); interrupt ( INITIATE INTERRUPT, RETURN FROM INTERRUPT,SET and CLEAR IF flag); stack ( PUSH,POP,PUSH FLAGS,POP FLAGS); processor control ( ESCAPE ,HALT ,LOCK,TEST, WAIT,NO OP ); input (IN) and output (OUT) ( byte or word ); miscellaneous ( ADJUST , CONVERT, TRANSLATE);

รูปแบบของคำสั่ง (Instruction Format)

ทุกๆ คำสั่งจะถูกแทนด้วย op-code byte Implied operand instruction ประกอบด้วย op-code byte อย่างเดียว บางคำสั่งอาจจะเป็นได้ทั้ง 8 bit หรือ 16 bit ของ data ที่ตามหลัง op-code byte คำสั่งที่ดำเนินการกับ memory มีบาง byte สำหรับการระบุ address ซึ่งการระบุ address ประกอบด้วย address-mode byte ซึ่งตามหลังจาก displacement byte ที่อาจจะมีได้ 1 หรือ 2 byte เมื่อดำเนินการระบุ address จะเป็นตัวบอก addressing mode , address length , displacement และ base และ index register ซึ่งอธิบายต่อจากนี้ CPU จะทำการเลือก segment register โดย ตัวมันเอง แต่อย่างไรก็ตาม โปรแกรมเมอร์ สามารถที่จะจัดการกับคำสั่ง โดยใช้ segment-override-prefix byte สำหรับเลือกว่าจะใช้ segment register ใหน ซึ่งส่วนประกอบของคำสั่งของ 8088 นั้นได้แสดงไว้ในรูป

การกำหนดเลขที่ (Addressing)

ในการทำ addressing นั้น CPU จะคำนวณ bit address 20 bit โดยแบ่งออกเป็นสองส่วน ส่วนแรกจะคำนวณ 16 bit address โดยใช้ standard addressing modes ส่วนที่ 2 จะคำนวณ effective address โดยใช้ segment register addressing และเนื่องจากว่า 8088 ไม่สามารถทำ virtual memory ได้ physical address จึงให้ผลเหมือนกับ effective address ในขั้นตอนการ fetch คำสั่งนั้น CPU จะนำค่า address จาก program counter (PC)ซึ่งเป็นตำแหน่งของคำสั่งในหน่วยความจำ ส่วนในการใช้ stack นั้น CPU จะใช้ address จาก stack pointer (SP) และในการ execute คำสั่งนั้น CPU จะใช้ addressing mode byte และ displacement field ของคำสั่งมาพิจารณาการดำเนินการของ CPU address ใน byte addressing mode นั้นมี 3 fields คือ mod reg และ r/m

mod reg. r/m

ถ้า mod ไม่เท่ากับ 11 CPU จะเลือกใช้ standard addressing mode อันใดอันหนึ่งในรายการในตาราง 5.1 ซึ่ง standard addressing mode นั้น CPU จะไปเอา displacement ( disp ) มาจากคำสั่ง แต่ถ้า mod = 11 CPU จะใช้ register addressing โดยจะพิจารณาเลือกregisterจากฟิลด์ reg. และ 1 bit ของ opcode(w) ต้องเป็น 1 เพื่อบอกว่าเป็นการเลือก register

ตาราง 5.2 แสดงฟิลด์ reg. ในการเลือกregister เมื่อ mod = 11

Effective address information

8088 นั้นใช้ segment register 4 ตัวในการอ้างแอดเดรสจะทำให้ CPU address เปลี่ยนไปเป็น 20 bit effective address และ segment register แต่ละตัวสามารถอ้างหน่วยความจำในหน่วยความจำหลักได้ถึง 64กิโลไบต์ซึ่งsegment ทั้ง 4 ก็มีชื่อเรียกดังต่อไปนี้ data segment (DS) code segment(CS) stack segment(SS) extra segment (ES) โดยทั่วไปแล้ว data segment และ extra segment จะใช้เก็บ data ส่วน code segment จะเก็บส่วน execute program และ stack segment จะเก็บ data ในระบบ stack ในการที่เรากำหนดรูปแบบของ effective address จะทำให้ CPU รู้ว่าจะเลือกใช้ segment register ใดให้ตรงกับวิธีการเข้าสู่หน่วยความจำ ในระหว่างที่คำสั่งถูก fetch CPU จะไปเอา effective address จาก IP และจะเลือกใช้ Code segment (CS) เสมอ ระหว่างที่มีการดำเนินการ stack CPU จะไปเอาค่า effective address จาก SP และจะเลือกใช้ stack segment (SS) สำหรับ operation อื่นๆ CPU จะพิจารณาจาก ปัจจัยดังต่อไปนี้ เมื่อ CPU กำหนดรูปแบบของ effective address โดยใช้ base pointer (BP)มันก็จะ เลือก stack segment (SS) ถ้า CPU กำหนดรูปแบบของ effective address โดยใช้ Destination Index (DI) ซึ่งหมายถึงการใช้ string operation มันก็จะใช้ ES และทุกๆ operation CPU จะใช้ DS I/o 8088 มี คำสั่งของ input /output อยู่ 2 คำสั่ง คือ IN และ OUT ซึ่งจะเป็นการส่งผ่านข้อมูลระหว่าง accumulator ( จะใช้ AL ถ้าเป็น byte transfer และจะใช้ AX ถ้าเป็น word transfer ) CPU 8088 สามารถใช้กับ 16 bit I/O และสามารถจัดให้ใช้ ports เป็นแบบ 64 KB 8 bit หรือจะเป็น ports แบบ 32 KB 16 bit ก็ได้ และในการใช้ I/O operation CPU จะกำหนด port address จากคำสั่งเช่นเดียวกับการใช้ immediate operand หรือ จะกำหนด port address จาก register DX