CASL U - アセンブラ言語 |
機械語とアセンブラ言語
機械語とは、コンピュータが直接理解できる言語であり 0 と 1 (電気のOFFとONに対応する)の組み合わせでできている。この機械語を英字や数字等の記号を使って、人にわかりやすくした言語をアセンブラ言語という。このアセンブラ言語で書かれたプログラムは、コンピュータで直接実行できないので、機械語に変換する必要がある。この変換の作業をアセンブル(翻訳)といい、アセンブラという翻訳のプログラムを使ってコンピュータで行う。この翻訳の作業を手作業で行うことをハンドアセンブルという。
アセンブラ言語やいろいろな言語で書かれたプログラムを原始プログラムまたはソースプログラムという。原始プログラムを機械語に翻訳したものを目的プログラムまたはオブジェクトプログラムという。
アセンブラ言語の特徴
・長所
- アセンブラ言語の命令は、機械語の命令と1対1に対応しているので使用する記憶場所や実行速度を考えながらプログラムを作成することも可能である。
- プログラムの実行時間があらかじめ計算できるのでスピードが要求されるプログラムに対応できる。
- ハードウェアすなわちコンピュータが用意している機能を原理的にはすべて使用してプログラムを作成できる。
・短所
- アセンブラ言語はハードウェア固有の言語であるので、CPUが異なると機械語(文法)も変わる。
- ハードウェアの仕組みや原理の知識が必要である。
- アセンブラ言語は機械語の命令と1対1に対応しており、汎用性が重視されているのでプログラムの作成は面倒であり、できあがったプログラムはわかりにくいものになりやすい。
数値の表し方(10進数と2進数、16進数)
コンピュータ内部のデータは、0と1の組み合わせ、すなわち2進数で表すことができる。2進数のままではけた数が多くなり読みにくいので、16進数で表すことが多い。ちょうど、4けたの2進数を1けたの16進数で表すことができる。
8けたの2進数
最小値 = 0000 0000 → 00(16), 0(10)
最大値 = 1111 1111 → FF(16), 255(10)
16けたの2進数
最小値 = 0000 0000 0000 0000 → 0000(16), 0(10)
最大値 = 1111 1111 1111 1111 → FFFF(16), 65535(10)
10進数 | 16進数 | 2進数 | 10進数 | 16進数 | 2進数 | |
0 | 00 | 0000 0000 | 0 | 0000 | 0000 0000 0000 0000 | |
1 | 01 | 0000 0001 | 1 | 0001 | 0000 0000 0000 0001 | |
2 | 02 | 0000 0010 | 2 | 0002 | 0000 0000 0000 0010 | |
3 | 03 | 0000 0011 | 3 | 0003 | 0000 0000 0000 0011 | |
4 | 04 | 0000 0100 | 〜 | 〜 | 〜 | |
5 | 05 | 0000 0101 | 15 | 000F | 0000 0000 0000 1111 | |
6 | 06 | 0000 0110 | 16 | 0010 | 0000 0000 0001 0000 | |
7 | 07 | 0000 0111 | 〜 | 〜 | 〜 | |
8 | 08 | 0000 1000 | 255 | 00FF | 0000 0000 1111 1111 | |
9 | 09 | 0000 1001 | 256 | 0100 | 0000 0001 0000 0000 | |
10 | 0A | 0000 1010 | 〜 | 〜 | 〜 | |
11 | 0B | 0000 1011 | 4095 | 0FFF | 0000 1111 1111 1111 | |
12 | 0C | 0000 1100 | 4096 | 1000 | 0001 0000 0000 0000 | |
13 | 0D | 0000 1101 | 〜 | 〜 | 〜 | |
14 | 0E | 0000 1110 | 65533 | FFFD | 1111 1111 1111 1101 | |
15 | 0F | 0000 1111 | 65534 | FFFE | 1111 1111 1111 1110 | |
16 | 10 | 0001 0000 | 65535 | FFFF | 1111 1111 1111 1111 |
負数を表すとき、2の補数を使用する。
8けたの2進数
負の最小値 = 1000 0000 → 80(16), -128(10)
正の最大値 = 0111 1111 → 7F(16), 127(10)
16けたの2進数
負の最小値 = 1000 0000 0000 0000 → 8000(16), -32768(10)
正の最大値 = 0111 1111 1111 1111 → 7FFF(16), 32767(10)
10進数 | 16進数 | 2進数 | 10進数 | 16進数 | 2進数 | |
127 | 7F | 0111 1111 | 32767 | 7FFF | 0111 1111 1111 1111 | |
126 | 7E | 0111 1110 | 32766 | 7FFE | 0111 1111 1111 1110 | |
〜 | 〜 | 〜 | 〜 | 〜 | 〜 | |
1 | 01 | 0000 0001 | 1 | 0001 | 0000 0000 0000 0001 | |
0 | 00 | 0000 0000 | 0 | 0000 | 0000 0000 0000 0000 | |
-1 | FF | 1111 1111 | -1 | FFFF | 1111 1111 1111 1111 | |
-2 | FE | 1111 1110 | -2 | FFFE | 1111 1111 1111 1110 | |
〜 | 〜 | 〜 | 〜 | 〜 | 〜 | |
-127 | 81 | 1000 0001 | -32767 | 8001 | 1000 0000 0000 0001 | |
-128 | 80 | 1000 0000 | -32768 | 8000 | 1000 0000 0000 0000 |
[例] 正数の場合
3D5A(16) = 3×163 + D×162 + 5×161 + A×160 = 15706(10)
16進数の各桁をそれぞれ4桁の2進数に変換する。
3D5A(16) = 3
0011D
11015
0101A
1010(2)
15706(10) = 3D5A(16)
16 ) 15706
16 ) 981 … 10
16 ) 61 … 5
16 ) 3 … 13
0 … 3
[例] 負数を2の補数で表す場合
-31(10) = -1F(16) = -0001 1111(2) = 1110 0001(2) (8桁2進数の場合)
0001 1111(2)
1110 0000(2)0と1を反転する。(1の補数) + 1(2)
1110 0001(2)1の補数に1を加算した値が2の補数になる。
1110 0001(2) = -0001 1111(2) = -31(10)
1110 0001(2)
0001 1110(2)0と1を反転する。(1の補数) + 1(2)
0001 1111(2)1の補数に1を加算した値が2の補数になる。
-222(10) = -00DE(16) = -0000 0000 1101 1110(2) = 1111 1111 0010 0010(2)
(16桁2進数の場合)
CASL U | Copyright © 2003 Hiroshi Masuda |