Microsoft Word - QtSimulator-H28A.docx

Size: px
Start display at page:

Download "Microsoft Word - QtSimulator-H28A.docx"

Transcription

1 QtSpim とは? QtSpim MIPS Simulator 2016 年度計算機アーキテクチャ概論 ( 青野雅樹 ) ウィスコンシン大学で作られた MIPS シミュレータを Qt 1 で拡張したもの 本資料で扱う MIPS アセンブラは にあります 後の演習のために拡張子が.s のものを全部ダウンロード 上に示したサーバ上にも Windows 版の QtSpim(Qt という GUI を用いた MIPS のシミュレータプログラム ) がありますが 情報メディア基盤センターの端末室の Windows 内にも QtSpim という名前のプログラムがすでにインストールされていると思います QtSpim.exe からシミュレータを起動してください 起動すると以下のようなウィンドウが表示されます 1 フィンランドのノキア社が開発し 同じフィンランドにあるソフトウェア会社のディジア社がノキアから買収したツールで C++ 言語で書かれている 1

2 ファイルオープン 一方 このあから ここで実行するアセンブラプログラム例をまとめて適当なフォルダにダウンロードしておいてください その中で まず最初に add.s( 足し算 ) アセンブラをロードしてください add.s を選択 次に 以下のように ワンステップずつ実行するボタンをクリックしていってください 2

3 ワンステップ実行 subu 命令は addiu 命令に変換される move 命令は addu 命令 (R 形式 ) に変換される la 命令 (load address) は lui+ori 命令に変換され li 命令は ori 命令に変換される 以下の行がちょうど 本当に行いたい足し算命令の実行になります しばらく続けると Console( コンソール ) に 答えは 30 と表示されるはずです 3

4 最後は [ ] の (Exit) で終了するはずです MIPS アーキテクチャの概要データ型 / サイズ MIPS シミュレータでは 整数型 (int 型 ) float 型 文字型が用意されています データの保持単位はバイト 半語 ( ハーフワード ) 語( ワード ) サイズが用意されています 浮動小数点に関しては 1 語 ( ワード )32 ビットの IEEE 浮動小数点と2 語 ( ダブルワード )64 ビットの IEEE 浮動小数点が用意されています 文字データは1バイトで 文字列は連続するバイト文字で表現されます 以下が MIPS のメモリサイズをまとめたものです Name byte halfword word float double Size 8-bit 整数 16-bit 整数 32-bit 整数 32-bit 浮動小数点 64-bit 浮動小数点 MIPS でのメモリへのデータ保持は リトルエンディアンで表現されます つまり LSB(Least Significant Bit) は最小メモリ位置に保持されます 逆に MSB (Most Significant Bit) はメモリの最上位置に保持されます MSB LSB たとえば 以下のアセンブラコードがある場合 num1:.word 42 num2:.word 進数では 0x A となり 5,000,00010 は 0x004C4B40 で表現されます 4

5 MIPS のメモリ MIPS でのメモリは 以下のように論理的に分かれています high memory stack low memory heap uninitialized data data text (code) reserved CPU レジスタ MIPS での CPU レジスタは以下のように割り当てられます 参照する場合 先頭に $ がついていることに注意してください これらは汎用レジスタと呼ばれることがあります Register Name Register Number Register Usage $zero $0 ハードウェアでゼロ値 $at $1 ( 通常未使用 ) $v0 - $v1 $2 - $3 関数の結果保持 ( 低 / 高 ) $a0 - $a3 $4 - $7 関数の引数レジスタ群 $t0 - $t7 $8 - $15 テンポラリレジスタ $s0 - $s7 $16 - $23 テンポラリレジスタ $t8 - $t9 $24 - $25 テンポラリレジスタ $k0 - $k1 $26 - $27 OS で予約 ( ユーザ不可 ) $gp $28 グローバルポインタ $sp $29 スタックポインタ $fp $30 フレームポインタ $ra $31 戻りアドレス 5

6 その他の主なレジスタ Register Name $pc $status $cause $hi $lo Register Usage プログラムカウンタ状態レジスタ例外要因レジスタ乗算 / 除算レジスタ QtSpim のシステムサービス Service Name Call Code Input 整数 (32-bit) 1 $a0 integer to be printed Float 実数 (32-bit) 2 $f12 32-bit floating-point value to be printed Double 実数 (64-bit) 3 $f12 64-bit floating-point value to be printed 文字列 4 $a0 starting address of NULL terminated string to be printed Output 整数読込 (32-bit) 5 $v0 32-bit integer entered by user 実数読込 (32-bit) 6 $f0 32-bit floatingpoint value entered by user 実数読込 (64- bit) 7 $f0 64-bit floatingpoint value entered by user 文字列読込 8 $a0 starting address of buffer (of where to store character entered by user) $a1 length of buffer メモリ割当 9 $a0 number of bytes to allocate 終了 (exit) 10 $v0 starting address of allocated memory 6

7 MIPS の 2 つのメインプロセッサ ( 整数演算プロセッサと浮動小数点プロセッサ ) MIPS Chip Core Configuration CPU FPU 整数演算 $0 - $31 実数演算 $f0 - $f31 FPU ( 浮動小数点装置 ) は FPU コプロセッサと呼ばれることがあります ここにも $f0 から $f31 までの 32 個のレジスタがあります IEEE bit (float 型 ) 浮動小数点形式 s 指数部仮数部 IEEE bit (double 型 ) 浮動小数点は以下のように表現されます s 指数部仮数部 指数部には 11 ビットのバイアスがあり 32 ビットで 127 のゲタを加えたように 64 ビットでは 1023 のゲタを加えます 7

8 具体的なアセンブラ例 (1) 足し算 ( レジスタ + レジスタ メモリ ) # # add.s 足し算 #.text # テキスト領域開始.align 2.globl main main: subu $sp, $sp, 8 # スタックを確保 (8 バイト ) sw $ra, 0($sp) # $ra レジスタ退避 ( 戻り番地保持 ) sw $zero, 4($sp) # 結果保持用メモリ (4 バイト ) move $t1, $zero # $t1 レジスタを 0 で初期化 move $t2, $zero # $t2 レジスタを 0 で初期化 addiu $t1, $t1, 10 # $t1 レジスタを 10 増加 addiu $t2, $t2, 20 # $t1 レジスタを 20 増加 addu $t3, $t1, $t2 # $t3 = $t1 + $t2 sw $t3, 4($sp) # $t3 レジスタ結果をメモリ書込み la $a0, str # 文字列をセット li $v0, 4 # 文字列端末書き出しセット # システムコール li $v0, 1 # 整数書き出しセット lw $a0, 4($sp) # 整数値をロード # システムコール lw $ra, 0($sp) # 戻り番地復帰 addu $sp, $sp, 8 # スタックを戻す jr $ra # 戻り番地にジャンプ # データ領域.data.align 0 str:.asciiz " 答えは " このファイルを からダウンロードしてください (2) 引き算 (A( メモリ ) B( メモリ ) C( メモリ )) ( 課題 ) メモリ ( データ領域 )A 番地と B 番地に適当な数値があるとき メモリ領域のC 番地に A-B の引き算結果をセーブし その値をプリントする MIPS アセンブラを作成し 実行せよ 8

