ความแตกต่างระหว่างการแมปพอร์ตและการเข้าถึงหน่วยความจำแมป?


19

ใครสามารถอธิบายความแตกต่างระหว่างการแมปพอร์ตและการแมปหน่วยความจำได้และอะไรที่ทำให้ทั้งคู่สำเร็จ เหตุใดจึงมีการแมปพอร์ตความแตกต่างของโครงสร้างจากแผนที่หน่วยความจำและมีเหตุผลใดบ้างที่สถาปัตยกรรมจำนวนมากใช้ทั้งสอง นอกจากนี้ "พอร์ต" ในแง่นี้คืออะไรเพราะพอร์ตอาจหมายถึงสิ่งที่แตกต่างในบริบทที่แตกต่างกัน?

ตัวอย่าง: การส่งต่อพอร์ตพอร์ตเป็นจุดปลายการสื่อสาร "การแมปพอร์ต"

สมมติว่าฉันเขียน OUT ไปที่พอร์ต 400h (ตัวละครตัวอย่างเช่น) (เช่นใน x86-64 เป็นต้น)

ฉันกำลังเขียนอะไรหรือที่ไหนถ้ามันไม่ได้อยู่ในความทรงจำ? แมป "พอร์ต" เป็นอย่างไรและในแง่นี้คืออะไร



คำตอบ:


24

I / O ที่แม็พหน่วยความจำและ I / O ที่แม็พพอร์ตเป็นสองวิธีเสริมสำหรับ I / O

I / O ที่แมปหน่วยความจำ

ในระบบที่แมปหน่วยความจำอุปกรณ์ I / O จะเข้าถึงได้เหมือนเป็นส่วนหนึ่งของหน่วยความจำ LoadและStoreคำสั่งจะถูกดำเนินการสำหรับการอ่านและเขียนไปยังอุปกรณ์ I / O เช่นเดียวกับที่ใช้สำหรับหน่วยความจำ (พอร์ตที่แม็พมีคำสั่งพิเศษสำหรับ I / O) ซึ่งหมายความว่าอุปกรณ์ I / O ใช้บัสแอดเดรสเดียวกันกับหน่วยความจำหมายความว่า CPU สามารถอ้างถึงหน่วยความจำหรืออุปกรณ์ I / O ตามค่าที่อยู่ วิธีการนี้ต้องการการแยกในพื้นที่ที่อยู่นั่นคือที่อยู่ที่สงวนไว้สำหรับ I / O ไม่ควรมีอยู่ในหน่วยความจำกายภาพ

ด้านล่างนี้คือภาพของหนึ่งง่ายระบบคอมพิวเตอร์ขั้นพื้นฐาน กรณีมีความซับซ้อนมากขึ้นในระบบร่วมสมัย

ป้อนคำอธิบายรูปภาพที่นี่


พอร์ตที่แมป I / O

ตามที่Wikipedia

I / O ที่แม็พพอร์ตมักใช้คำสั่ง CPU คลาสพิเศษโดยเฉพาะสำหรับการดำเนินการ I / O พบได้ในไมโครโปรเซสเซอร์ของ Intel พร้อมกับคำแนะนำเข้าและออก คำแนะนำเหล่านี้สามารถอ่านและเขียนหนึ่งถึงสี่ไบต์ (outb, outw, outl) ไปยังอุปกรณ์ I / O อุปกรณ์ I / O มีช่องว่างที่อยู่แยกต่างหากจากหน่วยความจำทั่วไปโดยสามารถทำได้ด้วยพิน "I / O" พิเศษบนอินเทอร์เฟซทางกายภาพของ CPU หรือบัสทั้งหมดที่ใช้กับ I / O เนื่องจากพื้นที่ที่อยู่สำหรับ I / O ถูกแยกออกจากพื้นที่หน่วยความจำหลักบางครั้งจึงเรียกว่า I / O แบบแยก


สำหรับข้อดีและข้อเสีย: เนื่องจากอุปกรณ์ต่อพ่วงช้ากว่าหน่วยความจำการแบ่งปันข้อมูลและบัสแอดเดรสอาจทำให้การเข้าถึงหน่วยความจำช้าลง ในทางตรงกันข้ามโดย I / O ระบบหน่วยความจำที่เรียบง่าย I / O ให้ CPU ต้องใช้ตรรกะภายในน้อยลงและสิ่งนี้จะช่วยให้เร็วขึ้นถูกกว่าและใช้พลังงานน้อยกว่า CPU ที่จะใช้ ตรรกะนั้นคล้ายกับของระบบ RISC: ลดความซับซ้อนได้รับการทุ่มเทมากขึ้นและมีระบบที่แข็งแกร่งซึ่งมีประโยชน์ค่อนข้างมากสำหรับระบบสมองกลฝังตัว

ตรงกันข้าม (อีกครั้งจาก Wiki):

คำแนะนำพอร์ต I / O ที่แมปมักจะมีข้อ จำกัด มากมักจะให้การโหลดและการจัดเก็บอย่างง่ายระหว่างการลงทะเบียน CPU และพอร์ต I / O เท่านั้นตัวอย่างเช่นการเพิ่มค่าคงที่ไปยังการลงทะเบียนอุปกรณ์ที่แมปพอร์ตจะต้องมีสาม คำแนะนำ: อ่านพอร์ตไปยัง CPU register เพิ่มค่าคงที่ของ CPU register และเขียนผลลัพธ์กลับไปที่พอร์ต

ฉันขอแนะนำให้คุณอ่านบทความ wiki นั้นสำหรับข้อมูลเพิ่มเติม


ในการตอบคำถามของคุณ:

ฉันกำลังเขียนอะไรหรือที่ไหนถ้ามันไม่ได้อยู่ในความทรงจำ?

คุณกำลังเขียนไปยังรีจิสเตอร์ของอินเทอร์เฟซ I / O ผ่านบัสข้อมูลซึ่งต่อมา (เมื่อพร้อม) จะส่งข้อมูลไปยังอุปกรณ์ I / O จริง ด้านล่างเป็นรูปภาพของอินเทอร์เฟซอุปกรณ์ I / O ตัวอย่าง

ป้อนคำอธิบายรูปภาพที่นี่


