โปรเซสเซอร์ 8 บิตสามารถรองรับ RAM มากกว่า 256 ไบต์ได้อย่างไร


14

ถ้าตัวประมวลผลแบบ32บิตสามารถรองรับ RAM ได้ประมาณ 4 GiB (เช่น232=4294967296 ) ไบต์ทำไม Arduino Mega 2560 2560 ของฉันมี SRAM 8 KiB ถ้าเป็นตัวประมวลผลแบบ8บิตทำให้สามารถจัดการได้เพียง 256 ไบต์ ( 28 )? หรือฉันกำลังอ่านหน้าต่อไปนี้ผิด

http://www.atmel.com/devices/atmega2560.aspx?tab=parameters


5
แน่นอนว่าเครื่องทัวริงที่สมบูรณ์มีความสามารถในการจัดการกับ RAM เกือบทุกขนาดให้เวลาเพียงพอ
John U

2
ที่จริงแล้วจำนวนบิตในชื่อหน่วยประมวลผลสามารถใช้สำหรับการประมาณค่าล่วงหน้าของความกว้างของข้อมูลภายใน 8088 เป็นโปรเซสเซอร์ 16 บิตเนื่องจากการลงทะเบียน 16 บิต แต่มีบัสข้อมูล 8 บิตและบัสแอดเดรส 20 บิต 68000 เป็นโปรเซสเซอร์ 32 บิตส่วนใหญ่เรียกว่า 16/32 บิตเนื่องจากการลงทะเบียน 32 บิต แต่มีบัสข้อมูล 16 บิตและบัสแอดเดรส 24 บิต การใช้งาน ARM ขนาดเล็กเป็นตัวประมวลผลแบบ 32 บิต (การลงทะเบียนแบบ 32 บิตและดาต้าบัส) แต่ถึงแม้ว่าพวกเขาจะใช้ที่อยู่ 32 บิตสำหรับที่อยู่พวกเขาไม่สามารถจัดการทั้งหมด 4 GB
busybee

ฉันได้เพิ่มคำนำหน้า SI ที่ถูกต้องสำหรับหน่วยเหล่านี้ คือ gibi (Gi) และ2 10คือ kibi (Ki) 230210
Elliot Alderson

เป็นมูลค่าการกล่าวขวัญว่า 8 bitters จำนวนมาก (โดยเฉพาะตราสารอนุพันธ์ของโมโตโรล่า) สนับสนุนสิ่งที่เรียกว่าศูนย์หน้าซึ่งเป็นการสนับสนุนชุดคำสั่งสำหรับการจัดการ 256 ไบต์แรกแอดเดรสในแผนที่หน่วยความจำได้เร็วขึ้นเล็กน้อย ดังนั้นฮาร์ดแวร์ที่สำคัญที่สุดที่ลงทะเบียน ฯลฯ จะถูกจับคู่กับ 256 ไบต์แรกด้วยเหตุผลด้านประสิทธิภาพนี้ นี่คือเหตุผลที่คุณจะพบการลงทะเบียนฮาร์ดแวร์ที่แมปจากที่อยู่ศูนย์บนสถาปัตยกรรมจำนวนมาก
Lundin

สิ่งที่เรียกว่า 8-bit, 16-bit, 32-bit และอื่น ๆ นั้นเป็นคำศัพท์ทางการตลาดวิศวกรใช้มัน แต่เข้าใจว่าไม่ได้หมายความว่าทุกอย่างในโปรเซสเซอร์นั้นกว้าง บางคนใช้ขนาดของการสอนบ่อยครั้งที่ขนาดของการลงทะเบียนใช้งานทั่วไปบางครั้งก็เป็นรถบัส คุณมีตัวนับโปรแกรมซึ่งไม่สามารถเข้าถึงได้เสมอหรือใช้งานได้ตามคำแนะนำเพื่อให้มีความกว้างเท่าที่พวกเขาต้องการ จากนั้นเช่นเดียวกับโปรเซสเซอร์ประเภท AVR จำนวนมากจึงมีการลงทะเบียนหลายแบบหรือการสลับหน้าหรือทั้งสองอย่างเพื่อให้ได้ที่อยู่โหลด / ร้านค้าที่กว้างขึ้นสำหรับธุรกรรมข้อมูล
old_timer

