みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アセンブラの学習法

アセンブラに興味を引かれ覚えてみたいと、強く思うようになりました。しかし、アセンブラを調べてみるとgas、nasm、masmなど沢山の種類があります。また、初心者でもわかるような本やHPが見当たりません。
アセンブラを勉強するには、どのコンパイラを使い何を参考にして覚えていけばよいのでしょうか?

皆さんの使っているコンパイラ、学習法や参考にしている物を教えていただけないでしょうか?
よろしくお願いします。

投稿日時 - 2005-10-01 11:57:03

QNo.1684787

暇なときに回答ください

質問者が選んだベストアンサー

アセンブリ言語は、CPU(またはそれに類するハードウェア)に固有の文法を持っています。
また、ハードウェアに「非常に」密着したプログラムの書き方になります。

したがって、まず、ハードウェアを選びます。
パソコンでもいいのですが、今のパソコンのCPUは最低でも32ビットなので構造がとんでもなく複雑で、OSとの関係もあるので、手を出さないほうがいいでしょう。

私が、どんなハードウェアがいいかと尋ねられたら、間違いなくZ80を勧めます。

Z80用のアセンブラは、フリーでもありますし、自作してもいいと思います。自作できたら、プログラム自身の勉強になるでしょう。

Z80のハードウェアは、秋月電子通商のAKI-Z80がお勧めです。
このカードマイコンに自分で電源やスイッチやLEDをつなげてスイッチの入力、LEDへの出力をコントロールしていくといいと思います。

参考URL:http://akizukidenshi.com/

投稿日時 - 2005-10-01 22:09:07

補足

詳しい説明ありがとうございます。

マイコンではz80のほかにpicやH8などが有名ですが、なぜz80なのでしょうか?
マイコンは全くわかりませんので教えていただけないでしょうか?

投稿日時 - 2005-10-01 22:14:08

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(10)

ANo.10

Z80を勉強するのであれば、

※ Z80のマイコンキット
お奨めは、やはり秋月電子通商のAKI-80のカード型マイコン。
タイプはどれでも良いけど、初めてだったらスーパーAKI-80かなぁ。

※ 電源
5Vのスイッチング電源(俗に言うACアダプタ)で良い。
1A以上のもの。

※ ユニバーサル基板
少々高目だけど、ガラスエポキシ基板が丈夫で良い。
この上に、当面の回路を作成する。

※ デバイス
LEDとかスイッチとか。

※ 部品類
抵抗、キャパシタ、電線、はんだ、他。

※ ROM
単価は高いがEEP-ROMにすれば、ROMイレイサが不要になる。

※ ROMライタ(writer)
P-ROMにデータを書き込む。
EP-ROM(UV EP-ROM, EEP-ROM)や1回限り(One time)のROMがある。

※ ROMイレイサ(eraser)
UV EP-ROMを書き込み可能な状態にする。
EEP-ROMであれば不要。

※ アセンブラ
Z80なら、C言語に手を出さない方が良い。
C言語をするなら、16ビット以上のCPUが良い。

※ 追加事項
Z80の置かれている状況は厳しいようですね。CPUも確実に世代交替が行なわれているようです。
各商品の値段は、参考URL等で調べて下さい。

参考URL:http://akizukidenshi.com/

投稿日時 - 2005-10-02 12:42:26

お礼

本当にありがとうございました。
アセンブラを学んでいく方法がわかった気がします。

早速秋葉原に行って物色してみたいと思います。

投稿日時 - 2005-10-02 14:55:18

ANo.9

http://sourceforge.net/projects/nasm
から一番したのwin32 binaries のwindows 32bit版をダウンロードして、
http://alink.sourceforge.net/download.html
windowsでexe形式のプログラムを作るには、alinkが必要です。com形式ならなくても可

http://www3.ezbbs.net/cgi/bbs?id=anesan&dd=40&p=1
マシン語の掲示板です。

本屋さんでアッセンブラプログラミングの本がおいてあるところがあるはずです。探してみてください。

