情報科学科 - 関西学院大学

アセンブラプログラミング演習
2012度
「ガイダンス&第一回講義録」
情報科学科 早藤 貴範
自己紹介
担当教授: 早藤 貴範(はやふじよしのり)
専門分野: 計算科学、半導体物理、材料設計、
経
歴 :ソニー(株)
中央研究所 30年
関西学院大学 理工学部
13年
連 絡 先: 079-565-8591
内線8559
メール&HPアドレス:
[email protected]
http://ist.ksc.kwansei.ac.jp/~hayafuji/
cgi-bin/wiki/wiki.cgi
関西学院大学
一人ひとりのキャリア・プラン
皆さんは、第三次産業革命の真っ只中!!
皆さん一人ひとりが大きなライフワークを!!
社会で何をし、何で寄与をするか、早い決断をする事
1年生:自分を見つめ、将来を考え、決断をする時!
2年生:キャリア・プランを作る時
3年生:キャリア・プランの第一歩を踏み出す時
4年生:専門家への第一歩を踏み出す時
Only One or No.1の存在に!! セールス・ポイントが重要
関西学院大学
授業の進め方と成績評価
 授業
・講義 3回(3コマ) と 演習10回(10コマ)
・課題レポート 3種類 X 約5問 =約15問
各種類毎に、締切日までに提出
成績評価
レポート点 + 出席点 +授業に取り組む姿勢
教科書・参考文献
・澤田晃著:「CASLⅡによるプログラムの作り方」 (共立出版、2001)
・浅川毅著: 「PICアセンブラ入門」(東京電機大学出版局、2001)
関西学院大学
受講上の 諸注意
“時”の厳守
*授業開始5分後に、出席を取ります
*レポート提出日時の厳守(減点対象)
演習の重視
*出席点とレポート点を成績評価の基準にする
*レポートは自分の言葉で書く
・共同作業は結構、各自のオリジナル・レポートを提出!
資源の有効活用
*教育技術主事、TAの方々にご相談を!一人で悩まない!
*演習室の有効活用を!(自習⇒自主学習の勧め)
関西学院大学
講義録と演習ノートの公開
アドレス
http://ist.ksc.kwansei.ac.jp
/~hayafuji/cgi-bin/wiki/wiki.cgi
関西学院大学
講義の目的
講義目的
*コンピュータの動作機構の理解
*アセンブリ言語(機械語)のプログラムの実行機構の理解
*機械語やアセンブリ言語によるプログラミング
*高級言語プログラムの実行機構の理解
*国家試験への対応
講義内容
*簡単な構造のコンピュータ(COMET,PIC)により、
*機械語やアセンブリ言語によるプログラムを作成し、
*シミュレータによるプログラムの実行・デバッグを学ぶ
関西学院大学
授業内容(1)
回 月日
1 9.24
2 10.01
3 10.08
4
5
6
7
10.15
10.22
10.29
11.12
講義内容
概説・コンピュータとアセンブラの基礎
COMETの動作とCASLの仕様
CASLプログラムの作成と
シミュレータでの実行
CASLプログラミング(Ⅰ)
CASLプログラミング(Ⅱ)
(STEP1)
CASLプログラミング(Ⅲ)
CASLプログラミング (Ⅳ)
関西学院大学
授業内容(2)
回
月日
 8 11.19