สิ่งนี้หมายความว่าคุณเขียนหน่วยความจำแมป "วิธีนี้ต้องแยกในพื้นที่ที่อยู่: นั่นคือที่อยู่ที่สงวนไว้สำหรับ I / O ไม่ควรพร้อมใช้งานกับหน่วยความจำกายภาพ" คุณหมายถึงที่อยู่ที่สงวนไว้สำหรับ I / O อยู่ในหน่วยความจำหลักและไม่พร้อมใช้งานสำหรับที่ไม่ใช่ I / O เห็นได้ชัดว่าที่อยู่ IO และที่อยู่ที่ไม่ใช่ IO คือหน่วยความจำกายภาพ ไม่มีสิ่งเช่นหน่วยความจำที่ไม่ได้อยู่จริง (เว้นแต่คุณจะเป็นผู้เชื่อในข้อโต้แย้งของวิลเลียมเลนเคร็กนั่นคือสิ่งนั้นสามารถมีสมองและความทรงจำที่ไม่ใช่ทางกายภาพ!)
barlop

1
และเมื่อคุณเขียน "คุณกำลังเขียนไปยังรีจิสเตอร์ของ I / O อินเตอร์เฟสผ่าน data บัสซึ่งต่อมา (เมื่อพร้อม) จะส่งข้อมูลไปยังอุปกรณ์ I / O จริงด้านล่างเป็นรูปภาพของตัวอย่าง I / O อุปกรณ์." คุณยังไม่ชัดเจนว่า IO "register" อยู่ในอุปกรณ์หรือไม่ฉันคิดว่าถ้าคุณเรียกมันว่า register มันดูเหมือนว่าอยู่ในอุปกรณ์ แต่จากนั้นคุณเขียน ".. ซึ่งภายหลัง (เมื่อพร้อม) จะส่งข้อมูลไปยังอุปกรณ์ I / O จริง" ดังนั้นจึงไม่ชัดเจนว่าคุณกำลังพูดถึงตำแหน่งหน่วยความจำเหล่านี้อยู่ที่ใด ไม่ว่าพวกเขาจะอยู่ในอุปกรณ์หรือไม่ว่าจะอยู่นอกอุปกรณ์ .. หรือเคยอยู่นอกอุปกรณ์
barlop

1
มุ่งหน้าไป: ฉันรวบรวมสิ่งที่ฉันได้เรียนรู้จากการบรรยายไมโครโปรเซสเซอร์และจากวิกิ สิ่งที่ฉันหมายถึงที่คุณถามในความคิดเห็นแรกของคุณคือ: "ที่อยู่ IO และที่อยู่ที่ไม่ใช่ IO เป็นหน่วยความจำกายภาพ" ไม่ชัดเจนอย่างที่คุณคิด ที่จริง (เท่าที่ฉันรู้เท่าที่ฉันสอน) เครื่องถอดรหัสรหัสที่อยู่เปิดใช้งานอินเทอร์เฟซ IO เมื่อมีการระบุที่อยู่ IO ซึ่งหมายความว่าเมื่อคุณให้ที่อยู่มันไม่ควรอยู่ในช่วงของที่อยู่จริงเช่น $ 0000 - $ 00FF สำหรับทางกายภาพและ $ 0100 - $ 01FF สำหรับ IO (ละเว้นจำนวนเงินเพียงแค่ดูแลขอบเขต)
Varaquilex

@barlop สำหรับคำถามที่สองของคุณคุณอยู่ที่นี่สิ่งที่ฉันหมายถึงคือ "ด้านล่างเป็นภาพของอินเทอร์เฟซอุปกรณ์ I / O ตัวอย่าง" ฉันแก้ไขสิ่งนี้ในการแก้ไขที่ฉันเพิ่งทำ ฉันหวังว่าการแก้ไขจะขจัดความสับสนออกไป ถ้าไม่ถามเพิ่มเติม ฉันจะพยายามตอบให้ดีที่สุดเท่าที่จะทำได้
Varaquilex

1
@barlop จุดที่ตั้งของหน่วยความจำนั้นคลุมเครือในเกือบทุกโพสต์และวรรณกรรมที่ฉันเจอ พวกเขาคิดว่าคุณรู้อยู่แล้วหรือไม่ก็ไม่รู้ ฉันเชื่อว่าคำตอบอยู่ในคำเหล่านี้จาก LDD3 ch 9: "หน่วยความจำ I / O เป็นเพียงส่วนหนึ่งของพื้นที่ที่มีลักษณะคล้าย RAM ที่อุปกรณ์นั้นมีให้สำหรับโปรเซสเซอร์ผ่านบัส" (เพิ่มตัวเอียง) เช่นหน่วยความจำและ / หรือการลงทะเบียนอยู่ในอุปกรณ์ พอร์ต I / O และหน่วยความจำ I / O เป็นเพียง 2 วิธีที่ระบบทำให้ตำแหน่งเหล่านั้นพร้อมใช้งานกับซอฟต์แวร์
orodbhen

2

ในหน่วยความจำที่แมป I / O (เพียง MMIO) อุปกรณ์จะเข้าถึงผ่านคำแนะนำซึ่งหมายถึงการเข้าถึงหน่วยความจำ อุปกรณ์แต่ละเครื่องจะได้รับที่อยู่หน่วยความจำที่แน่นอน อย่างไรก็ตามเมื่อคุณพยายามที่จะอ่านหรือเขียนส่วนนี้ของหน่วยความจำอุปกรณ์บางอย่าง (น่าจะเป็น Northbridge) เพียงแค่ส่งไปยังอุปกรณ์ที่เกี่ยวข้องแทน แม้ว่าคอมพิวเตอร์จะมีหน่วยความจำไม่เพียงพอสำหรับที่อยู่ดังกล่าว (เนื่องจากที่อยู่ MMIO มักจะสูงมาก) แต่ก็ไม่สำคัญว่าจะเป็นหน่วยความจำกายภาพ (นั่นคือที่อยู่ที่คุณเห็นเมื่อดูที่เมนบอร์ดซึ่งเป็นที่รู้จักในชื่อ RAM ) ไม่เกี่ยวข้องกันเลย หากคุณมี RAM เพียงพอสำหรับที่อยู่อาจมีการแมปกับที่ไม่ใช่ I / O ที่สูงกว่าหรือเพิ่งสูญเสียหมายความว่าคุณไม่สามารถอ่านหรือเขียนลงไปที่นั่นได้

I-O ที่แมปกับพอร์ต (เพียง PMIO) นั้นแตกต่างกันมาก คุณมีคำแนะนำต่าง ๆ ที่ใช้ในการอ่านและเขียนไปยังพอร์ต มีที่อยู่พอร์ตพื้นที่เช่นเดียวกับที่อยู่หน่วยความจำพื้นที่ที่อยู่เป็นทั้งที่อยู่ I / O ที่สื่อสารกับอุปกรณ์จริงหรือไม่ถูกต้อง PMIO อาจถูกคิดว่าเป็น MMIO ที่มีพื้นที่แอดเดรสหน่วยความจำแยกต่างหากสำหรับ I / O


