• 締切済み

マイクロプロセッサ毎のニーモニックの違い

saru_1234の回答

  • saru_1234
  • ベストアンサー率33% (452/1341)
回答No.4

#1 です. 8080 でも「ロード」の語を使った命令はあります. うろ覚えですが LHLD という, HLレジスタ(16bit)に,メモリからの16bit値をロードする 即ち Load HL Direct ... そんな意味だったと思います. 逆方向は Store で, SHLD というニーモニックでした. そうそう,8bit では Aレジスタを使う LDA, STA というのもありました. 8080 の頃は,ベンダ側が作るアセンブラやコンパイラへの配慮もあるように思います. CPUを売る為にはなるべく同時期にリリースしたいので 短期間で作れて,構造がなるべくシンプルでバグが出にくい、 そんな体系なのではないかと思います. 8080 の MOV, MVI, LHLD, SHLD, PCHL などは, Z80では全て LD です. (ニーモニックを書く際に Z80 では何でも LD で済むので 楽といえばそうですがうっかり存在しない命令も書けてしまうのが難点) 生成する命令コードがニーモニックだけでは決定できず 続くオペランド等も参照し、なおかつ IX,IYレジスタが出てくるとまた違ってくる... という複雑な構造になります. Z80 の命令コード体系は, 8080 のそれの空きコードを使って拡張した格好だし, (それゆえ 8080 マシンコードのプログラムがそのまま走れる) Z80 開発時は 8080の開発に関わった人間がスピンアウトして参加していた(中心人物?) という話もあり,あえて同様のニーモニックにはしたくなかったのかも知れません. 勉強し始め知り合いから、「MOVってmove だから 転送元データは消えるのかと思ってた」と聞かされました. 無理もないですね.いっそ COPY なんてニーモニックが いいかも? MOV dst,src の記述位置関係については, 数値を含んだ命令コードだとその数値はコードの後ろの方に置かれるのが普通でしょうから、 MOV dst,src が素直な気がします.

Ekukos_bloomers
質問者

お礼

色々なお話をありがとうございます。 8080側が、アセンブラを作る方を向いていたと言うことですね。 Z80では、8080の転送命令をまとめてldにしたのでニーモニックがシンプルになったけど、ありえないレジスタとの組み合わせが面倒になった。 なる程です。 私は、Z80形式の方が好きだなぁ。 そういえば、Z80では加算命令は、   add A,B  ; Reg.A = Reg.A + Reg.B の場合。 と記述するのに、減算命令は、   sub B   ; Reg.A = Reg.A - Reg.B の場合。 と、加算のときにAレジスタしか使えないのに「A,」を省略できないんですよね。 16ビット加算命令があるから? でも16ビット減算命令もあるよね。 これは、凄く使いにくい! > MOV dst,src の記述位置関係については, > 数値を含んだ命令コードだとその数値はコードの後ろの方に置かれるのが普通でしょうから、 > MOV dst,src が素直な気がします. これは、今まで気が付かなかった考え方です。

