Bagaimana prosesor 8-bit dan 16-bit mengakses lebih banyak RAM dengan dua register?

Sesuatu yang selalu membingungkan saya adalah bagaimana komputer 8-bit mengakses lebih dari 256 byte RAM. Saya tahu bahwa itu harus menggunakan dua register, tetapi adakah yang bisa menunjukkan kepada saya contoh seperti apa tampilannya dalam kode Majelis?

Menyukai:

mov a, [x]   ???

person Sloan Fitzgerald    schedule 02.12.2012    source sumber
comment
Perlu diperhatikan juga ada ukuran bit databus dan ukuran bit addressbus. Ukuran databus sering digunakan ketika berbicara tentang prosesor 8/16/32 Bit. Tapi bus alamat bisa berukuran berbeda. Banyak CPU 8 bit lama yang memiliki bus alamat 16 bit dan karenanya dapat mengakses lebih dari 256 byte RAM.   -  person David J    schedule 03.12.2012


Jawaban (4)


Mari kita bayangkan kita memiliki setengah alamat 8bit LOWER dan HIGHER di register L dan H. Misalnya, kita ingin membaca byte dari alamat 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]

Banyak mode pengalamatan yang ada di CPU. Jadi kita dapat memiliki contoh yang berbeda, mis. hanya dengan satu register dan alamat langsung:

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

Itu selalu tergantung pada arsitektur CPU tertentu. Misalnya Zilog Z80 disebut CPU 8-bit tetapi juga berisi banyak instruksi 16-bit. Anda dapat melakukan pengalamatan terindeks seperti ini:

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

Catatan: CPU 8-bit lama tersebut menggunakan akumulator 8-bit, yaitu mereka dapat menghitung matematika dan hal-hal aritmatika lainnya hanya dalam register 8-bit, jadi mereka adalah 8-bit pada tingkat komputasi perangkat lunak . Dan unit pengakses memorinya adalah 8-bit, yaitu hanya dapat membaca atau menulis satu byte memori dalam satu waktu, sehingga level perangkat kerasnya juga 8-bit. Instruksi 16-bit tersebut lambat, mereka sebenarnya melakukan sepasang operasi 8-bit secara berurutan.

person Al Kepp    schedule 02.12.2012
comment
Terima kasih! Saya selalu berpikir bahwa jika Anda memiliki dua pasangan register yang menghasilkan sebuah kata maka Anda memiliki prosesor 16 bit, saya rasa saya salah! - person Sloan Fitzgerald; 03.12.2012

Mari kita pertimbangkan 8080 (Z80, dll.) yang memiliki register 8-bit, tetapi dapat memasangkan register tersebut untuk bertindak seperti register 16-bit. Mungkin pasangan yang paling banyak digunakan adalah HL, yaitu H untuk 8 bit tinggi dan L untuk 8 bit rendah suatu alamat. Pasangan register lainnya adalah BC dan DE -- sekali lagi, sebagian besar instruksi bekerja hanya dengan satu register dari pasangan tersebut pada satu waktu, tetapi beberapa dapat menggunakan pasangan tersebut bersama-sama untuk bekerja dengan kuantitas 16-bit (misalnya, setidaknya jika ingatanku, ada satu yang menambahkan DE ke HL).

Beberapa instruksi juga dapat menggunakan alamat 16-bit secara langsung:

jmp 01234h

6502 juga memiliki cara yang sama, tetapi membatasi beberapa instruksi untuk bekerja dengan 256 byte RAM pertama (alias "Halaman 0"). Versi yang lebih baru (65816?) mendukung pemilihan alamat fisik berbeda yang akan diperlakukan sebagai halaman 0.

person Jerry Coffin    schedule 02.12.2012
comment
65816 juga merupakan prosesor 16-bit, setelah Anda menghapus bit 4 dan 5 di register status (REP $30). Ia memiliki register D, IIRC, yang digabungkan dengan X atau Y untuk membentuk alamat 24-bit. - person cHao; 03.12.2012

Ada banyak teknik untuk mencapai hal ini

Intel 8080 adalah CPU 8-bit dengan 2 register H dan L untuk alamat tidak langsung, memungkinkannya untuk mengalamatkan memori 16-bit. 8086 16-bit memiliki alamat 20 bit dengan segmentasi. 80286 menggunakan alamat 24-bit dengan segmen 16-bit yang tinggi diindeks ke dalam tabel deskriptor segmen. X86 32-bit menggunakan alamat 36 bit dengan PAE...

Mikrokontroler PIC memiliki nilai 8-bit dalam register yang digabungkan dengan bit tinggi di PC (atau register alamat khusus, karena saya tidak ingat) untuk membentuk alamat 13-bit (atau lebih, tergantung pada arsitektur)

Cara umum lainnya di mikrokontroler (beberapa arsitektur mikroprosesor) adalah perbankan, di mana Anda mengubah "memori window" yang dapat dilihat CPU setiap saat.

  • Intel 8051 memiliki 4 bank register dengan yang umum selalu terlihat dan sisanya dapat dipilih melalui instruksi peralihan bank. Beberapa versi dapat menggunakan perbankan untuk alamat kode, memperluasnya hingga 2MB kode.
  • DOS menggunakan perbankan memori di EMS dan XMS untuk memetakan memori yang lebih tinggi ke alamat yang lebih rendah untuk mengakses lebih dari 1MB atau RAM.
  • Windows 32-bit menggunakan Ekstensi Jendela Alamat dalam mode PAE untuk memungkinkan proses 32-bit mengakses lebih dari 2GB RAM

Untuk informasi lebih lanjut Anda dapat baca di sini

person phuclv    schedule 27.01.2014

6502 telah mengindeks instruksi pembacaan memori lda $01200,Y dan lda $1413,X di mana alamat 16-bit dikodekan sebagai bagian dari instruksi. Kapan saja, instruksi semacam itu melihat jendela sebesar 256 byte. Untuk mengakses 256 byte berikutnya, instruksi itu sendiri telah dimodifikasi menjadi membaca lda $1300,Y misalnya.

Kemudian 8086 memiliki arsitektur tersegmentasi, dimana setiap akses memori digabungkan dengan register segmen implisit atau eksplisit. mov reg,[bp] dan push/pop dikaitkan dengan segmen tumpukan ss, [rep] movs dikaitkan dengan ds:[si], es:[di]; Penghitung/lompatan program dikaitkan dengan segmen kode cs.

Alamat fisik dalam mode 8086 dihitung sebagai stack_reg * 16 + offset, di mana mencoba membaca kata di seg_reg:[ffff] menyebabkan pengecualian pelanggaran segmen.

Grafik VGA dalam arsitektur 8086 diimplementasikan dengan pemetaan memori segmen 64k ke bus ISA. Juga dengan memprogram Perangkat Keras melalui instruksi masuk / keluar, dimungkinkan untuk memilih halaman 64-k yang berbeda pada papan grafis. Dengan demikian, dimungkinkan untuk melampaui batasan VGA warna 320x200 x 256 ke SVGA 640x480.

person Aki Suihkonen    schedule 03.12.2012
comment
8088 adalah prosesor yang sangat menarik. Bus data 8 bit, register 16 bit, bus alamat 20 bit, dan (dengan koprosesor 8087 terpasang) register floating point 80 bit! - person Brian Knoblauch; 03.12.2012