"PMIO สามารถคิดได้ว่าเป็น MMIO ที่มีพื้นที่แอดเดรสหน่วยความจำแยกต่างหากสำหรับ I / O" - พื้นที่ที่อยู่นั้นเป็นแนวคิดที่เรียบง่ายและเป็นพื้นฐานทำไมคุณถึงพูดถึงการเปรียบเทียบที่ทำให้เข้าใจผิดกับคำตอบที่สมเหตุสมผล การเปรียบเทียบที่ทำให้เข้าใจผิดนั้นไม่เปลี่ยนแปลงข้อเท็จจริง: เช่นอาจมีช่องว่างที่อยู่อื่นนอกเหนือจาก "พื้นที่ที่อยู่หน่วยความจำ"
ขี้เลื่อย

1

ด้วยชื่ออย่าง 'สัญญาณ I / O' และ 'การแมปหน่วยความจำ' ทุกอย่างมีความซับซ้อนมากกว่าที่เป็นจริงและทำให้ผู้คนมีความประทับใจมากกว่าและครอบคลุมหัวข้อขั้นสูง แนวโน้มตอนนี้คือผู้คนมองว่าเป็นสิ่งใหม่ แต่นี่ไกลจากกรณี แม้แต่ Babbage ในยุค 1830 ก็ขับเครื่องพิมพ์ของเขาสิ่งนี้ต้องการสัญญาณ I / O แม้ว่าจะทำโดยแกนและล้อเฟือง เช่นในเครื่องจักรของ Hero of Alexandria เมื่อ 2,000 ปีที่แล้วหรือในโรงภาพยนตร์ย้อนกลับไปสมัยกรีกพวกเขามักจะดึงเชือกจากชุดเชือกต่าง ๆ เพื่อควบคุมแสงไฟหรือทิวทัศน์เชือกแต่ละเส้นมีลักษณะเหมือนสายเข้าและออก ง่าย ๆ เช่นนั้นที่อยู่คือ 'สายใด' เช่นสิ่งใดหน่วยความจำหรืออุปกรณ์ที่เราเลือก

แม้ว่าคอมพิวเตอร์เมนเฟรมขนาดใหญ่ที่เต็มไปด้วยตู้ แต่ใช้สิ่งต่าง ๆ เช่น 64 บิตทันทีในยุค 40 และจัดการกับการทำแผนที่ I / O เพียงหลังเดียวก่อนหน้านี้นานมาแล้ว e..g Konrad Zuse และคอมพิวเตอร์ขนาดห้องของเขาลอย จุดที่มีตัวเลขทศนิยมประมาณ 20 หลักในช่วงทศวรรษที่ 1930 และต้องขับสิ่งต่าง ๆ เช่นเครื่องพิมพ์และไฟแสดงสถานะหลอดไฟต่างๆและสวิตช์ของเขา แต่ในไมโครโปรเซสเซอร์ขนาดเล็กเรื่องราวนั้นแตกต่างกันพวกเขาไม่ได้มองเห็นจนถึงยุค 60 และสร้างจนถึงปี 1971 เทคนิคทั้งหมดนี้ใช้ 8 บิตลอจิกในยุค 80 ใช้สำหรับไมโครโปรเซสเซอร์ใน 4 บิตในยุค 70, 2 บิตใน 60 และถูกใช้ ใน 16 บิตใน 90 ' s เมื่อทุกคนเริ่มได้รับคอมพิวเตอร์และด้วยเหตุนี้เพราะตอนนี้ต่อหน้าพวกเขาเริ่มพูดคุยเรื่อง I / O และการแมปหน่วยความจำเป็นครั้งแรกและดูเหมือนจะเป็นสิ่งใหม่ที่มาพร้อมกับการกำเนิดของอินเทอร์เน็ต จากนั้นเรามี 32 บิตในคอมพิวเตอร์ 00 และ 64 บิตใน 10 ซึ่งทำให้มีการพูดคุยกันอย่างไม่มีที่สิ้นสุดของหน่วยความจำลงบรรทัดข้อมูล เพื่อที่จะตอบคำถามของคุณฉันจะพูดถึงชิปที่มือสมัครเล่นอิเล็กทรอนิกส์ซื้อเมื่อ 30-40 ปีที่แล้วเช่นฉันทำในเวลานั้นตั้งแต่ต่อมาสิ่งต่าง ๆ ก้าวหน้าไปมากฉันไม่สามารถสร้างด้วยชิปในภายหลังได้ หลักการก็เหมือนกันตอนนี้ประตูถูกซ่อนอยู่ในชิปกล่องดำที่ใหญ่กว่าซึ่งรวมพินอื่น ๆ ที่จัดการกับการดำเนินการเหล่านี้ไปพร้อม ๆ กันมากขึ้น (เช่นเปิดใช้งานสลักแปดด้าน

ฉันไม่รู้อะไรเลยเกี่ยวกับภาษาใหม่หรือในพีซียุคใหม่ตอนนี้ แต่ฉันสามารถบอกคุณได้ว่าเมื่อก่อนฉันเคยสร้างคอมพิวเตอร์ด้วยชิป

การแมป I / O ทั้งหมดและการจับคู่หน่วยความจำหมายถึงคำศัพท์ง่ายๆคือถ้าคุณเครียดตัวอย่างหลอดไฟสำหรับการเฉลิมฉลองบางอย่างและมีสายไฟเชื่อมต่อกันและเรียกว่าตำแหน่งหน่วยความจำกระเปาะ (เช่นหลอดไฟแสดงถึงหน่วยความจำใน RAM) เปิดหรือปิดและหากคุณเลือกตำแหน่ง 0 คุณจะได้รับสาย 0, ตำแหน่ง 1, สาย 1, loc 2 สาย 2 และอื่น ๆ ) หากคุณเพิ่มสายอื่น ๆ อีกเช่นสายหนึ่งเป็นระฆังสถานที่นั้นไม่ใช่หน่วยความจำ เป็นอุปกรณ์ที่คุณส่งออกไปโดยใช้คำสั่ง OUT เพื่อทำให้อุปกรณ์ดังขึ้น แต่มันถูกมองว่าเป็นตำแหน่งหน่วยความจำจากมุมมองของคอมพิวเตอร์เพราะมันเป็นสายไปยัง MPU เหมือนกัน หากมีการเพิ่มสายอื่นซึ่งเป็นสวิตช์ที่คุณทำงานภายนอกนี่เป็นอุปกรณ์ I / O ซึ่งจะเป็นคำสั่ง IN สำหรับพีซี ดังนั้นนี่เรียกว่า I / O ที่แมป I / O

