ด้วยชื่ออย่าง 'สัญญาณ 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 และที่อยู่หน่วยความจำจะปรากฏเหมือนกันราวกับว่าพวกเขาเป็นทั้งหน่วยความจำเข้าถึง แต่สิ่งที่ร่างกายดำเนินต่อไปจะแตกต่างกันโดยสิ้นเชิงในวงจรอิเล็กทรอนิกส์ที่เกิดขึ้นจริง