12 CUI terminal SHIFT cmd exe mintty bash
12 CUI作業環境 (terminal) • フォルダをSHIFT+右クリック cmd. exe mintty + bash
教科書 pp. 30 -31. Windows の絶対パス、相対パス • フォルダの階層を で区切る • 現在の作業フォルダは以下の場所 • C: UserskouDesktopCLang. I 2014 • 絶対パスはルートデバイスを基準に • C: UserskouDesktopCLang. I 2014week 1hello. c • C: UserskouDesktopCLang. II 2014week 1hellogui. c • 相対パスは現在の作業フォルダを基準に • week 1hello. c • . . CLang. II 2014week 1hellogui. c 16
17 Cygwin の絶対パス、相対パス • ディレクトリの階層を / で区切る • 現在の作業ディレクトリは以下の場所 • /cygdrive/c/Users/kou/Desktop/CLang. I 2014 • 絶対パスはルートディレクトリ / を基準に • /cygdrive/c/Users/kou/Desktop/CLang. I 2014/week 1/hello. c • /cygdrive/c/Users/kou/Desktop/CLang. II 2014/week 1/hellogui. c • 相対パスは現在の作業ディレクトリを基準に • week 1/hello. c • . . /CLang. II 2014/week 1/hellogui. c
24 教科書 pp. 36 -42. C コンパイラによるコンパイル • cmd. exe から bcc 32 で行った例 C: UserskouDesktopCLang. I 2014>dir /B hello. c ファイル一覧の表示 C: UserskouDesktopCLang. I 2014>bcc 32 hello. c Borland C++ 5. 5. 1 for Win 32 Copyright (c) 1993, 2000 Borland hello. c: 警告 W 8070 hello. c 6: 関数は値を返すべき(関数 main ) Turbo Incremental Link 5. 00 Copyright (c) 1997, 2000 Borland コンパイル C: UserskouDesktopCLang. I 2014>dir /B hello. c hello. exe hello. obj hello. tds ファイル一覧の表示 C: UserskouDesktopCLang. I 2014>hello, world 作成した実行ファイルを実行
25 教科書 p. 17. C コンパイラは何をしているのか? • デバッグ情報付きコンパイルし逆アセンブル • . rdata セクション部分 $ gcc -g hello. c $ objdump -d -S -s a. exe: ファイル形式 pei-x 86 -64 . . . セクション. rdata の内容: 100403000 63796767 636 a 2 d 31 100403010 765 f 5265 67697374 100403020 73000000 100403030 68656 c 6 c 6 f 2 c 2077 100403040 4743433 a 2028474 e. . . 342 e 646 c 6572436 c 0000 6 f 726 c 64 55292034 6 c 005 f 4 a 61737365 00000000 2 e 382 e 31 cyggcj-14. dll. _J v_Register. Classe s. . . . hello, world. . GCC: (GNU) 4. 8. 1 セクション. text の逆アセンブル: 文字データの 16進表現 . . . 00000001004010 d 0 <main>: #include <stdio. h> 文字データの配置アドレス main() { 埋め込まれた文字データ
26 C コンパイラは何をしているのか? • . text セクション部分 セクション. text の逆アセンブル: . . . 00000001004010 d 0 <main>: #include <stdio. h> main() { 1004010 d 0: 55 1004010 d 1: 48 1004010 d 4: 48 1004010 d 8: e 8 printf("hello, 1004010 dd: 48 1004010 e 4: e 8 } 1004010 e 9: 48 1004010 ed: 5 d 1004010 ee: c 3 1004010 ef: 90 アセンブラコードを アセンブルして得られた マシン語のバイトコード 89 e 5 83 ec 20 73 00 00 00 worldn"); 8 d 0 d 4 c 1 f 00 00 77 00 00 00 83 c 4 20 . . . 配置アドレス push mov sub callq %rbp %rsp, %rbp $0 x 20, %rsp 100401150 <__main> lea callq 0 x 1 f 4 c(%rip), %rcx 100401160 <puts> add pop retq nop $0 x 20, %rsp %rbp C言語を コンパイルして得られた アセンブラコード # 100403030 <. rdata>
31 テキストエディタ • 窓の杜 • オフィス / 文書作成 / テキストエディター • http: //www. forest. impress. co. jp/library/nav/genre/offc/document_txteditor. html • 学習・プログラミング / プログラム向けエディター • http: //www. forest. impress. co. jp/library/nav/genre/stdy/program_progeditor. html • Vector • Windows / 文書作成 / テキストエディタ • http: //www. vector. co. jp/vpack/filearea/win/writing/edit/
32 テキストエディタ • サクラエディタ • http: //sakura-editor. sourceforge. net/ • xyzzy • http: //xyzzy-022. github. io/
33 統合開発環境 • Microsoft Visual Studio • http: //www. visualstudio. com/ja-jp/ • Eclipse • Pleiades - Eclipse プラグイン日本語化プラグイン • http: //mergedoc. sourceforge. jp/ • Net. Beans • https: //ja. netbeans. org/
35 SI接頭辞 名前 キロ(kilo) メガ(mega) ギガ(giga) テラ(tera) ペタ(peta) エクサ(exa) ゼタ(zetta) ヨタ(yotta) 記号 K M G T P E Z Y 乗数 10001 =103 10002=106 10003=109 10004=1012 10005=1015 10006=1018 10007=1021 10008=1024
36 2進接頭辞(IEC/IEEE) 名前 キビ(kibi) メビ(mebi) ギビ(gibi) テビ(tebi) ペビ(pebi) エクスビ(exbi) ゼビ(zebi) ヨビ(yobi) 記号 Ki Mi Gi Ti Pi Ei Zi Yi 乗数 10241=210 10242=220 10243=230 10244=240 10245=250 10246=260 10247=270 10248=280
38 教科書 pp. 50 -55. 16進数 2進数 10進数 16進数 0 b 0000 0 0 x 0 0 b 1000 8 0 x 8 0 b 0001 1 0 x 1 0 b 1001 9 0 x 9 0 b 0010 2 0 x 2 0 b 1010 10 0 xa 0 b 0011 3 0 x 3 0 b 1011 11 0 xb 0 b 0100 4 0 x 4 0 b 1100 12 0 xc 0 b 0101 5 0 x 5 0 b 1101 13 0 xd 0 b 0110 6 0 x 6 0 b 1110 14 0 xe 0 b 0111 7 0 x 7 0 b 1111 15 0 xf 2進数 4桁 → 16進数 1桁 に対応 2進数から変換するとキリが良い バイト単位のデータを表す際、読み易い 例: 0 b 0001001000110100 = 4660 = 0 x 1234 2進数 4桁 2進数 8桁 2進数 16桁 2進数 32桁 2進数 64桁 → → → 16進数 1桁 16進数 2桁 16進数 4桁 16進数 8桁 16進数 16桁
39 教科書 pp. 50 -55. 8 bit 整数の N 進数の表現 2進数 符号なし 10進 数 符号あり10進 数 16進数 0 b 0000 0 0 0 x 00 0 b 00000001 1 1 0 x 01 0 b 00000010 2 2 0 x 02 0 b 00000011 3 3 0 x 03 : : 0 b 01111111 127 0 x 7 f 0 b 10000000 128 -128 0 x 80 : : 0 b 11111100 252 -4 0 xfc 0 b 11111101 253 -3 0 xfd 0 b 11111110 254 -2 0 xfe 符号ありは ここで 正負が 入れ替わる 0 b 1111 255 -1 0 xff 符号あり整数の場合は最上位ビットを符号ビットとして扱う(2の補数表現)
40 教科書 pp. 50 -55. 16 bit 整数の N 進数の表現 2進数 符号なし 10進 数 符号あり10進 数 16進数 0 b 00000000 0 0 0 x 0000 0 b 000000001 1 1 0 x 0001 0 b 000000010 2 2 0 x 0002 0 b 000000011 3 3 0 x 0003 : : 0 b 011111111 32767 0 x 7 fff 0 b 100000000 32768 -32768 0 x 8000 : : 0 b 111111100 65532 -4 0 xfffc 0 b 111111101 65533 -3 0 xfffd 0 b 111111110 65534 -2 0 xfffe 符号ありは ここで 正負が 入れ替わる 0 b 11111111 65535 -1 0 xffff 符号あり整数の場合は最上位ビットを符号ビットとして扱う(2の補数表現)
41 N bit 整数の最大値・最小値 Bit数 符号あり10進数最小値 符号あり10進数最大値 符号なし 10進数最大値 8 -128 127 255 16 -32768 32767 65535 32 -2147483648 2147483647 4294967295 64 -9223372036854775808 9223372036854775807 18446744073709551615
45 教科書 pp. 52 -56. メモリの構成 • 1 byte単位でアドレスが振られている • つまり各アドレスには 1 byteの値を格納出来る 0 x 000000000 0 x 00000001 0 x 0000000001 0 x 00000002 0 x 0000000002 0 x 00000003 0 x 0000000003 0 x 00 : : 0 xffff 0 x 00 アドレス 格納値 : : 0 xffffffff アドレス : : 0 x 00 格納値
51 教科書 p. 54. リテラル • ソースコードに直接記述された値 • 数値、文字列等 wavtest. c //. . . int main(int argc, char *argv[]) { if (argc < 4) { printf("Usage: %s output_file micro_sec MIDI_note_Nonn", argv[0]); return EXIT_FAILURE; } FILE *fp; if (fp = fopen(argv[1], "wb")) { fwrite_wav(44100, atoi(argv[2]), atoi(argv[3]), fp); fclose(fp); } return EXIT_SUCCESS; } 赤字で示したような部分が リテラルに当たる
53 整定数のリテラル • 何も指定しないと int 型 • 末尾に接尾子(U, L)を付けると型指定される int long unsigned int unsigned long i l ui ul = = 1234; 1234 L; 1234 UL; // // int 型 long 型 unsigned int 型 unsigned long 型
57 浮動小数点数定数のリテラル • float f = 1234 F; double d = 1234; long double ld = 1234 L; double e // float 型 // double 型 // long double 型 = 1. 234 E 5; // double 型の 123400
58 教科書 p. 51. ASCII文字コード表 4 上 位 ビ ッ ト 0 1 2 3 4 5 6 7 8 9 A B C D E F 下位4ビット 0 1 2 NUL SOH STX DLE DC 1 DC 2 SP ! " 0 1 2 @ A B P Q R ` a b p q r 3 ETX DC 3 # 3 C S c s 4 EOT DC 4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 7 8 9 A B C D E F ACK BEL BS HT LF VT FF CR SO SI SYN ETB CAN EM SUB ESC → ← ↑ ↓ & ' ( ) * + , -. / 6 7 8 9 : ; < = > ? F G H I J K L M N O V W X Y Z [ ] ^ _ f g h i j k l m n o v w x y z { | } ~ DEL http: //ja. wikipedia. org/wiki/ASCII 赤字は制御コード
59 教科書 p. 51. 制御コード HEX Abbr ctrl eseq Name Hex Abbr ctrl eseq 0 x 00 NUL ^@ Null 0 x 10 DLE ^P Data Link Escape 0 x 01 SOH ^A Start of Heading 0 x 11 DC 1 ^Q Device Control 1 0 x 02 STX ^B Start of Text 0 x 12 DC 2 ^R Device Control 2 0 x 03 ETX ^C End of Text 0 x 13 DC 3 ^S Device Control 3 0 x 04 EOT ^D End of Transmission 0 x 14 DC 4 ^T Device Control 4 0 x 05 ENQ ^E Enquiry 0 x 15 NAK ^U Negative Acknowledgement 0 x 06 ACK ^F Acknowledgement 0 x 16 SYN ^V Synchronous idle 0 x 07 BEL ^G a Bell 0 x 17 ETB ^W End of Transmission Block 0 x 08 BS ^H b Back Space 0 x 18 CAN ^X Cancel 0 x 09 HT ^I t Horizontal Tab 0 x 19 EM ^Y End of Medium 0 x 0 a LF ^J n Line Feed 0 x 1 a SUB ^Z Substitute 0 x 0 b VT ^K v Vertical Tab 0 x 1 b ESC ^[ 0 x 0 c FF ^L f Form Feed 0 x 1 c FS ^ File Separator 0 x 0 d CR ^M r Carriage Return 0 x 1 d GS ^] Group Separator 0 x 0 e SO ^N Shift Out 0 x 1 e RS ^^ Record Separator 0 x 0 f SI ^O Shift In 0 x 1 f US ^_ Unit Separator 0 x 20 SP Space 0 x 7 f DEL ^? Delete e Name Escape
- Slides: 63