ตอนนี้บนคอมพิวเตอร์การเดินสายบนรถบัสเป็นตัวแทนของที่อยู่หรือสายข้อมูล แต่พวกมันอยู่ในรูปแบบไบนารี่เช่นด้วย 2 สายคุณสามารถมี 00 01 10 11 คือ 4 แบบผสม 2 ^ 2 ดังนั้นด้วยความเป็นไปได้ 8 บรรทัด 2 ^ 8 = 256 ด้วย 20 สาย 2 ^ 20 = 1048576 กับ 30 สาย 2 ^ 30 = 1073741824 (1 กิ๊ก) ของความเป็นไปได้ที่มี 30 บรรทัด ดังนั้นนี่คือสาเหตุที่เรียกว่า MAPPED แทนที่จะบอกว่า I / O และหน่วยความจำพวกเขากำลังบอกว่า I / O ที่ถูกแมปและหน่วยความจำที่แมปเพราะคุณกำลังทำแผนที่สายเป็นแบบรวมกันและการเข้ารหัสไบนารี ดังนั้นถ้าคุณมีสาย 2 เส้น 4 ชุดพวกเขาไม่สามารถเชื่อมต่อกับหลอดไฟได้ (ไม่ต้องพูดถึงแอมพลิไฟเออร์ปัจจุบันที่ต้องใช้แรงดันไฟฟ้าขนาดเล็กจาก MPU และการป้องกันกระแสตอบรับ) แต่สายทั้งสองมี เพื่อผ่านตัวถอดรหัส (เราเคยใช้ 138 เพื่อถอดรหัส 3 บรรทัดเป็น 8 บรรทัด, 164 เพื่อถอดรหัส 4 ไบนารีบรรทัดเป็น 16 บรรทัด ) เมื่อผ่านตัวถอดรหัส 2 บรรทัดเหล่านี้เช่น A0 และ A1 (ที่อยู่ 0 และที่อยู่ 1 (สาย)) ให้กลายเป็น 4 บรรทัด (หรือปิด) สำหรับหลอดไฟที่คุณกำลังขับรถ (ในกรณีบนคอมพิวเตอร์หน่วยความจำ) แต่ ในบางกรณีที่ตั้งเหล่านี้แทนที่จะเลือกอุปกรณ์อินพุต / เอาท์พุตและพูดว่า 'ใช้ฉัน' แทนเช่นหน่วยความจำที่ตั้งอยู่เมื่อข้อมูลถูกส่งผ่านทางใดทางหนึ่งหรืออื่น ๆ (ใช้ตรรกะรัฐไตรฉลาดที่จะตัดแรงดันทาง แต่ละครั้ง) บน data bus line D0..7 หรือ D0..31 หรือขนาดใดก็ตามที่ข้อมูลในคอมพิวเตอร์คือ (คุณมี 2 บิต, 4 บิต, 8 บิต, 16 บิต, 16 บิต, 32 บิต, 64 บิต, 64 บิต, 128 บิต, 256 บิต, คอมพิวเตอร์ คอมพิวเตอร์ที่คุณกำลังสร้าง) ดังนั้นข้อมูลที่ส่งผ่านเข้าหรือออกจากสายข้อมูลไปยังหน่วยความจำหรืออุปกรณ์ I / O ตามธรรมชาติ (ถ้าเป็นแผนที่ที่มีหน่วยความจำ) แต่ไม่ควรกังวลกับคำแนะนำเข้า / ออก หมายถึงการเข้าและออกจากบล็อกหน่วยความจำ I / O อื่น ๆ บล็อกหน่วยความจำ I / O พิเศษภายใน MPU ที่ได้รับมอบหมายเป็นพิเศษสำหรับ I / O เช่น (ไม่ใช่การแมปหน่วยความจำ) พื้นที่ I / O นี้ที่คุณไม่ได้รับ ในไมโครโปรเซสเซอร์บางตัวเช่นฉันไม่คิดว่าเรามีใน 6502 แต่เรามีไว้ใน z80 ชิปศิลปะที่ใช้ในการทำแผนที่หน่วยความจำเช่นในเกมคอนโซล ฯลฯ ชิปที่สมเหตุสมผล แต่ไม่น่าสนใจ (อยู่ในหนังสือ) จะใช้พื้นที่ I / O เช่นกัน หน่วยความจำที่แมป I / O นั้นลดความเร็วลงเนื่องจากมันรวมเอาการกำหนดแอดเดรสของหน่วยความจำ (ซึ่งเร็วสุดสำหรับแรม) ดังนั้นคอมพิวเตอร์ประเภทกราฟิกจึงใช้เพียงการแมปหน่วยความจำสำหรับ I / O เพื่อให้ได้ความเร็ว I / O ที่แมป I / O ถูกกำหนดไว้สำหรับพอร์ตที่ช้าเช่น rs232 หรือพอร์ตขนานและใช้คำสั่ง IN OUT อี (ไม่ใช่การแมปหน่วยความจำ) พื้นที่ I / O นี้ที่คุณไม่ได้ใช้กับไมโครโปรเซสเซอร์บางตัวเช่นฉันไม่คิดว่าเรามีใน 6502 แต่เรามีไว้ใน z80 ชิปศิลปะที่ใช้ในการทำแผนที่หน่วยความจำเช่นในเกมคอนโซล ฯลฯ ชิปที่สมเหตุสมผล แต่ไม่น่าสนใจ (อยู่ในหนังสือ) จะใช้พื้นที่ I / O เช่นกัน หน่วยความจำที่แมป I / O นั้นลดความเร็วลงเนื่องจากมันรวมเอาการกำหนดแอดเดรสของหน่วยความจำ (ซึ่งเร็วสุดสำหรับแรม) ดังนั้นคอมพิวเตอร์ประเภทกราฟิกจึงใช้เพียงการแมปหน่วยความจำสำหรับ I / O เพื่อให้ได้ความเร็ว I / O ที่แมป I / O ถูกกำหนดไว้สำหรับพอร์ตที่ช้าเช่น rs232 หรือพอร์ตขนานและใช้คำสั่ง IN OUT อี (ไม่ใช่การแมปหน่วยความจำ) พื้นที่ I / O นี้ที่คุณไม่ได้ใช้กับไมโครโปรเซสเซอร์บางตัวเช่นฉันไม่คิดว่าเรามีใน 6502 แต่เรามีไว้ใน z80 ชิปศิลปะที่ใช้ในการทำแผนที่หน่วยความจำเช่นในเกมคอนโซล ฯลฯ ชิปที่สมเหตุสมผล แต่ไม่น่าสนใจ (อยู่ในหนังสือ) จะใช้พื้นที่ I / O เช่นกัน หน่วยความจำที่แมป I / O นั้นลดความเร็วลงเนื่องจากมันรวมเอาการกำหนดแอดเดรสของหน่วยความจำ (ซึ่งเร็วสุดสำหรับแรม) ดังนั้นคอมพิวเตอร์ประเภทกราฟิกจึงใช้เพียงการแมปหน่วยความจำสำหรับ I / O เพื่อให้ได้ความเร็ว I / O ที่แมป I / O ถูกกำหนดไว้สำหรับพอร์ตที่ช้าเช่น rs232 หรือพอร์ตขนานและใช้คำสั่ง IN OUT ชิปที่สมเหตุสมผล แต่ไม่น่าสนใจ (อยู่ในหนังสือ) จะใช้พื้นที่ I / O เช่นกัน หน่วยความจำที่แมป I / O นั้นลดความเร็วลงเนื่องจากมันรวมเอาการกำหนดแอดเดรสของหน่วยความจำ (ซึ่งเร็วสุดสำหรับแรม) ดังนั้นคอมพิวเตอร์ประเภทกราฟิกจึงใช้เพียงการแมปหน่วยความจำสำหรับ I / O เพื่อให้ได้ความเร็ว I / O ที่แมป I / O ถูกกำหนดไว้สำหรับพอร์ตที่ช้าเช่น rs232 หรือพอร์ตขนานและใช้คำสั่ง IN OUT ชิปที่สมเหตุสมผล แต่ไม่น่าสนใจ (อยู่ในหนังสือ) จะใช้พื้นที่ I / O เช่นกัน หน่วยความจำที่แมป I / O นั้นลดความเร็วลงเนื่องจากมันรวมเอาการกำหนดแอดเดรสของหน่วยความจำ (ซึ่งเร็วสุดสำหรับแรม) ดังนั้นคอมพิวเตอร์ประเภทกราฟิกจึงใช้เพียงการแมปหน่วยความจำสำหรับ I / O เพื่อให้ได้ความเร็ว I / O ที่แมป I / O ถูกกำหนดไว้สำหรับพอร์ตที่ช้าเช่น rs232 หรือพอร์ตขนานและใช้คำสั่ง IN OUT

