アセンブリを学習するのに適したスターターマイクロプロセッサとは何ですか?


19

だから私は最初にMPでAssemblyを学び、それからCに移りたいと思っています(それは彼らのほとんどが使用しているようだからです)。

エンベデッドプログラミングに興味があります。低レベルのCが大好きです(Linuxのカーネル/モジュールは主に私がやったことです)。マイクロプロセッサ)。

Arduinoについては知っていますが、それは素晴らしいことですが、アセンブリを使用するためのリソースはあまりありません。Atmel AVRは非常に人気がある(そして安い)ように見えますが、実際のハードウェア部分(ブレッドボードなどに接続する)に関しては、あまり情報が見つかりません。

あなた/男性/女性が知っている提案/情報またはリソースは私に知らせてください。

編集:別のこと:私が読んだすべてのマイクロプロセッサの本(通常AVR)は、マイクロプロセッサ自体について、そしてそれをプログラミングしているようです。しかし、すべてのコンポーネント(マイクロプロセッサ、メモリ、電源など)を自分でインストールすることについて実際に説明している本はまだ見ていません。私が仕事をしているということを私に説明する何かを見つけることができれば。(私は一から学びたいです。)言うまでもなく、私はあなたがそれらの間でどのようにコミュニケーションをとるかわからない。


3
他の場所に送るのは嫌ですが、AVRに興味があるなら、AVRfreaks.netについて知る必要があります。
ケビンフェルメール

Ya ImはAVRに傾いています...主に彼らに関する情報が多く、TI-MPS430よりもはるかに安いため

2
AVRは愛好家に人気がありますが、コストデータの入手先はわかりません。どちらのファミリーにも、1米ドル未満のサービスと20米ドルをプッシュするサービスがあります。
ケビンフェルメール

まあ..... MPS430を見ていたとき、開発ボードに追加したときにソフトウェア(デバッガーなど)が少し高価だったように見えました。

1
初心者の方は、MSP430を選ばないでください。公式のツールは良いですが、あなたがオンラインで見つける無料サポートは、PIC / AVRまで一致していません
トビーJaffey

回答:


14

私は大学で68HC11で学びました。動作は非常に簡単ですが、正直なところ、ほとんどの低電力マイクロコントローラーは類似しています(AVR、8051、PIC、MSP430)。マイクロコントローラのASMプログラミングに複雑さを追加する最大のものは、サポートされるメモリアドレス指定モードの数とタイプです。ハイエンドのARMプロセッサなど、より複雑なデバイスは最初は避ける必要があります。

おそらく、出発点としてMSP430をお勧めします。Cでプログラムを作成し、さまざまな関数をインラインアセンブリに置き換えて学習することもできます。シンプルな開始、x + y = zなど

関数またはアルゴリズムをアセンブリに置き換えた後、それをコーディングした方法とCコンパイラが生成したものを比較対照します。これはおそらく、私の意見ではアセンブリを学習すると同時に、コンパイラがどのように機能するかを学ぶための優れた方法の1つであり、組み込みプログラマーとして非常に貴重です。最初にCコンパイラで最適化をオフにしてください。そうしないと、コンパイラの生成コードが非常に混乱する可能性があります。最適化を徐々にオンにし、コンパイラーが何をするかを確認します。

RISC vs CISC

RISCは「Reduced Instruction Set Computing」を意味し、特定の命令セットではなく、CPUに最小限の命令セットがあることを示す設計戦略のみを指します。それぞれが基本的なことを行う命令はほとんどありません。これは、「RISCになる」ための厳密な技術的定義ではありません。一方、CISCアーキテクチャには多くの命令がありますが、それぞれが「もっと多くのことをします」。

RISCの目的の利点は、CPU設計に必要なトランジスタの数が少ないことです。これにより、消費電力が少なくなり(マイクロコントローラーで大きく)、安価で、クロックレートが高くなり、パフォーマンスが向上します。低消費電力と安価な製造は一般的に真実であり、CISCアーキテクチャの設計改善の結果として、より高いパフォーマンスが実際に目標に達していない。

