Perbedaan antara port dipetakan dan akses memori yang dipetakan?

19

Adakah yang bisa menjelaskan apa perbedaan antara pemetaan port dan pemetaan memori, dan apa yang telah dicapai keduanya? Mengapa ada port yang dipetakan, bagaimana strukturnya berbeda dari peta memori, dan adakah alasan banyak arsitektur menggunakan keduanya? Juga, apa yang dimaksud dengan "port" dalam pengertian ini, karena port dapat memiliki arti yang berbeda dalam konteks yang berbeda?

Contoh: Port forwarding, port sebagai titik akhir komunikasi, "pemetaan port".

Katakanlah saya menulis OUT ke port 400h (fiktif; hanya sebagai contoh) (seperti pada x86-64, dll.).

Apa atau di mana saya menulis jika tidak ada dalam memori? Bagaimana "port" dipetakan, dan apa artinya ini?

Varaquilex
sumber

Jawaban:

24

I / O yang dipetakan dengan memori dan I / O yang dipetakan dengan port adalah dua metode pelengkap untuk I / O.

Memori-Dipetakan I / O

Dalam sistem yang dipetakan memori, perangkat I / O diakses seperti itu adalah bagian dari memori. Loaddan Storeperintah dieksekusi untuk membaca dan menulis ke perangkat I / O, sama seperti yang digunakan untuk memori (port-dipetakan memiliki perintah khusus untuk I / O). Ini berarti perangkat I / O menggunakan bus alamat yang sama dengan memori, artinya CPU dapat merujuk ke memori atau perangkat I / O berdasarkan nilai dari alamat tersebut. Pendekatan ini membutuhkan isolasi dalam ruang alamat: yaitu, alamat yang disediakan untuk I / O tidak boleh tersedia untuk memori fisik.

Di bawah ini adalah gambar dari sistem komputer dasar yang sederhana . Kasus ini jauh lebih rumit dalam sistem kontemporer.

masukkan deskripsi gambar di sini


I / O Pemetaan Port

Menurut Wikipedia

Port-I / O yang dipetakan sering menggunakan kelas khusus instruksi CPU khusus untuk melakukan I / O. Ini ditemukan pada mikroprosesor Intel, dengan instruksi IN dan OUT. Instruksi ini dapat membaca dan menulis satu hingga empat byte (outb, outw, outl) ke perangkat I / O. Perangkat I / O memiliki ruang alamat yang terpisah dari memori umum, baik dilakukan dengan pin "I / O" tambahan pada antarmuka fisik CPU, atau seluruh bus yang didedikasikan untuk I / O. Karena ruang alamat untuk I / O terisolasi dari itu untuk memori utama, ini kadang-kadang disebut sebagai I / O terisolasi.


Adapun keuntungan dan kerugiannya: karena perangkat periferal lebih lambat daripada memori, berbagi data dan bus alamat dapat memperlambat akses memori. Di sisi lain, dengan sistem I / O yang dipetakan dengan memori yang sederhana, CPU membutuhkan lebih sedikit logika internal dan ini membantu untuk mengimplementasikan CPU yang lebih cepat, lebih murah, dan lebih hemat daya. Logikanya mirip dengan sistem RISC: kurangi kerumitan, dapatkan sistem yang lebih berdedikasi dan kuat yang cukup berguna untuk sistem tertanam, misalnya.

Sebaliknya (lagi dari Wiki):

Petunjuk I / O yang dipetakan di port seringkali sangat terbatas, seringkali hanya menyediakan operasi penyimpanan dan penyimpanan yang sederhana antara register CPU dan port I / O, sehingga, misalnya, untuk menambahkan konstanta ke register perangkat yang dipetakan di port membutuhkan tiga instruksi: baca port ke register CPU, tambahkan konstanta ke register CPU, dan tulis hasilnya kembali ke port.

Saya sangat menyarankan Anda membaca artikel wiki itu untuk informasi lebih lanjut.


Untuk menjawab salah satu pertanyaan Anda:

Apa atau di mana saya menulis jika tidak ada dalam memori?

Anda menulis ke register antarmuka I / O melalui bus data, yang kemudian (saat siap) mengirimkan data ke perangkat I / O yang sebenarnya. Di bawah ini adalah gambar dari contoh antarmuka perangkat I / O.

masukkan deskripsi gambar di sini