講義内容
CG講義
9 11.26
CGプログラミング(Ⅰ)
10 12.03
CGプログラミング(Ⅱ)
11 12.10
CGプログラミング(Ⅲ)
12 12.17
CGプログラミング(Ⅳ)
13
CGプログラミング(Ⅴ)
1.07
(STEP2)
(STEP3)
関西学院大学
スケジュール表(アセンブラプログラミング演習:2012秋学期)
9月
24
COMET&CASLⅡ講義
10月
1
08
15
22
29
Step 1
11月
12
12月
3
1月
10
19
CG講義 26
Step 2(終了時)
10
Step 3
17
補講演習
Step nはレポートの提出日
参考図書およびソフトウエア
ーCASLⅡとシミュレーター
参考図書
*澤田晃著 (共立出版、2001年(第二版))
「CASLⅡによるプログラムに作り方」
*浅川毅著 (東京電機大学出版局、2001年)
「PICアセンブラ入門」
シミュレータ
*(株)ソフトボート
「合格CASLⅡ」
関西学院大学
教科書
関西学院大学
情報科学実験
第一回講義(2012.9.24)
1.アセンブラ言語CASLⅡ
*CASLⅡについて
2. シミュレータCOMET
*COMETの仕組み
3. アセンブラ言語CASLⅡの命令と使用規則
*34個の命令(機械語命令+マクロ命令+アセンブラ命令)
4. アセンブラ言語CASLⅡのプログラミングの基礎
*アルゴリズム
5. アセンブラ言語CASLⅡのプログラミングの応用
*メモリ操作
関西学院大学
コンピュータの基本原理
全ての演算は2進数の加法で実行。減算は補数の加算、
乗算は加算の繰り返し、除算は減算の繰り返し
全て=数学問題、言語表現、音声・映像表現
補数=コンピュータで扱う負の数
アルゴリズムの発見=コンピュータアーキテクチャーの基礎
複雑な問題を単純な加算問題に置き換える計算手順
データ構造、線形計画法、組み合わせ最適化問題
計算可能性の問題、計算爆発の見極めの問題
有限時間で計算可能かどうかの問題
関西学院大学
コンピュータの演算の基本原理
<0>と<1>の2進数の加算のみが演算の原理
乗算は加算の繰り返し、
減算は補数の加算、除算は減算の繰り返し
0+0=0
0+1=1
1+0=1
1+1=1(桁上がり)
4ビットCPUの場合
3T + 5T = 8T
0011Y
3T
+0101Y
5T
1000Y
8T
電子回路のスイッチ作用を利用
関西学院大学
機械語とは??
*機械語:
・数に意味を持たせた数語
数字そのものの絶対的な意味はなく、数字そのものに、
割り当てられた意味を持たせた言語
*人間がコンピュータ制御のために創作した命令語
*機械語に用いる数値
・8ビット(1バイト)の範囲の数値とその組み合わせ
最大256種類のマシン語とその組み合わせ(機種に依存)
・16進数(4ビット)の2桁で表示
*ニーモニックは機械語と完全に一対一対応しているので、
ニーモニックも機械語と呼ばれる
関西学院大学
機械語とアセンブラ言語
ー その対応関係 ー
行番号 番地
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
0000
0002
0004
0006
0008
000A
000B
000D
000F
0011
0013
0014
0015
コード
機械語
1200
1100
1210
4010
6500
1401
2000
1100
1211
6400
8100
ラベル
REIIB
0000
0014
0001
0015 LOOP
0013
0014
0014
0001
0006
OWARI
ANS
C5
(p.9)
命令 オペランド
アセンブラ言語
START
LAD
GR0,0
ST
GR0,ANS
LAD
GR1,1
CPA
GR1,C5
JPL
OWARI
LD
GR0,GR1
ADDA
GR0,ANS
ST
GR0,ANS
LAD
GR1,1,GR1
JUMP
LOOP
RET
DS
1
DC
5
END
関西学院大学
アセンブラ言語による学習(1)
キーボード
マウス
人
機械語( 0と1)
のみ理解
入力装置
出力装置
CPU
言語変換ソフト
CRT
プリンタ
人
言語変換ソフト
高水準言語プログラム
コンパイラ言語 (FORTRAN,C)
コンパイラ
インタプリタ言語 (BASIC)
インタプリタ ===機械語
アセンブラ言語プログラム
アセンブラ
人間の理解できる言語
CPUの理解できる言語
言語変換
関西学院大学
コンピュータの基本構成
ーCOMETⅡ・ ノイマン型コンピューター
CPU
制御装置
算術・論理
演算装置
入力装置
一次記憶装置
出力装置
二次記憶装置
関西学院大学
CPUへの命令の表し方
1. コンピュータへの命令 (instruction)
*命令語(機械語)の形で主記憶装置に保存
2. 命令語の表現
*コンピュータが理解できる2進コードの機械語
(machine language)で記述
3. 機械語からアセンブリ言語(assembly language)へ
*人間が理解し易い言語への移行 ADD=20
*アセンブリ言語=ニーモニック・コード
*機械語 1対1対応 アセンブリ言語
ADD = 20
SUB = 21
LD = 14
4. 機械語から高水準言語(high level language)へ
関西学院大学
CASLⅡで実行
-A+B=C-
EXAM START BEGIN
BEGIN LD
GR1, A
ADD
GR1, B
ST
GR1, C
RET
A
DC
#000C
B
DC
#001A
C
DS
1
END
A=12
B=26
⇒ プログラムの実行終了
⇒ A
DC
0012
⇒ B
DC
0026
関西学院大学
アセンブラ言語による学習(2)
CPUは2進の原理で動作している
機械語は2進数の形式で書かれた言語でコンピュータ
が理解できる言語。“1”と“0”による言語(数値列)
機械語によるプログラムから機械語と1対1に対応した
人の理解できる言語によるプログラミングへ
アセンブラ言語によるプログラミング
ニーモニック(文字形式の略号)の利用
ニーモニックの機械語への変換は
CASLⅡアセンブラが行う
関西学院大学
アセンブラ言語CASLⅡ(1)
ー言語の位置付けー
プログラム言語(プログラムを書くための言語)の発達
機械語
アセンブラ言語
高水準言語
機械語 machine language
*コンピュータのCPUが実行可能な命令体系
アセンブラ(リ)言語 assembly language
*コンピュータへの気配り
機械語に1対1に対応
*人間への気配り
表意記号mnemonic codeの利用
高水準言語 high level language
*自然言語(
人工言語)に近いプログラミング言語
関西学院大学
アセンブラ言語CASLⅡ(2)
ー言語の位置付け(2)ー
コンピュータの動作機構の理解
*アセンブラ言語
機械語に1対1対応
*機械語
ハードウエアの動作に1対1対応
アセンブラ言語のコンピュータ依存性
アルゴリズムの理解
*少数・単純な命令語で構成するプログラミング技法
国家試験への対応
*アセンブラ言語は、選択、または必修科目
*コンピュータ依存性を吸収したアセンブラ言語
・国家試験用の架空コンピュータ
COMET
・COMET用のアセンブラ言語
CASL
関西学院大学
機械語とアセンブラ言語
ー その対応関係 ー
機械語
*コンピュータのCPUが実行可能な命令体系
*0と1の2進数(又は対応する16進数)の命令
*ハードウエアの動作と1対1に対応
コンピュータ依存性
アセンブラ(リ)言語
*コンピュータへの気配り
機械語に1対1に対応
*人間への気配り
表意記号mnemonic codeの利用
*機械語(機械語の組)やアドレス(記憶の番地)を
「CPUの動作を連想させるような英数字列」で表した言語
機械語とアセンブラ言語の対応(p.9)
関西学院大学
機械語とアセンブラ言語
ー その対応関係 ー
行番号 番地
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
0000
0002
0004
0006
0008
000A
000B
000D
000F
0011
0013
0014
0015
コード
機械語
1200
1100
1210
4010
6500
1401
2000
1100
1211
6400
8100
ラベル
REIIB
0000
0014
0001
0015 LOOP
0013
0014
0014
0001
0006
OWARI
ANS
C5
(p.9)
命令 オペランド
アセンブラ言語
START
LAD
GR0,0
ST
GR0,ANS
LAD
GR1,1
CPA
GR1,C5
JPL
OWARI
LD
GR0,GR1
ADDA
GR0,ANS
ST
GR0,ANS
LAD
GR1,1,GR1
JUMP
LOOP
RET
DS
1
DC
5
END
関西学院大学
機械語の命令語の構成
行番号 番地
5:
6:
7:
8:
9:
10:
0006
0008
000A
000B
000D
000F
コード ラベル
機械語
4010 0015 LOOP
6500 0013
1401
2000 0014
1100 0014
1211 0001
命令 オペランド
アセンブラ言語
CPA
GR1,C5
JPL
OWARI
LD
GR0,GR1
ADDA
GR0,ANS
ST
GR0,ANS
LAD
GR1,1,GR1
(16進表示)
アドレス部
指標レジスタ部
汎用レジスタ部
命令コード部(OP)
プログラムとデータの記憶場所のアドレス
関西学院大学
アセンブラ言語と高水準言語
5
ANS =∑i の値を求める
I=1
“
始め
1+2+3+4+5
ANS
終り
始め I=1
(A)→GR0
GR0+B→GR0
GR0+C→GR0
高水準言語 GR0+D→GR0
流れ図
GR0+E→GR0
GR0→ANS
終り
アセンブラ言語
流れ図
INTEGER
I, ANS
C
ANS = 0
DO 100 I = 1 , 10
ANS = ANS + I
100 CONTINUE
C
STOP
END
高水準言語
プログラム
(p.2)
REIIB START
LD
GR0, A
ADDA GR0, B
ADDA GR0, C
ADDA GR0, D
ADDA GR0, E
ST
GR0, ANS
RET
ANS
DS
1
A
DC
1
B
DC
2
C
DC
3
D
DC
4
E
DC
5
END
アセンブラ言語
プログラム
関西学院大学
アセンブラ言語から高水準言語へ
-翻訳プログラム原始プログラム
source program
アセンブラ言語
Assembler language
トランスレータ
translater
アセンブラ
assembler
目的プログラム
object program
高水準言語
high level language
コンパイラ
compiler
インタプリタ
interpreter
機 械 語
machine language
関西学院大学
アセンブラ言語の実用性
ー特徴とその価値ー
 省資源