คำตอบ:


19

ซีพียู 8 บิตส่วนใหญ่มีบัสแอดเดรส 16 บิตที่อนุญาตให้แอดเดรส 64kbytes ได้อย่างแม่นยำเพราะ 256 ไบต์ไม่เพียงพอที่จะทำมาก ๆ ! หมายความว่าพวกเขาต้องการโหลดสองไบต์แทนที่จะเป็นหนึ่งครั้งในแต่ละครั้งที่พวกเขาต้องการโหลดที่อยู่ ช้าลงเล็กน้อย แต่ก็ทนได้เมื่อพิจารณาถึงขนาดของมัน

(และใช่มีข้อยกเว้นมากมายส่วนใหญ่พัฒนาเมื่อ 64k กลายเป็นเล็กเกินไป แต่เรากำลังพูดถึงแนวคิดพื้นฐานที่นี่)


ในความเป็นจริงมากที่สุดของไมโครคอนโทรลเลอร์ 8 บิตที่ฉันได้พบไม่ได้มีอยู่ 16 บิต
phuclv

@Brian Drummond ฉันถูกต้อง: คอนโทรลเลอร์จะเขียน 8 บิตแรกก่อนจากนั้น 8 บิตส่วนบนแล้วสลักบัสแอดเดรส นี่คือวิธีที่จะเข้าถึงบัสแอดเดรส 16 บิต!
Swanand

หรือ 8 บิตบนแล้วลดลง 8 บิต แต่โดยทั่วไปใช่นั่นคือความคิด
Brian Drummond

