Addressing Modes ธนวัฒน์ แซ่เอียบ
Addressing เราสามารถพบ operand ได้ที่ไหน ? 1. 2. 3.
Addressing **** **** opcode operand (address field) location content **** **** 01011100 00001111 11110000 00000001 00000010 00000011 location content ฟิลด์ที่ใช้ระบุ address ใน instruction มีขนาดเล็ก เนื่องจากพื้นที่ส่วนหนึ่งสูญเสียให้กลับส่วนที่เป็น opcode
Addressing ดังนั้นต้องมีเทคนิคที่สามารถอ้างถึง location ในหน่วยความจำทั้งหมดได้ ซึ่งมีเทคนิคดังต่อไปนี้ Immediate Direct Indirect Register สถาปัตยกรรมทั้งหมดของคอมพิวเตอร์มี addressing mode มากกว่า 1 โหมดขึ้นไป Addressing mode กำหนดได้ที่ opcode ในส่วนที่เรียกว่า mode field
Immediate Addressing Instruction Operand เป็นรูปแบบที่ง่ายที่สุดของ addressing นั่นคือ operand ปรากฏอยู่ใน instruction OPERAND = A ส่วนมากใช้นิยามค่าคงที่หรือค่าเริ่มต้นให้กับตัวแปร ข้อดี ไม่มีการอ้างถึงหน่วยความจำทำให้ไม่ต้องใช้ cycle เพื่อเข้าถึงหน่วยความจำเพิ่มเติม
Immediate Addressing ข้อเสีย ขนาดของ operand ขึ้นอยู่กับขนาดของฟิลด์ address ตัวอย่าง Operand = 10110012 (1318) (8910) 1011001 Instruction
Direct Addressing Memory Operand Instruction A Operand ในฟิลด์ address เก็บ effective address ของ operand EA = A Effective address (EA) คือ address จริงๆของ location ที่มี operand การคำนวณ EA เพื่อให้ address จริงใช้กลไกของ paging และเกิดขึ้นเองภายในเครื่อง
Direct Addressing
Direct Addressing การกำหนดโหมด direct ในเครื่อง PDP8 สามารถกำหนดได้จากการกำหนดบิตตำแหน่งที่ 4 เท่ากับ 0 และถ้ากำหนดบิตตำแหน่งที่ 5 เท่ากับ 1 จะหมายถึงใช้ page ปัจจุบัน ตัวอย่างคำสั่ง TAD 2078 ปรากฏอยู่ใน location ที่ 02028 location content 001 010 000 111 000 010 000 010 TAD(001) direct mode(0) current page(1) offset(0 000 111)
Direct Addressing location content EA = page ของ location + offset 001 010 000 111 000 010 000 010 EA = page ของ location + offset 000 012 + 0 000 1112 000 010 000 1112 (02078)
Direct Addressing
Direct Addressing การกำหนดโหมด direct ในเครื่อง PDP8 สามารถกำหนดได้จากการกำหนดบิตตำแหน่งที่ 4 เท่ากับ 0 และถ้ากำหนดบิตตำแหน่งที่ 5 เท่ากับ 0 จะหมายถึงใช้ page ที่ 0 ตัวอย่างคำสั่ง TAD 108 ปรากฏอยู่ใน location ที่ 02048 location content 001 000 001 000 000 010 000 100 TAD(001) direct mode(0) zero page(0) offset(0 001 000)
Direct Addressing location content EA = page ที่ 0 + offset 001 000 001 000 000 010 000 010 EA = page ที่ 0 + offset 000 002 + 0 001 0002 000 000 001 0002 (00108)
Direct Addressing
Direct Addressing (x) คือ content ของ location ที่ x ดังนั้น operand = (EA) TAD 2078 Operand = (02078) = 00228 TAD 108 Operand = (00108) = 00178
Indirect addressing จากรูปแบบของ direct เราสามารถอ้างถึง location ได้เฉพาะ page ปัจจุบันและ page ที่ 0 ดังนั้นปัญหาคือเราสามารถอ้างถึง location ตำแหน่งอื่นได้หรือไม่
Indirect addressing วิธีการคือ มีกำหนดฟิลด์ address ให้ชี้ไปยัง location หนึ่ง ซึ่ง location นี้สามารถชี้ไปยัง location อื่นๆได้ทั้งหน่วยความจำ เพราะ location สามารถมีพื้นที่ว่างพอจัดเก็บ address ได้ทั้งหมด Memory Instruction A Operand
Indirect addressing การกำหนดโหมด indirect ในเครื่อง PDP8 สามารถกำหนดได้จากการกำหนดบิตตำแหน่งที่ 4 เท่ากับ 1 และถ้ากำหนดบิตตำแหน่งที่ 5 เท่ากับ 1 จะหมายถึงใช้ current page ตัวอย่างคำสั่ง TAD 6108 ปรากฏอยู่ใน location ที่ 02048 location content 001 110 001 000 000 010 000 100 TAD(001) indirect mode(1) current page(1) offset(0 001 000)
Indirect addressing location content A = page ของ location + offset 001 110 001 000 000 010 000 100 A = page ของ location + offset 000 012 + 0 001 0002 000 010 001 0002 (02108)
Indirect addressing
Indirect addressing EA = (A) EA = (02108) Page ที่ 2
Indirect addressing
Indirect addressing Operand = (EA) = (05128) = 33338
ที่มา William Stalling, Computer Organization and Architecture, USA Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From Bits and Gates to C and Beyond, USA