ตอนนี้ถ้าแทนที่จะเพิ่มสายสองเส้นถ้าคุณเปลี่ยนสายจริงสองเส้นที่เดิมไปที่หลอดไฟและนำหลอดไฟเหล่านั้นมาแทนที่ด้วยสิ่งอื่น ๆ เช่นกระดิ่งที่สวิตช์หนึ่งและสวิตช์อีกอันตอนนี้จะไม่ได้อ้างอิง (เลือกไว้ ) โดยใช้คำแนะนำเข้าและออกตามลำดับพวกเขาจะถูกอ้างอิงโดยการเข้าถึงตำแหน่งหน่วยความจำนั้นโดยเฉพาะที่เลือกสายเหล่านั้น (ซึ่งเป็นหลอดไฟเดิม) ดังนั้นนี่คือหน่วยความจำที่แมป I / O

หน่วยความจำที่แมป I / O หมายความว่าบัสแอดเดรสจริงที่โดยปกติแล้วจะไปที่หน่วยความจำ (RAM) เชื่อมต่อกับตัวถอดรหัส OTHER (ตัวถอดรหัสตรรกะ) และเมื่อมันรับรู้การรวมกันแบบไบนารีที่เฉพาะเจาะจงของสัญญาณที่อยู่ (เช่นถ้าคุณโหลดและไม่เปิดประตูและคุณบอกว่าถ้าเป็นเช่นนั้นและไม่ใช่อย่างนั้นให้ใช้หมุด A0 .. A20 หรือขนาดที่อยู่บัสของคุณ) ดังนั้นสัญญาณสูงนี้จะเปิดใช้งานสลัก (สำหรับอุปกรณ์เฉพาะเช่นพอร์ตอนุกรมพอร์ตขนาน) สลักนี้จะส่งข้อมูลบนบัสข้อมูลไปยังอุปกรณ์ I / O นี่คือการเขียนไปยังอุปกรณ์ I / O การอ่านทำงานในทางตรงกันข้ามอุปกรณ์ I / O ส่งข้อมูลกลับและถ้าฉันจำได้ถูกต้องมันจะส่งรหัสที่อยู่เดียวกันที่แน่นอนไปยังบรรทัดที่อยู่

ฉันคิดว่ามันต้องทำงานในลักษณะเดียวกันในวันนี้ยกเว้นว่ามันจะเป็นข้อมูลและบรรทัดที่อยู่ไกล

คุณกำลังเดินสาย I / O ตามบรรทัดที่อยู่อย่างแท้จริง ดังนั้น I / O จะถูก MAPPED อย่างมีประสิทธิภาพในพื้นที่หน่วยความจำราวกับว่ามันเป็นหน่วยความจำ แต่สลักอื่นปิดใช้งานหมุดที่อยู่ไม่ให้เข้าถึง RAM ในเวลาเดียวกันดังนั้นคุณจะไม่ได้รับแรงดันไฟฟ้าของที่อยู่หรือแหล่งข้อมูลสองแห่งในบรรทัดเดียวกันซึ่งจะทำให้ชิปเสียหาย

