โปรเซสเซอร์ 8 บิตและ 16 บิตจะเข้าถึง RAM ได้มากขึ้นด้วยรีจิสเตอร์สองตัวได้อย่างไร

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

ชอบ:

mov a, [x]   ???

person Sloan Fitzgerald    schedule 02.12.2012    source แหล่งที่มา
comment
โปรดทราบว่ามีขนาดบิตของดาต้าบัสและขนาดบิตของแอดเดรสบัสด้วย ขนาดดาต้าบัสมักใช้เมื่อพูดถึงโปรเซสเซอร์ 8/16/32 บิต แต่แอดเดรสบัสอาจมีขนาดต่างกันได้ CPU 8 บิตรุ่นเก่าจำนวนมากมีแอดเดรสบัส 16 บิต ดังนั้นจึงสามารถเข้าถึง RAM มากกว่า 256 ไบต์   -  person David J    schedule 03.12.2012


คำตอบ (4)


สมมติว่าเรามีที่อยู่ครึ่งหนึ่งและสูงกว่า 8 บิตในรีจิสเตอร์ L และ H ตัวอย่างเช่น เราต้องการอ่านไบต์จากที่อยู่ 32770 dec = 8002 hex

mov l, 02h  ;lower byte of address
mov h, 80h  ;higher byte of address
mov a, [hl] ;a <-- [h*256 + l]

โหมดการกำหนดแอดเดรสจำนวนมากมีอยู่ใน CPU ดังนั้นเราจึงมีตัวอย่างที่แตกต่างออกไป เช่น ด้วยการลงทะเบียนเพียงครั้งเดียวและที่อยู่ทันที:

mov h, 80h
mov a, [2]  ;a <-- [h*256 + immediate]

ขึ้นอยู่กับสถาปัตยกรรม CPU เฉพาะเสมอ ตัวอย่างเช่น Zilog Z80 เรียกว่า CPU 8 บิต แต่ก็มีคำสั่ง 16 บิตมากมายเช่นกัน คุณสามารถจัดทำดัชนีที่อยู่ได้ดังนี้:

mov ix, 8002h  ;base address of an array
mov a,[ix+20]  ;a <-- [ix + 20] i.e. read a byte from an array like ix[20] in C

หมายเหตุ: CPU 8 บิตเก่าเหล่านั้นใช้ตัวสะสม 8 บิต กล่าวคือ พวกเขาสามารถคำนวณคณิตศาสตร์และคณิตศาสตร์อื่นๆ ได้เฉพาะในรีจิสเตอร์ 8 บิตเท่านั้น ดังนั้นจึงเป็น 8 บิตในระดับการคำนวณซอฟต์แวร์ . และหน่วยการเข้าถึงหน่วยความจำคือ 8 บิต กล่าวคือ สามารถอ่านหรือเขียนหน่วยความจำได้ครั้งละหนึ่งไบต์ ดังนั้นจึงเป็น 8 บิตในระดับฮาร์ดแวร์ด้วย คำสั่งแบบ 16 บิตนั้นช้า แต่จริง ๆ แล้วพวกมันทำการดำเนินการแบบ 8 บิตสองชุดติดต่อกัน

person Al Kepp    schedule 02.12.2012
comment
ขอบคุณ! ฉันคิดเสมอว่าถ้าคุณมีคู่รีจิสเตอร์สองคู่ที่สร้างคำแล้วคุณมีโปรเซสเซอร์ 16 บิต ฉันเดาว่าฉันคิดผิด! - person Sloan Fitzgerald; 03.12.2012

ลองพิจารณาว่า 8080 (Z80 ฯลฯ) มีรีจิสเตอร์ 8 บิต แต่สามารถจับคู่รีจิสเตอร์ให้ทำหน้าที่เหมือนรีจิสเตอร์ 16 บิตได้ คู่ที่ใช้มากที่สุดน่าจะเป็น HL ซึ่งก็คือ H สำหรับ 8 บิตสูงและ L สำหรับ 8 บิตล่างของที่อยู่ คู่รีจิสเตอร์อื่นๆ คือ BC และ DE -- อีกครั้ง คำสั่งส่วนใหญ่จะทำงานกับรีจิสเตอร์ของคู่นั้นครั้งละหนึ่งรายการเท่านั้น แต่มีเพียงไม่กี่คู่ที่สามารถใช้คู่ร่วมกันเพื่อทำงานกับปริมาณ 16 บิต (เช่น อย่างน้อยถ้าหน่วยความจำให้บริการ มีอันหนึ่งให้เพิ่ม DE ให้กับ HL)

คำแนะนำบางอย่างอาจใช้ที่อยู่ 16 บิตได้โดยตรง:

jmp 01234h

6502 มีลักษณะคล้ายกัน แต่จำกัดคำสั่งบางอย่างในการทำงานกับ RAM 256 ไบต์แรก (หรือที่เรียกว่า "หน้า 0") เวอร์ชันที่ใหม่กว่า (65816?) รองรับการเลือกที่อยู่ทางกายภาพที่แตกต่างกันซึ่งจะถือเป็นหน้า 0

