%=====================================================================
% 秋田高専 3E 電子計算機用テキスト
% 記数法
% last updated 2004.4.10
%    created by  Masashi Yamamoto
%     e-mail yamamoto@akita-nct.jp
%=====================================================================
\documentclass[10pt,a4paper]{jarticle}
\usepackage{graphicx,amsmath,amssymb,ascmac,float}
\usepackage{html, listings, jlisting}
\usepackage{slashbox}
\oddsidemargin 0mm  %左の余白 25.4mm-0mm　奇数ページ
\evensidemargin 0mm %左の余白 25.4mm-0mm　偶数ページ
\textwidth 160mm
%
\newcommand{\command}[1]{「\texttt{#1}」}
\newcommand{\cl}[1]{\texttt{#1}}
\newcommand{\tw}[1]{\texttt{#1}}
%
\newcounter{toi_num}
\newcommand{\toi}{\textbf{\texttt [問\arabic{toi_num}]}
   \addtocounter{toi_num}{1}}
\newcommand{\qbox}[1]{
    {\fboxsep=2pt\fboxrule=0.4pt\fbox{\hspace{3mm}{#1}\hspace{3mm}}}
}
%
\renewcommand{\lstlistingname}{リスト}
\lstset{language=C,%
        basicstyle=\footnotesize,%
        commentstyle=\textit,%
        classoffset=1,%
        keywordstyle=\bfseries,%
	frame=tRBl,framesep=5pt,%
	showstringspaces=false,%
        numbers=left,stepnumber=1,numberstyle=\footnotesize%
	}%
%
\begin{htmlonly}
\usepackage{verbatimfiles}
 \providecommand{\lstinputlisting}[2][]{\verbatimlisting{#2}}
\end{htmlonly}
%
%
\begin{document}
\title{情報のコード化とCOMET IIでの文字の取り扱い}
\date{2005年11月11日}
\author{山本昌志\thanks{国立秋田工業高等専門学校　電気工学科}}
\maketitle
%
%=====================================================================
\section{前回の復習と本日の内容}
%=====================================================================
%---------------------------------------------------------------------
\subsection{前回の復習}
%---------------------------------------------------------------------
前回の講義内容は以下の通りで，教科書のP.9〜P.12に対応する．課題ができていれば，
十分である．
%
\begin{itemize}
 \item{COMET IIのメモリー}
 \item{負の数の表現方法(2の補数)を示した．}
\end{itemize}
%
%---------------------------------------------------------------------
\subsection{本日の内容}
%---------------------------------------------------------------------
本日の講義内容は以下の通りで，教科書のP.12〜14に対応する．
%
\begin{itemize}
 \item 情報のコード化
 \item COMET IIの文字の取り扱い方
 \item これまでのまとめ
\end{itemize}

%
%=====================================================================
\subsection{情報のコード化とメモリーへ格納}
%=====================================================================
一般に，情報を記号によって表現することをコード化(符号化)と言う．表現されたも
のをコード(符号)と呼ぶ．情報を表す記号は，何を使っても良いが，整数を使うのが最も
簡単であるし，コンピューターとの相性も良い．

コンピューターは情報(データ)を加工する機械である．コンピューターで取り扱う情報は，
全てコード化されて，整数で表現される．数値あろうが文字であろうが，音や絵さえも整
数で表されるのである．整数で表すことができたら，2進数での取り扱いが可能となり，
論理回路で処理できるようになる．データを整数で表すことは，コンピューターを用いて
の情報処理の第一歩となる．

整数にコード化された情報を処理するためには，その整数を記憶し，計算する必要があ
る．記憶する役目を担っている装置がメモリーで，計算する役目を担っている装置がCPU
である．ここでは，情報を整数にコード化して，それがメモリーに格納される様子を学習
する．

整数をコード化して，コンピューター(COMET II)のメモリーに格納する方法は，先週まで
に学習した．例えば，図\ref{fig:memory_number}のようにである．これを見れば，整数
がコード化されて，それがメモリーに格納されることが分かるだろう．
\begin{itemize}
 \item 符号無し整数の場合，整数そのものがコードになる．
 \item 符号付き整数の場合，2の補数にしたものがコードになる．
\end{itemize}
%
\begin{figure}[hbtp]
 \begin{center}
  \includegraphics[keepaspectratio, scale=0.8]{figure/memory_number.eps}
  \caption{整数のコード化の例．コード化された整数が，メモリーに格納されている．データの'????'は不明を示す．}
  \label{fig:memory_number}
 \end{center}
\end{figure}
%

この図を見て分かるように，COMET IIのメモリーの中では，符号無し整数の$(65535)
_{10}$と符号付き整数の$(-1)_{10}$は，メモリーの内容は全く同じである．したがって，
COMET IIでは，それら2つの値は全く区別できず，同じ値となってしまうのである．これ
らの情報にはとても大きな違いがあり，これでは使い物にならない．コンピューターその
ものは，アホでこれらの区別はできないが，実際のところプログラムがこれらを区別して
いるのである．これらの値を処理するプログラムでは，符号の有無に区別して計算するの
である．もちろん，この区別はプログラマー(人間)が決めなくてはならない．アホなプロ
グラマーがアホなプログラムを書くと，アホなコンピューターはアホな処理しかしないの
である．
%
%=====================================================================
\section{COMET IIの文字の取り扱い}
%=====================================================================
%---------------------------------------------------------------------
\subsection{文字の取り扱い方}
%---------------------------------------------------------------------
COMET IIで文字列をコード化するためには，JIS X0201ラテン文字・片仮名用8単位符号を
用いる(付録，教科書p.13の表2.3)．表を見て分かるように，この符号は各文字が8ビット
の整数で表現されているだけである．たとえば，
%
\vspace{5mm}
\\ \hspace{20mm}
\begin{tabular}{ccc}
 文字 & 2進数 & 16進数\\
 ! & 00100001 & 21 \\
 + & 00101011 & 2B \\
 3 & 00110011 & 33 \\
 K & 01001011 & 4B \\
 t & 01110100 & 74
\end{tabular}
\vspace{5mm}
\\
%
のようになっている．次の問いに答えよ．
%
\begin{itemize}
 \item{このコードのビット数?．それは，何バイト?．}
 \item{このビット数で表現できる文字数は，いくつか?}
 \item{漢字やカタカナ，ひらがながある日本語の文字はこのビット数で表現できるか?}
\end{itemize}
%

このコードでは，文字を8ビットで表すが，COMET IIは16ビット単位でデータを取り扱う．
一つのアドレスあたり2文字，格納することも考えられるが，そうすると1文字の取り扱い
に困難をきたす．実際，COMET IIでは，上位8ビットを0にして，下位8ビットを使うと決
められている．それについては，教科書P.211の真ん中あたりの文字定数の部分に書いて
ある．

文字がコード化されて，COMET IIのメモリーに格納される様子を図
\ref{fig:memory_Akita_kosen}に示す．メモリーのアドレス\tw{\#A000}から，
\tw{'Akita kosen'}と文字が格納される様子が分かるだろう．
%
\begin{itemize}
 \item{図\ref{fig:memory_Akita_kosen}で，上位8ビットが0になっていること
      を確認せよ．}
\end{itemize}
%
%
\begin{figure}[hbtp]
 \begin{center}
  \includegraphics[keepaspectratio, scale=0.8]{figure/memory_Akita_kosen.eps}
  \caption{文字列のコード化の例．文字列\tw{'Akita kosen'}がコード化され，メモリーに格納されている．データの'????'は不明を示す．}
  \label{fig:memory_Akita_kosen}
 \end{center}
\end{figure}
%
%
%---------------------------------------------------------------------
\subsection{文字と数値の違い}
%---------------------------------------------------------------------
教科書に書いてある通り(P.14)．
%
%=====================================================================
\section{これまでのまとめ}
%=====================================================================
コンピューターを構成する最も重要な要素は，
\begin{itemize}
 \item{Central Processing Unit (CPU:中央処理装置)}
 \item{メインメモリー(main memory:主記憶装置)．単にメモリーと呼ぶことも
      多い．}
\end{itemize}
である．これまでは，メインメモリーの中でのデータ(数値，文字)の格納方法を
学習した．次のようなことを理解していないと，次からわからなくなる．
%
\begin{itemize}
 \item COMET IIでは，16ビットを1ワード(1語)と言い，この単位でデータの
      処理を行う．
 \item メモリーには，1ワード毎にアドレスが割り振られている．
 \item COMET IIでは，整数は16ビットで表現する．符号付整数は次のようにして表す(コー
       ド化する)．
       \begin{itemize}
	\item 正の整数はそのまま，16桁の2進数で(16ビット)で表す．
	      \item 負の整数は，16ビットの2の補数で表す．2の補数への変換方法は以
	      下の通りである．
	      \begin{enumerate}
	       \item 絶対値を2進数で表して，ビット反転する．
	       \item ビット反転した値に+1加算する．
	      \end{enumerate}
       \end{itemize}
 \item{符号付き整数が表すことができる範囲は，以下の通りである．}
      \begin{itemize}
       \item{正の数の絶対値の最大値は，(0111 1111 1111 1111)$_2$ =
	    (2$^{15}$-1)$_{10}$=(32767)$_{10}$}
       \item{負の数の絶対値の最大値は，(1000 0000 0000 0000)$_2$ である．これ
	    は第15ビットが1なので負の数で，2の補数表示となっている．したがって，
	    その絶対値を求めるためには，ビット反転を行い，1を加算すれ
	    ばよい．すると，これは-(2$^{15}$)$_{10}$=-(32768)$_{10}$を
	    表すことが分かる．}
      \end{itemize}
 \item{符号無し整数の場合は，以下の通りである．}
      \begin{itemize}
       \item{表現可能な最小値は，(0000 0000 0000 0000)$_2$ =
	    (0)$_{10}$である．}
       \item{表現可能な最大値は，(1111 1111 1111 1111)$_2$ =
	    (2$^{16}$-1)$_{10}$=(65535)$_{10}$である．}
      \end{itemize}
 \item{数値と異なり，文字にはそれぞれ，番号をつけて区別(コード化)する．COMET II
       の文字のコード化は，規格 JIS X0201 ラテン文字・片仮名用8単位符
      号をつかう．}
 \item{このコードは，8ビットなので，最大256文字しか使えない．数字とア
      ルファベットと片仮名と記号を表すのであれば十分である．漢字は，使え
      ない．}
 \item{COMET IIの1ワード16ビットに対して，文字は8ビットしかつかわない．
      COMET IIでは1ワードで1文字を表すため，16ビットのうち上位8ビット
      は0として，下位8ビットで1文字分を表す．例えば，アルファベッ
      トのYamaを表す場合，Yは(59)$_{16}$，aは(61)$_{16}$，mは
      (6D)$_{16}$，とコード化されるので，COMETのメモリーには，次
      のように格納される．ただし，アドレスの実際の割り当ては，OSが決
      める．}
      %
      \begin{figure}[h!]
       \begin{center}
	\includegraphics[keepaspectratio, scale=0.9]{figure/char_Yama.eps}
	\caption{文字列"Yama"のメモリーへの格納}
	\label{fig:char_Yama}
       \end{center}
      \end{figure}
      %
 \item{数値と文字では，メモリーの中身は異なる．例えば，数値の
      (9)$_{10}$と文字の"9"は，以下のようになる．文字の"9"は，JIS
      X0201では，(39)$_{16}$である．}
      %
      \begin{figure}[h!]
       \begin{center}
	\includegraphics[keepaspectratio, scale=0.9]{figure/char_int_9.eps}
	\caption{数値の(9)$_{10}$と文字"9"のメモリーへの格納}
	\label{fig:char_int_9}
       \end{center}
      \end{figure}
      %
 \item{メモリーの中身を見ると，それが数値なのか文字なのか，判断できない．命令毎
       に数値を扱うのか，文字を扱うのか決まっている．これは，以降の学習で分かる．}
\end{itemize}
%
%=====================================================================
\section{課題(レポート)}
%=====================================================================
\setcounter{toi_num}{1}
以下のデータを格納せよ．ただし，データは，アドレスの\tw{B001}から格納される者と
する．
\begin{quote}
 \begin{itemize}
  \item[\toi] 文字列の"Keisanki"
  \item[\toi] 学籍番号(整数2桁)と自分の名字(ローマ字)．ただし，名字のアルファベッ
	      トは大文字とする．
  \item[\toi] 文字列の"15AB"と16進整数の$(15AB)_{16}$
 \end{itemize}
\end{quote}
%
\begin{figure}[h]
 \begin{center}
  \begin{tabular}{cp{5mm}||c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c||p{5mm}c}
  \multicolumn{1}{c}{アドレス} & \multicolumn{1}{c}{  } &
  \multicolumn{16}{c}{データ}  & \multicolumn{1}{c}{  } &
  \multicolumn{1}{c}{データ} \\
  \multicolumn{1}{c}{(16進数)} & \multicolumn{1}{c}{  } &
  \multicolumn{16}{c}{(2進数)}   & \multicolumn{1}{c}{  } &
  \multicolumn{1}{c}{(16進数)} \\
   %
   \texttt{AFFF} & &
   1&0&0&1&1&1&1&1&0&1&0&1&1&0&1&0& & 
   \texttt{9F5A} \\ \hline
   %
   \texttt{B000} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B001} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B002} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B003} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B004} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B005} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B006} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B007} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B008} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B009} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
   \texttt{B00A} & &
   & & & & & & & & & & & & & & & & &
   \texttt{} \\ \hline
   %
  \end{tabular}
  \caption{メモリー}
  \label{fig:memory_plus_integer}
 \end{center}
\end{figure}
%---------------------------------------------------------------------
\subsection{レポート提出要領}
%---------------------------------------------------------------------
提出方法は，次の通りとする．
% 
\begin{quote}
 \begin{tabular}{ll}
  期限 & 11月18日(金)PM1:00まで \\
  用紙 & A4 \\
  提出場所 & 山本研究室の入口のポスト \\
  表紙 & 表紙を1枚つけて，以下の項目を分かりやすく記述すること．\\
       & \qquad 授業科目名「電子計算機」\\
       & \qquad 課題名「課題4　メモリー中の文字の表現」\\
       & \qquad 3E\quad 学籍番号\quad 氏名\\
       & \qquad 提出日\\
  内容 & 問題の解答．\\
 \end{tabular}
\end{quote}
%
\newpage
%=====================================================================
\section{付録}
%=====================================================================
%---------------------------------------------------------------------
\subsection{JIS X0201}
%---------------------------------------------------------------------
\begin{table}[H]
 \caption{JIS X0201コード表．A1〜A5の記号とカタカナは半角文字である．}
 \begin{small}
  \begin{ttfamily}
   \begin{center}
   \begin{tabular}{|c||c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
    \hline %---------------------------------------------
    %
    下位 & \multicolumn{16}{c|}{上位4ビット}\\
    \cline{2-17}
    4ビット & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & A & B & C & D & E & F \\
    %
    \hline \hline %---------------------------------------------
    %
    0 & NUL & DEL & 間隔 & 0 & @ & P & ` & p & & &   & - & タ & ミ & &  \\ \hline
    1 & SOH & DC1 & !   & 1 & A & Q & a & q & & & 。 & ア & チ & ム & & \\ \hline
    2 & STX & DC2 & "   & 2 & B & R & b & r & & & 「 & イ & ツ & メ & & \\ \hline %"
    3 & ETX & DC3 & \#  & 3 & C & S & c & s & & & 」 & ウ & テ & モ & & \\ \hline
    4 & EOT & DC4 & \$  & 4 & D & T & d & t & & & 、 & エ & ト & ヤ & & \\ \hline
    5 & ENQ & NAK & \%  & 5 & E & U & e & u & & & ・ & オ & ナ & ユ & & \\ \hline
    6 & ACK & SYN & \&  & 6 & F & V & f & v & & & ヲ & カ & ニ & ヨ & & \\ \hline
    7 & BEL & ETB & '   & 7 & G & W & g & w & & & ァ & キ & ヌ & ラ & & \\ \hline
    8 & BS  & CAN & (   & 8 & H & X & h & x & & & ィ & ク & ネ & リ & & \\ \hline
    9 & HT  & EM  & )   & 9 & I & Y & i & y & & & ゥ & ケ & ノ & ル & & \\ \hline
    A & LF  & SUM & *   & : & J & Z & j & z & & & ェ & コ & ハ & レ & & \\ \hline
    B & VT  & ESC & +   & ; & K & [ & k & \{ & & & ォ & サ & ヒ & ロ & & \\ \hline
    C & FF  & FS  & ,   & < & L & \textbackslash & l & | &  & & ャ & シ & フ &
    ワ & & \\ \hline
    D & CR  & GS  & -   & = & M & ] & m & \} & & & ュ & ス & ヘ & ン & & \\ \hline
    E & SO  & RS  &.   & > & N & \textasciicircum & n & \textasciitilde & & & ョ
    & セ & ホ & ゛ & & \\ \hline
    F & SI  & US  & /   & ? & O & \_ & o & DEL & & & ッ & ソ & マ & ゜ & & \\
    %
    \hline %---------------------------------------------
   \end{tabular}
   \end{center}
  \end{ttfamily}
 \end{small}
\end{table}
%
%=====================================================================
\end{document}