ด้วยคำสั่งเข้าและออกเรามี 40 ปีที่แล้วบนชิป z80 นี่เป็นกรณีพิเศษที่ชิปเกี่ยวข้องกับ I / O เองในทางที่แตกต่างนั่นคือไม่ได้แม็พหน่วยความจำ (เช่นมีหน่วยความจำแมปคุณเพิ่งอ่านหรือเขียนไปยังตำแหน่งหน่วยความจำ แต่ด้วยการเข้าและออกคุณจะบอกซีพียูว่ามันเป็นสัญญาณ I / O และไม่ใช่หน่วยความจำ) ดังนั้นด้วยคำสั่ง IN / OUT นี้จะมีพื้นที่ที่อยู่ I / O ของตัวเอง (ซึ่งเป็นหน่วยความจำพิเศษของหน่วยความจำ), I / O Ram นี้ตามที่ปรากฏเป็นมีที่อยู่ชุดเดียวกัน ยกเว้นว่าคุณกำลังเข้าถึงอุปกรณ์โดยตรงผ่านตัวถอดรหัสที่แนบไปกับที่อยู่ I / O เหล่านั้นและคุณไม่ได้เข้าถึงอุปกรณ์ I / O จากหมุดที่อยู่มาตรฐานนี่เป็นคำสั่ง IN / OUT

ซึ่งในกรณีนี้จะถูกส่งผ่านที่ดีที่สุดเป็นสตริงของรหัส ASCII สำหรับตัวอักษรและตัวเลข คำสั่งเหล่านี้เหมือนกับว่าคุณใช้คำสั่ง IN และ OUT ในลูปที่การนับมีความยาวสตริง

หากคุณกำลังเข้าถึงเช่นลำโพงพีซีคุณจะต้องส่งข้อมูลหนึ่งชิ้นต่อครั้งโดยใช้ OUT

หากคุณกำลังอ่านจากพอร์ตขนานคุณจะทำในและใช้รหัสสำหรับที่อยู่ I / O ของพอร์ต การเขียนลงไปเช่นการขับเครื่องพิมพ์เก่าหรือหุ่นยนต์ด้วยสัญญาณอิเล็กทรอนิกส์คุณต้องใช้คำสั่ง OUT พอร์ตขนานและพอร์ตอนุกรม (RS232 เก่า) เป็นพอร์ตทั่วไปที่ใช้ RS232 เป็นข้อมูลแบบอนุกรมอนุญาตให้เข้าหรือออกได้เพียงหนึ่งบิตเท่านั้นดังนั้นหากคุณอ่านจาก rs232 คุณจะมีเพียง 1 บิตของไบต์ที่เกี่ยวข้องเช่นเดียวกับการส่งออก อัตรารับส่งข้อมูลสูงสุดประมาณ 17kHz สูงสุดสำหรับ rs232 แต่สิ่งเหล่านี้เคยขับอุปกรณ์อิเล็กทรอนิกส์จำนวนมากในสมัยก่อนผมเคยสร้างวงจร rs232 เช่นอ่านแรงดันไฟฟ้าหรือควบคุมไมโครคอนโทรลเลอร์ PIC แต่ละพอร์ตมีชื่อเช่น COM1 COM2 COM3 COM4 และมีที่อยู่ I / O ฉันไม่แน่ใจว่าที่นี่ แต่พวกเขาจะคล้ายกับเช่น 3F8h 378h (h = ที่อยู่ฐานสิบหก)

ฉันไม่แน่ใจเกี่ยวกับพอร์ตที่ทันสมัย ​​แต่ถ้าคุณเขียนไปยัง USB นี่จะเป็นหน่วยความจำที่แมป I / O มากที่สุดสำหรับความเร็วที่สูงขึ้น

พอร์ตแป้นพิมพ์ PS / 2 ฉันคิดว่านี่ใช้คำสั่ง IN เพื่ออ่านข้อมูลจากแป้นพิมพ์ สิ่งนี้แทนที่ RS232 ตัวเก่า แต่มีสเป็คที่แตกต่างกันเล็กน้อยที่ฉันเชื่อ

ดิสก์ไดรฟ์มักจะถูกแมปหน่วยความจำซึ่งสันนิษฐานว่าตอนนี้ยังคงอยู่นั่นคือคุณไม่ไดรฟ์ดิสก์ไดรฟ์ที่มีคำแนะนำเข้า / ออกพวกเขาจะช้าเกินไป แต่พอร์ตช้าอยู่แล้วดังนั้นมันไม่สำคัญเช่นเครื่องพิมพ์ช้าเท่าที่อัตราข้อมูลที่ต้องการเมื่อเทียบกับที่ยอดเยี่ยมเช่น 200 เมกะไบต์ / วินาทีต้องการฮาร์ดดิสก์ ลำโพงมันต้องการเพียงความถี่ของเสียงครั้งประมาณ 10 หรือ 20 กล่าวว่า 20kHz จะเพียงพอสำหรับเสียงออดดังนั้นมันเป็น I / O สิ่งที่ช้าใช้ I / O คำแนะนำ IN / OUT ดังนั้นหน่วยความจำ USB อาจถูกแมปคุณจะต้องตรวจสอบมัน

