トッププログラミング言語 > プログラミング言語の基礎

プログラミング言語の基礎

1.機械語

プログラミング言語について述べる前に、 まず、機械語について簡単に説明する。 図 1. にコンピュータの概念図を示す。 ただし、ここには、機械語を説明するのに必要な処理装置とメモリのみを図示している。

この図は C言語で言えば、次のようなプログラムが機械語でどのように表されるかを示したものである。 機械語命令は 0210番地(16進表記)から 0213番地の4行であり、 変数 A, B, C, X は FE03番地から FE06番地に割り当てられている。

   int A = 2, B = 10, C = 3, X;
   X = B * C + A;

「0001 0101」とか 「0011 1000」というのが機械語命令であり、 その右は それぞれの機械語命令が何をするものかを解り易いように、 英字(ニーモニックと呼ばれる)で表記したもので、アセンブリ言語と呼ばれる。

すなわち、X = B * C + A; は LOAD B, MULT C, ADD A, STORE X の4命令となる。



図1. コンピュータの概念図(レジスタマシン)

実際の各機械語命令のサイズはもっと長く、また、長さは、一般には、一定ではない。 機械語プログラムの実例として、 次のC言語プログラム test00.c を TCC[1] でコンパイルした結果を下に示す。 機械語命令はマシンに依存する。 この機械語プログラムは インテルが開発した32ビットマイクロプロセッサのアーキテクチャ IA-32 を対象としたものである。


[test00.c]
#include <stdio.h>

void main() {
    int A = 69, B = 10, C = 3, X;

    X = B * C + A;
    printf("X=%d\n", X);
}

Windowsパソコンで動く 実行可能形式プログラムは大きくはヘッダ部、コード部およびデータ部で構成される。 以下は、コード部で main関数に対応する部分のみを抽出したものである。

00401000            fn_00401000:        ; Xref 004010BE
00401000 55             push    ebp
00401001 89E5           mov     ebp,esp
00401003 81EC10000000   sub     esp,10h
00401009 90             nop
0040100A B845000000     mov     eax,45h
0040100F 8945FC         mov     [ebp-4],eax     ; A <- 60(45h)
00401012 B80A000000     mov     eax,0Ah
00401017 8945F8         mov     [ebp-8],eax     ; B <- 10(0Ah)
0040101A B803000000     mov     eax,3
0040101F 8945F4         mov     [ebp-0Ch],eax   ; C <- 3
00401022 8B45F8         mov     eax,[ebp-8]     ; eax <- B
00401025 8B4DF4         mov     ecx,[ebp-0Ch]   ; ecx <- C
00401028 0FAFC1         imul    eax,ecx         ; eax <- eax * ecx (B*C)
0040102B 8B4DFC         mov     ecx,[ebp-4]     ; ecx <- A
0040102E 01C8           add     eax,ecx         ; eax <- eax + ecx (A+B*C)
00401030 8945F0         mov     [ebp-10h],eax   ; X <- eax  (X = A+B*C)
00401033 8B45F0         mov     eax,[ebp-10h]   ; eax <- X
00401036 50             push    eax
00401037 B800204000     mov     eax,offset off_00402000 ;'X=%d',00Ah,000h
0040103C 50             push    eax
0040103D E896000000     call    jmp_printf
00401042 83C408         add     esp,8
00401045 C9             leave
00401046 C3             ret

2.プログラミング言語

プログラミング言語とは、コンピュータに対する一連の動作の指示を記述するための人工言語の総称である。 この一連の指示をプログラムと呼び、それを記述することをプログラミングと呼ぶ。 自然言語(日本語や英語など人間が普段使っている言語)と同様、文法(構文規則や意味規則など)で定義される。

プログラミング言語の存在意義は、人間が直接扱うには難しい機械語に代わって、より人間が扱いやすい形を提供することにある。 コンピュータが直接理解し実行することのできる言葉は、そのコンピュータの種類に固有の機械語だけである。 したがって、最終的には機械語を使ってコンピュータが行うべき作業・計算を指示しなければならない。

機械語命令と一対一に対応するアセンブリ言語もプログラミング言語の一つではあるが、 一般には、C言語やJavaなどもっと人間に解り易いプログラミング言語が多く使われる。 アセンブリ言語は低水準言語、C言語Javaなどは高水準言語(または高級言語)と呼ばれる。

高水準言語で書かれたプログラムを機械語プログラムに変換するのがコンパイラである (アセンブリ言語や中間言語を経由することが多い)。

機械語プログラムに変換するのではなく、高水準プログラミング言語で書かれたソースコード(プログラム) を逐次解釈実行するものをインタプリタと呼ぶ。 プログラムの実行に主としてインタプリタを用いるプログラミング言語をインタプリタ言語(またはスクリプト言語)と呼ぶ。 PerlJavaScriptVBScript などがよく知られている。

なお、通常、プログラミング言語とは言わないが、 Webページの記述言語である HTML(HyperText Markup Language) もスクリプト言語の一種である。

リファレンス

[1] Tiny C Compiler