Varaquilex
sumber
Apa artinya ini yang Anda tulis untuk memori dipetakan "Pendekatan ini membutuhkan isolasi di ruang alamat: yaitu, alamat yang disediakan untuk I / O tidak boleh tersedia untuk memori fisik." Maksud Anda alamat yang disediakan untuk I / O ada di memori utama dan tidak tersedia untuk non-I / O. Jelas alamat IO dan alamat non-IO adalah memori fisik. Tidak ada yang namanya memori yang bukan fisik. (Kecuali jika Anda percaya pada argumen william lane craig yaitu bahwa sesuatu dapat memiliki otak dan memori non-fisik!).
barlop
1
dan ketika Anda menulis ini "Anda menulis ke register antarmuka I / O melalui bus data, yang kemudian (ketika siap) mengirim data ke perangkat I / O yang sebenarnya. Di bawah ini adalah gambar dari contoh I / O alat." Anda tidak jelas apakah IO "register" ada di perangkat, saya kira jika Anda menyebutnya register, sepertinya ada di perangkat. Tapi kemudian Anda menulis "..yang nanti (saat siap) mengirim data ke perangkat I / O yang sebenarnya" Jadi tidak jelas di mana Anda mengatakan lokasi memori ini. Apakah mereka berada di dalam perangkat, atau di luar perangkat .. atau pernah di luar perangkat.
barlop
1
Kepala: Saya mengumpulkan mereka dari apa yang saya pelajari dalam kuliah Mikroprosesor dan beberapa dari Wiki. Karena itu, yang saya maksud dengan yang Anda tanyakan dalam komentar pertama Anda adalah bahwa: "Alamat IO dan alamat non-IO adalah memori fisik" tidak jelas seperti yang Anda pikirkan. Sebenarnya (sejauh yang saya tahu, sejauh yang saya ajarkan) decoder kode alamat mengaktifkan antarmuka IO ketika alamat IO ditentukan, artinya ketika Anda memberikan alamat, itu tidak boleh berada dalam kisaran alamat fisik, misalnya , $ 0000 - $ 00FF untuk fisik dan $ 0100 - $ 01FF untuk IO (abaikan jumlahnya, hanya batasan perawatan).
Varaquilex
@barlop Untuk pertanyaan kedua Anda, Anda ada di sini, yang saya maksud adalah "Di bawah ini adalah gambar dari contoh antarmuka perangkat I / O ". Saya memperbaiki ini di edit yang baru saja saya buat. Saya harap suntingan itu menghilangkan kebingungan. Jika tidak, tanyakan lebih banyak. Saya akan mencoba menjawab sebaik mungkin.
Varaquilex
1
@barlop Titik lokasi memori tidak jelas dalam sebagian besar tulisan dan literatur yang saya temui. Entah mereka menganggap Anda sudah tahu, atau mereka tidak benar-benar tahu. Saya percaya jawabannya adalah dalam kata-kata ini dari LDD3 ch. 9: "Memori I / O hanyalah wilayah lokasi seperti RAM yang disediakan perangkat untuk prosesor melalui bus." (cetak miring ditambahkan) Yaitu memori dan / atau register ada di perangkat. Port I / O dan memori I / O hanyalah 2 cara sistem membuat lokasi tersebut tersedia untuk perangkat lunak.
orodbhen
2

Di Memory-Mapped I / O (hanya MMIO), perangkat diakses melalui instruksi yang sebenarnya dimaksudkan untuk mengakses memori. Setiap perangkat mendapatkan alamat memori tertentu. Namun ketika Anda mencoba membaca atau menulis ke bagian memori ini, perangkat tertentu (kemungkinan northbridge) mengirimnya ke perangkat terkait saja. Bahkan jika komputer tidak memiliki cukup memori untuk alamat seperti itu (karena alamat MMIO biasanya sangat tinggi), itu tidak masalah seperti memori fisik (yang Anda lihat ketika Anda melihat motherboard, yang dikenal sebagai RAM ) bahkan tidak berhubungan. Jika Anda memiliki RAM yang cukup untuk alamat, itu dipetakan ke non-I / O yang lebih tinggi, atau hilang artinya Anda tidak dapat membaca atau menulis di sana.

Port-I / O yang dipetakan (hanya PMIO) sangat berbeda. Anda memiliki instruksi berbeda yang digunakan untuk membaca dan menulis ke porta. Ada ruang alamat port sama seperti ruang alamat memori di mana alamat adalah alamat I / O yang benar-benar berkomunikasi dengan perangkat atau hanya tidak valid. PMIO pada dasarnya dapat dianggap sebagai MMIO dengan ruang alamat memori yang terpisah hanya untuk I / O.