person Jerry Coffin    schedule 02.12.2012
comment
65816 ยังเป็นโปรเซสเซอร์ 16 บิต เมื่อคุณล้างบิต 4 และ 5 ในการลงทะเบียนสถานะ (REP $30) มันมีการลงทะเบียน D IIRC ซึ่งมันรวมกับ X หรือ Y เพื่อสร้างที่อยู่ 24 บิต - person cHao; 03.12.2012

มีเทคนิคมากมายในการบรรลุเป้าหมายนี้

Intel 8080 เป็น CPU 8 บิตที่มี 2 รีจิสเตอร์ H และ L สำหรับที่อยู่ทางอ้อม ทำให้สามารถจัดการกับหน่วยความจำ 16 บิตได้ 16 บิต 8086 มีที่อยู่ 20 บิตพร้อมการแบ่งส่วน 80286 ใช้ที่อยู่ 24 บิตที่มีส่วนสูง 16 บิตเป็นดัชนีลงในตารางตัวอธิบายส่วน x86 แบบ 32 บิตใช้ที่อยู่ 36 บิตกับ PAE...

ไมโครคอนโทรลเลอร์ PIC มีค่า 8 บิตในรีจิสเตอร์ที่ผสานกับบิตสูงในพีซี (หรือรีจิสเตอร์ที่อยู่เฉพาะบางตัวตามที่ฉันจำไม่ได้) เพื่อสร้างที่อยู่ 13 บิต (หรือมากกว่านั้น ขึ้นอยู่กับสถาปัตยกรรม)

วิธีทั่วไปอีกวิธีหนึ่งในไมโครคอนโทรลเลอร์ (สถาปัตยกรรมไมโครโปรเซสเซอร์บางตัว) คือ การธนาคาร ซึ่งคุณเปลี่ยน "หน่วยความจำ" window" ที่ CPU สามารถมองเห็นได้ทุกครั้ง

  • Intel 8051 มีธนาคารลงทะเบียน 4 แห่ง โดยธนาคารทั่วไปจะมองเห็นได้เสมอ และส่วนที่เหลือสามารถเลือกได้ตามคำแนะนำในการเปลี่ยนธนาคาร บางเวอร์ชันสามารถใช้ Banking สำหรับที่อยู่รหัสขยายเป็นรหัส 2MB
  • DOS ใช้ระบบธนาคารหน่วยความจำใน EMS และ XMS เพื่อแมปหน่วยความจำที่สูงขึ้นกับที่อยู่ที่ต่ำกว่าเพื่อเข้าถึงมากกว่า 1MB หรือ RAM
  • Windows 32 บิตใช้ ส่วนขยายหน้าต่างที่อยู่ ในโหมด PAE เพื่อให้กระบวนการ 32 บิตสามารถเข้าถึง RAM มากกว่า 2GB

สำหรับข้อมูลเพิ่มเติม คุณสามารถอ่านที่นี่

person phuclv    schedule 27.01.2014

6502 มีคำแนะนำการอ่านหน่วยความจำที่จัดทำดัชนี lda $01200,Y และ lda $1413,X โดยที่ที่อยู่ 16 บิตถูกเข้ารหัสเป็นส่วนหนึ่งของคำสั่ง เมื่อใดก็ตามที่คำสั่งประเภทนั้นเห็นหน้าต่างขนาด 256 ไบต์ เพื่อเข้าถึง 256 ไบต์ถัดไป คำสั่งเองก็ได้รับการแก้ไขให้อ่าน lda $1300,Y เป็นต้น

จากนั้น 8086 ก็มีสถาปัตยกรรมแบบแบ่งส่วน โดยที่การเข้าถึงหน่วยความจำทุกครั้งจะเชื่อมโยงกับการลงทะเบียนเซ็กเมนต์โดยนัยหรือชัดเจน mov reg,[bp] และ push/pop เชื่อมโยงกับส่วนของสแต็ก ss, [rep] movs เชื่อมโยงกับ ds:[si], es:[di]; ตัวนับ / การกระโดดของโปรแกรมสัมพันธ์กับส่วนของโค้ด cs

ที่อยู่ทางกายภาพอยู่ในโหมด 8086 ซึ่งคำนวณเป็น stack_reg * 16 + offset โดยที่การพยายามอ่านคำที่ seg_reg:[ffff] ทำให้เกิดข้อยกเว้นการละเมิดส่วน

กราฟิก VGA ในสถาปัตยกรรม 8086 ถูกนำมาใช้พร้อมกับการแมปหน่วยความจำส่วน 64k กับ ISA-bus นอกจากนี้ ด้วยการตั้งโปรแกรมฮาร์ดแวร์ผ่านคำแนะนำเข้า / ออก ทำให้สามารถเลือก หน้า 64-k อื่นที่บอร์ดกราฟิกได้ ดังนั้นจึงเป็นไปได้ที่จะก้าวข้ามขีดจำกัด VGA สี 320x200 x 256 ไปเป็น 640x480 SVGA

person Aki Suihkonen    schedule 03.12.2012
comment
8088 เป็นโปรเซสเซอร์ที่น่าสนใจอย่างยิ่ง บัสข้อมูล 8 บิต, รีจิสเตอร์ 16 บิต, แอดเดรสบัส 20 บิต และ (เมื่อติดตั้งโปรเซสเซอร์ร่วม 8087) รีจิสเตอร์ทศนิยม 80 บิต! - person Brian Knoblauch; 03.12.2012