以下はnasmでコンパイルするとタイトルバーに『タイトル 初めての win program』と表示されるHelloworld見たいなものです。メモ帳にコピーして、asmで保存するといいとおもいます。

[bits 32]
[extern MessageBoxA]

[section .text]
[global start]
start:
push dword 0
push dword title
push dword message
push dword 0
call MessageBoxA

ret

[section .data]
title:db 'タイトル 初めての win program',0
message:db 'ようこそ アセンブラ による',13,10,'ウィンドウズプログラミングへ',13,10,0
;---------------------------

投稿日時 - 2005-10-02 07:13:20

お礼

これが、アセンブラのHello,Worldなんですね。
やっぱり、C言語と違って長いですね。

覚えるにはかなり時間がかかりそうですががんばります。ありがとうございます。

投稿日時 - 2005-10-02 14:52:10

ANo.8

naru_fumi2005さんに反論するわけではないのですが...

秋月のH8ボードを使うのであれば、H8/3048FよりH8/3069Fの方が扱いやすいかと思います。
LANまでついていてオーバースペックかもしれませんが、ボードの扱いは一番簡単です。

H8/3048Fは、別途マザーボードを購入するか、ライター基板を自作しないといけないので、案外高くつくということもあります。

参考URL:http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00168"

投稿日時 - 2005-10-02 00:46:19

補足

マイコンってLANまでついてるんですね。
面白うそうです。H8を使うときは是非これを使って見たいと思います。

やはり何かを始めるとお金がかかりますね。

投稿日時 - 2005-10-02 12:20:14

最後に、1つ訂正を。

私は、Z80を勧めると言いましたが、今までデジタル回路や電子回路に触れて来たことがない、ICとして単独のROMにデータを書き込んだことがない、と言うのであれば、H8をお勧めします。
ROMライタやイレーサ等の初期投資が必要になりますので。
私の環境ではそれらが揃っているので、そのつもりで言ってしまいました。

H8の本では、私の見てきた限りでは、あまりいいものはありませんでした。
でも、最初は、アセンブリ言語ですることを強くお勧めします。
H8の参考書だと「C言語で開発!!」と声高々に言っていますが、マイコンはアセンブラありきです(パソコンは違います。)。C言語はその後でいいです。

CPUは、秋月のH8/3048Fで言いと思います。
マザーボード(?)付きもあるので、初めはそれで好いのではないでしょうか。
それに付属する取り説(結構簡単で雑ですが)で何とかなりますよ。

投稿日時 - 2005-10-01 23:55:25

補足

薦めて頂いた本を見つけました!
いやぁ、足を棒にした甲斐がありました。

お金をかけずに手をつけるならH8ですか。
もし、z80に必要な物を揃えるにはいくらぐらいかかるのでしょうか?また、お勧めの物はありませんか?

投稿日時 - 2005-10-02 12:16:04

Z80の定番の参考書なんですが、

Z80ファミリ・ハンドブック Z80CPU・PIO・CTC・DMA・SIOの使い方のすべて
額田 忠之 著
B5判 384ページ
定価1,998円(税込)
ISBN4-7898-3470-0

が最高です。しかし、絶版なんです。古本で見つかればいいんですが。

投稿日時 - 2005-10-01 23:17:03

補足

明日古本屋めぐりをして是非見つけて見たいと思います。

投稿日時 - 2005-10-01 23:39:13

※アセンブラ
アセンブリ言語で書かれたプログラムを機械語、またはオブジェクトコードに変換する。

※コンパイラ
(アセンブリ言語を除く)高級言語で書かれたプログラムを機械語、またはオブジェクトコードに変換する。

※リンカ
オブジェクトコード、ライブラリを結合して、1つの実行形式にまとめる。

Windows上でZ80のプログラムを書いて、マシン語に変換する作業をクロス開発と言い、ターゲットと作業マシンの異なるアセンブラ(コンパイラ)をクロスアセンブラ(クロスコンパイラ)と言います。

ですから、ターゲットと開発環境を切り離して考えてください。
まずは、ターゲットを決めることです。