Ahmet Zahit Can
sumber
"PMIO pada dasarnya dapat dianggap sebagai MMIO dengan ruang alamat memori terpisah hanya untuk I / O." - Address space adalah konsep yang sederhana dan mendasar, mengapa Anda menggunakan analogi yang menyesatkan dengan jawaban Anda yang masuk akal? Analogi yang menyesatkan itu tidak mengubah fakta: mis. Bisa ada ruang alamat lain selain "ruang alamat memori".
serbuk gergaji
1

Dengan nama-nama seperti 'sinyal I / O' dan 'pemetaan memori' semuanya dibuat jauh lebih rumit daripada yang sebenarnya, dan karenanya memberi kesan pada orang itu ada lebih banyak untuk itu dan itu mencakup topik lanjutan. Kecenderungan sekarang adalah bahwa orang melihatnya sebagai sesuatu yang baru. Tetapi ini sangat jauh dari kasus ini. Bahkan Babbage pada tahun 1830-an mengemudikan printernya, ini membutuhkan sinyal I / O, meskipun dilakukan oleh poros dan roda gigi. Misalnya di mesin Hero of Alexandria 2000 tahun yang lalu atau di teater kembali ke zaman Yunani, mereka selalu menarik tali dari serangkaian tali yang berbeda untuk mengontrol lampu atau pemandangan, setiap tali seperti jalur input dan output, itu seperti sesederhana itu, alamatnya adalah 'baris mana' yaitu benda, memori atau perangkat mana yang kita pilih,