วิธีที่ดีกว่าที่จะเข้าใจมันคือสิ่งนี้ ในคอมพิวเตอร์เก่า ๆ ในยุค 80 คุณต้องการควบคุมอุปกรณ์บางอย่างที่คุณสร้างขึ้นและไม่มีสเป็คสำหรับพอร์ตเอาท์พุท (เช่นในสมัยนั้นผู้ผลิตเก็บสิ่งนี้ไว้เพื่อให้ บริษัท บางแห่งเช่นจอยสติกและ บริษัท คาร์ทริดจ์) ตลาดโดยการจัดการธุรกิจบางส่วน) สิ่งที่คุณต้องทำก็คือเปิดคอมพิวเตอร์และบัดกรีสายไฟไปยังบางจุดบนบัสที่อยู่เช่นคุณบัดกรีลวดสามเส้นไปยังจุดบางจุดในวงจรในระยะที่ปลอดภัย (เพื่อไม่ให้ชิปเสียหายด้วยความร้อน) จุดแบบมีสายโดยเค้าโครงแผงวงจรเพื่อเช่นหมุด A15 A7 และ A1 บนไมโครโปรเซสเซอร์ และคุณต้องต่อสายโดยทั่วไปก็คือสาย MREQ (สายคำขอหน่วยความจำและ / หรือสาย RD / WR เพื่อสร้างสัญญาณตัวต่อและเพิ่มลงในตรรกะหรือไม่ก็ได้ แต่ถ้าคุณฉลาดคุณสามารถทำได้ด้วยบรรทัดที่อยู่) จากนั้นคุณเชื่อมต่อสายไฟทั้งสามนี้ + สัญญาณประเภท Ready พิเศษนี้ (เช่น MREQ RD หรือ WR line เพื่อให้บางอย่างใช้งานต่ำหรือสูง (ซึ่งจะต้องเป็นพิเศษไม่ได้ gate ที่นี่) เพื่อบอกว่า DATA พร้อมใช้งานในบรรทัดทันที) ผ่าน 4 input และ gate ซึ่งให้เอาต์พุตกับตัวต้านทานผ่าน 200 ohm ตัวต้านทานคุณมีหน่วยความจำของคุณแมป I / O ความเร็วสูงเป็นไฟ LED ซึ่งคุณสามารถล็อคผ่านสลักแลตช์ SR หรือ D เพื่อเก็บไว้ในหน่วยความจำ 1 บิตจากภายนอกบนแผงวงจรบางอัน นี่คือ 15 เส้น 32K, 7 คือ 64 บรรทัด, 1 คือ 2 บรรทัด (เลขฐานสองทำงานในกำลัง 2, A1 จึงเท่ากับ 2 ^ 1, A7 คือ 2 ^ 7, และ A15 คือ 2 ^ 15) ดังนั้นถ้าคุณ ตำแหน่งที่ระบุ 32768 + 64 + 2 = 32834 = F041 เป็นเลขฐานสิบหกโดยใช้ LDA หรือ STA หรือ LD กับ MPU เก่าในแอสเซมเบลอร์ มันจะสว่างขึ้นถ้าตัวต้านทานพูดประมาณ 100 โอห์ม ดังนั้นคุณได้ทำการแมป I / o ของหน่วยความจำเสร็จแล้วคุณสามารถทำได้ในวันนี้โดยการบัดกรีไปยังที่อยู่ mpu ของคุณเหมือนกัน แต่คุณจะไม่ทำตอนนี้เนื่องจากความละเอียดอ่อนของวงจร แต่คุณสามารถเข้าร่วมสายข้อมูล D0..7 (ในวันเก่า) หรือพูด d0..31 ตอนนี้สำหรับ 32 บิตบนพีซี 486 เครื่องเก่า จากนั้นถ้าคุณระบุตำแหน่งนั้นในรหัสเครื่องโดยทำการโหลดตัวสะสมด้วยค่า 8 (mov ax, 8 ทุกวันนี้) หรือเก็บค่าตัวสะสมนั้นลงในตำแหน่งที่อยู่ (mov F041h, ตัวสะสมขวาน) คุณจะได้รับสิ่งนี้ บน. หมายเหตุ, 8, ในตัวอย่างคือสิ่งที่อยู่บน data บัส, ในกรณีนี้โดยเฉพาะ, เราไม่ได้ส่งข้อมูลที่เราเปิดใช้งานอุปกรณ์เฉพาะ (LED เปิดอยู่, ถ้าเราเลือกอุปกรณ์ I / O, ที่นี่เพียง LED) ดังนั้นในตัวอย่างนี้มันไม่สำคัญว่าเราจะมีจำนวนเท่าใดกับขวาน MOV, 8 คำสั่งมันอาจจะเป็น mov mov, 243 และเรายังคงเปิดใช้งาน LED บนบรรทัด F041h เมื่อเราทำ mov F041h ดังเช่น เนื่องจากเราใช้ที่อยู่เดียวกัน คุณเห็นมีบรรทัดที่อยู่และมีสายข้อมูล ดังนั้นเมื่อคุณระบุที่อยู่ 3F8 ใน COM1 หรือที่อยู่ใด ๆ แผนที่หน่วยความจำ I / O ก็แค่ส่งสัญญาณออกไปยังพอร์ตเช่น ps / 2 และ an และ gate กำลังตรวจสอบว่าคุณมี 1110000100 ในบรรทัดที่ 11 คืออะไร 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย 8 คำสั่งมันอาจจะเป็น mov ax, 243 และเรายังคงเปิดใช้งาน LED บนบรรทัด F041h เมื่อเราทำการ mov F041h เนื่องจากเราใช้ที่อยู่เดียวกัน คุณเห็นมีบรรทัดที่อยู่และมีสายข้อมูล ดังนั้นเมื่อคุณระบุที่อยู่ 3F8 ใน COM1 หรือที่อยู่ใด ๆ แผนที่หน่วยความจำ I / O ก็แค่ส่งสัญญาณออกไปยังพอร์ตเช่น ps / 2 และ an และ gate กำลังตรวจสอบว่าคุณมี 1110000100 ในบรรทัดที่ 11 คืออะไร 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย 8 คำสั่งมันอาจจะเป็น mov ax, 243 และเรายังคงเปิดใช้งาน LED บนบรรทัด F041h เมื่อเราทำการ mov F041h เนื่องจากเราใช้ที่อยู่เดียวกัน คุณเห็นมีบรรทัดที่อยู่และมีสายข้อมูล ดังนั้นเมื่อคุณระบุที่อยู่ 3F8 ใน COM1 หรือที่อยู่ใด ๆ แผนที่หน่วยความจำ I / O ก็แค่ส่งสัญญาณออกไปยังพอร์ตเช่น ps / 2 และ an และ gate กำลังตรวจสอบว่าคุณมี 1110000100 ในบรรทัดที่ 11 คืออะไร 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย เนื่องจากเราใช้ที่อยู่เดียวกัน คุณเห็นมีบรรทัดที่อยู่และมีสายข้อมูล ดังนั้นเมื่อคุณระบุที่อยู่ 3F8 ใน COM1 หรือที่อยู่ใด ๆ แผนที่หน่วยความจำ I / O ก็แค่ส่งสัญญาณออกไปยังพอร์ตเช่น ps / 2 และ an และ gate กำลังตรวจสอบว่าคุณมี 1110000100 ในบรรทัดที่ 11 คืออะไร 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย เนื่องจากเราใช้ที่อยู่เดียวกัน คุณเห็นมีบรรทัดที่อยู่และมีสายข้อมูล ดังนั้นเมื่อคุณระบุที่อยู่ 3F8 ใน COM1 หรือที่อยู่ใด ๆ แผนที่หน่วยความจำ I / O ก็แค่ส่งสัญญาณออกไปยังพอร์ตเช่น ps / 2 และ an และ gate กำลังตรวจสอบว่าคุณมี 1110000100 ในบรรทัดที่ 11 คืออะไร 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย 11 คือ 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย 11 คือ 3 1,000 คือ F และ 0100 คือ 8 ดูการแปลงเลขฐานสองเป็นฐานสิบหก หากแรงดันไฟฟ้าสูงปรากฏในตำแหน่งบิตเหล่านั้นที่มี 1 จากนั้นพอร์ตเช่น rs232 หรือ ps / 2 จะถูกตั้งค่าเป็นใช้งานเช่นเปิดใช้งานสิ่งนี้จะช่วยให้สลักโดยสัญญาณ CE เปิดใช้งานชิปหรือชิป CS เลือกง่าย

