質問: 1週間で学ぶIT基礎の基礎 - 【5分で覚えるIT基礎の基礎】だれでも一度はアセンブラを学んでおこう! 第2回:ITproのページに > > ラベルとは,アセンブラのプログラムのオペランドに名前(ラベル名)を付けたものです。 この名前は,行のメモリー・アドレスを表しています。プログラムの中で123番地のような具体的なメモリー・アドレスの値を指定するのは面倒なので,ラベルを使うわけです。 ラベルは,行の先頭に書きます。プログラムをマシン語に変換すると,ラベルの名前がその位置のメモリー・アドレスの値に置き換わります。 > > > と書かれていますが、つまりこれは**メモリ番地に名前を付けて目印をつけておく**ということでしょうか? なんか間違っているような気がしますが、**メモリ番地にニックネームをつける**ようなものなのでしょうか? 初心者でもわかりやすいように教えてください よろしくお願いします。
回答: > > (ラベルとは)メモリ番地にニックネームをつけるようなものなのでしょうか? > > > そうです。そういう使い方が一番多いし、基本です。 なので、まずはそう覚えて構わないと私は思います。 表4●加算を行うプログラム(リンク先にあるプログラムの例です) ``` LD GR1,A ;GR1にA番地のデータを読み出す ADDA GR1,B ;GR1とB番地のデータを加算する ST GR1,ANS ;加算結果をANS番地に格納する RET ;主プログラムに戻る A DC 100 ;A番地に100というデータを格納しておく B DC 200 ;B番地に200というデータを格納しておく ANS DS 1 ;ANS番地にデータの格納場所を確保しておく ``` ここでは「A」「B」「ANS」という3つのラベルがあります。アセンブルすると、それぞれのラベルはメモリの番地(という何らかの数値)になります。 プログラマ(人間)がプログラムを書く時、そのメモリ番地が何番地になるのか、簡単に分かる(或いは、決められる)ラベルもありますが、ほとんどのラベルは何番地になるのか簡単には分かりません。人間がいちいち番地まで計算することは、およそ不可能だと思ってください。それを計算してくれるのがアセンブラ(とリンカ)です。 その昔、アセンブラが作られる以前は、機械語でプログラムを作るしかありませんでした。番地が決まらないと機械語も決まらない、そんな機械語命令がたくさんあります。即ち、人が全ての番地を計算したのです。プログラムは書いたら一度で動くとは限りませんから、簡単な修正でも番地の計算はやり直さなければなりません。それはそれは大変な作業だった、と想像できるではありませんか。 プログラムを作る時、「こういう変数(記憶場所)があればいいな」とか、「ここから、この場所にジャンプしよう」などと考えるものです。そこにラベルを書くのです。何番地なのか自分で考えなくても(計算しなくても)、アセンブラが計算してくれます。なので、プログラマは、プログラムの要所要所に、自分に都合の良い名前・ニックネームをつけてラベルを書くのです。繰り返しますが、いちいち番地を計算する必要はありません。そのようにしてプログラムを作っていくことができます。そのためにラベルを使うことにしたのです。 上記の例では、足し算をする2つの数(変数)の番地に「A」「B」とニックネームをつけ、答え(ANSwer)を格納する変数のメモリ番地に「ANS」とニックネームをつけました。 リンク先のページには「リスト1●条件分岐を行うプログラム」、「リスト2●繰り返しを行うプログラム」も例示されていますね。そこには「LBL1」「LBL2」というラベルが書かれています。どちらも、そのプログラム中の、ある特定のメモリの番地のことです。