9 (3) 二乗和の計算 ( メモリに初期値を入れ二乗和を行うと仮定 ) # Array: A[i]=i (i=1,..,10) # File: array.s # Do: Result = Sum(A[i]*A[i])/10 for i = 1,...,10 # ========================================================.text.align 2.globl main main: sw $ra, 0($sp) # $ra レジスタを退避 ( 戻り番地保持 ) # レジスタ $s0 (A のアドレス ), $s1(a のインデックス ) la $s0, A # $s0 に A のアドレスをロード li $s1, 0 # $s1 に A のインデックスを初期化 # レジスタ $s2 (A のアドレス最後尾のオフセット ), $t2 に結果を保持 li $s2, 10 # $s2 にデータ数 40 をロードしておく li $t2, 0 # $t2 に値 0 をロードしておく Loop: # レジスタ $t0 は二乗和と条件分岐で使用 lw $t0, 0($s0) # $t0 に $s0 のアドレスにある A の配列中身をロード mul $t1, $t0, $t0 # $t1 = $t0 * $t0( 二乗和 ) addu $t2, $t1, $t2 # $t2 = $t1 + $t2( 積和 ) slt $t0, $s1, $s2 # if ($s1 < $s2) $t0 = 1 else $t0 = 0 addiu $s0, $s0, 4 # $s0 = $s0 + 4( アドレスを4バイト進める ) addiu $s1, $s1, 1 # $s1 = $s1 + 1( インデックスをインクリメント ) bne $t0, $zero, Loop # if ($t0!= $zero) goto Loop # $t0 == 0 の場合 印刷処理 la $a0, str # 文字列をセット li $v0, 4 # 文字列端末書き出しセット # システムコール li $v0, 1 # $t2 内の整数値の書き出しセット move $a0, $t2 # システムコール ( 実際に書き出す ) # 戻る準備 lw $ra, 0($sp) # $sp からのアドレスにあるデータをロード jr $ra # 戻り番地にジャンプ # データ領域.data.align 0 str:.asciiz "1*1+2* *10=".align 2 A: 9

10 .word 1,2,3,4,5,6,7,8,9,10 # 配列 A[10] の領域を確保なお このアセンブラを QtSpim シミュレータにロードすると 擬似アセンブラは実際に MIPS にあるアセンブラに変換されて以下のようなテキスト領域内の命令に変換されます User Text Segment [ ]..[ ] [ ] 8fa40000 lw $4, 0($29) ; 183: lw $a0 0($sp) # argc [ ] 27a50004 addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv [ ] 24a60004 addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp [ c] sll $2, $4, 2 ; 186: sll $v0 $a0 2 [ ] 00c23021 addu $6, $6, $2 ; 187: addu $a2 $a2 $v0 [ ] 0c jal 0x [main] ; 188: jal main [ ] nop ; 189: nop [ c] a ori $2, $0, 10 ; 191: li $v0 10 [ ] c ; 192: # 10 (exit) [ ] afbf0000 sw $31, 0($29) ; 11: sw $ra, 0($sp) # $ra レジスタを退避 ( 戻り番地保持 ) [ ] 3c lui $1, 4097 [A] ; 13: la $s0, A # $s0 に A のアドレスをロード [ c] ori $16, $1, 20 [A] [ ] ori $17, $0, 0 ; 14: li $s1, 0 # $s1 に A のインデックスを初期化 [ ] a ori $18, $0, 10 ; 16: li $s2, 10 # $s2 にデータ数 40 をロードしておく [ ] 340a0000 ori $10, $0, 0 ; 17: li $t2, 0 # $t2 に値 0 をロードしておく [ c] 8e lw $8, 0($16) ; 20: lw $t0, 0($s0) # $t0 に $s0 のアドレスにある A の配列中 をロード [ ] mul $9, $8, $8 ; 21: mul $t1, $t0, $t0 # $t1 = $t0 * $t0( 乗和 ) [ ] 012a5021 addu $10, $9, $10 ; 22: addu $t2, $t1, $t2 # $t2 = $t1 + $t2( 積和 ) [ ] a slt $8, $17, $18 ; 24: slt $t0, $s1, $s2 # if ($s1 [ c] addiu $16, $16, 4; 25: addiu $s0, $s0, 4 # $s0 = $s0 + 4( アドレス4バイト進める ) [ ] addiu $17, $17, 1 ; 26: addiu $s1, $s1, 1 # $s1 = $s1 + 1( インデックスをインクリメント ) [ ] 1500fffa bne $8, $0, -24 [Loop-0x ] [ ] 3c lui $1, 4097 [str] ; 29: la $a0, str # 字列をセット [ c] ori $4, $1, 0 [str] la 命令は lui 命令と ori 命令に分解される Loop ラベルはアセン ブラによりオフセッ ト値に変換される [ ] ori $2, $0, 4 ; 30: li $v0, 4 # 字列端末書き出しセット [ ] c ; 31: # システムコール [ ] ori $2, $0, 1 ; 33: li $v0, 1 # $t2 内の整数値の書き出しセット [ c] 000a2021 addu $4, $0, $10 ; 34: move $a0, $t2 [ ] c ; 35: # システムコール ( 実際に書き出す ) [ ] 8fbf0000 lw $31, 0($29) ; 37: lw $ra, 0($sp) # $sp からのアドレスにあるデータをロード 10

11 [ ] 03e00008 jr $31 ; 38: jr $ra # 戻り番地にジャンプ (4) メモリのデータ Swap 実現例 ( 課題 ) メモリ番地 A にあるデータと B にあるデータの中身と交換する MIPS アセンブラを作成せよ ただし 他のメモリは使わないとし できるだけ少ないレジスタで実現することとする また Swap が正しく実現できたことを示すコンソールへの出力も示すこと (5) スタックを使ったサブルーチン実現例 ( その 1) コンピュータで 関数 ( 手続き サブルーチン ) を実現するには どのようなアーキテクチ ャがあればいいでしょうか? その答えを知るには 関数を呼び出すとき # Factorial: f(n) = n! = n * f(n-1) # File: factorial.s # Author: Masaki Aono # ======================================================.text # this is program code.align 2 # instructions must be on word boundaries.globl main # main is a global label main: subu $sp, $sp, 8 # スタックに 8 バイト (2ワード) 確保する sw $ra, 4($sp) # 戻りアドレスをスタックの第二ワード部分に退避 li $a0, 10 # 引数 10 を $a0 に代入 ($a0 = 10) jal fact # 階乗関数を呼び出す la $a0, str1 # フォーマットの文字列のアドレスを $a0 に move $s1, $v0 # fact の結果を $s1 に収める li $v0, 4 # print_str のシステムコール li $v0, 1 # print_int のシステムコール move $a0, $s1 # fact の結果を書き出す la $a0, str2 # フォーマットの文字列のアドレスを $a0 に li $v0, 4 # print_str のシステムコール lw $ra, 4($sp) # 戻りアドレスを設定 addu $sp, $sp, 8 # スタック フレームをポップ jr $ra # サブルーチンから呼び出し側に戻る.data str1:.asciiz "10 の階乗は " str2:.asciiz " です n" 11

