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

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

解決済みの質問

CASL アセンブラ命令 アプリ機能

例えば、CASLのアセンブラ命令にDCがある。
LABER DC 100 とすると。
これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。

CASLには機械語命令・マクロ命令・アセンブラ命令がある。

機械語命令は人に分かりやすいようにニーモニックが付けられているだけだが、
アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。

アセンブリ言語は色々ありますが、アセンブラ言語は人に見やすいようにニーモニックが付けられているだけでなく、CASLのDC命令のように、ハンドアセンブリではできないアドレスの自動変更のようなアプリケーションとしての機能(OS的機能)も一般にふくまれているとかんがえてよいのでしょうか?

よろしく願います。

投稿日時 - 2011-09-24 07:55:57

QNo.7030776

すぐに回答ほしいです

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

No1です。

>プログラムの変更==>DCでアドレスの自動変更

DC命令に限らず、命令につけられたアドレスが何番地であるかを計算(カウントアップ)するのは、アセンブラの基本機能です。これがないと、生成した機械語命令を何番地に格納したらいいのかわからない。

>という、アセンブラ言語が単にニーモニックの記述だけでない、アプリとしての機能(OS的機能)が含まれているかという質問です。

アセンブラはアプリなので、ニーモニックを解釈したり、上記のアドレスの計算をしたりするのは、アセンブラというアプリの機能です。OSは関係ありません。OSの上でアセンブラというアプリが動いているだけ。

>LABER DC 100 とすると。
>これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。

もしかして勘違いがあるかもしれませんが、
LABER DC 100
というのは、
「LABERという名前のラベルを現在の命令格納アドレスポインタの値で定義して、そのアドレスの1ワードに100を入れて、命令格納アドレスポインタを+1する」
で、
LABEL NOP
という機械語命令は、
「LABELという名前のラベルを現在の命令格納アドレスポインタの値で定義して、そのアドレスの2ワードにNOPの命令コードを入れて、命令格納アドレスポインタを+2する」

と、いうことで、DC命令と機械語命令はアセンブラの動作(ソースファイルをアセンブルして命令コードファイルを作る際の動作)としては格納するデータがちょっと違うだけです。DS命令も、データの長さが1とか2でなく可変であることと、データに何が入るか分からないというくらいの違いだけです。

投稿日時 - 2011-09-24 11:06:13

ANo.4

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

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

回答(4)

ANo.3

>アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、
>ハンドアセンブリでは、できない機能が含まれている。

これは違います。
「アセンブラ命令」に含んでいるのでは無く、「アセンブラ」というソフトのシンボリック機能です。

ラベルを定義して、コードやデータのサイズ等に応じて、ラベルに対応するアドレス値を計算して機械語に変換してくれる機能、という事になると思いますが、これはあくまでも「アセンブラ」というソフトの機能です。

投稿日時 - 2011-09-24 10:38:38

お礼

アセンブラ言語というと、単にニーモニック機能である。的な説明が多く。アプリとして、利用者の利便性を考え、アドレス値をアプリとして計算する機能等、も含まれていると言う説明が解りました。

投稿日時 - 2011-09-24 10:55:08

ANo.2

> 私の質問の主旨はという、アセンブラ言語が単にニーモニックの記述だけでない、アプリとしての機能(OS的機能)が含まれているかという質問です。

これは、Yes。
まあ、「疑似命令をもたないアセンブリ言語」も実現可能なので、あんまり厳密な答えではないですが。

個人的には、質問文の以下の部分に違和感を覚えました:

> アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。

質問内容的にはノイズになっているというか、そう質問されるとそれにはNoと答えざるをえなくなるというか。
多分、ANo.1のnotnotさんも、そのことを指摘したかったのではないかと。

投稿日時 - 2011-09-24 10:29:02

ANo.1

>アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。

これは間違いです。
プログラム変更後にハンドアセンブルをやり直せば、アセンブラ命令(疑似命令とも言う)はハンドアセンブル可能です。

機械語命令:
 CPUの命令に翻訳される命令
アセンブラ命令:
 アセンブラに指示するための命令(データ定義、アドレスポインタを変更、プログラムの終わりを示すなど)
マクロ命令:
 複数の他の命令をまとめて、一つの命令のように書けるアセンブラへの指示

面倒かどうかと言うことを除けば、全部ハンドアセンブル可能です。てか、プログラムがやることは、時間さえかければ人間にできます(制限時間のあるものはだめ)。これはあたりまえ。

投稿日時 - 2011-09-24 08:38:33

補足

ハンドアセンブリで可能なのは解ります。

私の質問の主旨は。

プログラムの変更==>DCでアドレスの自動変更

という、アセンブラ言語が単にニーモニックの記述だけでない、アプリとしての機能(OS的機能)が含まれているかという質問です。

投稿日時 - 2011-09-24 08:56:21

あなたにオススメの質問