Meskipun komputer mainframe besar yang memenuhi bangunan dengan lemari, menggunakan hal-hal seperti 64bit segera di 40-an, dan karena itu berurusan dengan pemetaan I / O persis sama saat itu dulu, e..g Konrad Zuse dan komputer ukuran kamarnya menggunakan mengambang titik yang memiliki sekitar 20 digit dalam desimal pada 1930-an, dan harus menggerakkan hal-hal seperti printer dan berbagai indikator bola lampu dan sakelar-sakelarnya. Tetapi pada mikroprosesor kecil ceritanya berbeda, mereka tidak dibayangkan sampai tahun 60-an dan dibangun sampai tahun 1971. Semua teknik ini menggunakan logika 8bit di tahun 80-an, digunakan untuk mikroprosesor dalam 4 bit di 70-an, 2 bit di 60-an dan digunakan dalam 16bit dalam 90 ' ketika semua orang mulai mendapatkan komputer dan karenanya karena sekarang di depan mereka mulai membahas topik pemetaan I / O dan memori ini untuk pertama kalinya, dan tampaknya ada sesuatu yang baru yang datang dengan munculnya internet; kemudian kami memiliki 32bit di komputer 00 dan 64bit di 10's, yang menyebabkan ada diskusi yang tak ada habisnya dari memori ke jalur data. Untuk menjawab pertanyaan Anda, saya akan berbicara tentang keripik yang dibeli oleh penggemar elektronik 30-40 tahun yang lalu, seperti yang saya lakukan pada waktu itu, karena kemudian, hal-hal menjadi sangat maju sehingga saya tidak dapat membangun dengan chip selanjutnya, tetapi prinsipnya sama saja sekarang, gerbang hanya disembunyikan di dalam chip kotak hitam yang lebih besar yang menggabungkan pin lain yang berhubungan dengan operasi ini berlangsung lebih paralel (misalnya memungkinkan banyak kait oktal,

Yah, saya tidak tahu apa-apa tentang semua bahasa baru atau bagaimana itu pada komputer modern sekarang, tetapi saya dapat memberitahu Anda bagaimana itu di masa lalu ketika saya dulu membangun komputer dengan chip.

Semua pemetaan I / O Pemetaan dan memori berarti secara sederhana, adalah jika Anda menggantungkan beban bola lampu contoh untuk beberapa perayaan dan memiliki kabel pergi ke masing-masing dan disebut bola lampu Lokasi memori, (yaitu bola lampu mewakili memori dalam RAM, baik hidup atau mati, dan jika Anda memilih lokasi 0 Anda mendapatkan kawat 0, lokasi 1, kawat 1, loc 2 kawat 2 dan seterusnya) jika Anda menambahkan beberapa kabel lagi misalnya satu kabel adalah bel, lokasi tertentu itu bukan memori itu adalah perangkat, yang Anda gunakan untuk output, menggunakan perintah OUT, untuk membuatnya berdering. Tapi itu dilihat sebagai lokasi memori dari sudut pandang komputer, karena ia datang sebagai kabel ke MPU sama saja. Jika kabel lain ditambahkan yang merupakan saklar yang Anda operasikan secara eksternal, ini adalah perangkat I / O, yang akan menjadi instruksi IN ke PC. Jadi ini disebut I / O yang dipetakan I / O.

Sekarang di komputer, kabel di bus mewakili garis alamat atau jalur data, TETAPI mereka dalam biner, yaitu dengan 2 kabel Anda dapat memiliki 00 01 10 11 yaitu 4 kombinasi 2 ^ 2, jadi dengan 8 baris 2 ^ 8 = 256 kemungkinan, dengan 20 baris 2 ^ 20 = 1048576 dengan 30 baris 2 ^ 30 = 1073741824 (1 manggung) dari kemungkinan dengan 30 baris. Jadi inilah mengapa ini disebut MAPPED, bukan hanya mengatakan I / O dan memori, mereka mengatakan I / O dipetakan, dan memori dipetakan, karena Anda memetakan kabel SEBAGAI KOMBINASI y biner mengkodekan mereka. Jadi jika Anda memiliki 2 kabel, 4 kombinasi, mereka tidak dapat hanya dihubungkan ke lampu, (belum lagi amplifikasi arus yang diperlukan dari tegangan kecil dari MPU, dan pencegahan arus umpan balik), tetapi 2 kabel memiliki untuk melewati decoder (kami menggunakan 138 untuk mendekode 3 baris menjadi 8 baris, 164 untuk mendekode 4 baris biner menjadi 16 baris. ) Setelah melalui decoder 2 baris ini misalnya A0 dan A1 (address0 dan alamat 1 (LINES)), menjadi 4 baris (on atau off) untuk bola lampu tertentu yang Anda kendarai (dalam kasing komputer, THE MEMORY), tetapi dalam beberapa kasus lokasi ini sebagai gantinya memilih beberapa perangkat Input / output, dan katakan 'gunakan saya' sebagai gantinya, yaitu seperti memori, sekali terletak, data kemudian dilewatkan salah satu cara atau yang lain (menggunakan logika tri state pintar untuk memotong tegangan di jalan setiap kali) pada jalur data bus D0..7 atau D0..31 atau ukuran apa pun data pada komputer (Anda memiliki 2 bit, 4bit, 8bit, 16bit, 32bit, 64bit, 128bit, 128bit, 256bit, komputer, apa pun komputer yang sedang Anda bangun). Jadi data masuk secara alami keluar atau masuk dari jalur data ke memori atau ke perangkat I / O (JIKA itu dipetakan memori), tetapi INI TIDAK HARUS BINGUNG dengan instruksi IN / OUT, Masuk dan Keluar INI Berarti dari beberapa blok memori I / O LAINNYA, blok memori I / O khusus di dalam MPU ditugaskan khusus hanya untuk I / O, yaitu (bukan memori dipetakan), ruang I / O ini Anda tidak selalu mendapatkan pada beberapa mikroprosesor, misalnya saya tidak berpikir kami memilikinya pada 6502, tapi kami memilikinya pada z80. Lebih banyak chip artistik yang digunakan hanya pemetaan memori, misalnya dalam game konsol dll, chip lebih masuk akal tetapi tidak menarik (tetap di buku) pergi untuk ruang I / O juga. Memori yang dipetakan I / O adalah kecepatan yang lebih tinggi karena menggabungkan pengalamatan memori (yang sangat cepat untuk RAM), oleh karena itu komputer jenis grafis hanya menggunakan pemetaan memori untuk I / O untuk mendapatkan kecepatan. I / O dipetakan I / O ditugaskan untuk port lambat misalnya rs232, atau port paralel, dan menggunakan perintah IN OUT. e. (bukan memori yang dipetakan), ruang I / O ini tidak selalu Anda dapatkan pada beberapa mikroprosesor, misalnya saya tidak berpikir kami memilikinya pada 6502, tetapi kami memilikinya pada z80. Lebih banyak chip artistik yang digunakan hanya pemetaan memori, misalnya dalam game konsol dll, chip lebih masuk akal tetapi tidak menarik (tetap di buku) pergi untuk ruang I / O juga. Memori yang dipetakan I / O adalah kecepatan yang lebih tinggi karena menggabungkan pengalamatan memori (yang sangat cepat untuk RAM), oleh karena itu komputer jenis grafis hanya menggunakan pemetaan memori untuk I / O untuk mendapatkan kecepatan. I / O dipetakan I / O ditugaskan untuk port lambat misalnya rs232, atau port paralel, dan menggunakan perintah IN OUT. e. (bukan memori yang dipetakan), ruang I / O ini tidak selalu Anda dapatkan pada beberapa mikroprosesor, misalnya saya tidak berpikir kami memilikinya pada 6502, tetapi kami memilikinya pada z80. Lebih banyak chip artistik yang digunakan hanya pemetaan memori, misalnya dalam game konsol dll, chip lebih masuk akal tetapi tidak menarik (tetap di buku) pergi untuk ruang I / O juga. Memori yang dipetakan I / O adalah kecepatan yang lebih tinggi karena menggabungkan pengalamatan memori (yang sangat cepat untuk RAM), oleh karena itu komputer jenis grafis hanya menggunakan pemetaan memori untuk I / O untuk mendapatkan kecepatan. I / O dipetakan I / O ditugaskan untuk port lambat misalnya rs232, atau port paralel, dan menggunakan perintah IN OUT. chip yang lebih masuk akal tetapi tidak menarik (tetap dalam buku) cocok untuk ruang I / O. Memori yang dipetakan I / O adalah kecepatan yang lebih tinggi karena menggabungkan pengalamatan memori (yang sangat cepat untuk RAM), oleh karena itu komputer jenis grafis hanya menggunakan pemetaan memori untuk I / O untuk mendapatkan kecepatan. I / O dipetakan I / O ditugaskan untuk port lambat misalnya rs232, atau port paralel, dan menggunakan perintah IN OUT. chip yang lebih masuk akal tetapi tidak menarik (tetap dalam buku) cocok untuk ruang I / O. Memori yang dipetakan I / O adalah kecepatan yang lebih tinggi karena menggabungkan pengalamatan memori (yang sangat cepat untuk RAM), oleh karena itu komputer jenis grafis hanya menggunakan pemetaan memori untuk I / O untuk mendapatkan kecepatan. I / O dipetakan I / O ditugaskan untuk port lambat misalnya rs232, atau port paralel, dan menggunakan perintah IN OUT.

Sekarang jika alih-alih menambahkan dua kabel, jika Anda benar-benar mengganti dua kabel yang awalnya menjadi bohlam dan mengambil beberapa bohlam dan menggantinya dengan hal-hal lain, misalnya bel pada satu dan sakelar pada yang lain, ini sekarang tidak dirujuk (dipilih) ) dengan instruksi IN dan OUT masing-masing, mereka dirujuk dengan mengakses lokasi memori tertentu yang memilih kabel-kabel (yang awalnya bohlam). Jadi ini adalah memori yang dipetakan I / O.