7

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

  • วิธีที่พบมากที่สุดคือการเพิ่มความกว้างของบัสแอดเดรสอย่างใด

    • ใช้ลงทะเบียนหลายที่อยู่

      • AVRมี R26..R31 ที่สามารถจับคู่เป็น 16-bit X, YและZข้อมูลที่อยู่ที่ลงทะเบียนจะอนุญาตให้ 64KB สูงสุด RAM สามารถจับคู่กับRAMPXเหล่าRAMPYนั้นRAMPZเพื่อเข้าถึงที่อยู่ RAM ที่สูงขึ้นในรุ่นที่ใหญ่กว่าได้ นอกจากนี้ยังมีSPHไบต์สูงของตัวชี้สแต็กนอกเหนือจากSPLตัวแปรที่มี RAM 1มากกว่า 256 ไบต์
      • Intel 8080และZilog Z80เป็นซีพียู 8 บิต แต่มีคู่การลงทะเบียนเช่นH& L, B& C, D& Eที่สามารถใช้ร่วมกันเป็นการลงทะเบียนที่อยู่ 16 บิต
    • ใช้การลงทะเบียนพิเศษครั้งใหญ่ที่ยิ่งใหญ่กว่าขนาดที่เป็นธรรมชาติ

      • Intel 8051เป็นไมโครคอนโทรลเลอร์ 8 บิตนั่นคือมีที่อยู่ข้อมูล 8 บิต อย่างไรก็ตามมันใช้ที่อยู่คำสั่ง 16 บิตและมีการลงทะเบียน 16 บิต 2 อัน: PC และ DPTR สำหรับการกำหนดที่อยู่ในพื้นที่การเรียนการสอน
      • AVRมีการลงทะเบียนพีซี 16 หรือ 22 บิต
    • โดยใช้การลงทะเบียนพิเศษสำหรับส่วนสูงของที่อยู่ เมื่อจัดการกับหน่วยความจำบางส่วนโดยค่าเริ่มต้นที่อยู่ต่ำ 8 บิตจะถูกนำมาจากการลงทะเบียนทันที 8 บิตหรือ 8 บิตบนไมโครคอนโทรลเลอร์ 8 บิตในขณะที่บิตสูงจะถูกแทนที่ด้วยค่าของการลงทะเบียนที่อยู่อื่น

      • เป็นกรณีพิเศษของที่นี่คือหน่วยความจำแบ่งกลุ่มซึ่งจะถูกใช้โดย86 x 16 บิต ในเทคนิคนี้หน่วยความจำถูกแบ่งออกเป็นหลายเซ็กเมนต์ขนาด 64KB (2 16ไบต์) เข้าถึงปกติอยู่ภายในส่วนเดียวโดยค่าเริ่มต้นเพื่อให้พวกเขาสามารถใช้ที่อยู่ 16 บิตสำหรับข้อมูลที่อยู่ใกล้กับ ข้อมูลที่อยู่ห่างออกไปจะต้องได้รับการแก้ไขโดยเฉพาะตามค่าเซกเมนต์ดังนั้นจึงต้องใช้รีจิสเตอร์ 2 เครื่องสำหรับการระบุที่อยู่ไกล
      • ไมโครคอนโทรลเลอร์ PICที่มีพื้นฐานและชุดช่วงกลางอาจจะมี 13 หรือ 14 บิตอยู่เป็นอีกตัวอย่างหนึ่ง เมื่อใช้callหรือgotoคำสั่งจะมีการระบุแอดเดรสต่ำ 8 หรือ 9 บิตในทันทีและส่วนที่เหลือจะถูกนำมาจากตัวนับโปรแกรมปัจจุบัน ดังนั้นการเข้าถึงทุกสิ่งที่อยู่ไม่ไกลรอบ ๆ เซกเมนต์ปัจจุบันใช้เพียงคำสั่งเดียวเท่านั้นในขณะที่ที่อยู่เพิ่มเติมจะต้องมี 2 คำสั่ง (เพื่อตั้งค่าบิตสูง)
      • อีกตัวอย่างคือสถาปัตยกรรมMIPSซึ่งรวมที่อยู่ที่ต่ำกว่า 26- บิตทันทีกับ 6 บิตสูงจากPCในขณะที่กระโดดโดยไม่มีเงื่อนไข
  • วิธีการที่จะบรรลุเป้าหมายนี้ก็คือธนาคารหน่วยความจำ นี่เป็นวิธีที่มีประโยชน์ที่ยังคงถูกใช้ในสถาปัตยกรรมบางอย่างในปัจจุบัน ในรูปแบบนี้หน่วยความจำจะแบ่งออกเป็นหลายธนาคาร ทุกครั้งที่คุณสามารถอยู่ธนาคารที่เฉพาะเจาะจงเท่านั้น มักจะมีธนาคารทั่วโลกหรือช่วงที่อยู่ที่สามารถมองเห็นได้ตลอดเวลา แต่สำหรับส่วนอื่นคุณต้องเปลี่ยนธนาคารเมื่อจำเป็น

    • Intel 8051ใช้การธนาคารหน่วยความจำสำหรับการลงทะเบียน มีการลงทะเบียน 32 ครั้ง แต่มีเพียง 8 รายการเท่านั้นที่สามารถมองเห็นได้ในแต่ละครั้ง
    • x86 PAEและARM LPAE ที่มีพื้นที่แอดเดรสฟิสิคัลที่ใหญ่กว่าถูกแม็พกับพื้นที่แอดเดรสเสมือนขนาดเล็ก
    • แอปพลิเคชั่นอื่นสำหรับที่อยู่นี้คือAddress Windowing Extensionsบน Windows ซึ่งสามารถใช้งานได้โดยแอป 32 บิต x86 ในโหมด PAE เพื่อเข้าถึงหน่วยความจำมากกว่า 2 / 3GB มันไม่เหมือนกับธนาคารหน่วยความจำบนไมโครคอนโทรลเลอร์ แต่สามารถเห็นได้เช่นนี้เพราะช่วงที่อยู่ขนาดใหญ่สามารถนึกถึงหน้าต่าง / ธนาคารขนาดเล็กที่มีขนาดเล็กพอที่จะพอดีกับพื้นที่ที่อยู่ของแอป หากแอปจำเป็นต้องใช้ข้อมูลในบางหน้าต่างมันจะแมปหน้าต่างนั้นลงในพื้นที่ที่อยู่ปัจจุบัน
    • ดอสยังมีการสลับแบงกิ้งบางประเภทเช่นหน่วยความจำที่ขยายเพิ่มหรือหน่วยความจำส่วนขยายเนื่องจากหน่วยความจำที่ จำกัด แอดเดรส
  • นอกจากนี้ยังมีเทคนิคไม่ได้ค่อนข้างบ่อย แต่สามารถพบได้ในIntel 8051 ในฐานะที่เป็นไมโครคอนโทรลเลอร์ที่มีที่อยู่ข้อมูล 8 บิตจึงสามารถมีได้สูงสุด 256 ที่อยู่ ครึ่งหนึ่งของพื้นที่ (ส่วนที่สูง) ใช้สำหรับการลงทะเบียนฟังก์ชั่นพิเศษ ( SFR ) ซึ่ง จำกัด RAM จริงที่อยู่ได้เพียง 128 ไบต์ อย่างไรก็ตามผู้ผลิตที่ทันสมัย 8051 ซีรีส์พบวิธีที่ฉลาดที่จะเอาชนะนี้โดยแยกเข้าถึงหน่วยความจำ การกำหนดแอดเดรสโดยตรงจะเข้าถึงSFRขณะที่การกำหนดตำแหน่งทางอ้อมแม้ว่ารีจิสเตอร์จะเข้าถึงส่วนสูงของ RAM ซึ่งหมายความว่าตอนนี้คุณมี 256 + 128 = 384 ไบต์แอดเดรสที่กำหนดได้