*高水準言語の場合、多量の記憶領域が必要
・機械語への翻訳ソフトや翻訳前後のプログラムの記憶
*アセンブラ言語の場合、少量の記憶領域で充分
 高速処理
*高水準言語の場合、機械語への相当の翻訳時間が必要
*アセンブラ言語の場合、機械語への変換は短時間で可能
*大容量のメモリの使用が困難な時 :
・安価な家電製品の制御用
*高速演算処理を必要とする時 :
・測定器や自動車の高速制御機器用
関西学院大学
CASLⅡの命令語
ー36種類の命令アセンブラ命令
4種類
*アセンブラの制御命令
・プログラムの先頭と終了の指示命令
・領域の確保と定数の定義
機械語命令
28種類
*実行命令
マクロ命令
4種類
*一連の命令群を1つの命令に置き換えた命令
・入出力命令と退避・復元命令
関西学院大学
☹
プログラムの入力練習
(テキストp.3)
1.スタート → すべてのプログラム
→ 合格CASLⅡ → 編集モード
2. [編集][無題]の画面の表示
・CASLⅡの編集画面 → 編集ウインド
3. I 型カーソルの点滅状態で、p.3の 図1.3 を入力
4.ファイルから、名前をつけて保存をクリック
5.[実行]をクリックし、[アセンブル]をクリック。エラー?
5. TRACE、REG、DUMPをこの順にクリック
6. [トレース ツールバー]のSTEPを順次クリックし、
レジスタとメモリーの数値の変化を観察する
関西学院大学
コーディングの形式と注意事項(1)
-ラベルと注釈-
行番号 ラベル 命令コード オペランド
注釈
001
REL1A START
;プログラムの始め
002
LAD
GR0, 0
;0を汎用レジスタに入れる
ラベル
・命令のアドレスを記号化したもの(記号アドレス)
・START命令のラベルはサブルーチンの名前にもなる
・他の命令のラベルは記憶領域の先頭アドレス(ENDはラベルなし)
注釈と注釈行
・命令の記述行の途中のセミコロン(;):それ以降は注釈
・セミコロン(;)以前に記述がない場合、その行は注釈行
関西学院大学
プログラム作成上の注意事項(2)
1命令:1命令行に記述
行番号:3桁で書く(本来、不要)。
ラベル:
・先頭文字は英大文字、8文字以内の英大文字か数字
・START命令には必ずラベルが必要、END命令には不要
命令コード:
・命令行では、先頭から命令コードを書く
・ラベルがある場合、ラベルの後に、1つ以上の空白を置く
オペランド:
・命令コードの後に、 1つ以上の空白を置く
・最大桁数は、16桁+空白1桁の計17桁
関西学院大学
プログラムの例
ーアセンブラの命令形式ー
行番号 ラベル 命令コード オペランド
010
020
030
040
050
060
070
080
090
100
110
120
130
140
150
160
REL1A
LOOP
START
LAD
ST
LAD
CPA
JPL
LD
ADDA
ST
LAD
JUMP
OWARI RET
ANS
DS
C5
DC
END
GR0, 0
GR0, ANS
GR1, 1
GR1, C5
OWARI
GR0, GR1
GR0, ANS
GR0, ANS
GR1,1 GR1
LOOP
1
5
注釈
;プログラムの始め
;0を汎用レジスタに入れる
;GR0の内容をANSに格納する
;1を汎用レジスタ1に入れる
;この1行を注釈行にする
;GR1(=1)とC5(=5)を算術比較する
;GR1>C5の時、ラベルOWARIへ行く
;GR1の内容をGR0に移す
;ANSとGR0を累計し、GR0に置く
;累計結果をANSに格納する
;Iを1増やす(データと制御変数を兼)
;ラベルLOOPへジャンプする
;プログラムの終了
;1語の領域の確保、ANSと呼ぶ
;1語の領域に5を設定、C5と呼ぶ
;プログラムの終わり
関西学院大学
機械語命令の内部表現
ーワード・マシーンー
行番号 番地
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
0000
0002
0004
0006
0008
000A
000B
000D
000F
0011
0013
0014
0015
コード
機械語
1200
1100
1210
4010
6500
1401
2000
1100
1211
6400
8100
ラベル
REIIB
0000
0014
0001
0015 LOOP
0013
0014
0014
0001
0006
OWARI
ANS
C5
命令 オペランド
アセンブラ言語
START
LAD
GR0,0
ST
GR0,ANS
LAD
GR1,1
CPA
GR1,C5
JPL
OWARI
LD
GR0,GR1
ADDA
GR0,ANS
ST
GR0,ANS
LAD
GR1,1,GR1
JUMP
LOOP
RET
DS
1
DC
5
END
関西学院大学
機械語命令の内部表現の確認(1)
ー機械語コードとアセンブラ言語の対応ー
アセンブラ命令は機械語命令に翻訳されていない。
・START、END、DC、DSの機械語はない。
・START、ENDは記憶領域に格納されないので、番地がない。
・DCとDSは格納領域の先頭アドレスの0015と0014を示すラ
ベルC5とANS(記号アドレス)を持つ
アドレス修飾がない
ので、0が入る
0000番地:1200 0000
0番地の0
LAD
GRO、0
LADの機械語
(p.113)
関西学院大学
機械語命令の内部表現の確認(2)
ー機械語コードとアセンブラ言語の対応ー
アドレス修飾がない
ので、0が入る
0002番地: 1100 0014
ANSは絶対アドレスの記号アドレス
ST GR0,ANS
STの機械語
(p.113)
000A番地: 1401
LDの機械語
(p.113)
LD GR0,GR1
機械語命令の内部表現の確認(3)
ー機械語コードとアセンブラ言語の対応ー
指標レジスタGR1によるア
ドレス修飾1が入る
アドレスは1なので、0001が入る
アドレス1に0001が入っていることの確認
000F番地: 1211 0001
LAD GR1, 1, GR1
指標レジスタ
LADの機械語
(p.113)
LOOPは絶対アドレス0006
の記号アドレス
0011番地: 6400 0006
JUMPの機械語
(p.113)
JUMP LOOP
機械語の命令語の構成(1)
行番号 番地
5:
6:
7:
8:
9:
10:
0006
0008
000A
000B
000D
000F
コード ラベル
機械語
4010 0015 LOOP
6500 0013
1401
2000 0014
1100 0014
1211 0001
命令 オペランド
アセンブラ言語
CPA
GR1,C5
JPL
OWARI
LD
GR0,GR1
ADDA
GR0,ANS
ST
GR0,ANS
LAD
GR1,1,GR1
(16進表示)
アドレス部
指標レジスタ部
汎用レジスタ部
命令コード部(OP)
注:順番が逆
プログラムとデータの記憶場所のアドレス
関西学院大学
機械語の命令語の構成(2)
行番号 番地
5:
0006
6:
0008
7:
000A
8:
000B
9:
000D
10:
000F
機械語
コード
4010
0015
6500
0013
1401
2000
0014
1100
0014
1211
0001
16進表示
12345678 1234 1234 1234567890123456
命令コード部 汎用レジ指標レジ
スタ部 スタ部
OP
r/r1
X/r2
第1語
アドレス部
adr
第2語
関西学院大学
命令語の詳細
12345678 1234 1234 1234567890123456
第1語(1ワード)
命令コード部 汎用レジ指標レジ
スタ部 スタ部
OP
r/r1
X/r2
12
機械語命令
が入る
1
1
第2語(1ワード)
アドレス部
adr
0001
X : 2語長命令の時、指標レジスタ
汎用レジスタ番号 1~7
指標レジスタ不使用の時、0
r2 : 1語長命令の時、汎用レジスタ
汎用レジスタ番号 0~7
汎用レジスタ(GR0~GR7)
の番号(0~7)が入る
r : 2語長命令の場合
r1:1語長命令の場合
2語長の時のみ使用、
アドレス(16ビット)が入る
関西学院大学
CASLⅡ命令の誤り例(p.12)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
0000
0002
0004
0006
0008
000A
000B
000D
000F
0011
0013
0014
0015
1200
1100
1210
4010
6500
1401
2000
1100
1211
6400
8100
REIIB
0000
0014
0001
0015 LOOP
0013
0014
0014 ST
0001
0006
OWARI
ANS
CPA
START
LAD
ST
LAD
CPA
JPL
LD
ADDA
ST
LAD
JUMP
RET
DS
DC
END
KAISHI,GR0
GR0,0 0
GR0,AMS
GR1,1
GR1,C5
OWARI
GR0,GR1
GR0,ANS
GR0,ANS
GR1,1,GR1,GR1
LOOP
1
5
赤字部分が誤り箇所
関西学院大学
アセンブル後の注意
命令語長は、1語長もしくは2語長である。
1語又は2語長命令は、1又は2の記憶領域に格納される。
従って、記憶の番地は、1又は2づつ増加する。
KAISHI:ラベルとして正しい。LADの前に、KAISHIを入れる。
GR0:予約語のGR0~GR7はラベルに使用できない。(p.6)
0 :空白と0は誤り。,0もダメ。指標レジスタ名が必要。
AMS:プログラム中にこのラベル名が無い。ANSの誤り。
C5 :プログラム中にこのラベル名が無い。CPAの誤り。
ラベル名に命令語(算術比較命令)は使えない。
ST :ラベル名に命令語(算術比較命令)は使えない。
GR1:オペランドは3つしか取れない。
関西学院大学
ノイマン型コンピュータの根幹
「プログラム内蔵」と「逐次演算処理」
機械語
アセンブラ言語
高水準言語
アセンブラ
コンパイラ
1. メモリへのプログラム、データの記憶・内蔵
・プログラムもデータも全て2進数で同じ扱い
・アドレシング=主記憶装置上の実行番地
2. メモリからプログラム、データの取り出しと2進数演算
・レジスタ、データバス、ALU、CPU
3. メモリへのプログラム、データの戻しと記憶
関西学院大学
コンピュータの基本構成
ーCOMETⅡー
CPU
制御装置
算術・論理
演算装置
入力装置
一次記憶装置
出力装置
二次記憶装置
関西学院大学
COMETⅡ
☹
ーCASLⅡ用のハード・ウエアー
ノイマン型架空コンピュータ : 国家試験用
*ノイマン型の実コンピュータの基本機能を有する
*2大基本方式
・プログラム内臓(記憶)方式
・逐次制御(実行)方式
仕様
*16ビット(2バイト)マシーン=1ワード・マシーン
*記憶容量 65536語(64K語) 0000~FFFF
関西学院大学
情報の2値表現(1)
2進数表示法(binary notation)の導入
全ての状態を、“0”状態と“1”状態の2つの状態で表す
1. 物理的には、閾値(threshold)で“0”と“1”を区別する
*雑音に強い
*エラーが極めて少ない
*エラーの補正が可能
2. 閾値には種々の物理量が用いられている
*電子回路のスイッチの“ON”と“OFF”
*微小磁区の“N”と“S”、
*幾何学的な凹と凸
*光の反射率の差異(大小)
*コンデンサー内の電荷の有無
関西学院大学
情報の2値表現(2)
1.(整)数値の2進数表示
*2n + 2n-1 + 2n-2 +・・・+ 21 + 20 + 2-1 + 2-2 + 2-3 +・・・
*32962 = 215 + 27 + 26 + 21
*16進数表示(ディスプレー上の可視化を容易にするため)
2.文字列の2進数表示(p.21)
*数字、英字、カタカナ、その他の記号:8ビット(1バイト)
*ひらがな、漢字:16ビット(2バイト)
3.論理値の2進数表示
*真(true)を”1”、および 偽(false)を”0”に対応
4.音声と画像の2進数表示
関西学院大学
☹
2進数の16進数への変換(p.33)
*進数表示
2進数
10進数
16進数
一般的な場合
CASLⅡ・PICの場合
B (binary number)
b
B
D (decimal number)
n
D
H (hexa decimal number)
h
H
*CRTディスプレーの表示方法
・2進数の0と1の羅列の数字では扱いに不便
・16進数で表示 : 0~15 を 0~9 と A~F で表現
*練習 1. 2進数10110100111001bを16進数と10進数で表現しなさい。
*練習 2. ABCDhを2進数に変換しなさい。
*練習 3. 16進数 2D39hを10進数に変換しなさい。
=2x163+13x162+3x16+9=11577n
*練習 4. 2進数 1010 1011 1100 1101bを16進数に変換しなさい
関西学院大学
☹
整数の表し方
N = anan-1an-2・・・・a2a1a0r
= anrn+an-1rn-1+an-2rn-2・・・・a2r2+a1r1+a0r0
N :与えられた整数
r :与えられた数体系の位の基になる数=基数
・2進法:r=B=Y=2
・10進法:r=D=T=10
・16進法:r=H=16
〔例〕 1101b = 1×23 + 1×22 + 0×21 + 1×20
13n = 1×101 + 3×100
関西学院大学
☹
整数の変換方式
* 2進数
10進数
1101b = 1×23 + 1×22 + 0×21 + 1×20
= 13n
1101b = {(1×2+1)×2+0 }×2 + 1
=13n
* 10進数
2進数
13
6
3
1
0
÷2 余り
1
0
1
1
関西学院大学
小数の表し方
N = 0.a-1a-2a-3・・・・a-(n-1)a-nr
= a-1r-1+a-2r-2+a-3r-3・・・・a-(n-1)r-(n-1)+a-nr-n
N :与えられた整数
r : 与えられた数体系の位の基になる数=基数
2進数 : r = b = Y = 2
10進数 : r = n = T = 10
16進数 : r = h = H = 16
〔例〕 0.25n = 2×10-1 + 5×10-2
0.01b = 0×2-1 + 1×2-2 = 0.25n
関西学院大学
小数の変換方法(1)
*2進数
10進数
0.101b = 1×2-1 + 0×2-2 + 1×2-3n= 0.625n
*
0. 1 0 1b
0. a
b
c b
+ + ÷2
+ +
÷2
0.5
c/2
÷2
÷2
0.25
(b+c/2)/2
÷2
÷2
0.625n
{a(b+c/2)/2}/2=a/21+b/22+c/23n
関西学院大学
小数の変換方法(2)
*10進数
2進数
×2
×2
×2
0.6875n
0.375
0.75
0.5
0.6875n
-1
1×2-1
-0
-1
×2
0.0
-1 b
0×2-2
1×2-3
1×2-4
関西学院大学
循環小数の変換誤差(2進数の課題)
10進数を2進数に変換すると循環小数になり
有限桁では変換誤差が生じる場合がある
×2
0.6T
×2
0.2
×2
0.4
1
0
×2
0.8
×2
0.6
0.2
0
1
1
0.6n = 0.1001 1001 1001 1001 1001 1001・・・・b
関西学院大学
☹
論理数と算術数
ー正数と負数ー
論理数
*符号のない数値
*16ビットの2進数
0~216-1 : 0~65535
算術数
* <0~32767>を<正の数>
*<32768~65535>を<負の数ー32768~ー1>
・この<負の数>を「2の補数」という
* <負の数ー32768~ー1>の2進数表示では、
先頭ビット(MSB 第15ビット=符号ビット)が1になる。
関西学院大学
☹
2進数の<負の数> (1)
コンピュータで<負の数>を扱うための工夫として
通常、“2の補数”という概念を用いる。
*今、16ビットのCPUを考え、
FFFFh+0001hを実行する。
FFFFh
+ 0001 h
1
0000 h
*1を加えて0になる数FFFFは16ビットCPUで、“-1”とみなす。
・16ビットCPUでは、FFFFを超える数は扱えない。
関西学院大学
☹
2進数の<負の数> (2)
*表現する数値の桁数を制限(定義)することが重要
*数値の先頭の桁(MSB : Most Significant Bit) が1の時、負の数
0の時、正の数
・その桁数で表せる数値の上半分を負の数、下半分を正の数として扱う
*n桁の2進数Nの“2の補数”は、次式で表される
2n-N
(=負数-N)
(例) 8桁の数値3の補数 1 0 0 0 0 0 0 0 0
-0000 0011
1111 1101
FDh = -3h
F
D
2n = 28
3h
-3h
FDh
関西学院大学
☹
2進数の<負の数>(3)
*負の数、2の補数の作り方(2)
・Nの全ビットを反転させ、+1を加えると2の補数とな
る
∵2n – N = { ( 2n – 1 )- N } + 1
N = 3の時
全ビットの反転
1111 1111
2n-1
-0000 0011
N(3)
1111 1100
+ 0000 0001
+1
1111 1101
-3
関西学院大学
☹
2進数の<負の数>(4)
4ビット構成のCPUで扱える数は
+1から+15、あるいは、+7から-8の数
0
1 (1)
2 (2)
3 (3)
4 (4)
5 (5)
6 (6)
7 (7)
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1 5 (F)
1 4 (E)
1 3 (D)
1 2 (C)
1 1 (B)
1 0 (A)
9 (9)
8 (8)
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
-1
-2
-3
-4
-5
-6
-7
-8
関西学院大学
☹
16ビットの“2の補数表現”
*16ビットの“2の補数”表現の範囲(For CPU with 16bits)
10進数
-32768
-32767
-32766
-2
-1
0
1
2
32766
32767
2の補数
16進数
1000 0000 0000 0000Y
1000 0000 0000 0001Y
1000 0000 0000 0010Y
1111 1111 1111 1110Y
1111 1111 1111 1111Y
0000 0000 0000 0000Y
0000 0000 0000 0001Y
0000 0000 0000 0010Y
0111 1111 1111 1110Y
0111 1111 1111 1111Y
8000H
8001H
8002H
FFFEH
FFFFH
0000H
0001H
0002H
7FFEH
7FFFH
関西学院大学
小数の補数表現
nビットの2進数の小数Nの2に対する補数X
nビットの少数:小数点以下n桁の少数
X = 2-N
X = 10.-0.abcd・・・
n桁
10.
2T
- 0 . 1011
N
1. 0101
2の補数
関西学院大学
☹
COMETⅡの情報表現
ー数値データー
数値表示
* CPU内部
: 2進数表現
* ディスプレー : 16進数表現
*負数
: 2の補数表現
関西学院大学
☹
COMETⅡの情報表現
ー文字データー
文字データはJIS情報交換用8ビット符号(p.21)
*JIS X0201 ラテン文字・片仮名用8ビット符号表で
規定する符号
練習問題:自分の名前を文字データで表現しなさい
ハヤフジ
CAD4CCBC(DE)
チェック:
*カタカタの濁音、平仮名、漢字のコードは?
*COMETⅡでは、平仮名や漢字は扱えないのか?
関西学院大学
☹
英数字・カタカナのJISコード
Mastery for Service
A=0100
0001 ハ=CA
関西学院大学
コンピュータの基本構成
ーCOMETⅡー
CPU
制御装置
算術・論理
演算装置
入力装置
一次記憶装置
出力装置
二次記憶装置
関西学院大学
☹
COMETⅡ
ーCASLⅡ用のハード・ウエアー
ノイマン型架空コンピュータ : 国家試験用
*ノイマン型の実コンピュータの基本機能を有する
*2大基本方式
・プログラム内臓(記憶)方式
・逐次制御(実行)方式
仕様
*CPU
・16ビット(2バイト)マシーン=1ワード・マシーン
*主記憶装置
・記憶容量 65536語(64K語) 0000~FFFF
*HDはなし
関西学院大学
☹
プログラムの入力練習
(テキストp.3)
1.スタート → すべてのプログラム
→ 合格CASLⅡ → 編集モード
2. [編集][無題]の画面の表示
・CASLⅡの編集画面 → 編集ウインド
3. I 型カーソルの点滅状態で、p.3の 図1.3 を入力
4.ファイルから、名前をつけて保存をクリック
5.[実行]をクリックし、[アセンブル]をクリック。エラー?
5. TRACE、REG、DUMPをこの順にクリック
6. [トレース ツールバー]のSTEPを順次クリックし、
レジスタとメモリーの数値の変化を観察する
関西学院大学
☹
CASLⅡで実行
-1+2+3+4+5=15-
REI1B START
LD
ADDA
ADDA
ADDA
ADDA
ST
RET
ANS
DS
A
DC
B
DC
C
DC
D
DC
E
DC
END
GR0, A
GR0, B
GR0, C
GR0, D
GR0, E
GR0, ANS
1
1
2
3
4
5
1.TRACE ウインドウで、
REGとDUMPをクリック
2.レジスタとメモリの領域を
モニターに表示
3.STEPのクリックを繰り返し、
命令を逐次実行
4.レジスタとメモリの値の
変化を確認
関西学院大学
☹
主記憶装置とアドレス(1)
ー記憶場所ー
1語16ビット
主記憶装置の記憶場所の指定
*絶対アドレス:1語(16ビット)毎の計算機内固有の番地
*相対アドレス:基準アドレスからの差で表された番地
絶対アドレス
0
1
2
3
・
・
n
・
・
・
65535
主記憶装置
0000
0001
0002
0003
・
・
000n
・
・
・
変位(指標レ
ジスタの値)
・
・
-2(FFFE)
-1(FFFF)
0(0000)
1(0001)
2(0002)
・
・
FFFF
関西学院大学
☹
主記憶装置の主機能
プログラムとデータは記憶装置に格納される
記憶装置のモデル
・
・
・
A+B→C
記憶装置のアド
レス(番地)
↓
記号アドレス
A
B
C
12
26
38
・
・
200
201
202 プログラムは記憶装置に格納
203
204
205
206 計算データも記憶装置に格納
207 演算結果も記憶装置に格納
208
209
絶対アドレス
関西学院大学
主記憶装置とアドレス(2)
ーアドレスの指定ー
実効アドレスとアドレス修飾
{
9: 000D 1100 0014
ST
GR0,ANS
00010001 0000 0000 0000000000010100
実効アドレス
GR0の内容をANSの場所=実効アドレス0014に格納する
LAD
GR1,1,GR1
{
10: 000F 1211 0001
00010010 0001 0001 0000000000000001
相対アドレス + 基準アドレス = 実効アドレス
LAD命令の特徴
GR1の値に相当する記憶場所(基準アドレス 0001)の値に相対アドレスの
値を加算(アドレス修飾)した値を実行アドレスとし、アドレスそのものをGR1
に格納する
GR1=カウンター
相対アドレス=インクリメント
関西学院大学
☹
CPUの基本構造と動作
主記憶装置
CPU
制御回路
① 番地の指定
制
御
部
プログラムカウンタ
② 命令フェッチ
命令レジスタ
アドレスレジスタ
解読
④ 番地の指定
インデクスレジスタ
演
算
部
演算レジスタA
⑤ データフェッチ
演算レジスタB
⑧ 結果の記憶
⑥ 演算 (実行)
演算器 (ALU)
⑦ 演算結果
・
・
・
・
・
番地
N
命令 (語)
N+1
命令 (語)
N+2
命令 (語)
・
・
・
・
・
・
・
N+3
データ
N+α
データ
N+β
データ
N+γ
データ
N+δ
関西学院大学
CPUの基本操作
プログラムカウンタ
4DA8
①番地指定
命令レジスタ
②命令フェッチ 命令 1
2030A3FB
③解読
デコーダ
⑥演算
命令 2
④番地指定
データ 1
制御信号 FD42CA96
⑤データフェッチ
・
・
・
・
データ X
データ X+1
56D8
演算レジスタ
命令 3
⑦格納
・
・
・
・
関西学院大学
☹
レジスタ
ー制御装置用の小規模記憶装置ー
COMETⅡには4種類のレジスタ
1.プログラムレジスタ(PR)
16ビット
*実行中の命令語を格納している記憶場所の先頭アドレス
*命令実行後、 n ⇐ n + 1(1語長) or n + 2(2語長)
2.汎用レジスタ(GR(r、r1、r2)
*汎用レジスタ GR0~GR7
16ビット 演算用
*指標レジスタ GR1~GR7
16ビット アドレス修飾用
3.スタックポインタ(SP)
*スタックの最上段アドレスの保持 16ビット
4.フラグレジスタ(FR)
3ビット
*各1ビットのOF、SF、ZF の3個のビットで形成
関西学院大学
☹
レジスタの主機能
演算はレジスタで実行される
・
・
・
例:A+B=C
A+B→C
①
レ
ジ
ス
タ
26
12 ③
12+26
レジスタ GR1
②
A
B
C
12
26
38
④
・
・
演算は3ステップで実行
200
201
202
203
204
205
206
207
208
209
① A番地の値12をレジスタへ
LD GR1、A
②③B番地の値26をレジスタ
の内容に加える
ADD GR1、B
④ レジスタの内容38をC番地
に格納する
ST GR1、C
主記憶装置
関西学院大学
関西学院大学
関西学院大学