Memori yang Dipetakan I / O berarti bahwa bus alamat aktual yang biasanya pergi ke memori (RAM), terhubung juga ke decoder LAIN (decoder logika), dan ketika merasakan kombinasi biner tertentu dari sinyal alamat, ia menghasilkan output yang tinggi , (mis. jika Anda memiliki muatan dan dan bukan gerbang, dan Anda berkata, jika ini dan bukan itu dan seterusnya, menggunakan pin A0..A20 atau berapa pun ukuran bus alamat Anda), maka sinyal tinggi ini MEMUNGKINKAN kait, (untuk perangkat tertentu, seperti port serial, port paralel), kait ini kemudian LULUS data pada bus data, hingga perangkat I / O. Ini untuk menulis ke perangkat I / O. Membaca bekerja sebaliknya, perangkat I / O, mengembalikan data kembali, dan jika saya ingat dengan benar, ia mengirimkan kombinasi kode alamat yang sama persis ke baris alamat.

Saya kira, itu harus bekerja dengan cara yang sama hari ini, kecuali mereka hanya akan jauh lebih banyak data dan garis alamat.

Anda benar-benar MENYETEL I / O ke baris alamat. Karenanya I / O secara efektif dipetakan ke dalam ruang memori, seolah-olah itu adalah memori. Tapi kait lain menonaktifkan pin alamat dari mengakses ram pada saat yang sama, sehingga Anda tidak mendapatkan voltase dari dua alamat atau sumber data pada baris yang sama, yang akan merusak chip.

Dengan instruksi IN dan OUT, kami memiliki ini 40 tahun yang lalu, pada chip z80. Ini untuk kasus-kasus khusus di mana chip sebenarnya berurusan dengan I / O itu sendiri dengan cara yang berbeda, yaitu bukan memori yang dipetakan. (Yaitu dengan memetakan memori, Anda hanya membaca atau menulis ke lokasi memori, tetapi dengan IN dan OUT Anda sudah memberi tahu CPU bahwa itu adalah sinyal I / O dan bukan memori). Jadi dengan instruksi IN / OUT, ini memiliki ruang alamat I / O sendiri (yang merupakan tambahan untuk memori ram), Ram I / O ini, sepertinya, memiliki seperangkat alamat yang sama, kecuali Anda secara langsung mengakses perangkat melalui lampiran decoder ke alamat I / O tersebut, dan Anda tidak mengakses perangkat I / O dari pin alamat standar, ini untuk instruksi IN / OUT.

