Apa itu Mikroprosesor Pemula yang Baik untuk belajar Assembly?

19

Jadi aku ingin belajar Majelis pertama pada seorang anggota parlemen, kemudian pindah ke C (karena tampaknya seperti itu yang apa yang kebanyakan dari mereka menggunakan).

Saya ingin masuk ke Pemrograman Tertanam, saya benar-benar menyukai hal-hal tingkat rendah C (Kernel / Modul untuk Linux terutama apa yang telah saya lakukan), tapi saya suka gagasan untuk dapat memprogram tingkat lebih rendah dari itu (Microcontrollers / Mikroprosesor).

Aku tahu tentang Arduino, dan itu besar dan semua, tapi aku tidak bisa menemukan banyak sumber daya untuk menggunakan Assembly dengan mereka. Atmel AVR tampaknya sangat populer (dan murah), tetapi ketika datang ke bagian perangkat keras yang sebenarnya (mengaitkannya di papan tempat memotong roti, dll.), Saya tidak menemukan banyak informasi.

Setiap saran / informasi atau sumber daya yang kalian ketahui silakan beri tahu saya.

Edit: Hal lain: Sepertinya semua buku Mikroprosesor saya baca (Biasanya AVRs) bicara tentang mikroprosesor itu sendiri, dan pemrograman itu. Tapi saya belum melihat buku yang benar-benar berbicara tentang menginstal semua komponen sendiri (mikroprosesor, memori, daya, dll). Jika saya dapat menemukan sesuatu yang menuntun saya, saya akan berbisnis. (Saya ingin belajar dari bawah ke atas.) Belum lagi saya tidak tahu bagaimana Anda akan berkomunikasi di antara mereka.

ctype.h
sumber
3
Saya benci mengirim Anda ke tempat lain, tetapi jika Anda tertarik dengan AVR, Anda perlu tahu tentang AVRfreaks.net .
Kevin Vermeer
Ya saya condong ke arah AVR ... terutama karena mereka begitu banyak info tentang mereka, dan mereka BANYAK lebih murah daripada TI-MPS430 ...
2
AVR populer di kalangan penghobi, tetapi saya tidak yakin dari mana Anda mendapatkan data biaya Anda. Kedua keluarga memiliki beberapa penawaran yang kurang dari 1 USD dan lainnya menawarkan 20 USD.
Kevin Vermeer
Yah ..... ketika saya melihat MPS430 itu tampak seperti perangkat lunak (debuggers dll) agak mahal ketika ditambahkan ke papan pengembangan.
1
Saran saya adalah jangan memilih MSP430 jika Anda seorang pemula. Alat resmi bagus, tetapi dukungan gratis yang Anda temukan online tidak cocok dengan PIC / AVR
Toby Jaffey

Jawaban:

14

Saya belajar tentang 68HC11 di perguruan tinggi. Mereka sangat sederhana untuk bekerja dengan tetapi jujur ​​kebanyakan mikrokontroler bertenaga rendah akan serupa (AVR, 8051, PIC, MSP430). Hal terbesar yang akan menambah kompleksitas pemrograman ASM untuk mikrokontroler adalah jumlah dan jenis mode pengalamatan memori yang didukung . Anda harus menghindari perangkat yang lebih rumit pada awalnya seperti prosesor ARM high end.

Saya mungkin akan merekomendasikan MSP430 sebagai titik awal yang baik. Mungkin menulis sebuah program dalam C dan belajar dengan mengganti berbagai fungsi dengan inline assembly. Mulai sederhana, x + y = z, dll.

Setelah Anda mengganti fungsi atau algoritme dengan rakitan, bandingkan dan kontras bagaimana Anda mengodekannya dan apa yang dihasilkan oleh kompiler C Ini mungkin salah satu cara yang lebih baik untuk mempelajari perakitan menurut saya dan pada saat yang sama belajar tentang bagaimana kompiler bekerja yang sangat berharga sebagai programmer yang tertanam. Pastikan Anda mematikan optimisasi dalam kompiler C pada awalnya atau Anda mungkin akan sangat bingung dengan kode yang dihasilkan kompiler. Nyalakan secara bertahap optimisasi dan catat apa yang dilakukan kompiler.