1 https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions

คอร์ที่เล็กที่สุดมีพื้นที่ข้อมูล data256 ไบต์ (หมายถึง≤128ไบต์ของ RAM หลังจากพอร์ต I / O และที่อยู่สำรองอื่น ๆ ถูกลบ) และ ROM โปรแกรม≤8192 (8 KiB) สิ่งเหล่านี้มีเพียงตัวชี้สแต็ก 8 บิต (เป็น SPL) และสนับสนุนคำสั่งการกระโดด / การโทรแบบ 12 บิตที่เกี่ยวข้อง RJMP / RCALL (เนื่องจากตัวนับโปรแกรม AVR นับจำนวนคำ 16- บิตไม่ใช่ไบต์ออฟเซ็ต 12 บิตจึงเพียงพอต่อการระบุ ROM 213 ไบต์)

ความสามารถในการกำหนดแอดเดรสหน่วยความจำเพิ่มเติมมีอยู่ตามที่จำเป็นในการเข้าถึงทรัพยากรที่มี:

  1. รุ่นที่มีพื้นที่ที่อยู่ข้อมูล> 256 ไบต์ (≥256ไบต์ของ RAM) มีตัวชี้สแต็ก 16 บิตโดยมีครึ่งสูงในการลงทะเบียน SPH
  2. รุ่นที่มี ROM มากกว่า 8 KiB ให้เพิ่มคำสั่ง JUMP และ CALL แบบ 2 คำ (22 บิต) (รุ่นแรก ๆ บางรุ่นจะได้รับ erratum หากคำสั่ง skip ตามด้วยคำ 2 คำ)
  3. รุ่นที่มี ROM> 64 KiB เพิ่มคำสั่ง ELPM และการลงทะเบียน RAMPZ ที่เกี่ยวข้อง คำแนะนำ LPM เพิ่มที่อยู่ ROM เป็นศูนย์ใน Z คำแนะนำของ ELPM จะเป็นการลงทะเบียน RAMPZ สำหรับบิตสูง นี่ไม่ใช่สิ่งเดียวกับคำสั่ง LPM ทั่วไป มีโมเดล "คลาสสิค" ที่มีเฉพาะรูปแบบ zero-operand ของ ELPM (ATmega103 และ at43usb320) เมื่อมีการเพิ่มอัตโนมัติ (รุ่นส่วนใหญ่) จะอัปเดตที่อยู่ 24 บิตทั้งหมดรวมถึง RAMPZ
  4. (หายาก) รุ่นที่มี ROM> 128 KiB จะมีโปรแกรมนับจำนวน 3 ไบต์ รูทีนย่อยการโทรและส่งคืนจะใช้ไบต์ของสแต็กพื้นที่เพิ่มเติมมีการลงทะเบียน EIND ใหม่เพื่อให้บิตสูงเพิ่มเติมสำหรับการข้ามและการโทรแบบไม่ต้องลงทะเบียนและมีคำแนะนำเพิ่มเติมใหม่ EIJMP และ EICALL ซึ่งใช้ EIND: Z เป็นที่อยู่ปลายทาง (คำแนะนำ IJMP และ ICALL ก่อนหน้านี้ใช้ Z เป็นศูนย์ขยาย)
  5. (หายาก) รุ่นที่มีพื้นที่ที่อยู่ RAM> 64 KiB ขยายขีด จำกัด การกำหนดแอดเดรส RAM แบบ 16 บิตด้วยการลงทะเบียน RAMPX, RAMPY, RAMPZ และ RAMPD สิ่งเหล่านี้จัดเตรียมบิตสูงเพิ่มเติมสำหรับโหมดการกำหนดแอดเดรสซึ่งใช้คู่ X, Y หรือ Z register ตามลำดับหรือคำสั่งการกำหนดแอดเดรสโดยตรง LDS / STS ต่างจากการเข้าถึง ROM ไม่มีคำแนะนำ "ขยาย" ที่ชัดเจน แทนที่จะใช้การลงทะเบียน RAMP โดยไม่มีเงื่อนไข