yang untuk kasus ini sebaiknya diteruskan sebagai string kode ASCII untuk huruf dan angka. Perintah-perintah ini persis sama seperti jika Anda menggunakan instruksi IN dan OUT dalam satu loop di mana hitungannya adalah panjang string.

Jika Anda mengakses mis. Pengeras suara komputer, Anda hanya akan melewatkan satu data sekaligus menggunakan OUT.

Jika Anda membaca dari port paralel, Anda akan melakukan IN, dan menggunakan kode untuk alamat I / O port. Menulis untuk itu, misalnya untuk menggerakkan printer lama atau robotika dengan sinyal elektronik, Anda akan menggunakan perintah OUT. Port paralel dan port serial (RS232 lama) adalah port khas yang digunakan. RS232 adalah data serial, hanya satu bit yang diizinkan masuk atau keluar, jadi jika Anda membaca dari rs232, Anda hanya akan memiliki 1 bit byte yang relevan, sama dengan keluaran. Tingkat baud adalah sekitar 17kHz max untuk rs232, tetapi ini digunakan untuk menggerakkan banyak elektronik, kembali pada hari-hari, saya digunakan untuk membangun sirkuit rs232, misalnya untuk membaca tegangan atau drive PIC mikro-controller. Setiap port, dinamai misalnya COM1 COM2 COM3 COM4 dan mereka memiliki alamat I / O. Saya tidak yakin di sini, tetapi mereka mirip dengan misalnya 3F8h 378h (h = alamat hex)

Saya tidak yakin tentang port modern tetapi jika Anda menulis ke USB, ini kemungkinan besar akan memetakan memori I / O untuk kecepatan yang lebih besar.

Port keyboard PS / 2, saya pikir ini menggunakan instruksi IN, untuk membaca data dari keyboard. Ini menggantikan RS232 yang lama, tetapi saya rasa memiliki spesifikasi yang sedikit berbeda.

Disk drive biasanya dipetakan memori, mungkin masih sekarang, yaitu Anda tidak drive disk dengan instruksi IN / out, mereka akan terlalu lambat. Tetapi port lambat karena itu tidak masalah, misalnya printer lambat sejauh kecepatan data yang diperlukan dibandingkan dengan hebat misalnya 200 Megabyte / detik yang dibutuhkan hard disk. Seorang pembicara, hanya membutuhkan frekuensi waktu suara sekitar 10 atau 20, katakanlah 20kHz akan cukup untuk buzzer, maka itu I / O. Hal-hal lambat menggunakan I / O, instruksi IN / OUT. Karenanya USB mungkin sekarang dipetakan memori, Anda harus memeriksanya.