12 fact:.text # テキスト領域にサブルーチンをとる # 階乗関数のスタート subu $sp, $sp, 8 # スタック フレームは 32 バイト長 sw $ra, 4($sp) # 戻りアドレスを退避 sw $a0, 0($sp) # 第一引数 (n) を退避 lw $v0, 0($sp) # n をロードする bgtz $v0, Case2 # n>0 の場合に分岐 li $v0, 1 # 1 を返す ( 結果は $v0 に置く ) j Case1 # 戻り処理 Case1 にジャンプ Case2: lw $v1, 0($sp) # n をロードする subu $v0, $v1, 1 # n-1 を計算 move $a0, $v0 # 値を $a0 に収める jal fact # 階乗関数を呼び出す lw $v1, 0($sp) # n をロードする mul $v0, $v0, $v1 # fact(n-1)*n を計算 Case1: lw $ra, 4($sp) # 戻りアドレスを復元 addu $sp, $sp, 8 # スタックポインタをポップし戻す jr $ra # 呼び出し元へジャンプ C 言語で書くと 以下のようなコードとなる int fact(int n) { if (n > 0) return (n*fact(n-1)); else return(1); } ここでの一番の問題は 再帰的な関数 (fact(int n) の中で fact(n-1) を呼ぶ ) User Text Segment [ ]..[ ] [ ] 8fa40000 lw $4, 0($29) ; 183: lw $a0 0($sp) # argc [ ] 27a50004 addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv [ ] 24a60004 addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp [ c] sll $2, $4, 2 ; 186: sll $v0 $a0 2 [ ] 00c23021 addu $6, $6, $2 ; 187: addu $a2 $a2 $v0 12

13 [ ] 0c jal 0x [main] ; 188: jal main [ ] nop ; 189: nop [ c] a ori $2, $0, 10 ; 191: li $v0 10 [ ] c ; 192: # 10 (exit) [ ] 27bdfff8 addiu $29, $29, -8 ; 11: subu $sp, $sp, 8 # スタックに 8 バイト (2ワード) 確保する [ ] afbf0004 sw $31, 4($29) ; 12: sw $ra, 4($sp) # 戻りアドレスを退避 [ c] a ori $4, $0, 10 ; 14: li $a0, 10 # 引数 10 を $a0 に代 ($a0 = 10) [ ] 0c10001c jal 0x [fact] ; 15: jal fact # 階乗関数を呼び出す [ ] 3c lui $1, 4097 [str1] ; 17: la $a0, str1 # フォーマットの 字列のアドレスを $a0 に [ ] ori $4, $1, 0 [str1] [ c] addu $17, $0, $2 ; 18: move $s1, $v0 # fact の結果を $s1 に収める [ ] ori $2, $0, 4 ; 19: li $v0, 4 # print_str のシステムコール [ ] c ; 20: [ ] ori $2, $0, 1 ; 22: li $v0, 1 # print_int のシステムコール [ c] addu $4, $0, $17 ; 23: move $a0, $s1 # fact の結果を書き出す [ ] c ; 24: [ ] 3c lui $1, 4097 [str2] ; 26: la $a0, str2 # フォーマットの 字列のアドレスを $a0 に [ ] f ori $4, $1, 15 [str2] [ c] ori $2, $0, 4 ; 27: li $v0, 4 # print_str のシステムコール [ ] c ; 28: [ ] 8fbf0004 lw $31, 4($29) ; 30: lw $ra, 4($sp) # 戻りアドレスを設定 [ ] 27bd0008 addiu $29, $29, 8 ; 31: addu $sp, $sp, 8 # スタック フレームをポップ [ c] 03e00008 jr $31 ; 32: jr $ra # サブルーチンから呼び出し側に戻る [ ] 27bdfff8 addiu $29, $29, -8 ; 40: subu $sp, $sp, 8 # スタック フレームは 32 バイト [ ] afbf0004 sw $31, 4($29) ; 41: sw $ra, 4($sp) # 戻りアドレスを退避 [ ] afa40000 sw $4, 0($29) ; 42: sw $a0, 0($sp) # 引数 (n) を退避 [ c] 8fa20000 lw $2, 0($29) ; 44: lw $v0, 0($sp) # n をロードする [ ] 1c bgtz $2 12 [Case2-0x ]; 45: bgtz $v0, Case2 # n>0 の場合に分岐 [ ] ori $2, $0, 1 ; 46: li $v0, 1 # 1 を返す [ ] j 0x004000a4 [Case1] ; 47: j Case1 # 戻り処理にジャンプ [ c] 8fa30000 lw $3, 0($29) ; 50: lw $v1, 0($sp) # n をロードする [ ] 2462ffff addiu $2, $3, -1 ; 51: subu $v0, $v1, 1 # n-1 を計算 [ ] addu $4, $0, $2 ; 52: move $a0, $v0 # 値を $a0 に収める [ ] 0c10001c jal 0x [fact] ; 53: jal fact # 階乗関数を呼び出す [ c] 8fa30000 lw $3, 0($29) [004000a0] mul $2, $2, $3 ; 55: lw $v1, 0($sp) # n をロードする ; 56: mul $v0, $v0, $v1 # fact(n-1)*n を計算 13

14 [004000a4] 8fbf0004 lw $31, 4($29) [004000a8] 27bd0008 addiu $29, $29, 8 [004000ac] 03e00008 jr $31 ; 59: lw $ra, 4($sp) # 戻りアドレスを復元 ; 60: addu $sp, $sp, 8 # スタック フレームをポップ ; 61: jr $ra # 呼び出し元へジャンプ レジスタ群は QtSpim の Int Regs [16] タブから 以下のようである なお これは 実 が [ ] の jal 命令の直前まで進 した時点でのレジスタを表す (PC の値が より わかる PC = ( プログラム カウンタ ) EPC = 0 Cause = 0 BadVAddr = 0 Status = 3000ff10 HI = 0 LO = 0 R0 [r0] = 0 R1 [at] = 0 R2 [v0] = 4 ( 関数の戻り値を れるレジスタ ) R3 [v1] = 0 R4 [a0] = a ( 関数の第 1 引数を れるレジスタ :16 進数で a で 10 進数で 10 が ってる ) R5 [a1] = 7ffff134 R6 [a2] = 7ffff13c R7 [a3] = 0 R8 [t0] = 0 R9 [t1] = 0 R10 [t2] = 0 R11 [t3] = 0 R12 [t4] = 0 R13 [t5] = 0 R14 [t6] = 0 R15 [t7] = 0 R16 [s0] = 0 R17 [s1] = 0 R18 [s2] = 0 R19 [s3] = 0 R20 [s4] = 0 R21 [s5] = 0 R22 [s6] = 0 R23 [s7] = 0 R24 [t8] = 0 10の階乗計算の結果はコンソールに表 される R25 [t9] = 0 14

15 R26 [k0] = 0 R27 [k1] = 0 R28 [gp] = R29 [sp] = 7ffff128 ($sp でスタックポインタ : つまり関数などにジャンプする際にレジスタ値をセーブするメモリのスタック領域のアドレスを保持している ) R30 [s8] = 0 R31 [ra] = ( テキスト領域での関数の戻りアドレスを保持 ) (6) スタックを使ったサブルーチン実現例 ( その 2) つぎに 最大公約数の計算を スタック (Jump And Link) を使って実現する例を見てみます #################################################### # gcd.s --- ユークリッドの互除法を用いた2つの整数の最大公約数 # (greatest common divisor) を再帰的に求める #################################################### # データ領域.data pr1:.asciiz" 終了するときは 0 を入力してください n" pr2:.asciiz"iを入力してください: " pr3:.asciiz"jを入力してください: " rs1:.asciiz " 最大公約数 " rs2:.asciiz " と " rs3:.asciiz " は " rs4:.asciiz " です n" #################################################### # main ####################################################.text.globl main main: sub $sp, $sp, 12 # 3ワード分 スタックに確保 sw $ra, 8($sp) # return address レジスタ sw $s0, 4($sp) # i は $s0 レジスタ. sw $s1, 0($sp) # j は $s1 レジスタ. li $v0, 4 # コンソールにプログラム終了条件表示 la $a0, pr1 while: # i と j(2つの整数入力 ) li $v0, 4 # iの入力を促す la $a0, pr2 15