投稿日時 - 2005-10-01 23:11:08

補足

なるほど、やっと違いがわかりました。

ターゲットと言うのは、H8、Z80、PIC、x86などの事ですよね?

H8かZ80かで悩んでいます。まぁ、複数のアーキテクチャを勉強したほうがいいとの事ですからどちらか先に勉強していずれもう片方もやってみたいと思っています。

投稿日時 - 2005-10-01 23:13:14

それでは、簡単に、PIC、H8、Z80の特徴を。

*PIC
1. RISC系CPUで、命令数が少なく、構造が単純で安価。
2. アドレッシングモードが貧弱。
3. 電子工作ではもちろん、個々の製品にも使われているらしい。
4. そのアーキテクチャ上、一般のマイコンとして必要な知識を得にくい。
5. フラッシュROM内臓で、プログラムがしやすい。

*H8
1. 比較的綺麗なアーキテクチャを持っている。
  (演算はレジスタ・レジスタ間、即値・レジスタ間のみで、転送命令に様々なアドレッシングモードを持つ。)
2. 16ビットCPUでペリフェラルがほとんど内蔵されている。
3. フラッシュROM内臓で、プログラムがしやすい。

*Z80
1. IOの接続に(今では珍しい)IOマップトIOを持っている。
2. 専用レジスタ形式なのでレジスタの使い方を勉強できる。
3. この頃少なくはなってきているが、資料が多い。

私がZ80を勧める理由は、CPUとして必要な知識を80%くらいは学べるということです。
残りの20%は、MMUとかプロテクトモードとか、高度なマルチタスクに関する部分です。

PICではサブルーチンでローカル変数を設けることが難しいし、サブルーチンのレベルが4(PIC16F84)までしか置けません。
H8は、16ビットCPUで初めて使うにはその能力を持て余してしまうことは明白です。

投稿日時 - 2005-10-01 23:01:58

補足

一口にマイコンと言ってもこんなに違いがあるんですね。といっても、チンプンカンプンですが…。
勉強のしがいがありますね。

z80は資料が多いとの事ですが、お勧めの本を紹介していただけないでしょうか?

投稿日時 - 2005-10-01 23:08:26

ANo.3

> できれば便利なコンパイラを使用したいと考えています。

ですから、コンパイラを使いたいのであれば、C言語などを選ぶべきです。

> インテルx86系のCPU上で使用できるアセンブラを探しています。

8086であれば、現在入手しやすい入門書は『8086 マクロアセンブラ入門』ぐらいかと思います。アセンブラはnasmで十分でしょう。

純粋にアセンブラを習得したいのであれば、x86にこだわらずに別のプロセッサを使っても良いと思います。
x86との類似性を考えればZ80もよいのですが、入手しやすさやCPUボードの選択肢、開発環境の扱いやすさを考えると、H8の方が楽かもしれません。それに、アーキテクチャが異なるものをいくつか学習しておいた方が応用がきくということもあります。

投稿日時 - 2005-10-01 22:49:30

補足

間違いを正していただきありがとうございます。

どちらも実行すると実行ファイルが得られると思いますがコンパイラとアセンブラの違いはなんなのでしょうか?

薦めて頂いた本を早速購入したいと思います。

投稿日時 - 2005-10-01 22:56:39

ANo.1

> アセンブラを勉強するには、どのコンパイラを使い何を参考にして覚えていけばよいのでしょうか?

アセンブラを作りたいということでしょうか?
そうでなければ、どんなコンパイラを使うかということに意味はありません。
アセンブリ言語で記述されたプログラムを機械語に翻訳するのは、コンパイラではなくアセンブラだからです。

それともうひとつ。
対象とするプロセッサは何でしょうか?

投稿日時 - 2005-10-01 21:59:37

補足

返事ありがとうございます。

アセンブラを作りたいわけではなく、使えるようになりたいです。
できれば便利なコンパイラを使用したいと考えています。

インテルx86系のCPU上で使用できるアセンブラを探しています。

投稿日時 - 2005-10-01 22:01:28

あなたにオススメの質問