บนสลักมันคือ E Enable pin หรือ OE ที่เปิดใช้งานเอาต์พุตต่ำที่แอ็คทีฟ Ie ด้วยตัวอย่างข้างต้นอธิบายไว้ว่าเราใช้ที่อยู่เพื่อเลือก (โดยถอดรหัส) อุปกรณ์ I / O ที่เราต้องการใช้ (เช่นในตัวอย่างที่ LED มาหากอุปกรณ์ I / O ถูกเลือกดังนั้นนี่คือบรรทัดเปิดใช้งาน จากนั้นเมื่อเลือกอุปกรณ์ I / O แล้วข้อมูลจะถูกส่งผ่านจากบัสข้อมูล (D0..7 ในสมัยก่อนหรือตัวอย่างเช่น D0..63 ตอนนี้สำหรับคอมพิวเตอร์ 64 บิต) ผ่าน octal latches 373 ในเครื่องเก่า วันเหล่านี้คือวงจรฟลิปฟล็อป D-type ซึ่งเก็บข้อมูลไว้ในฟลิปฟล็อปด้วยขอบนาฬิกาสูงที่แอ็คทีฟข้อมูลจะผ่านและถูกเก็บไว้ขอบนาฬิกานี้จะมาจากสัญญาณ 'DATA RDY' บนสัญญาณข้อมูล นี่มีชื่อต่าง ๆ ฉันไม่รู้ว่าตอนนี้ชื่ออะไรสำหรับ 64 บิตเรามีแลตแปดแปดอัน และพวกเขาใช้สลักแบบสองทิศทางเพื่อควบคุมข้อมูลไม่ว่าจะด้วยวิธีใดหรือสามสถานะดังนั้นเมื่อไม่ได้ใช้อุปกรณ์ I / O สายข้อมูลจะอยู่ในสถานะอิมพีแดนซ์สูง ดังนั้นคุณเลือกอุปกรณ์ I / O ที่มีการรวมกันในบรรทัดที่อยู่นี่คือตัวเลขเช่น 3f8h ใน OUT 3F8h, 7 และข้อมูลที่นี่ในตัวอย่างที่ 7 คือสิ่งที่ถูกส่งผ่านบนสายข้อมูลใน คำสั่ง OUT ข้อมูลที่ส่งออกไปยัง data latch และออกไปยังอุปกรณ์ I / O หากคุณมีในคุณจะต้องทำคำสั่งเช่นใน 3f8h, 800h, (ฉันคาดหวัง แต่ฉันไม่รู้จักไวยากรณ์ของแอสเซมเบลอร์ x86) สิ่งที่ฉันหมายถึงคือสำหรับคุณกำลังป้อนข้อมูลจาก สายข้อมูล (หลังจากเลือกที่อยู่เช่นที่นี่ 3f7h ซึ่งเลือกอุปกรณ์ I / O) ข้อมูลนี้มาจากอุปกรณ์ I / O ผ่านฟลิปฟล็อป D-type ใน data latch (หนึ่งอันสำหรับแต่ละบิตของ data bus) และป้อนเข้ากับ D0..7 หรือ (D0..63 ในพีซีแบบทันสมัย) ในหน่วยประมวลผล MPU Micro ) ในตัวอย่างนี้ฉันใส่ IN 3f8h, 800h เพื่อแสดงว่าเมื่อข้อมูลเข้ามามันจะถูกเก็บไว้ในที่อยู่ 800h ไวยากรณ์ของ x86 ที่ฉันคิดว่าแตกต่างกันคุณต้องทำใน 3f8h, ah หรือสิ่งที่คล้ายกันคือลงทะเบียนก่อนโดยมีข้อมูลเข้ามาแล้วคุณจะต้อง MOV 800h คือย้ายข้อมูลไปยังหน่วยความจำ ตำแหน่งใน RAM (ถ้าคุณต้องการเก็บไว้) หรือทำอย่างอื่นกับอา ฯลฯ เป็นตัวอย่างการลงทะเบียนมันอาจจะเป็นอะไรก็ได้ Al, bh, bl ฯลฯ ทุกอย่าง แต่ตรวจสอบไวยากรณ์ทุกระบบแอสเซมเบลอร์คือ แตกต่างกันเล็กน้อยฉันไม่ใช่ผู้เชี่ยวชาญใน x86 อีกครั้งฉันใช้ 3f8h เป็นตัวอย่างที่อยู่ I / O มีหลายร้อย

โดยที่เมื่อคุณเข้าถึงหน่วยความจำ (RAM เช่น 64byte static rams และ RAM แบบไดนามิกใน 70's, 8K SRAMs และ DRAMs ในยุค 80 แถวของ SIMMS แต่ละแถวมีเมกะไบต์ไม่กี่เมกะไบต์ (โมดูลหน่วยความจำเส้นเดี่ยว) ใน 90's และตอนนี้ อยู่ในรูปแบบของโมดูล DDR ที่มี DIMMs, โมดูลหน่วยความจำคู่, ฉันไม่ได้ตรวจสอบ แต่ล่าสุดไม่ต้องสงสัยเลยว่าแต่ละคนมีกิกะไบต์สองสามตัวบนชิปตัวเล็ก ๆ แต่ละตัว) ถ้ามันไม่ใช่ที่อยู่ I / O (มาก ที่อยู่ไม่กี่ที่อยู่คือที่อยู่ I / O ปัจจุบันหน่วยความจำหลายล้านครั้งหรือมีแนวโน้มที่จะอยู่ในพื้นที่ที่อยู่กว่า I / O บนพีซีที่ทันสมัย) คุณยังคงใช้คำแนะนำการอ่านข้อมูลการเขียนลงในหน่วยความจำเดียวกัน การขับวงจรลอจิกภายนอกบางอย่างที่มองหาบิตเหล่านั้นแทนหมุดที่อยู่และข้อมูลเหล่านั้นจะถูกต่อสายเข้ากับชิป RAM

ในรหัสเครื่อง I / O และที่อยู่หน่วยความจำจะปรากฏเหมือนกันราวกับว่าพวกเขาเป็นทั้งหน่วยความจำเข้าถึง แต่สิ่งที่ร่างกายดำเนินต่อไปจะแตกต่างกันโดยสิ้นเชิงในวงจรอิเล็กทรอนิกส์ที่เกิดขึ้นจริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.