現在、ほとんどすべてのCPUコアはRISCまたは「中間」設計です。最も有名な(または悪名高い)CISCアーキテクチャであるx86であっても。最新のx86 CPUは内部的にRISCのようなコアであり、フロントエンドにボルトで固定されたデコーダーにより、x86命令を複数のRISCのような命令に分解します。インテルはこれらを「マイクロオペレーション」と呼んでいると思います。

どのアセンブリ(RISCとCISC)の方がアセンブリで習得しやすいかについては、おかしいと思います。通常、RISC命令セットで何かを行うには、CISC命令セットで同じことを行うよりも多くのアセンブリ行が必要です。一方、利用可能な命令の数が多いため、CISC命令セットは学習がより複雑になります。

CISCが悪い名前を取得する理由のほとんどは、x86が最も一般的な例であり、作業するのが少し面倒だということです。これは、x86命令セットが非常に古く、下位互換性を維持しながら半ダース以上拡張された結果だと思います。4.5Ghzコアi7でさえ286モードで実行できます(そして起動時にも実行できます)。

ARMがRISCアーキテクチャであることについては、ある程度議論の余地があると考えています。確かにロードストアアーキテクチャです。基本命令セットはRISCに似ていますが、最近の改訂版では、命令セットがかなり大きくなり、RISCとCISCの中間にあると個人的に考えるようになりました。Thumb命令セットは、実際にはARM命令セットの中で最も「RISCish」です。


@Mark-ARMもRISCプロセッサです。命令セットはそれほど悪くありません。実際、非常にうまく設計されています。ユーザースペースとカーネルスペースの区別やその他の複雑さについての指示がいくつかありますが、それらは開始時に無視できます。
ケビンフェルメール

1
@reemrevnivek彼が複数のプロセッサモードとMMUを扱うという複雑さから彼を誘導しようとしていたのは、彼がASMを始めた理由です。ハイエンドARM SoCの初期化とセットアップも、AVR / PIC / MSP430のようなものよりもかなり複雑です。
マーク

RISC?私はそれと他の人が何であるかとの違いを理解していないかわかりません... ほとんどのマイクロコントローラーはRISCではありませんか?正しい命令セットが少ないということですか?

1
@sauron re:RISC vs CISCに答えを追加しました。
マーク

AVR / PICSのようなものは通常RISCまたはCISCですか?

8

命令数が少ないため、8ビットPICマイクロコントローラーが最適だと思います。

命令数の減少の副作用は、より多くの命令を持つ他のマイクロコントローラーと比較して、車輪を再発明する必要があることです。

しかし、PICで学習した後は、他のマイクロコントローラーに移行して、自分に合ったものを確認できます。


これが今私が探求しているものであるので、私は全く同意しませんが、8、16、および32ビットコアは全く異なるasm戦略を持っています。
グレイディプレーヤー

7

Markの68HC11の提案と同様に、Freescale 68HCS08ファミリーの命令セットは 、Motorola 6809のスリム化バージョンであり、その当時最もクリーンな8ビット命令セットの1つであると思いました。スイッチ、LED、3軸加速度計、および圧電ブザー付きの開発ボードは、こちらで 79ドルで入手できます


