และ ARM (หรือแม้แต่ x86) MCU/CPU ที่มีโครงสร้างแบบ von Neumann พื้นที่ที่อยู่ของมันถูกรวมเป็นหนึ่งเดียวและต่อเนื่องกัน การลงทะเบียนหน่วยความจำโค้ด/RAM/CPU และแม้แต่หน่วยความจำวิดีโอสำหรับพีซีก็ได้รับการระบุอย่างเท่าเทียมกัน's เป็นเพียงหน่วยความจำที่มีฟังก์ชันต่างกันใช้บล็อกที่อยู่ที่แตกต่างกัน และพวกเขาทำสิ่งต่างๆ
โอเค ให้'s กลับไปที่ MCS-51
สำหรับหน่วยความจำโปรแกรม มีสองส่วน: บนชิปและปิดชิป และไม่ว่าหน่วยความจำโปรแกรมบนชิปหรือหน่วยความจำโปรแกรมออฟชิปจะเป็นอย่างไรก็ตาม ที่อยู่ของพวกมันจะถูกแชร์ หากมี 4k ROM บนชิป ที่อยู่คือ 0x0000-0x0FFF และ 0x1000-0xFFFF คือพื้นที่ที่อยู่ของ ROM ภายนอก ไม่ว่าจะใช้ส่วน 0x0000-0x0FFF ของ ROM ภายนอกหรือไม่ ขึ้นอยู่กับค่าระดับของพิน EA ของไมโครคอนโทรลเลอร์ เมื่อ EA=1 ส่วนนี้ของ ROM ภายในถูกใช้ และส่วนนี้ของ ROM ภายนอกจะสูญเปล่าและไม่ได้ใช้ เมื่อ EA=0 ส่วนนี้ของ ROM ภายนอกถูกใช้ และ ROM ภายในจะสูญเปล่าและไม่ได้ใช้ หากต้องการอ่านข้อมูลจากส่วน CODE ให้ใช้คำสั่ง MOVC ที่ประกอบแล้ว ไมโครคอมพิวเตอร์ชิปตัวเดียวจะกำหนดโดยอัตโนมัติว่าหน่วยความจำใดที่จะดึงข้อมูลจากตามคำสั่ง MOVC สถานะ EA และค่าที่อยู่ที่จะอ่าน
สำหรับหน่วยความจำข้อมูล จะแบ่งออกเป็นสองส่วน: หน่วยความจำข้อมูลภายใน (IDATA/RAM) และหน่วยความจำข้อมูลภายนอก (XDATA) แต่หน่วยความจำทั้งสองนี้ไม่ได้ใช้พื้นที่ที่อยู่ร่วมกัน เช่น หน่วยความจำโค้ด ชิป 8051 ทั่วไป RAM ภายในมีเพียง 128B จาก 0x00-0x7F และจาก 0x80-0xFF คือพื้นที่ของ SFR (รีจิสเตอร์การทำงานของ CPU และรีจิสเตอร์ต่อพ่วงต่างๆอยู่ที่นี่) สำหรับ 8052 RAM ภายในมี 256B ดังนั้น 0x80-0xFF คือ RAM 128B สูงที่ใช้งาน แต่'ส่วนนี้ไม่ได้มีไว้สำหรับ SFR ใช่ไหม' ทุ่มเทให้กับ SFR แต่โปรดทราบว่าการเข้าถึง SFR สามารถใช้ได้เฉพาะ" การระบุที่อยู่โดยตรง" (ดำเนินการโดยใช้คำแนะนำในการประกอบเฉพาะ) ความแตกต่างอยู่ที่นี่ เฉพาะที่อยู่ที่เข้าถึงได้โดยการระบุที่อยู่โดยตรงเท่านั้นคือ SFR ไม่เช่นนั้นจะเป็น RAM ธรรมดา สำหรับ RAM แบบขยาย (XDATA) ที่อยู่นั้นมาจาก 0x0000-0xFFFF เช่นกัน และ 0x0000 ที่นี่แตกต่างจาก 0x00 ของ RAM ภายใน และไม่ขึ้นอยู่กับช่องว่างสองช่อง วิธีการเข้าถึงก็ต่างกัน MCS-51 ใช้คำสั่ง MOVX เพื่ออ่านและเขียนพื้นที่ XDATA นอกจากนี้ การเข้าถึงพื้นที่ XDATA ยังต้องการความช่วยเหลือจากการลงทะเบียน DPTR เนื่องจากมีเพียง DPTR เท่านั้นที่สามารถเก็บที่อยู่ XDATA 16 บิตถัดไปได้
ดังนั้น MCS-51 จึงมีความเร็วในการอ่านและเขียนที่เร็วที่สุดของพื้นที่ IDATA และวิธีการเข้าถึงมากที่สุด ความเร็วในการเข้าถึงพื้นที่ XDATA ค่อนข้างช้า ควรพัฒนาสแต็กของ MCS-51 ในพื้นที่ IDATA ก่อน และสแต็กที่เปิดในพื้นที่ IDATA สามารถควบคุมได้โดยสแต็กพอยน์เตอร์รีจิสเตอร์ SP หากสแต็กมีขนาดใหญ่เกินไปและสามารถเปิดได้เฉพาะในพื้นที่ XDATA การลงทะเบียน SP ของ CPU จะเป็นเรื่องยากที่จะยืม และเราสามารถสร้างโครงสร้างสแต็กและตัวชี้สแต็กได้ด้วยตัวเองเท่านั้น เนื่องจากพื้นที่โปรแกรมภายนอกและพื้นที่ข้อมูลมีทั้ง 0-64K (0x0000-0xFFFF) ดังนั้นฉันจึงสามารถบันทึกปัญหา/โปรแกรมเขียนซ้ำที่สะดวกและสาเหตุอื่นๆ ได้ รหัสภายนอกและ DATA สามารถแชร์หน่วยความจำแบบเขียนซ้ำได้ (เช่น ต่างๆ ที่ RAM สามารถทำได้ ถูกลบและเขียนได้) ตัวอย่างเช่น ระบบมีหน่วยความจำภายนอก 64K 32K ที่ต่ำกว่าใช้เพื่อบันทึกโค้ด และไมโครคอนโทรลเลอร์สามารถอ่านและเรียกใช้โปรแกรมใน 32K นี้ได้ และ 32K ที่สูงกว่าจะใช้เป็นที่เก็บข้อมูลผู้ใช้ แต่ ณ เวลานี้ พื้นที่ CODE และ DATA ที่เป็นอิสระจากกันโดยสิ้นเชิง เนื่องจากหน่วยความจำถูกแชร์บนชิปฮาร์ดแวร์ จึงอาจส่งผลกระทบซึ่งกันและกัน และโปรแกรมสามารถเขียนโปรแกรมใหม่ได้ด้วยตัวเอง ตัวอย่างเช่น 0x0020 เป็นคำสั่ง และฉันเขียน 0x0020 ใหม่ผ่าน MOVX จากนั้นใช้ MOVC เพื่ออ่านค่า 0x0020 และข้อมูลจะแตกต่างจากต้นฉบับ
จุดสำคัญของความสับสนคือพื้นที่จัดเก็บของไมโครคอมพิวเตอร์ชิปตัวเดียวเป็นแนวคิดเชิงตรรกะ ซึ่งเป็นช่องว่างสองช่องที่แยกจากกันโดยไม่ได้ตั้งใจ ชิป MEMORY บนวงจรฮาร์ดแวร์เป็นแนวคิดในความเป็นจริง พื้นที่เก็บข้อมูลของไมโครคอมพิวเตอร์ชิปตัวเดียวจะถูกนำไปใช้กับชิปที่ระดับวงจรในที่สุด ดังนั้นพื้นที่จัดเก็บแบบลอจิคัลจะทับซ้อนกันเนื่องจากการเชื่อมต่อวงจรทางกายภาพ แต่ในระดับตรรกะ ช่องว่างทั้งสองนี้ยังคงเป็นอิสระอย่างสมบูรณ์
เอกสารแนบ: คำจำกัดความของชื่อพื้นที่จัดเก็บต่างๆ:
ข้อมูล: อ้างอิงถึง 128 RAM ของ 0x00-0x7f ที่ด้านหน้าอย่างถาวร ซึ่งสามารถอ่านและเขียนได้โดยตรงโดยการลงทะเบียน ซึ่งเป็นโค้ดที่สร้างเร็วที่สุดและเล็กที่สุด
Idata: คงที่หมายถึง 256 RAMs ของ 0x00-0xff ที่ด้านหน้า ซึ่ง 128 ตัวแรกจะเหมือนกันทุกประการกับ 128 ของข้อมูล เพียงเพราะวิธีการเข้าถึงที่แตกต่างกัน idata เข้าถึงได้โดยใช้ตัวชี้ที่คล้ายกับ C คำสั่งในชุดประกอบคือ: mov ACC,@Rx (ส่วนเสริมที่ไม่สำคัญ: idata ใน c มีผลการเข้าถึงตัวชี้ที่ดี) xdata: RAM เสริมภายนอก โดยทั่วไปหมายถึงพื้นที่ 0x0000-0xffff ภายนอก ซึ่งเข้าถึงได้โดย DPTR pdata: 256 ไบต์ล่างของ RAM เสริมภายนอก อ่านและเขียนเมื่อที่อยู่ปรากฏบน A0-A7 ใช้ movx ACC, @Rx เพื่ออ่านและเขียน ค่อนข้างพิเศษ และ C51 ดูเหมือนจะมีจุดบกพร่องนี้ ขอแนะนำให้ใช้น้อยลง แต่ก็มีข้อดีของเขาเช่นกัน การใช้งานเฉพาะเป็นปัญหาระดับกลาง ฉันไม่รู้วิธีใช้งาน' ฉันจึงชนะ' ไม่พูดถึงที่นี่