16 li $v0, 5 # iをコンソールから読み込む move $s0, $v0 # 読み込んだ整数 i を $s0 レジスタにコピー if: beqz $s0, ewhile # branch to "ewhile" if $s0==0 li $v0, 4 # jの入力を促す la $a0, pr3 li $v0, 5 # jをコンソールから読み込む move $s1, $v0 # 読み込んだ整数 j を $s1 レジスタにコピー # Compute GCD of i and j move $a0, $s0 # $s0を引数レジスタ $a0 にコピー move $a1, $s1 # $s1 を引数レジスタ $a1 にコピー jal gcd # GCD を呼び出す move $t0, $v0 # GCDの結果を $t0 レジスタにコピー li $v0, 4 # Begin printing result string. la $a0, rs1 # 最大公約数をプリント li $v0, 1 # iをプリント. move $a0, $s0 li $v0, 4 la $a0, rs2 # と をプリント li $v0, 1 # jをプリント move $a0, $s1 li $v0, 4 la $a0, rs3 # は をプリント li $v0, 1 # gcd(i, j) の結果をプリント move $a0, $t0 li $v0, 4 # です をプリント la $a0, rs4 16

17 b while # 無条件ジャンプ ewhile: li $v0, 0 # 戻り値をセット lw $s1, 0($sp) # レジスタの値を回復 lw $s0, 4($sp) lw $ra, 8($sp) add $sp, $sp, 12 jr $ra # Return. ################################################## # gcd --- Implement the gcd() function from gcd.c below. ## Use the following memory map for this function: # # $ra # # $s0 Store $s0's value here, then use $s0 for i. In what # register is i initially? # $s1 Store $s1's value here, then use $s1 for j. In what # register is j initially? # # int gcd(int i, int j) # { # if (j == 0) return i; # else # return gcd(j, i % j); /* % is the remainder operator */ # } # ##################################################.text gcd: # a0 and a1 are the two integer parameters # return value is in v0 move $t0, $a0 move $t1, $a1 loop: beq $t1, $0, done div $t0, $t1 move $t0, $t1 mfhi $t1 # 除算の余りを $t1 レジスタに取り出す j loop # ユークリッドの互除法 : 反復法 done: move $v0, $t0 # 最大公約数が $v0 に 17

18 jr $ra このプログラムを QtSpim シミュレータにアップすると 以下のように翻訳されます ( 実行前 ) User Text Segment [ ]..[ ] [ ] 8fa40000 lw $4, 0($29) ; 183: lw $a0 0($sp) # argc [ ] 27a50004 addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv [ ] 24a60004 addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp [ c] sll $2, $4, 2 ; 186: sll $v0 $a0 2 [ ] 00c23021 addu $6, $6, $2 ; 187: addu $a2 $a2 $v0 [ ] 0c jal 0x [main] ; 188: jal main [ ] nop ; 189: nop [ c] a ori $2, $0, 10 ; 191: li $v0 10 [ ] c ; 192: # 10 (exit) [ ] 23bdfff4 addi $29, $29, -12 ; 20: sub $sp, $sp, 12 # 3 ワード分 スタックに確保 [ ] afbf0008 sw $31, 8($29) ; 21: sw $ra, 8($sp) # 戻りアドレスレジスタを退避 [ c] afb00004 sw $16, 4($29) ; 22: sw $s0, 4($sp) # $s0 レジスタを退避 [ ] afb10000 sw $17, 0($29) ; 23: sw $s1, 0($sp) # $s1 レジスタを退避 [ ] ori $2, $0, 4 ; 25: li $v0, 4 # コンソールにプログラム終了条件表 [ ] 3c lui $4, 4097 [pr1] ; 26: la $a0, pr1 [ c] c ; 27: [ ] ori $2, $0, 4 ; 29: li $v0, 4 # i の を促す [ ] 3c lui $1, 4097 [pr2] ; 30: la $a0, pr2 [ ] ori $4, $1, 54 [pr2] [ c] c ; 31: [ ] ori $2, $0, 5 ; 33: li $v0, 5 # i をコンソールから読み込む [ ] c ; 34: [ ] addu $16, $0, $2 ; 35: move $s0, $v0 # 読み込んだ整数 i を $s0 レジスタにコピー [ c] beq $16, $0, 152 [ewhile-0x c] [ ] ori $2, $0, 4 ; 40: li $v0, 4 # j の を促す [ ] 3c lui $1, 4097 [pr3] ; 41: la $a0, pr3 [ ] ori $4, $1, 85 [pr3] [ c] c ; 42: [ ] ori $2, $0, 5 ; 44: li $v0, 5 # j をコンソールから読み込む [ ] c ; 45: [ ] addu $17, $0, $2 ; 46: move $s1, $v0 # 読み込んだ整数 j を $s1 レジスタにコピ ー [ c] addu $4, $0, $16 ; 48: move $a0, $s0 # $s0 を引数レジスタ $a0 にコピー [ ] addu $5, $0, $17 ; 49: move $a1, $s1 # $s1 を引数レジスタ $a1 にコピー [ ] 0c jal 0x c [gcd] ; 50: jal gcd # GCD を呼び出す [ ] addu $8, $0, $2 ; 51: move $t0, $v0 # GCD の結果を $t0 レジスタにコピー [ c] ori $2, $0, 4 ; 53: li $v0, 4 # Begin printing result string. [ ] 3c lui $1, 4097 [rs1] ; 54: la $a0, rs1 # 最 公約数をプリント [ ] ori $4, $1, 116 [rs1] [ ] c ; 55: [ c] ori $2, $0, 1 ; 57: li $v0, 1 # i をプリント. [004000a0] addu $4, $0, $16 ; 58: move $a0, $s0 [004000a4] c ; 59: [004000a8] ori $2, $0, 4 ; 61: li $v0, 4 [004000ac] 3c lui $1, 4097 [rs2] [004000b0] ori $4, $1, 134 [rs2] [004000b4] c [004000b8] ori $2, $0, 1 ; 62: la $a0, rs2 # と をプリント ; 63: ; 65: li $v0, 1 # j をプリント [004000bc] addu $4, $0, $17 ; 66: move $a0, $s1 18