RISC vs CISC

RISC berarti 'Pengurangan Set Instruksi Komputasi' itu tidak merujuk pada set instruksi tertentu tetapi hanya strategi desain yang mengatakan bahwa CPU memiliki set instruksi minimal. Beberapa petunjuk bahwa setiap melakukan sesuatu dasar. Tidak ada definisi teknis yang ketat tentang apa yang diperlukan 'untuk menjadi RISC'. Di sisi lain, arsitektur CISC memiliki banyak instruksi tetapi masing-masing 'melakukan lebih banyak'.

Keuntungan RISC yang disengaja adalah bahwa desain CPU Anda membutuhkan lebih sedikit transistor yang berarti lebih sedikit penggunaan daya (besar untuk mikrokontroler), lebih murah untuk dibuat dan laju jam lebih tinggi yang mengarah ke kinerja yang lebih besar. Penggunaan daya yang lebih rendah dan pembuatan yang lebih murah umumnya benar, kinerja yang lebih besar belum benar-benar sesuai dengan tujuan sebagai hasil dari perbaikan desain dalam arsitektur CISC.

Hampir semua core CPU RISC atau 'jalan tengah' desain hari ini. Bahkan dengan arsitektur CISC paling terkenal (atau terkenal), x86. CPU x86 modern secara internal RISC seperti core dengan decoder yang dibaut di ujung depan yang memecah instruksi x86 menjadi beberapa instruksi seperti RISC. Saya pikir Intel menyebut ini 'mikro-ops'.

Seperti yang (RISC vs CISC) lebih mudah untuk dipelajari dalam perakitan, saya pikir itu adalah melemparkan. Melakukan sesuatu dengan set instruksi RISC umumnya membutuhkan lebih banyak jalur perakitan daripada melakukan hal yang sama dengan set instruksi CISC. Di set instruksi sisi CISC lain yang lebih rumit untuk belajar karena jumlah yang lebih besar dari instruksi yang tersedia.

Sebagian besar CISC alasan mendapat nama buruk adalah bahwa x86 adalah dengan dan jauh contoh yang paling umum dan adalah sedikit berantakan untuk bekerja dengan. Saya pikir thats sebagian besar hasil dari instruksi x86 set menjadi sangat tua dan telah diperluas setengah lusin atau lebih kali tetap menjaga kompatibilitas. Bahkan core i7 4.5GHz Anda dapat berjalan di 286 modus (dan tidak di boot).

Adapun ARM menjadi arsitektur RISC, saya akan menganggap bahwa cukup diperdebatkan. Ini tentu saja arsitektur load-store. Set instruksi dasar seperti RISC, tetapi dalam revisi baru-baru ini set instruksi telah tumbuh sedikit ke titik di mana saya pribadi menganggapnya lebih sebagai jalan tengah antara RISC dan CISC. Petunjuk praktis set benar-benar paling 'RISCish' dari set instruksi ARM.

Menandai
sumber
@ Mark - ARMS juga prosesor RISC, set instruksi yang tidak buruk. Ini sebenarnya cukup baik dirancang; ada beberapa petunjuk untuk userspace vs kernel untuk diferensiasi dan kompleksitas lainnya, tetapi mereka dapat diabaikan saat Anda sedang memulai.
Kevin Vermeer
1
@reemrevnivek Saya lebih berusaha untuk menjauhkannya dari kerumitan berurusan dengan beberapa mode prosesor dan MMU ketika ia mulai memasuki ASM yang mengapa saya menyebutkan ARM kelas atas. Inisialisasi dan setup akhir yang lebih tinggi ARM SoC juga secara substansial lebih kompleks daripada sesuatu seperti AVR / PIC / MSP430.
Markus
RISC? im tidak yakin saya mengerti perbedaan antara yang dan apa pun yang lainnya ... perawatan untuk menjelaskan? Bukankah kebanyakan Microcontrollers RISC? itu hanya berarti set instruksi kurang benar?
1
@sauron saya ditambahkan ke jawaban saya re: RISC vs CISC.
Markus
Apakah hal-hal seperti AVR / PICS biasanya RISC atau CISC?
8

