主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

Similar documents
main.dvi

Microsoft PowerPoint - ProcML-12-3.ppt

コンピュータ工学Ⅰ

CASL入門

PowerPoint プレゼンテーション

コンピュータ工学Ⅰ

CASL入門

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

CASL入門

スライド 1

改訂履歴 Ver 年 ( 平成 30 年 )5 月 25 日ページ変更点 1 試験問題に出題する Java の変更 (Third Edition から Java SE 8 Edition に変更 ) Ver 年 ( 平成 28 年 )10 月 21 日ページ変更点

計算機アーキテクチャ

ex04_2012.ppt

Microsoft PowerPoint ppt

アセンブラ入門(CASL II) 第3版

コンピュータの仕組み(1)ハードウェア

アセンブラとコンパイラ・インタプリタ

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

PowerPoint プレゼンテーション

ex05_2012.pptx

Microsoft PowerPoint - 11Web.pptx

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

スライド 1

プログラミング実習I

スライド 1

PowerPoint プレゼンテーション

ソフトウェア基礎技術研修

スライド 1

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

PowerPoint プレゼンテーション

プログラマから見えるCPU 一番下のレベルでコンピュータ上のプログラムがど のように表現されているかを理解する プログラムがどう表現されているか プログラムはコンピュータのメモリ上に載っている コンピュータのメモリには数字しか格納できない したがってプログラムは数字である どう表現されているのか 数

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

Microsoft PowerPoint - 7.Arithmetic.ppt

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

UNIX 初級講習会 (第一日目)

kantan_C_1_iro3.indd

PowerPoint Presentation

ポインタ変数

PowerPoint プレゼンテーション

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint ppt

Microsoft PowerPoint - kougi7.ppt

プログラミング基礎

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint ppt

ソフトウェア基礎技術研修

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

PowerPoint プレゼンテーション

スライド 1

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

ポインタ変数

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

Microsoft PowerPoint - No3.ppt

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

PowerPoint プレゼンテーション

本日の範囲 ファイルとその中身 コンピュータにおける情報の表現 ファイルとフォルダ コンピュータの仕組み 通信 ネットワーク, インターネット 情報の符号化, その限界 コマンドライン プログラムの仕組み 通信の符号化, その限界 暗号 簡単なプログラムの作成 実行 Excel で計算 データの可視

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

模擬試験問題(第1章~第3章)

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft Word - VBA基礎(6).docx

PowerPoint プレゼンテーション

JavaScriptで プログラミング

Microsoft PowerPoint - OS07.pptx

PowerPoint プレゼンテーション

Report#2.docx

Microsoft Word - マイコン実験 doc

Microsoft Word - 3new.doc

Prog1_2nd

Microsoft PowerPoint - 03BNFScanner.ppt [互換モード]

PowerPoint Presentation

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - No6note.ppt

JavaプログラミングⅠ

Prog1_10th

Microsoft Word - no103.docx

PowerPoint Presentation

Microsoft PowerPoint - CproNt02.ppt [互換モード]

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

プログラミングI第5回

CASL II revision revision02 Copyright c Daikoku Manabu This tutorial is licensed under a Creative Commons Attribution

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

プレポスト【解説】