19 [004000c0] c ; 67: [004000c4] ori $2, $0, 4 ; 69: li $v0, 4 [004000c8] 3c lui $1, 4097 [rs3] ; 70: la $a0, rs3 # は をプリント [004000cc] c ori $4, $1, 140 [rs3] [004000d0] c ; 71: [004000d4] ori $2, $0, 1 ; 73: li $v0, 1 # gcd(i, j) の結果をプリント [004000d8] addu $4, $0, $8 ; 74: move $a0, $t0 [004000dc] c ; 75: [004000e0] ori $2, $0, 4 ; 77: li $v0, 4 # です をプリント [004000e4] 3c lui $1, 4097 [rs4] ; 78: la $a0, rs4 [004000e8] ori $4, $1, 146 [rs4] [004000ec] c ; 79: [004000f0] 0401ffd4 bgez $0-176 [while-0x004000f0]; 81: b while # 無条件ジャンプ [004000f4] ori $2, $0, 0 ; 84: li $v0, 0 # 戻り値をセット [004000f8] 8fb10000 lw $17, 0($29) ; 86: lw $s1, 0($sp) # レジスタの値を回復 [004000fc] 8fb00004 lw $16, 4($29) ; 87: lw $s0, 4($sp) [ ] 8fbf0008 lw $31, 8($29) ; 88: lw $ra, 8($sp) [ ] 23bd000c addi $29, $29, 12 ; 89: add $sp, $sp, 12 [ ] 03e00008 jr $31 ; 90: jr $ra # Return. [ c] addu $8, $0, $4 ; 115: move $t0, $a0 [ ] addu $9, $0, $5 ; 116: move $t1, $a1 [ ] beq $9, $0, 20 [done-0x ] [ ] a div $8, $9 ; 119: div $t0, $t1 [ c] addu $8, $0, $9 ; 120: move $t0, $t1 [ ] mfhi $9 ; 121: mfhi $t1 # 除算の余りを $t1 レジスタに取り出す [ ] j 0x [loop] ; 122: j loop # ユークリッドの互除法 : 反復法 [ ] addu $2, $0, $8 ; 124: move $v0, $t0 # 最 公約数が $v0 に [ c] 03e00008 jr $31 ; 125: jr $ra User data segment [ ]..[ ] [ ]..[1000ffff] [ ] e482b5e7 81e386ba 8b82e399 e3a881e [ ] 81e38d e3af 9282e330 e5a585e [ ] 81e39b8a a681e397 e38f81e3 81e3a [ ] 8481e395 e369000a 85e b8ae5a i [ ] e39781e3 81e3a681 a081e38f e39581e [ ] 203a e36a00 a585e592 e39b8ae5.. :. j [ ] 81e f81e3a6 e3a081e3 81e [ ] 00203a84 e5809ce6 85e5a7a4 84b4e7ac. : [ ] 3ab095e6 e a881 af81e : [ ] e e3a e a [100100a0]..[1003ffff] User Stack [7ffff6f8]..[ ] [7ffff6f8] ffff7b [7ffff700] fffffe1 7fffffbb 7fffffa [7ffff710] 7fffff6b 7fffff2f 7ffffefe 7ffffee4 k... / [7ffff720] 7ffffec0 7ffffeac 7ffffe9f 7ffffe8a [7ffff730] 7ffffe74 7ffffe4b 7ffffe30 7ffffe19 t... K [7ffff740] 7ffffe0b 7ffffb1a 7ffffadc 7ffffac [7ffff750] 7ffffaa4 7ffffa5c 7ffffa4a 7ffffa \... J [7ffff760] 7ffffa17 7ffff9f3 7ffff9ca 7ffff9ac

20 [7ffff770] 7ffff96b 7ffff954 7ffff940 7ffff931 k [7ffff780] 7ffff91b 7ffff8f5 7ffff8d0 7ffff8b [7ffff790] 7ffff8aa 7ffff890 7ffff83e 7ffff7ec > [7ffff7a0] 7ffff7da 7ffff7cd このプログラムを実行すると コンソールには以下のように初期表示されます ここで たとえば i に 306, j に 204 を代入すると 以下のように解答されます (7) 球の表面積と体積の計算 ( 実数演算例 ) つぎに 最大公約数の計算を スタック (Jump And Link) を使って実現する例を見てみます S 4 r 2 4 V r 3 を計算することになります 今 半径 と仮定した場合の浮動小数点演算 (float 型 ) で計算する事例を紹介します 3 #################################################### # floatpi.s --- 球の表面積と体積の計算例 #################################################### ## Example program to calculate the surface area # and volume of a sphere given the radius. # # Data Declarations 20

21 .data pi:.float fourptzero:.float 4.0 threeptzero:.float 3.0 radius:.float surfacearea:.float 0.0 volume:.float 0.0 str1:.asciiz " 球の面積は " str2:.asciiz " 球の体積は " strn:.asciiz " です n" # # text/code section.text.globl main main: # 命令で.s が末尾につくものは 実数の single precision( 単精度 ) という意味です # ここでは出ませんが 末尾に.d がつくと倍精度 (double 型 ) の意味になります # # Compute: (4.0 * pi) which is used for both equations. l.s $f2, fourptzero # 浮動小数点のロード l.s $f4, pi mul.s $f4, f2, $f4 # 4.0 * pi ( 単精度の乗算 ) l.s $f6, radius # radius # # Calculate surface area of a sphere. # surfacearea = 4.0 * pi * radius^2 mul.s $f8, $f6, $f6 # radius^2 mul.s $f8, $f4, $f8 # 4.0 * pi * radius^2 s.s $f8, surfacearea # 浮動小数点のストア la $a0, str1 # 文字列をセット li $v0, 4 # 文字列端末書き出しセット # システムコール mov.s $f12, $f8 li $v0, 2 la $a0, strn # 文字列をセット 21

22 li $v0, 4 # 文字列端末書き出しセット # システムコール # # Calculate volume of a sphere. # volume = (4.0 * pi / 3.0) * radius^3 l.s $f8, threeptzero div.s $f7, $f4, $f8 # (4.0 * pi / 3.0) 単精度の除算 mul.s $f10, $f6, $f6 mul.s $f10, $f10, $f6 mul.s $f12, $f7, $f10 s.s $f12, volume # radius^3 #4.0*pi/3.0*radius^3 store final answer la $a0, str2 # 文字列をセット li $v0, 4 # 文字列端末書き出しセット # システムコール # mov.s $f12, $f8 li $v0, 2 la $a0, strn # 文字列をセット li $v0, 4 # 文字列端末書き出しセット # システムコール #exit li $v0, 10 # terminate program 22

ex05_2012.pptx

ex05_2012.pptx 2012 年度計算機システム演習第 5 回 2012.05.25 高水準言語 (C 言語 ) アセンブリ言語 (MIPS) 機械語 (MIPS) コンパイラ アセンブラ 今日の内容 サブルーチンの実装 Outline } ジャンプ 分岐命令 } j, jr, jal } レジスタ衝突 回避 } caller-save } callee-save 分岐命令 ( 復習 ) } j label } Jump

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2015 年度 5 セメスター クラス D 計算機工学 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節 ) 大学院情報科学研究科鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語 )

More information

ex04_2012.ppt