S08のレジスタ数がHC11に比べて少ないため、スタックが多くのことを処理する必要があるため(HC11sを使用して後で説明しました(またはそれでした) 12's))。拡張により、スタックを心配する前に、32個のレジスタを使用して再生できるため、AVRは非常に優れています。
ニックT

実際、ボトルネックになる可能性はありますが、単一のアキュムレーターのシンプルさが気に入っています。一時変数にスタックを使用する代わりに、最初に、短い命令でアクセス可能な144バイトの直接ページ変数を使用する方が簡単であることがわかります(直接レジスタの他の112バイトはI / Oレジスタに使用されます)。スタック(リエントラントおよび再帰ルーチンを可能にする)の使用は、後で学習できます。
tcrosley

HC(S)08はHC05から派生したものではありませんか?
Johan.A

@ Johan.Aはい、あなたは絶対に正しいです。HCS08は、HC05の拡張バージョンです。言及すべきだった。派生は6800-> 6801-> 6805-> HC(S)08のようなものだと思います。6805のアセンブリコードをたくさん書きました。HCS08と6809を比較して、68HC11(おおむね6809のマイクロコントローラーバージョンです)の他のコメントと結び付けました。
tcrosley

4

msp430命令セットは、アセンブラーの学習に適しています。x86を避けます。アームは別の良いものですが、より多くの命令とオプションがあり、最初の命令セットとしては最適ではない場合があります。Thumbはアーム命令セットのサブセットであり、悪くはありません。githubには、サムエミュレータ(thumbulator)とmsp430エミュレータ(親指ほどテストされていない)の両方があります。 、それであなたは何が起こっているのかをよく見ることができます。代わりにqemuを使用することもできます。たとえば、可視性はありますが、取得がはるかに困難です。同様にqemuのようなソリューションでは、何か動作するかどうかを判断するまでにさらに多くの作業が必要になります。
mspgcc4.sf.netにアクセスして、ツールチェーンを構築するか、ストックbinutils(./configure --target = msp430 --prefix = / something)をストックllvmと組み合わせて構築します。ハードウェアの準備ができたら、msp430開発ボードのコストは5ドル未満です。arm / thumbツールの場合は、codesourceryからライトバージョンを取得するだけです。cortex-m3(thumb / thumb2)ボードは、現在約12ドルです。最初の命令セットとしてx86やavrなどを使用しないようにします。他のユーザーが適切に丸められるように学習したいと思うでしょう。古い/元のpic命令セットも見る価値があります。午後にシミュレータを自分で書いて、アセンブラを学ぶことができます。必ずしも最初にそれを学ぶ必要はありませんが、いくつかの興味深いことを教えますが、同時にスケーリングせず、ほとんどの命令セットで見つかる共通の機能を必ずしも表すものではありません。msp430は、私が実際に学んだ最初の命令セットであるpdp11の感触を与えてくれました。どちらも、丸みがあり、ほとんど直交する機能を備えています。msp430とマイクロチップpicの両方の命令セットは、少なくとも参照としてウィキペディアに文書化されており、全体像を取得するために、ベンダーからデータシート/マニュアルを入手し、各レジスタとアドレッシングモード、リセット/ブートなどについて説明します。


アセンブラのみの場合、少なくともarm / thumbまたはmsp430の場合はbinutilsのみが必要であり、アセンブラとリンカをビルドできます。アセンブラの出力を学習ツールとして調べることができるCコンパイラが必要な場合は、mspgcc4またはcodesourceryが必要です。または、両方にllvmを使用するだけです。
-old_timer

4

アセンブリを学習してもよろしいですか?理由を言えますか?これは非常に困難な作業であり、今日ではますます関連性や有用性が低下しています。これは、それを書いた人や、手で組み立てたプログラム(アセンブラ、リンカ、命令セットのあるカードだけ)さえ持っている人からのものです。


これは実際の答えではなく、コメントです。また、プロジェクトの振る舞いの奇妙さを理解しようとするとき、アセンブリのビットをたまに動かそうとしない組み込みCプログラマを信頼することをためらいます。
クリスストラットン

4

私も大学の68HC11で学びました。むしろ、他のMPU / MCUでこれを提案しているのですが、使用した開発ボードにモニタープログラムが搭載されていることを指摘したかっただけです。だから、ダム端末からコードをステップスルーしてレジスタを調べることができます...どのプロセッサが要件に合っているかがわかったら、モニタープログラムで利用できる開発ボードもチェックすることをお勧めします。


モニタープログラムは非常に役立つと思われます。これを学ぶためにどの本を使いましたか?私に尋ねても構わないなら

68HC11の経験があり、「監視プログラム」はバッファローモニターとして知られています。基本的に、これはPCにシリアル通信するROMに保存されているプログラムです。端末に入力すると、プログラムが要求を解釈し、情報を返します。メモリを画面にダンプしたり、メモリ値を変更したり、指示をステップ実行したりできます。使用したボードはこれでした。このコントローラーは簡単に習得できますが、非常に時代遅れです。
sherrellbc 14

... 興味のある方は、これを使用しました。AVRのような最新のコントローラーを使用することをお勧めします。それらの開発ボードはここにあります
sherrellbc

3

PIC(14ビットコア)とARMアセンブリの両方を教えています。PICクラスでは、そのアーキテクチャのさを習得したら、他のこともできると言います。ARM(Thumb / Cortexではありません!)は、アセンブリを学習するための非常に優れたアーキテクチャです。LPC2148ボードを使用します。


こんにちはWouter、こちらでお会いできてうれしいです!
オリンラスロップ

2

dsPIC33Fで16ビットPICアセンブリを学びました。プロセッサのアセンブリは非常にCに似ており、ポインタと3つの変数操作(たとえば、A = B + C)をサポートしているため、学習と適応がはるかに簡単です。


1

ここでは、マイクロコントローラーとマイクロプロセッサーを混同しています。AVRは、マイクロプロセッサではなく、Atmelによるマイクロコントローララインです。最初にウィキペディアを検索して、これらの違いを理解することをお勧めします。基本的に、マイクロコントローラーは多かれ少なかれ完全なシステムですが、マイクロプロセッサーはCPUのみです(マイクロコントローラーにはマイクロプロセッサーが内蔵されているため)。


ええ、私はそれを知っていました、なぜ私はそれを入れなかったのかわかりません。MPやメモリ(フラッシュやeepromなど)を実際に接続することについて、多くのガイドが語っていないことを意味しました

1
現在、ほとんどのマイクロプロセッサにはキャッシュ/メモリと一部のI / Oがあるため、非常にぼやけた行です。
ケニー

1
@サウロン-知ってた?MPを再度使用しました。マイクロコントローラー(ここで説明するAVRおよび99%のデバイスの正しい用語)には、ほとんどの場合、メモリ(EEPROMやフラッシュなどの不揮発性と揮発性SRAMの両方)がオンボードに搭載されています。周辺機器を使い始める前に、オンボードのものを使用することを学びます。
ケビンフェルメール

1

私の大学では、MIPS(またはDLX)アーキテクチャを使用して、アセンブリ言語(2つは明らかに手をつないでいます)と共にハードウェアの設計/アーキテクチャを教えられました。それ以来、私はPICとAVRのアセンブリに学校/職場で少し手を出しており、それらはすべてかなり似ています。言語はプロセッサアーキテクチャと同様に非常にシンプルなので、MIPSアセンブリは素晴らしい出発点だったと思います。

参照してください:この本を。世界で最高の本ではありませんが、多くの大学にとって標準的なコンピューターデザインの本です。


マイクロチップPIC32は、MIPSアーキテクチャを採用していますし、それはC.とMIPSアセンブラを混合するためにかなり簡単です
tcrosley

0

私の提案は、マイクロコントローラとプロセッサについて勉強を始めようとする人は、ほとんどあなたがプロセッサの専門家であり、より良いponey progプログラマとプログラムを使用することを勉強するなら、「コンピュータの隠された言語をコーディングする」という名前の本を読むべきですatmel公式サイトのatmel studio6.1


この本とプログラマーの主要な機能の概要を説明してください。OPがそれらを正確に使用する傾向があります。
ヴォラック

マイクロシステムがデジタルシステムからどのように開発され、アセンブリ言語を説明するかを理解することです
-avinash

このサイトj.mp/mpcinterestにアクセスしてその本を入手して
ください-avinash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.