Taro-Basicの基礎・はじめに(公

Microsoft Word - 実験4_FPGA実験2_2015

メソッドのまとめ

スライド 1

ガイダンス 2

VelilogHDL 回路を「言語」で記述する

MASM32 基本

JavaプログラミングⅠ

< B8CDD8AB B83685D>

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

PowerPoint プレゼンテーション

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

Microsoft PowerPoint - prog04.ppt

Transcription:

Copyright 守屋悦朗 2005 コンピュータの仕組み (2) ソフトウェア 3.3 アセンブラプログラミング (CASLⅡ) 情報処理技術者試験基本情報技術者試験 (http://www.jitec.jp/index.html) では 仮想コンピュータ (16ビットのワードマシン 主記憶容量 64KW)COMETⅡを定義し COMETⅡ のためのアセンブリ言語 CASLⅡを定めている COMETⅡとCASLⅡの仕様は情報処理技術者試験センターのウェブサイト http://www.jitec.jp/1_13download/hani01.pdf で公開されている ここでは このアセンブリ言語によるプログラミングを通して コンピュータの仕組みを理解する COMETⅡ のハードウェア構成 16 ビットワードマシン 演算装置 + 制御装置 アドレス 0000 16 ビット 16 ビット GR0 入力装置 0001 汎用レジスタ群 GR1 主記憶装置 64KW スタックポインタ 16 ビット 出力装置 GR7 SP プログラムレジスタ PR FFFF フラグレジスタ (FR) OF SF ZF =2 16-1 =65535 各 1 ビット

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決められる 定数 変数用領域 空き領域 汎用レジスタ (general-purpose register) COMETⅡでは 以下に述べる機械語命令が使える演算 ( 加減算 論理演算 比較演算など ) しか実行することができない 演算は汎用レジスタ (GR0~GR7) を使って行われる 0 番レジスタ (GR0) 以外のレジスタは インデックスレジスタとしても使うことができる フラグレジスタ (flag register) 機械語命令 ( 演算 ) の実行結果によって フラグレジスタの 3 ビットが以下のように設定 される

OF Overflow Flag 算術演算命令の実行結果が-32768(=-2 15 )~+32767(=2 15-1) に収まらなくなったとき1 それ以外のとき0 論理演算命令の実行結果が0~65535(=2 16-1) に収まらなくなったとき1 それ以外のとき0 SF Sign Flag 演算結果の符号が負 (2 15 位のビットが1) のとき1 それ以外のとき0 ZF Zero Flag 演算結果が0( 全ビットが0) のとき1 それ以外のとき0 プログラムレジスタ (program register) プログラムレジスタは 2.1 CPUの基本原理 のところで述べたアドレスレジスタと同じものである プログラムレジスタはCOMETⅡの制御部にあり 次に実行すべき機械語命令が格納されているアドレス ( 命令語の先頭番地 ) が入る スタックポインタ (stack pointer) スタック領域は サブルーティンからの戻り番地等を格納するための領域である スタックポインタは そのスタック領域の最上位のアドレスを保持している ( その値は プログラム起動時にOSによって決められる ) これについては 後述する COMETⅡ CASLⅡ で扱える数 COMETⅡ CASLⅡ で扱える数は整数 (16 ビット固定小数点数 ) だけである 符号ビット 15 ビット 先頭の 1 ビット (2 15 の位 ) は符号ビット (sign bit) として用いられる 符号ビットが 0 のときは正の整数を 1 のときは負の整数を表す 正の数の場合 残りの 15 ビットがその値の 2 進数表現である 例えば (0 000000000000101) 2 = (5) 10 (0 111111111111111) 2 = (32767) 10 = 2 15-1 負の数は 2 の補数で表される 例えば (1 111111111111111) 2 = (-1) 10

(1 111111111111011) 2 = (-5) 10 (1 000000000000000) 2 = (-32768) 10 = -2 15 よって 扱える数の範囲は -2 15 = -32768 ~ +32767 = 2 15-1 である ( 問 ) 次の数の COMETⅡ での内部表現を求めよ 1 123 2-123 3 0 COMETⅡの機械語 COMETⅡの機械語の詳細は定義されていないが 機械語命令は1 語または2 語を使って次のようにメモリ内で表される : 1 2 命令コード 汎用レジスタの番号 汎用 / インデックスレジスタの番号 8 ビット ( 第 1 語の上半語 ) 8 ビット ( 第 1 語の下半語 ) または 1 2 3 命令コード 汎用レジスタの番号 汎用 / インデックスレジスタの番号 命令の対象となるアドレス 8 ビット ( 第 1 語の上半語 ) 8 ビット ( 第 1 語の下半語 ) 16 ビット ( 第 2 語 ) 1の 命令コード はその命令の名前を 2 進数で表したものであり 3の アドレス部 にはその命令の操作対象となるデータが入っている主記憶装置のアドレスが入れられる 2の 修飾部 には 汎用レジスタの番号あるいはインデックスレジスタの番号が入る ( レジスタ (register) とは 演算に使われる少数個の高速メモリのこと ) 各命令語の構成については 上記ウェブサイトに公開されている PDF ファイル ( ファイル名 hani01.pdf) の p.30 を見よ 例えば ロード (load) 命令 LD は CASL Ⅱでは LD r,adr,x (*1) という形で書く LD は命令の名前 ( ニモニック (mnemonic) という ) である LD 命令の命令コードは 16 進数の 10(2 進数の 00010000) である rは汎用レジスタ GR0~GR7 のどれか ( 機械語内では 2 進数 0000~0111 で表す )

adr は主記憶装置内のアドレスを1 語で表す x はインデックスレジスタ (GR1~GR7 のどれか ) の番号 例えば LD GR3, ABC, GR5 (*2) という命令は ( 記号番地 ABC)+(GR5 の現在値 ) で与えられるアドレスに格納されている1 語分のデータを GR3 にロードせよ ということを表すが 例えば 記号番地 ABC のアドレスが 16 進数で 089A だとすると その機械語表現は 0001 0000 0011 0101 0000 1000 1001 1010 (*3) となる 記号番地 (symbolic address 記号名とか ラベルともいう) とは 主記憶装置内の特定のアドレスを記号で表したもののことである CASL Ⅱでは 記号番地 ( ラベル ) として 先頭が大文字の英字 2 文字目以降が英大文字または数字であるような 長さが 1~8 文字の記号列 が使われる ただし 予約語 (reserved word) である GR0~GR7 は使えない ( 問 ) 次の命令を 2 進数で表せ 記号番地 PQR の値は A098 であるとする : 1 ADDA GR3,PQR,GR0 2 AND GR3,GR4 3 JZE GR6,PQR 1 において GR3, ABC, GR5 それぞれをこの LD 命令のオペランド (operand) という (*1) において第 3 オペランド ( インデックスレジスタの指定 ) が無い場合 すなわち (*2) が LD GR3,ABC (*4) という形の場合 この命令は ( 記号番地 ABC)+(GR5 の現在値 ) で与えられるアドレスに格納されている1 語分のデータを GR3 にロードせよ ということを表す (*2) のように第 3オペランドが指定されていて +(GR5 の現在値 ) がある場合 +(GR5 の現在値 ) を行うことをインデックス修飾 (index modification) という (*4) のようにインデックス修飾がない場合 (*3) のインデックスレジスタ部は 0となり (*3) は 00010000 0011 0000 0000100010011010 (*5)

となる 上記は 2 語命令の例であるが 同じロード命令でも LD r1,r2 (*6) は 1 語で表される命令 (1 語長命令 ) で 例えば LD GR3,GR5 (*7) は レジスタ GR5 に格納されている1 語分のデータをレジスタ GR3 にロードせよ ということを意味し そのコンピュータ内部での表現は 00010100 0011 0101 (*8) である ( 命令コードが違うことに注意せよ ) 以上のことを http://www.jitec.jp/1_13download/hani01.pdf のpp.24~26, p.30では次のように表している : 第 1 語第 2 語命令 OP r/r1 x/r2 Adr 語長 機械語命令 意味 00 - - - 1 NOP 何もしない 10 2 LD r,adr[,x] r ( 実効アドレス ) 11 2 ST r,adr[,x] 実効アドレス (r) 12 2 LAD r,adr[,x] r 実効アドレス 14 1 LD r1,r2 r1 (r1) 20 2 ADDR r,adr[,x] r r+( 実効アドレス ) ( 以下略 ) r, r1, r2 は汎用レジスタ GR0~GR7 のいずれか adr はアドレス ( 記号番地 ) x はインデックスレジスタ GR1~GR7 のいずれか [ ] 内の指定は省略できる ( ) は ( ) 内のレジスタまたはアドレスに格納されている内容を表す 実効アドレスとは adr と x の内容の論理加算値またはその値が示す番地のこと は 演算結果を 左辺のレジスタまたはアドレスに格納することを表す COMETⅡ のアセンブラ言語 CASLⅡ COMETⅡ 用のアセンブラ言語である CASLⅡ の仕様は上記ウェブサイトに公開されている ( 詳細はそちらを見ること ) CASLⅡ には以下のような命令がある

機械語命令(28 種類 ) ロード ストア命令 LD, ST, LAD 算術 論理演算命令 ADDA, ADDL, SUBA, SUBL, AND, OR, XOR 比較演算命令 CPA, CPL 分岐命令 JPL, JMI, JNZ, JZE, JOV, JUMP スタック操作命令 PUSH, POP コール リターン命令 CALL, RET その他 SVC, NOP アセンブラ命令(4 種類 ) START, END, DS, DC マクロ命令(4 種類 ) IN, OUT, RPUSH, RPOP アセンブリ言語 (assembly language, アセンブラ語とかアセンブラ言語ともいう ) とは 単なる0,1の列である機械語を より人間に分かりやすく書けるようにしたものである 機械語命令は 機械語と1 対 1に対応し 命令コードの代わりに記号名 ( ニモニック ) で表す アセンブラ命令は アセンブラ (assembler, アセンブリ言語で書かれたプログラムを機械語に翻訳するプログラム ) へ指令を与える命令であり CASL Ⅱでは START ( プログラムの始まりを示す ) END ( プログラムの終わりを示す ) DS ( 領域を割り当てる ) DC ( 定数を作り出す ) の4つがある マクロ命令は あらかじめ定義された一連の命令群とオペランド ( その命令群へ渡すデータのこと ) の値によって 一定の機能を果たす擬似的な命令 ( マクロ (macro) という ) を生成する 言い換えれば ユーザが擬似的な複合命令を作るために用意されているのがマクロ命令である ただし CASL Ⅱのマクロ命令はきわめて簡単なマクロしか定義できない 例えば 入出力を行なう命令群を生成する INやOUTはそれぞれマクロ命令である

命令行の書き方 CASLⅡのプログラムは 命令行と注釈行とから成る 1つの命令は1 行で (2 行にまたがってはいけない ) 次の形式で行の先頭から書かなければならない : オペランドがある命令の場合 [ ラベル ] 空白命令コード空白オペランド [ 空白 ; コメント ] オペランドがない命令の場合 [ ラベル ] 空白命令コード [ 空白 ; コメント ] 注釈だけの場合 [ 空白 ] ; コメント オペランド (operand) とは 命令の操作対象となるもののことである ラベルは 先頭が大文字の英字 2 文字目以降が英大文字または数字であるような 長さが1~8 文字の記号列 でなければならない [ ] 内は省略できる ラベル 命令コード オペランド 注釈の区切りを表すためには空白 (1 文字以上の間隔 ) を入れなければならない 注釈の前には ; を付けなければならない CASLⅡのプログラム 1. プログラムはSTART 命令で始まり END 命令で終わらなければならない 2. START 命令から実行が開始され 1 行に1つずつ書かれた命令が順次実行される ただし 分岐命令 コール リターン命令 SVC 命令を実行すると指定された行あるいはOSへ実行の制御が移る 3. RET 命令が実行されるとプログラムの制御はOSまたは呼び出しルーチンへ戻る ( すなわち そのルーチンの実行が終了する ) 4. END 命令はプログラムの末尾を示すだけで 実行には無関係 5. 注釈行は任意の位置に書いてもよい ( プログラムの実行に影響しない ) ( プログラム例 ) 以下において α を記号番地あるいはレジスタとするとき (α) によっ て α の内容を表す

ラベル欄 命令コード欄 オペランド欄 (; 以降は注釈 ) EXMPL START ; EXMPLはこのプログラムの入口アドレスとなる ; この行は注釈行である LD GR1,A ; GR1に (A) をロードする LD GR2,A ; GR2にも (A) をロードする SUBA GR1,B ; GR1から (B) を減算する ; 演算の結果 (GR1)=(A)-(B) となる JPL DONE ; (A)>(B) ならDONEへジャンプする LD GR2,B ; (A) (B) のとき (GR1)=(B) となる DONE ST RET GR2,MAX ; (A),(B) の大きい方がMAXへ格納される ; 呼び出しプログラムへ戻る A DC 123 ; 定数 123を定義し Aと名づける B DC 45 ; 定数 45を定義し Aと名づける MAX DS END 1 ; 1 語の領域を確保し MAXと名付ける 上の例のように ラベル欄 命令コード欄 オペランド欄それぞれの先頭を揃える必要は必ずしもない ( 空白が1つ以上あるだけでよい ) が 揃えた方が分かりやすい 注釈は ; で始まりさえすれば どこに書いてもよい 普通は 上例のように枠など付けずに 次のように書く EXMPL START ; EXMPLはこのプログラムの入口アドレスとなる ; この行は注釈行である LD GR1,A ; GR1に (A) をロードする LD GR2,A ; GR2にも (A) をロードする SUBA GR1,B ; GR1から (B) を減算する ; 演算の結果 (GR1)=(A)-(B) となる JPL DONE ; (A)>(B) ならDONEへジャンプする LD GR2,B ; (A) (B) のとき (GR2)=(B) となる DONE ST GR2,MAX ; (A),(B) の大きい方がMAXへ格納される RET ; 呼び出しプログラムへ戻る A DC 123 ; 定数 123を定義し Aと名づける B DC 45 ; 定数 45を定義し Bと名づける MAX DS 1 ; 1 語の領域を確保し MAXと名付ける END

参考書 : 八鍬幸信 平成 14 年度版らくらく突破 CASLⅡ 技術評論者 2002. 金山裕 アセンブラプログラミング入門 近代科学社 1977. ( 古い本だけど アセンブラの原理は同じ この本はIBM System/370 用のアセンブラの解説書であり CASLⅡのアセンブラと命令体系はよく似ている ) 参考ウェブサイト : 情報処理技術者試験センター http://www.jitec.jp/1_13download/hani01.pdf ソフトウェア開発技術者午後対策とセキュリティアドミストレータ試験対策 http://dir.yahoo.co.jp/education/educational_standards_and_testing/computers _and_internet/johoshori/