ex04_2012.ppt 2012 年度計算機システム演習第 4 回 2012.05.07 第 2 回課題の補足 } TSUBAMEへのログイン } TSUBAMEは学内からのログインはパスワードで可能 } } } } しかし 演習室ではパスワードでログインできない設定 } 公開鍵認証でログイン 公開鍵, 秘密鍵の生成 } ターミナルを開く } $ ssh-keygen } Enter file in which to save

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2019 年度クラス C D 情報科学基礎 I 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節命令一覧は p.113) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2019 年度クラス C D 情報科学基礎 I 7. MIPS の命令と動作 分岐 ジャンプ 関数呼出し ( 教科書 7 章命令一覧は p.113) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 分岐 ジャンプ命令 条件文や繰り返し文などを実現するには, 命令の実行順の制御が必要 (C 言語

More information

ex03_2012.ppt

ex03_2012.ppt 2012 年度計算機システム演習第 3 回 2012.04.27 高水準言語 (C 言語 ) 機械語 (MIPS) コンパイラ アセンブリ言語 (MIPS) アセンブラ 計算結果 今日の内容 続 言語 関数ポインタ アセンブラ言語 九九の掛け算表 sample24.c #include int mul(int x, int y){ return x * y; void kuku_mul()

More information

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

ソフトウェア基礎技術研修 命令と命令表現 ( 教科書 3.1 節 ~3.4 節 ) プロセッサの命令と命令セット 命令 : プロセッサへの指示 ( プロセッサが実行可能な処理 ) 加算命令 減算命令 論理演算命令 分岐命令 命令セット : プロセッサが実行可能な命令の集合 ( プログラマから見えるプロセッサの論理仕様 ) プロセッサ A 加算命令分岐命令 プロセッサ B 加算命令減算命令 命令セットに含まれない命令は直接実行できない!

More information

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - NxLec ppt MIPS R3000 Instruction Set Architecture (ISA) 計算機アーキテクチャ特論 (Advanced Computer Architectures) 2. スカラプロセッサ, スーパースカラプロセッサ Instruction Categories Computational Load/Store Jump and Branch Floating Point coprocessor

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン (2), コード生成 http://cis.k.hosei.ac.jp/~asasaki /lect/compiler/2007-1204.pdf ( 訂正版 ) 1 概要 仮想マシン 概要 ( 復習 ) 制御命令 出力命令 コード生成 式のコード生成 文 文の列のコード生成 記号表 2 演習で作るコンパイラの例 test.hcc Int main() { int i j; i = 3;

More information

情報処理演習 B8クラス

情報処理演習 B8クラス 予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

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

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit) 2016.4.1 II ( ) 1 1.1 DRAM RAM DRAM DRAM SRAM RAM SRAM SRAM SRAM SRAM DRAM SRAM SRAM DRAM SRAM 1.2 (DRAM, Dynamic RAM) (SRAM, Static RAM) (RAM Random Access Memory ) DRAM 1 1 1 1 SRAM 4 1 2 DRAM 4 DRAM

More information

DVIOUT