Cara yang lebih baik untuk memahaminya adalah ini. Pada komputer lama di era 80-an kadang-kadang Anda ingin mengontrol beberapa perangkat yang Anda buat, dan tidak memiliki spesifikasi untuk port keluaran (seperti pada masa itu pabrikan menyembunyikannya sehingga perusahaan tertentu seperti joystick dan perusahaan kartrid) dapat maju dalam pasar dengan beberapa kesepakatan bisnis). Yang harus Anda lakukan adalah membuka komputer dan secara harfiah menyolder kabel ke beberapa titik di bus alamat, misalnya Anda menyolder tiga kabel ke beberapa titik di sirkuit pada jarak yang aman (agar tidak merusak chip dengan panas), yang titik-titik yang ditransfer oleh tata letak papan sirkuit ke mis pin A15 A7 dan A1 pada mikroprosesor. Dan Anda harus menghubungkan juga biasanya garis MREQ (jalur permintaan memori dan / atau garis RD / WR untuk membuat sinyal yang lebih rapi, dan menambahkannya ke dalam dan atau tidak logika, tetapi jika Anda pintar Anda bisa melakukannya dengan garis alamat) Dan kemudian Anda menghubungkan ketiga kabel + sinyal tipe Ready ini (mis. MREQ RD atau WR line untuk memberikan beberapa aktif rendah atau tinggi (yang akan membutuhkan kemungkinan tambahan TIDAK gerbang di sini) untuk mengatakan DATA siap di jalur SEKARANG) melalui 4 input DAN gerbang, yang memberikan output ke led melalui resistor 200 ohm, Anda memiliki memori Anda sendiri dipetakan I / O kecepatan tinggi ke lampu led , yang dapat Anda kait melalui kait SR atau kait tipe D untuk menyimpannya dalam memori 1 bit secara eksternal pada beberapa papan sirkuit. Berikut 15 adalah garis 32K, 7 adalah garis 64, 1 adalah garis 2 (biner bekerja dalam kekuatan 2, jadi A1 adalah 2 ^ 1, A7 adalah 2 ^ 7, dan A15 adalah 2 ^ 15), Jadi jika Anda lokasi yang dialamatkan 32768 + 64 + 2 = 32834 = F041 dalam hex, menggunakan LDA atau STA atau LD pada MPU lama di assembler, Anda akan menampilkan ke led ini, itu akan menyala terang jika resistor mengatakan sekitar 100 ohm. Jadi Anda telah melakukan memori yang dipetakan I / o, yang sesederhana itu, Anda bisa melakukannya hari ini dengan menyolder ke baris alamat mpu Anda sama. Tetapi Anda tidak akan melakukannya sekarang karena kelezatan sirkuit. Tetapi Anda juga bisa bergabung dengan jalur data D0..7 (di masa lalu) atau mengatakan d0..31 sekarang menjadi 32bit pada PC 486 lama. Kemudian jika Anda menyebut lokasi itu dalam kode mesin dengan melakukan memuat akumulator dengan nilai 8 (mov axe, 8 saat ini) atau menyimpan nilai akumulator itu ke lokasi alamat (mov F041h, akumulator kapak, Anda akan BAHKAN hari ini mendapatkan yang menyebabkan datang Catatan, angka 8, dalam contohnya adalah apa yang ada di bus data, dalam kasus khusus ini, kami tidak melewatkan data kami hanya mengaktifkan perangkat tertentu (LED menyala, jika kami telah memilih perangkat I / O ITU, di sini, hanya sebuah LED), jadi dalam contoh ini tidak masalah berapa nomor yang kita miliki dengan kapak MOV itu, 8 instruksi, bisa jadi misalnya kapak bergerak, 243 dan kita masih akan mengaktifkan LED pada garis F041h ketika kita kemudian melakukan perpindahan F041h, seperti karena kami menggunakan alamat yang sama. Anda lihat, ada garis alamat dan ada garis data. Jadi ketika Anda alamat 3F8 di COM1 atau apa pun alamatnya, peta memori I / O hanya mengirim sinyal ke port, misalnya ps / 2, dan gerbang dan memeriksa apakah Anda memiliki 1110000100 pada garis yaitu 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. 8 instruksi, bisa jadi misalnya mov ax, 243 dan kami masih akan mengaktifkan LED pada garis F041h ketika kami kemudian melakukan mov F041h, karena kami menggunakan alamat yang sama. Anda lihat, ada garis alamat dan ada garis data. Jadi ketika Anda alamat 3F8 di COM1 atau apa pun alamatnya, peta memori I / O hanya mengirim sinyal ke port, misalnya ps / 2, dan gerbang dan memeriksa apakah Anda memiliki 1110000100 pada garis yaitu 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. 8 instruksi, bisa jadi misalnya mov ax, 243 dan kami masih akan mengaktifkan LED pada garis F041h ketika kami kemudian melakukan mov F041h, karena karena kami menggunakan alamat yang sama. Anda lihat, ada garis alamat dan ada garis data. Jadi ketika Anda alamat 3F8 di COM1 atau apa pun alamatnya, peta memori I / O hanya mengirim sinyal ke port, misalnya ps / 2, dan gerbang dan memeriksa apakah Anda memiliki 1110000100 pada garis yaitu 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. karena kita menggunakan alamat yang sama. Anda lihat, ada garis alamat dan ada garis data. Jadi ketika Anda alamat 3F8 di COM1 atau apa pun alamatnya, peta memori I / O hanya mengirim sinyal ke port, misalnya ps / 2, dan gerbang dan memeriksa apakah Anda memiliki 1110000100 pada garis yaitu 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. karena kita menggunakan alamat yang sama. Anda lihat, ada garis alamat dan ada garis data. Jadi ketika Anda alamat 3F8 di COM1 atau apa pun alamatnya, peta memori I / O hanya mengirim sinyal ke port, misalnya ps / 2, dan gerbang dan memeriksa apakah Anda memiliki 1110000100 pada garis yaitu 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana. 11 adalah 3 1000 adalah F dan 0100 adalah 8, lihat konversi biner ke hex. Jika tegangan tinggi muncul pada posisi bit tersebut di mana ada 1, maka port, misalnya rs232 atau ps / 2, disetel ke aktif, artinya diaktifkan, ini memungkinkan kait, oleh sinyal CE memungkinkan sinyal, atau chip CS pilih yang sederhana.

Pada kait, itu adalah pin E Aktifkan atau aktifkan output rendah aktif. Yaitu dengan contoh di atas kita menggunakan alamat untuk memilih (dengan decoding) YANG I / O perangkat yang ingin kita gunakan (yaitu dalam contoh LED menyala, jika itu perangkat I / O dipilih. Jadi ini adalah garis memungkinkan LALU, setelah perangkat I / O dipilih, LALU data dilewatkan dari bus data (D0..7 di masa lalu, atau contoh D0..63 sekarang untuk komputer 64bit), melalui kait oktal 373 di yang lama hari-hari, ini adalah sirkuit flip-flop tipe-D yang menyimpan data di dalam sandal jepit Dengan tepi jam tinggi yang aktif, data melewati dan disimpan. Tepi jam ini akan datang dari sinyal 'DATA RDY' pada sinyal data , ini memiliki berbagai nama, saya tidak tahu apa namanya sekarang, jadi untuk 64bit, kami memiliki 8 kait oktal. Dan mereka menggunakan kait dua arah untuk mengontrol data dengan cara apa pun, atau tri-state, sehingga ketika perangkat I / O tidak digunakan, jalur data berada dalam keadaan impedansi tinggi. Jadi karena itu Anda memilih perangkat I / O dengan kombinasi pada baris alamat, ini adalah nomor, misalnya 3f8h dalam OUT 3F8h, 7, dan data, di sini dalam contoh 7, adalah apa yang dilewatkan pada baris data, di perintah OUT data dikirimkan ke kait data, dan keluar ke perangkat I / O. Jika Anda memiliki IN, Anda akan melakukan perintah misalnya IN 3f8h, 800h, (saya harapkan, tapi saya tidak tahu sintaks dari assembler x86), yang saya maksud adalah, untuk IN, Anda memasukkan data dari jalur data (setelah memilih alamat, misalnya di sini 3f7h, yang memilih perangkat I / O ITU), data ini berasal dari perangkat I / O, melalui sandal jepit tipe-D pada kait data (satu untuk setiap bit jalur bus data), dan dimasukkan ke pin D0..7 atau (D0..63 pada PC modern) pada MPU Micro-processing unit ). Dalam contoh ini saya menempatkan IN 3f8h, 800h, untuk menunjukkan bahwa setelah data masuk, kemudian disimpan ke dalam 800h alamat. Sintaks x86 saya pikir berbeda, Anda harus melakukan mungkin IN 3f8h, ah atau yang serupa, yaitu menjadi register pertama dengan data yang masuk, maka Anda akan MOV 800h, ah yaitu memindahkan data ke dalam memori lokasi di RAM, (Jika Anda ingin menyimpannya), atau melakukan sesuatu yang lain dengan ah dll. ah adalah contoh register, bisa berupa apa saja, al, bh, bl dll apa pun, tetapi periksa sintaksnya, setiap sistem assembler adalah sedikit berbeda, saya bukan ahli x86. Sekali lagi, saya menggunakan 3f8h sebagai contoh alamat I / O, ada ratusan,

Sedangkan ketika Anda mengakses memori (RAM, misalnya 64byte statis statis dan RAM dinamis di 70-an, 8K SRAM dan DRAM di 80-an, deretan SIMMS masing-masing memiliki beberapa megabytes masing-masing (modul memori baris tunggal) pada 90-an dan sekarang adalah dalam bentuk modul DDR yang mengandung DIMM, modul memori dual in line, saya belum memeriksa tetapi yang terbaru mungkin tidak diragukan lagi masing-masing memiliki beberapa gigabyte pada setiap chip kecil), jika itu bukan alamat I / O (sangat beberapa alamat adalah alamat I / O, saat ini memori jutaan kali atau lebih mungkin berada di ruang alamat daripada I / O pada pc modern), Anda masih menggunakan instruksi baca tulis data yang sama untuk memori, tetapi Anda tidak mengendarai beberapa sirkuit logika eksternal yang mencari bit-bit itu, alih-alih pin alamat dan data tersebut ditransfer langsung ke chip RAM.

Dalam kode mesin, I / O dan pengalamatan memori tampak sama, seolah-olah keduanya adalah akses memori, tetapi apa yang terjadi secara fisik sama sekali berbeda dalam sirkuit elektronik yang sebenarnya.

Christine
sumber