関連するQ&A

  • PDP-11のアセンブラ課題

    学校の課題で出されたものです。 まだ勉強をはじめたばかりでどこから手をつけていいのかわかりません>< ○PDP-11のアセンブラは、MOV#1,R2を次のような2語の機械語に翻訳する。PDP-11は、これをど  のように解釈し、どのように実行するのか説明せよ 0001010111000010 0000000000000001 ○PDP-11のMOV命令を使用し、以下の命令のアセンブリ言語表現、機械語表現を示せ。 ・R5が示すアドレスにジャンプする命令 ・サブルーチンから戻る命令 ・R0をスタック上にプッシュする命令 ○次のプログラムをPDP-11のアセンブリ言語で作成せよ。 ・R0が示す番号以降のR2が示すバイト数をR1が示す番号以降に転送 ・R1(上位16ビット)R0(下位16ビット)が示す符号付32ビット値を符号反転 宜しくお願い致します。

  • 命令セットについて

    インテルのアセンブリ言語の命令セットとMIPSの命令セットの構成の違いを詳しく教えて下さい(*_*) お願いします★

  • アセンブラの命令について

    データ転送命令MOV ds と制御命令MOV addを実行するに必要なメモリアクセス回数は最大何回になりますか。 よろしくお願いいたします。

  • CPUの扱えるデータ量の計算の仕方

    CPUについて調べていたのですが、 この記事の http://oshiete1.goo.ne.jp/qa387968.html 「このMHzが何を意味するかというと、一度に何回データを転送したかを指します。32bitのプロセッサでは4バイト(32ビット)の命令を一回に処理装置に転送します(これはあくまで内部バスも32ビットである場合です)。たとえば、100MHzのプロセッサでは、4バイト×32ビットとなり、1秒間に400MBのデータを扱うことができるのです。」 という箇所(良回答20ptをもらっている回答)の最後の部分 なのですが、100MHzのプロセッサでは、400MBのデータ を扱うことができるとあるのですが、どうやって400MBという 値になるのかよく分かりません。 ひとつひとつの数値の意味を説明していただかないと、よく分からない のですが、このあたりのご説明をお願いします。

  • アセンブリ命令、命令セットアーキテクチャ等の用語

    ソフトウェア中心の技術者です。 コンパイラからアセンブリ言語を吐き出させ、そこからプロセッサ内部の動作を詳しく解析していたいと思っています。そうしたところ、先輩から「そういうことなら、命令セットアーキテクチャを勉強するといいよ」、とアドバイスをもらいました。 ここで質問なのですが、 1 「アセンブリ命令」と「命令セット」とはほぼ同じ言葉だと思って差し支えないでしょうか? 2 また、「命令セットアーキテクチャ」とは、「決定した命令セットから成るプロセッサ内部の仕様」と思って良いのでしょうか? 例えば、ジャンプ命令を受けたときには、構造的にどのようなしくみでプログラムカウンタのデータを変えるか、とかを規定したしくみそのものと理解していますが、それで正しいでしょうか?  以上、よろしくお願いします。

  • 複数バイト命令実行のタイミング

    1バイト単位でメモリの各アドレスにデータが保存されているコンピューターにおいて、複数のバイトで表される命令がどのように実行されるのか教えて下さい。 メモリには一つのアドレスごとに8ビット(1バイト)のデータが入っており、CPUはプログラムカウンタで示されたメモリ上のアドレスにあるデータや命令を一つずつ順番に読み込んで、それをデコーダーが解釈し各回路への指令に変換することでプログラムを実行していくということは理解しています。 しかし現在の32ビットコンピューターなどにおいてアセンブリの命令、例えば「MOV A,B」(Bレジスタの内容をAレジスタにコピーする)といった命令は、「B90001」などの3バイトのマシン語で表されるとすると、メモリ上では アドレス  内容 0000  0xB9 0001  0x00 0002  0x01 のように3つの連続するアドレスにまたがってデータが存在し、CPUが「MOV A,B」を読み込み、それを順次デコーダーに送るまでには「MOV」、「A」、「B」の3クロックを要すると思います。 その際、デコーダーが命令を解釈し各回路に指令の信号を送るタイミングというのは、最後の「B」のデータを読み込んだ時点になるのでしょうか?もしそうならば、3クロック目に最後の「B」のデータがデコーダーに到着するまでの間、「MOV」と「A」のデータというのはCPUにメモリから読み込まれた後はどのように扱われるのでしょうか? 少し質問が分かりにくく恐縮ですが、情報工学を独学で勉強しており、プログラムが実際の回路でどのように実行されるのか理解したいと思っています。 どうぞご回答よろしくお願い致します。

  • R8C/27のデータフラッシュに保存する

    タイトルのとおり、R8C/27のデータフラッシュにデータを保存する方法に関して 言語はアセンブリです。セクションを設定して、MOV命令で読み書きできるのでしょうか。 ご教授お願い致します。また参考になるサイト等あれば教えてください。

  • 機械語とアセンブリ言語について。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret こちらのアセンブリ言語の命令がわかるおすすめの書籍を知らないでしょうか? 教えていただけないでしょうか?すみません。

  • 文字を表示するファンクションコールについて

    アセンブリ言語プログラムについての質問です。 MASM32を使っています。AXレジスタの数値をah→表示、al→表示というプログラムを作ったのですが、al→表示の部分がうまく機能しせません。以下にプログラムを書きます。 (1)mov ax,3132h (2)mov dl,ah (3)mov ah,02h (4)int 21h (5)mov dl,al (6)mov ah,02h (7)int 21h (分かりやすく番号をふっています。実際のプログラムには番号はふっていないです。) 具体的どこが機能しないかというと、(5)番目の命令のalレジスタの内容をdlレジスタに転送するという命令が機能しません。デバックのT命令で確認したところ(5)番目の命令がNOPとなっていました。 このプログラムを実行すると結果的に表示されるのは「11」という文字です。(本来は12と表示したい。) 質問 なぜ(5)番目の命令がnopとなるのでしょうか?

  • プロセッサ(32bitと64bit)の違い

    最近、サーバ系のプロセッサでIntel XeonやItanium2等 出ています。両者の大きな違いはアーキテクチャというのが32bitか64bitと言うことのようですが、アーキテクチャが違うと何が違うのでしょうか? 単純に周波数やキャッシュ容量で性能比較はできないのでしょうか?