DVIOUT 2009 年度情報科学 & 情報科学演習レポート 9 学生用 学籍番号 : 氏名 : 下記の注意事項を守り 次ページ以降の問いに答え レポートを完成させなさい 提出期限 : 2009 年 6 月 30 日 ( 火 ) 13:00 まで提出場所 : 理学部棟正面玄関内に設置のレポートボックス 注意事項 : (1) このページを印刷し 必要事項を記入の上 ( 学籍番号欄と氏名欄は 2 箇所あるので忘れずに記入すること

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

MS-ExcelVBA 基礎 (Visual Basic for Application)

MS-ExcelVBA 基礎 (Visual Basic for Application) MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 ( 主なもの ) 型型名型宣言文字長さ内容整数型 Integer % バイト -, ~, 長整数型 Long & バイト -,,, ~,,, 単精度浮動小数点数型倍精度浮動小数点数型 Single! バイト負値 : -.0E ~ -.0E- 正値 :.0E- ~.0E Double

More information

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft PowerPoint - C_Programming(3).pptx H23 年度秋学期情報スキル活用 入門 担当 : 田中基彦 ( 工学部共通教育科 ) Email: ak_tanaka@isc.chubu.ac.jp 授業のホームページ学術情報センター > 教育支援 > 情報リテラシー 授業の日程 講義内容提出課題 連絡事項を掲載 > 定期的にアクセスして確認する C 言語によるプログラミング (3) 制御文 繰り返し文 if, while, switch, for,

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 9 回 メソッド (3) 授業の前に自己点検 以下の質問に答えられますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 戻り値はどのように利用しますか 変数のスコープとは何ですか

More information

第1回 プログラミング演習3 センサーアプリケーション

第1回 プログラミング演習3 センサーアプリケーション C プログラミング - ポインタなんて恐くない! - 藤田悟 fujita_s@hosei.ac.jp 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir

More information

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - ca ppt [互換モード] 大阪電気通信大学情報通信工学部光システム工学科 2 年次配当科目 コンピュータアルゴリズム 良いアルゴリズムとは 第 2 講 : 平成 20 年 10 月 10 日 ( 金 ) 4 限 E252 教室 中村嘉隆 ( なかむらよしたか ) 奈良先端科学技術大学院大学助教 y-nakamr@is.naist.jp http://narayama.naist.jp/~y-nakamr/ 第 1 講の復習

More information

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63> C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt C プログラミング演習 第 7 回メモリ内でのデータの配置 例題 1. 棒グラフを描く 整数の配列から, その棒グラフを表示する ループの入れ子で, 棒グラフの表示を行う ( 参考 : 第 6 回授業の例題 3) 棒グラフの1 本の棒を画面に表示する機能を持った関数を補助関数として作る #include "stdafx.h" #include void draw_bar( int

More information

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - kougi6.ppt C プログラミング演習 第 6 回ファイル処理と配列 1 ファイル処理 2 ファイル読み込み ファイル プログラム ファイルの中身は変わらない 3 ファイル書き出し ファイル プログラム ファイルの中身が変わる ファイルは伸び縮みすることがある 4 例題 1. テキストファイル形式の ファイルからのデータ読み込み 次のような名簿ファイル ( テキストファイル形式 ) を読み込んで,1 列目の氏名と,3

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 2 第 03 回 (2007 年 05 月 07 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること hp://www.nlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 07 日分と書いてある部分が 本日の教材です 本日の内容

More information

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog04.ppt プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 8 回メソッド (2) 授業開始前に自己点検 前回までの必須課題はすべてできていますか 前回までの学習項目であいまいな所はありませんか 理解できたかどうかは自分自身の基準をもとう Java 1 第 8 回 2 前回のテーマ メソッドとは いくつかの命令の列を束ねて 一つの命令として扱えるようにしたもの 今回学ぶメソッドの役割は その他のプログラミング言語では関数またはサブルーチンと呼ばれることがある

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

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

Microsoft PowerPoint - program.ppt [互換モード] プログラミング演習 バージョン 1 担当教員 : 綴木馴 プログラムの決まりについて学ぶ おすすめする参考書 ザ C 戸川隼人サイエンス社 本日の予定 1. 授業の説明. 2. コンパイラーのインストール. プログラムの決まりについて学ぶ,P31 /* The most in C */ /* hello.c */ printf("hello,world n"); プログラムの決まり ( コメント )

More information

Cプログラミング1(再) 第2回

Cプログラミング1(再) 第2回 C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において

More information

Microsoft Word - Cプログラミング演習(12)

Microsoft Word - Cプログラミング演習(12) 第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char

More information

スライド 1

スライド 1 3. 演算命令を学ぼう 本稿の Web ページ http://www.mybook-pub-site.sakura.ne.jp/pic/index.html 1 ; ADD このソースファイルを各自打ち込んで下さい. EQU 0x0C ; at 0C 足し算を実行するプログラムの例です. MOVLW B 00000001 ; Load 0x01 to W ADDLW B'00000011' ; W

More information

Taro-ファイル処理(公開版).jtd

Taro-ファイル処理(公開版).jtd ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言

More information

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

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - prog08.ppt プログラミング言語 2 第 07 回 (2007 年 06 月 25 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/27 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 06 月 25 日分と書いてある部分が 本日の教材です

More information

Taro-再帰関数Ⅰ(公開版).jtd

Taro-再帰関数Ⅰ(公開版).jtd 再帰関数 Ⅰ 0. 目次 1. 階乗関数 2. 基本演算 2. 1 乗算 2. 2 除算 2. 3 剰余 3. 最大公約数. フィボナッチ関数 5. べき乗関数 5. 1 解法 1 5. 2 解法 2-1 - 1. 階乗関数 再帰関数は 関数の中で自分自身を呼び出す関数をいう 関数を簡潔に定義することができる 階乗関数 f(n) (n 0) を明示的に書くとつぎのようになる 再帰的定義 f(n) =

More information

演習1

演習1 神戸市立工業高等専門学校電気工学科 / 電子工学科専門科目 数値解析 2019.5.10 演習 1 山浦剛 (tyamaura@riken.jp) 講義資料ページ http://r-ccs-climate.riken.jp/members/yamaura/numerical_analysis.html Fortran とは? Fortran(= FORmula TRANslation ) は 1950

More information

Microsoft PowerPoint - CompArch_Exercise3.pptx

Microsoft PowerPoint - CompArch_Exercise3.pptx 2018 年度 ( 平成 30 年度 ) 版 Ver. 2018-10-14a Course number: CSC.T363 コンピュータアーキテクチャ演習 (3) Computer Architecture Exercise(3) 情報工学系吉瀬謙二 Kenji Kise, Department co Computer Science kise_at_c.titech.ac.jp CSC.T363

More information

Prog1_2nd

Prog1_2nd 2019 年 10 月 3 日 ( 木 ) 実施浮動小数点数 Java 言語で実数を扱う場合, 実用的な計算には変数のデータ型としては,double 型を用いる 浮動小数点数とは, 実数を表す方式の一つで,2 進数の場合は例えば 1.101 2 3 ( 判り易さの為にここでは 2 や 3 は 10 進数で表記 ) の様な表記法である なお, 第 1 回の教材にあった, 単精度, 倍精度という用語で,

More information

Microsoft Word - no103.docx

Microsoft Word - no103.docx 次は 数える例です ex19.c /* Zeller の公式によって 1 日の曜日の分布を求めるプログラム */ int year, month, c, y, m, wnumber, count[7] = {0, i; for(year = 2001; year

More information

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文 Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文字 0x0000 ~ 0xffff byte 1バイト整数 - 2 8 ~ 2 8-1 short 2バイト整数

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン () 仮想マシン 復習 仮想マシンの概要 hsm 仮想マシン プログラム言語の処理系 ( コンパイラ ) 原始プログラム (Source program) コンパイラ (Compiler) 目的プログラム (Object code) 原始言語 (Source language) 解析 合成 目的言語 (Object Language) コンパイルする / 翻訳する (to compile

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

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

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ アセンブリ言語 ( 超簡単命令セット版 ) 取扱説明書 平成 26 年 2 月改訂版 目次 1 はじめに 2 1.1 利用できるデータの範囲やアドレス空間 命令長についての注意 2 2 プログラムの書き方と実行の方法 3 2.1 このマニュアルでの表記について 3 2.2 入力上の注意 3 2.2.1 使用できる文字について 3 2.2.2 ラベルの付け方 3 2.3 命令長の書き方 4 2.3.1

More information

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数 関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数 関数の定義 戻り値の型 関数名 引数の型 引数の名前 int funcname ( int a, char b) { int c ; c = a * b ; return c ; 引数の型 引数の名前 戻り値 戻り値の型は int 変数 c の型も int return

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

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

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

計算機アーキテクチャ

計算機アーキテクチャ 計算機アーキテクチャ 第 11 回命令実行の流れ 2014 年 6 月 20 日 電気情報工学科 田島孝治 1 授業スケジュール ( 前期 ) 2 回日付タイトル 1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ 2 4/14 ノイマン型コンピュータ 3 4/21 コンピュータのハードウェア 4 4/28 数と文字の表現 5 5/12 固定小数点数と浮動小数点表現 6 5/19 計算アーキテクチャ

More information

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

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 前回の復習 関数を作る : 何を引数として どういう計算をし 何を返すか 関数についての注意 : * main 関数で使われている変数と同じ名前の変数があっても それらには何ら関係はない * 関数名と同じ変数は その関数内では使わないようにする ( 紛らわしさを少なくするため

More information

CASL入門

CASL入門 3 章 アセンブラ言語 CASLⅡ の仕様 ここでは アセンブラ言語の説明をします ちょっと待て 第 2 章の話は アセンブラ言語の話ではなかったのか と思われた人はいませんでしょうか 一般に プログラム という場合 その構成要素は次の 3 つに分かれます 1 動作のための命令加算 減算 比較などの命令 2 領域確保や定数定義など 動作しない部分 3 プログラム名の定義などこのうち 1が第 3 章で説明した部分にあたります

More information

スライド 1

スライド 1 計算機の構造とプログラムの実行 1 計算機の基本構成 メモリ プロセッサ データ領域 データデータデータ load store レジスタ PC プログラム領域 命令命令命令 演算器 (ALU) 2 計算機の基本動作 プロセッサは, メモリのプログラム領域から命令をアドレス順に読み出して実行する 演算は ALU (Arithmetic Logic Unit) が行う 必要に応じて, メモリとプロセッサ内のレジスタとの間でデータを移動する

More information

gengo1-2

gengo1-2 変数 プログラム中で 値を格納するには変数 variable を用いる変数は 格納する値の型によって 整数型 文字型 などの型 type をもつ変数を使うには 利用に先立って変数の宣言 declaration をしなければならない 値 変数の値はコンピュータのメモリ上に格納される 具体的にメモリのどの場所に格納されるかは言語処理系が自動的に扱うので プログラマ ( 特に初級者 ) が意識する必要はない

More information

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

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め Copyright 守屋悦朗 2005 コンピュータの仕組み (2) ソフトウェア 3.3 アセンブラプログラミング (CASLⅡ) 情報処理技術者試験基本情報技術者試験 (http://www.jitec.jp/index.html) では 仮想コンピュータ (16ビットのワードマシン 主記憶容量 64KW)COMETⅡを定義し COMETⅡ のためのアセンブリ言語 CASLⅡを定めている COMETⅡとCASLⅡの仕様は情報処理技術者試験センターのウェブサイト

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 11 週 条件分岐文と繰り返し文のコード生成 2014 年 6 月 18 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-09 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作ります FORTRAN の場合 OPEN 文でファイルを開いた後 標準入力の場合と同様に READ 文でデータを読みこみます

More information

sinfI2005_VBA.doc

sinfI2005_VBA.doc sinfi2005_vba.doc MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 主なもの 型 型名 型宣言文字 長さ 内容 整数型 Integer % 2 バイト -32,768 32,767 長整数型 Long & 4 バイト -2,47,483,648 2,47,483,647 単精度浮動小数点数 Single 型!

More information

Microsoft Word - DF-Salford解説09.doc

Microsoft Word - DF-Salford解説09.doc Digital Fortran 解説 2009/April 1. プログラム形態とデ - タ構成 最小自乗法プログラム (testlsm.for) m 組の実験データ (x i,y i ) に最も近似する直線式 (y=ax+b) を最小自乗法で決定する 入力データは組数 mと m 組の (x i,y i ) 値 出力データは直線式の係数 a,bとなる 入力データ m=4 (x i,y i ) X=1.50

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt 到達目標 スーパバイザモード, 特権命令, 割り込み CPU の割り込みメカニズム 割り込みの種類ごとに, 所定の例外処理が呼び出される スーパーバイザモードに, 自動的に切り替わる 割り込み終了後に 元のモード に戻る ハードウエア割り込みについて 割り込み禁止 割り込み発生時の CPU の挙動 現在の処理を中断 例外処理用のプログラム ( ハンドラともいう ) が起動される プログラム実行の流れ

More information

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1 7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 10001 番地とすると, そこから int 型のサイズ, つまり 4 バイト分の領域が確保される.1

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information

デジタル表現論・第6回

デジタル表現論・第6回 デジタル表現論 第 6 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 16 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年 5 月 16 日 1 / 16 本日の目標 Java プログラミングの基礎配列 ( 復習 関数の値を配列に格納する ) 文字列ファイルの書き込み 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年

More information

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

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド RH850の割り込み / 例外実現方法 CC-RH アプリケーションガイド R20UT3546JJ0101 2018.10.12 ソフトウェア開発統括部 ソフトウェア技術部ルネサスエレクトロニクス株式会社 アジェンダ 概要ページ 03 割り込み / 例外発生時に実行する関数の定義ページ 10 直接ベクタ方式のベクタの定義ページ 17 テーブル参照方式のベクタの定義ページ 25 その他 割り込み制御ページ

More information

ファイル入出力

ファイル入出力 C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

Microsoft Word - VBA基礎(6).docx

Microsoft Word - VBA基礎(6).docx あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 1 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/teachers/w48369 2/CPR1/ 2017-07-05 まとめ : ポインタを使った処理 2 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

スライド 1

スライド 1 プログラミング 第 3 週 静岡大学工学部機械工学科知能 材料コースロボット 計測情報分野臼杵深光電 精密コース光ナノバイオ分野居波渉 講義の前に 講義資料や演習課題 LiveCampusよりダウンロード可能 成績評価期末試験および課題により行う. 評価の配分は, おおむね試験 90%, 課題 10% である. 再試験期末試験で40 点以上 60 点未満の場合, 再試験となる. 2 月 26 日 (

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 前回の出席確認演習 #include int main() { FILE *fp; int c, linecount, length, maxlength; fp=fopen("/usr/share/dict/words","r"); if (fp == NULL) return 1; linecount=0; length=0;

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

Microsoft Word - no202.docx

Microsoft Word - no202.docx 1.4 ポインタと配列 ポインタ変数は前回説明したように 値の入っているアドレスを示す変数です では 配列はどの ようにメモリ上に格納されるか調べてみましょう ex07.c /* ポインタと配列の関係 */ int a[3]={1, 2, 3; /* int 型の大きさ 3 の配列として宣言 */ int *i; /* int 型へのポインタとして宣言 */ double x[3] = {1.0,

More information

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

Microsoft PowerPoint - CproNt11.ppt [互換モード] 第 11 章入出力関数とライブラリ関数 CPro:11-01 概要 getchar putchar gets puts scanf printf strcat strcmp strcpy strlen atoi atof sprint sscanf 11.1 コンソール入出力関数 11-02 入力 出力 getchar putchar 一文字 gets puts 文字列 ( 一行 ) scanf printf

More information

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

模擬試験問題(第1章~第3章) 基本情報技術者試験の練習問題 - 第 8 回 この問題は平成 19 年度秋期の問題から抜粋しています 問 1 次のプログラムの説明及びプログラムを読んで, 設問 1,2 に答えよ プログラムの説明 スタックを使って, 実数値を 10 進数字列 ( 文字列 ) に変換する副プログラム FloatFormat である (1) FloatFormat は, 実数 Float の値を 10 進数字列に変換し,

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します 1. 2. 4. のチェックツールをルネサスエレクトロニクス株式会社のホームページより入手できます http//tool-support.renesas.com/jpn/toolnews/shc/shcv7/dr_shcv7_4.html

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2018 年度クラス C3 D1 D2 D3 情報科学基礎 I 10. 組合せ回路 ( 教科書 3.4~3.5 節 ) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 組合せ論理回路 x1 x2 xn 組合せ論理回路 y1 y2 ym y i = f i (x 1, x 2,, x n ), i

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション シミュレーション基礎 (8) 第 6 章ファイル入出力 7.2 テキストファイルの読み書き ファイルに書き込む : EX70201: X=1:10;Y=[X;X.^2]; Fid=fopen('datal.txt', wt'); fprintf(fid,'%2d%5d n',y); C 言語と同じ手順 : ファイルをオープンするファイルに変数の値を書き込む ( 整数 2 桁, 整数 5 桁, 改行

More information

目次

目次 http://www0.info.kanagawa-u.ac.jp/~kaiya/p1/ dotcampus ショートコード 221137 プログラミング I 数理物理, 総合理学等向け 2017 年 12 月 11 日 海谷治彦 1 目次 11 章 [ レ ] 10 章 [ 明 ] ポインタ C 言語の最大難関といわれています orz コンピュータ内の情報表現 ( 復習 ) 演習の解答例 (isbn,

More information

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Microsoft PowerPoint - VBA解説1.ppt [互換モード] 九州大学工学部地球環境工学科船舶海洋システム工学コース 計算工学演習第一 演習資料担当 : 木村 Excel 上のマクロを利用してプログラムを組む Visual Basic for Applications (VBA) のテクニック Excel のマクロとは? 一連の操作を自動的に行う機能 例 ) セル ( マス目 ) に数字を 1 から順番に埋めていく Excel のマクロでどんなプログラムが作れるのか?

More information

講習No.1

講習No.1 プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成

More information

Microsoft PowerPoint - ProcML-12-3.ppt

Microsoft PowerPoint - ProcML-12-3.ppt プロセッサと 年次前次前期 ( 第 回 ) 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow か? () + + () + + 答 答 中島克人 情報メディア学科 nakajima@im.dendai.ac.jp () - = + + 答 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow

More information

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char

More information

デジタル表現論・第4回

デジタル表現論・第4回 デジタル表現論 第 4 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 2 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 4 回 2016 年 5 月 2 日 1 / 14 本日の目標 Java プログラミングの基礎 出力の復習 メソッドの定義と使用 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 4 回 2016 年 5 月 2 日 2 / 14 出力 Systemoutprint()

More information

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java 問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 public class Ex0201 { System.out.print("input> "); int input = Integer.parseInt(reader.readLine());

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

gengo1-8

gengo1-8 問題提起その 1 一文字ずつ文字 ( 数字 ) を読み込み それぞれの文字が何回入力されたかを数えて出力するプログラム int code, count_0=0, count_1=0, count_2=0, count_3=0,..., count_9=0; while( (code=getchar())!= EOF ){ } switch(code){ case 0 : count_0++; break;

More information

ファイル入出力

ファイル入出力 C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-08 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information