6

โปรเซสเซอร์ 8 บิตเกือบทั้งหมดมีความสามารถในการสร้างที่อยู่ 16 บิตจากชิ้นส่วนที่มีราคาต่ำและชิ้นส่วนที่มีคุณภาพสูง ในโปรเซสเซอร์บางตัวรวมถึง 8080 ตัวเดิมมีรีจิสเตอร์เพื่อเก็บส่วนบนและส่วนล่างของแอดเดรส (แม้ว่าจากจุดยืนของโปรแกรมเมอร์อาจมีรีจิสเตอร์บางตัวเช่นสแต็คพอยน์เตอร์ของ 8080 ในโปรเซสเซอร์อื่น ๆ บางรุ่นไม่มีการลงทะเบียนที่อุทิศให้กับที่อยู่ครึ่งบนหรือล่างของที่อยู่ แต่ที่อยู่จะถูกรวมเข้าด้วยกัน ตัวอย่างเช่นบน 6502 คำสั่ง "LDA $ 1234, X" จะโหลดตัวสะสมพร้อมที่อยู่ที่เกิดขึ้นโดยเพิ่ม $ 1234 ลงในการลงทะเบียน X แบบ 8 บิต [สมมติว่ามันมี $ F0] การดำเนินการของคำสั่งนั้นจะดำเนินการใน 4 หรือ 5 ขั้นตอน:

  1. เสร็จสิ้นลงทะเบียนเขียนจากคำสั่งก่อนหน้า (ถ้ามี) และโหลด opcode ($ BD)
  2. ดึงข้อมูลตัวถูกดำเนินการไบต์แรกตาม opcode ($ 34) ในขณะที่คำแนะนำในการถอดรหัส
  3. เรียกตัวถูกดำเนินการไบต์ที่สอง ($ 12) ในขณะที่เพิ่มไบต์เรียกก่อนหน้านี้ลงทะเบียน X
  4. อ่านหน่วยความจำตามที่อยู่ที่เกิดขึ้นจากการเชื่อมต่อไบต์ที่สองกับผลลัพธ์ของ ALU [เช่น $ 1224] ป้อนตัวถูกดำเนินการที่สองไบต์ลงใน ALU เพื่อเพิ่มศูนย์หรือหนึ่งขึ้นอยู่กับว่าการเพิ่มก่อนหน้าสร้างการดำเนินการ
  5. อ่านหน่วยความจำตามที่อยู่ที่เกิดขึ้นโดยแทนที่ครึ่งบนด้วยผลลัพธ์ ALU [$ 1334]

การถ่ายโอนไบต์อ่านไปยังแอคคิวมูเลเตอร์จะทับซ้อนกับการดึงคำสั่งถัดไป นอกจากนี้สำหรับการดำเนินการหลายอย่างหากขั้นตอนที่ 3 ไม่ได้สร้างการพกพาขั้นตอนที่ 4 จะอ่านที่อยู่ที่ถูกต้องและการดำเนินการสามารถข้ามโดยตรงจากขั้นตอนที่ 4 ถึงคำแนะนำถัดไปโดยข้ามขั้นตอนที่ 5

หากมีการตรวจสอบลำดับของการปฏิบัติงานหนึ่งจะสังเกตเห็นว่าสถาปัตยกรรมแบบ end-endian มีข้อได้เปรียบที่ชัดเจนมากกว่าแบบ big-endian ซึ่งในกรณีส่วนใหญ่ นอกจากนี้ยังเป็นไปได้ที่จะอ่านไบต์จากที่อยู่ที่คำนวณได้โดยไม่ต้องรอผล ALU เนื่องจากปกติไบต์สูงที่ถูกดึงข้อมูลจะเป็นไบต์สูงของตัวถูกดำเนินการเป้าหมาย บนเครื่องขนาดใหญ่ที่มี 8 บิต ALU การโหลดดัชนีจะใช้เวลาอย่างน้อย 5 รอบ (เนื่องจากครึ่งล่างของแอดเดรสจะไม่ถูกอ่านจนกว่าจะถึงขั้นตอนที่ 3 และจะถูกคำนวณในขั้นตอนที่ 4)


ฉันจำได้ว่าเห็นโฆษณาบางอย่างสำหรับคอมพิวเตอร์ที่มีตัวประมวลผล 8 บิตและหน่วยความจำ 1 เมกะไบต์ สิ่งนี้ทำโดยใช้การลงทะเบียน 8 บิตสองตัวบน CPU รวมถึงการลงทะเบียน 8 บิตหนึ่งที่ไม่ได้อยู่บน CPU เพื่อสร้างที่อยู่ทั้งหมด
user6030

@ user6030: มีหลายวิธีในการทำสิ่งต่าง ๆ ให้สำเร็จ โดยทั่วไปส่วนของพื้นที่ที่อยู่จะเป็น "คงที่" และส่วนอื่น ๆ จะเป็นแบบเลือกธนาคารได้ อุปกรณ์บางอย่างทำงานได้ดีสำหรับโปรแกรมเมอร์ อื่น ๆ อีกมากมายไม่มาก
supercat

6

เส้น Databus (พิน) และบรรทัดที่อยู่ (พิน) แยกออกจากกันโดยสิ้นเชิง เพียงแค่วางสาย databus จะกำหนดจำนวนบิตสูงสุดที่สามารถถ่ายโอนทีละครั้ง (และเก็บไว้ในหน่วยความจำ) ในขณะที่บรรทัดที่อยู่จะกำหนดจำนวน "เซลล์" หน่วยความจำสูงสุดที่สามารถเลือกได้

ส่วนใหญ่เป็นเรื่องการตลาดที่ซีพียู x86 แบบ 32 บิตไม่สามารถระบุ RAM ได้มากกว่า 4GB ฉันจำได้ว่ามี A33-34 พินอยู่ในซีพียู Pentium 4


1
คุณถูกต้อง - PAE อนุญาตให้ใช้ RAM เพิ่มขึ้น แต่เนื่องจากไม่สามารถใช้งานได้บนเดสก์ท็อป Windows มีคนจำนวนไม่น้อยที่เคยใช้งาน
pjc50

264

x86 CPU ไม่สามารถระบุที่อยู่ได้มากกว่า 4GB โดยไม่มีความซับซ้อนอย่างมากในระบบปฏิบัติการซึ่งไม่ได้เชื่อมต่อกับสถาปัตยกรรมอื่น
Kaz

1
@Kaz ARM 32-bit มีคุณสมบัติคล้ายกันที่เรียกว่า LPAE ซึ่งช่วยให้ระบบปฏิบัติการสามารถระบุที่อยู่ได้มากกว่า 32 บิต
phuclv

3

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

ในโปรเซสเซอร์ 16 และ 32 บิตแรกไม่มีอุปกรณ์เพียงพอที่จะเข้าถึงพื้นที่ทั้งหมดที่การลงทะเบียนที่อยู่ภายในของพวกเขาสามารถทำได้ ตัวอย่างเช่นบน Motorola 68000 มีแอดเดรสพิน (24) เพียงพอต่อการระบุ RAM ขนาด 16 เมกะไบต์แม้ว่าที่อยู่ภายในจะมีความกว้าง 32 บิต


2

ฉันจะตอบคำถามนี้โดยเฉพาะสำหรับคอนโทรลเลอร์ AVR ที่คุณกล่าวถึง หลักการพื้นฐานยังคงเป็นจริงสำหรับสถาปัตยกรรม 8 บิตอื่น ๆ อีกมากมาย

AVR เป็นคอร์ 8 บิต ซึ่งหมายความว่าพวกเขามีการลงทะเบียน 8 บิต อย่างไรก็ตาม 8 บิตไม่เพียงพอที่จะเข้าถึงจำนวนหน่วยความจำที่ใช้งานได้ ดังนั้นคอร์ AVR สามารถใช้ชุดรีจิสเตอร์รวมกันเป็นรีจิสเตอร์ตัวชี้ 16 บิต รีจิสเตอร์ r30 และ r31 (หรือนามแฝงว่า ZL และ ZH) เป็นตัวอย่างสำหรับสิ่งนี้ พวกเขารวมกันเป็นตัวชี้ Z

ในการชุมนุมอ่านไบต์ที่อยู่ 0x1234 จะมีลักษณะเช่นนี้:

ldi ZL, 0x34 ; Load r30 (ZL) with low byte of address
ldi ZH, 0x12 ; Load r31 (ZH) with high byte of address
ld r16, Z    ; Load byte to r16

ตระกูล AVR มีการลงทะเบียน 3 คู่ที่สามารถใช้สำหรับสิ่งนี้ พวกเขาถูกออกแบบมาโดยเฉพาะในฮาร์ดแวร์เพื่ออนุญาตการดำเนินการดังกล่าว

เมื่อโปรแกรมในภาษาระดับสูงกว่าเช่น C คอมไพเลอร์จัดการกับสิ่งนี้


หมายเหตุ: AVR บางตัวรองรับขนาดหน่วยความจำที่ใหญ่กว่า 64k ตัวควบคุมเหล่านี้มีฟังก์ชั่นพิเศษที่ลงทะเบียนซึ่งบิตเพิ่มเติมของที่อยู่จะถูกเขียนก่อนการเข้าถึง ที่อยู่จึงประกอบด้วยบิตต่อไปนี้ (MSB ถึง LSB):

ฟังก์ชั่นลงทะเบียนพิเศษ (ปกติ 1 ไบต์), ZH (8 บิต), ZL (8 บิต)


1

Atmel's 8 บิต AVR ใช้ที่อยู่จริงของข้อมูล 16 บิต มีรีจิสเตอร์อื่น ๆ อีก 16 บิตและแม้แต่ตัวจับเวลาขนาด 16 บิต เนื่องจากเป็นโปรเซสเซอร์เพียง 8 บิตจึงมักใช้วงจรนาฬิกาสองรอบเพื่อโหลดการลงทะเบียน 16 บิต


1

Wikipediaอธิบายว่ามันค่อนข้างดี:

ซีพียูแปดบิตใช้บัสข้อมูล 8 บิตและสามารถเข้าถึงข้อมูล 8 บิตในคำสั่งเครื่องเดียว ที่อยู่บัสโดยทั่วไปจะเป็น octet wide สองเท่า (เช่น 16 บิต) เนื่องจากข้อควรพิจารณาในทางปฏิบัติและประหยัด นี่หมายถึงพื้นที่ที่อยู่โดยตรงเพียง 64 KB บนโปรเซสเซอร์ 8 บิตส่วนใหญ่


1

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

HP 21MX, HP 1000: 16-bit CPU, หน่วยความจำถึง 16 MB

PDP-11: CPU 16 บิต, หน่วยความจำถึง 4 MB

VAX-11/780: CPU 32 บิตหน่วยความจำ 512 MB

เป็นต้น

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