Saya pikir mikrokontroler PIC 8 bit adalah pilihan terbaik karena berkurangnya instruksi.

Efek samping dari berkurangnya jumlah instruksi adalah Anda harus menemukan kembali roda dibandingkan dengan mikrokontroler lainnya dengan lebih banyak instruksi.

Tetapi setelah belajar dengan PIC, Anda dapat bermigrasi ke mikrokontroler lain dan melihat apa yang lebih cocok untuk Anda.

Daniel Grillo
sumber
Saya tidak akan sepenuhnya tidak setuju karena ini adalah apa yang saya jelajahi sekarang, tetapi 8, 16, dan 32 bit core memiliki strategi asm yang sama sekali berbeda.
Grady Pemain
7

Mirip dengan saran Markus dari 68HC11, The set instruksi dari Freescale 68HCS08 keluarga adalah versi slimmed-down dari Motorola 6809, yang saya pikir memiliki salah satu dari 8-bit instruksi set terbersih pada masanya. Anda bisa mendapatkan papan pengembangan dengan sakelar, LED, accelerometer 3-sumbu, dan bel piezo seharga $ 79 di sini .

tcrosley
sumber
Berkurangnya jumlah register S08 memiliki terhadap HC11 dapat membuat hal-hal kecil lebih sulit di depan, karena Anda akan perlu mencari tahu tumpukan lakukan untuk apa-apa (yang diajarkan kemudian di lab saya dengan HC11s (atau itu 12's)). Dengan ekstensi, AVRS benar-benar bagus karena Anda memiliki kekalahan 32 register untuk bermain dengan sebelum mengkhawatirkan stack.
Nick T
Sebenarnya saya suka kesederhanaan akumulator tunggal, meskipun bisa menjadi hambatan. Alih-alih menggunakan tumpukan untuk variabel temp, untuk memulai dengan saya merasa lebih mudah untuk menggunakan 144 byte variabel halaman langsung yang dapat diakses dengan instruksi yang lebih pendek (112 byte halaman langsung lainnya digunakan untuk register I / O). Menggunakan stack (yang memungkinkan untuk reentrant dan rutinitas rekursif) dapat dipelajari kemudian.
tcrosley
Tidak HC (S) 08 berasal dari HC05 itu?
Johan.A
@ Johan. Ya, Anda memang benar. HCS08 adalah versi yang disempurnakan dari HC05. Saya seharusnya menyebutkan itu. Saya pikir derivasi adalah sesuatu seperti 6800 -> 6801 -> 6805 -> HC (S) 08. Aku menulis banyak kode assembly untuk 6805. Saya membandingkan HCS08 ke 6809 untuk mengikat dengan komentar lain kembali 68HC11 (yang kira-kira versi mikrokontroler dari 6809).
tcrosley
4

The msp430 set instruksi adalah satu yang baik untuk belajar assembler pada. Hindari x86. Arm adalah salah satu yang baik lain tetapi memiliki lebih banyak instruksi dan pilihan dan tidak dapat paling cocok sebagai instruksi set pertama. Praktis adalah bagian dari lengan set instruksi dan tidak buruk, pada github saya memiliki jempol emulator (thumbulator) dan msp430 emulator (tidak diuji sebanyak satu ibu jari) yang barebone, hanya prosesor dan memori dan sedikit lebih , sehingga Anda bisa mendapatkan visibilitas yang baik ke dalam apa yang terjadi. Alternatif akan qemu misalnya di mana visibilitas ada tapi jauh lebih sulit untuk mendapatkan, juga dengan qemu seperti solusi dibutuhkan lebih banyak pekerjaan sebelum Anda mengetahui jika Anda memiliki sesuatu kerja.
goto mspgcc4.sf.net untuk membangun toolchain, dan / atau saham binutils (./configure --target = msp430 --prefix = / sesuatu) dalam kombinasi dengan llvm saham. Setelah Anda siap untuk hardware biaya papan msp430 pengembangan di bawah 5 dolar. Untuk lengan / alat praktis hanya mendapatkan versi lite dari codesourcery. Sebuah korteks-m3 (ibu jari / thumb2) papan adalah sekitar 12 dolar sekarang. Saya akan menghindari x86 dan AVR dan lain-lain sebagai instruksi set pertama, Anda akan ingin belajar lain untuk menjadi berpengetahuan luas. Tua / asli pic set instruksi adalah sesuatu yang layak melihat juga. Anda bisa menulis simulator sendiri di sore untuk itu serta belajar assembler. Saya tidak akan mempelajarinya pertama tentu, hal ini mengajarkan beberapa hal menarik, tetapi pada skala waktu doesnt sama dan isnt selalu mewakili umum fitur yang Anda temukan di sebagian besar instruksi set. msp430 memberiku nuansa pdp11 yang merupakan instruksi pertama set Aku benar-benar belajar, keduanya telah baik bulat, sebagian besar fitur orthogonal. Kedua msp430 dan instruksi microchip pic set didokumentasikan di wikipedia, setidaknya sebagai referensi, untuk mendapatkan seluruh gambar mendapatkan lembar data / manual dari vendor yang akan menjelaskan setiap mendaftar dan menangani modus, ulang / boot, dll

old_timer
sumber
untuk assembler hanya Anda hanya perlu binutils, setidaknya untuk lengan / ibu jari atau msp430, dan Anda dapat membangun assembler dan linker. Jika Anda ingin kompiler C dari mana Anda dapat memeriksa output assembler sebagai sarana belajar, maka Anda perlu mspgcc4 atau codesourcery atau hanya digunakan llvm untuk keduanya.
old_timer
4

Anda yakin ingin belajar Majelis? Bisakah Anda mengatakan mengapa? Hal ini cukup tugas, dan kurang dan kurang relavent atau berguna sekarang hari. Ini dari orang yang telah menulis di dalamnya dan bahkan program rakitan tangan (tidak ada assembler, linker, hanya kartu dengan set instruksi).

russ_hensel
sumber
Ini sebenarnya bukan jawaban, sebanyak komentar. Saya juga ragu-ragu untuk mempercayai seorang programmer C yang tertanam yang tidak mau berjalan dengan susah payah melalui bit perakitan sekarang dan kemudian ketika mencoba untuk memahami keanehan dalam perilaku proyek.
Chris Stratton
4

Saya juga belajar tentang 68HC11 di perguruan tinggi. Alih-alih mereka menyarankan ini daripada MPU / MCU lainnya, saya hanya ingin menunjukkan bahwa papan pengembangan yang kami gunakan memiliki program monitor. Jadi dari terminal bisu kita bisa melangkah melalui kode dan memeriksa register ... Saya sarankan ketika Anda tahu prosesor mana yang sesuai dengan kebutuhan Anda, Anda juga memeriksa papan pengembangan apa yang tersedia dengan program monitor.

mvr
sumber
Program monitor kedengarannya akan sangat membantu. Buku apa yang Anda gunakan untuk mempelajari ini? jika Anda keberatan saya bertanya ....
Aku terlalu memiliki pengalaman dengan 68HC11 dan "Pemantauan Program" dikenal sebagai Buffalo monitor . Pada dasarnya, itu hanya sebuah program yang disimpan dalam ROM yang berkomunikasi secara serial ke PC Anda. Anda mengetik ke dalam terminal dan program menafsirkan permintaan Anda dan memberi Anda kembali informasi. Anda dapat dump memori ke layar, nilai-nilai perubahan memori, langkah melalui petunjuk, dll papan kami digunakan adalah ini satu. Kontroler ini mudah dipelajari tetapi sangat kuno.
sherrellbc
... Buku yang kami gunakan adalah ini jika Anda tertarik. Saya akan menyarankan pergi dengan controller yang lebih modern seperti AVR; papan pengembangan mereka dapat ditemukan di sini .
sherrellbc
3

Saya mengajar baik PIC (14-bit core) dan perakitan ARM. Kelas PIC saya katakan bahwa sekali mereka telah menguasai jeleknya arsitektur itu, mereka dapat mengambil hal lain. ARM (tidak Thumb yang / Cortex!) Adalah arsitektur yang sangat bagus untuk belajar perakitan. Kami menggunakan papan LPC2148.

Wouter van Ooijen
sumber
Hai Wouter, senang melihat Anda di sini!
Olin Lathrop
2

Saya belajar 16-bit PIC perakitan dengan dsPIC33F. Rakitan prosesor cukup mirip C, karena mendukung pointer dan tiga operasi variabel (A = B + C, misalnya), yang membuat belajar dan beradaptasi lebih mudah.

Thomas O
sumber
1

Anda membingungkan mikrokontroler dan mikroprosesor di sini. AVR adalah garis mikrokontroler oleh Atmel, bukan sebuah mikroprosesor. Saya sarankan Anda pertama kali mencari di wikipedia untuk mendapatkan pemahaman yang lebih baik dari apa perbedaan antara ini. Pada dasarnya mikrokontroler adalah sistem yang lebih atau kurang lengkap, sedangkan mikroprosesor hanya cpu (maka mikrokontroler memiliki di dalam mikroprosesor).

Erik
sumber
Ya saya tahu itu, saya tidak tahu mengapa saya tidak mengatakannya. Maksud saya seperti tidak banyak panduan berbicara tentang benar-benar menghubungkan MP dan Memori (seperti flash atau eeprom) dll ...
1
Karena kebanyakan mikroprosesor sekarang memiliki cache / memori dan beberapa I / O, itu adalah garis yang sangat kabur.
kenny
1
@Sauron - Anda yakin Anda tahu itu? Anda menggunakan MP lagi; mikrokontroler (yang merupakan istilah yang tepat untuk AVR dan 99% dari perangkat yang kita diskusikan di sini) hampir selalu memiliki memori (keduanya non-volatile, seperti EEPROM dan Flash, dan SRAM yang mudah menguap) on-board. Belajar untuk menggunakan hal-hal atas kapal sebelum Anda mulai merambah ke peripheral.
Kevin Vermeer
1

Di universitas saya, kami diajarkan hardware desain / arsitektur bersama bahasa assembly (dua tangan saja di tangan, jelas) dengan MIPS (atau mungkin DLX ) arsitektur. Sejak itu, saya mencoba-coba perakitan PIC dan AVR sedikit di sekolah / kerja, dan semuanya sangat mirip. Saya pikir perakitan MIPS adalah titik awal yang bagus, karena bahasanya sangat sederhana, seperti arsitektur prosesor.

Lihat juga: buku ini . Bukan buku terbaik di dunia, tapi itu buku desain komputer standar untuk banyak universitas.

Shamtam
sumber
Microchip PIC32 menggunakan arsitektur MIPS dan cukup mudah untuk mencampur assembler MIPS dengan C.
tcrosley
0

saran saya adalah siapa pun yang akan mulai belajar tentang mikrokontroler dan prosesor harus membaca buku yang menamai "kode bahasa tersembunyi dari komputer" jika Anda mempelajari bahwa Anda hampir ahli dengan prosesor dan untuk pemrograman, lebih baik gunakan poney prog programmer dan program dari Atmel studio6.1 dari Atmel situs resmi

Avinash
sumber
Tolong jelaskan fitur-fitur utama buku dan pemrogram, yang akan cenderung OP untuk menggunakan mereka.
Vorac
ini adalah tentang memahami mikrokontroler bagaimana ia dikembangkan dari sistem digital dan menjelaskan bahasa assembly
avinash
buka situs ini j.mp/mpc tertarik untuk mendapatkan buku itu
avinash