工学実験レポート2    ※無断使用不可
\documentclass[12pt]{jarticle}

\usepackage{graphicx,array}
\title{}
\author{}
\date{}

\begin{document}
 \tableofcontents
 \pagebreak

\section{目的}
アセンブリ言語のプログラムを機械語に翻訳し、KUE-CHIP2で実行することにより、
機械語実行時にCPU内部で生じている動作について理解する。

\section{課題1}
フィボナッチ数列の先頭13個の要素の値、すなわち、$a_{0}$から$a_{12}$までの値を求め、
メモリ80H番地から8CH番地までの間に書き込むプログラムを作成せよ。だたし、$a_{0}$及び
$a_{1}$の値は既知の定数とする。

 \subsection{プログラム}
課題1のプログラムは表1のようになる。

\begin{table}[!h]
\begin{center}
\caption{課題1のプログラム}
\begin{tabular}{p{2cm}|p{5cm}}
\hline
\hspace{0.3cm}機械語&\hspace{1cm}アセンブリ言語\\ \hline\hline
00: 6A 01&\hspace{1.2cm} LD IX , 1\\ 
02: 7C 80&\hspace{1.2cm} ST IX , [80]\\
04: 7C 81&\hspace{1.2cm} ST IX , [81]\\
06: 6A 80&\hspace{1.2cm} LD IX , 80\\
08: C0&Loop : EOR ACC , ACC\\
09: B6 00&\hspace{1.2cm} ADD ACC , [IX]\\
0B: B6 01&\hspace{1.2cm} ADD ACC , [IX+1]\\
0D: 76 02&\hspace{1.2cm} ST ACC , [IX+2]\\
0F: BA 01&\hspace{1.2cm} ADD IX , 1\\
11: FA 8B&\hspace{1.2cm} CMP IX , 8B\\
13: 3B 08&\hspace{1.2cm} BN Loop\\
15: 0F&\hspace{1.2cm} HLT\\
&\hspace{1.2cm} END\\
\hline
\end{tabular}
\end{center}
\end{table}

 \subsection{結果}
プログラムを実行すると、表2のように出力された。ただし、値はすべて16進数である。

\begin{table}[!h]
\caption{課題1の結果}
\begin{center}
\begin{tabular}{|p{3cm}|}
\hline
\hspace{0.9cm}80 : 01\\
\hspace{0.9cm}81 : 01\\
\hspace{0.9cm}82 : 02\\
\hspace{0.9cm}83 : 03\\
\hspace{0.9cm}84 : 05\\
\hspace{0.9cm}85 : 08\\
\hspace{0.9cm}86 : 0D\\
\hspace{0.9cm}87 : 15\\
\hspace{0.9cm}88 : 22\\
\hspace{0.9cm}89 : 37\\
\hspace{0.9cm}8A : 59\\
\hspace{0.9cm}8B : 90\\
\hspace{0.9cm}8C : E9\\
\hline
\end{tabular}
\end{center}
\end{table}


\section{課題4−1}
連結リストにおいて、”4”の要素を挿入するプログラムを作成せよ。

 \subsection{プログラム}
課題4−1のプログラムは表{\ref{課題4−1}} のようになる。
\begin{table}[!h]
\begin{center}
\caption{課題4−1のプログラム}
\label{課題4−1}
\begin{tabular}{p{2cm}|p{5.5cm}}
\hline
\hspace{0.3cm}機械語&\hspace{1cm}アセンブリ言語\\ \hline\hline
80: 08&\hspace{1cm} C1.num:EQU 80H\\ 
81: 00&\hspace{1cm} C1.next:EQU 81H\\
82: 02&\hspace{1cm} C2.num:EQU 82H\\ 
83: 84&\hspace{1cm} C2.next:EQU 83H\\
84: 05&\hspace{1cm} C3.num:EQU 84H\\ 
85: 80&\hspace{1cm} C3.next:EQU 85H\\
86: 04&\hspace{1cm} C4.num:EQU 86H\\ 
87: 00&\hspace{1cm} C4.next:EQU 87H\\
90: 82&\hspace{1cm} head:\hspace{0.6cm}EQU 90H\\ \hline
01: 62 84&\hspace{1cm} LD ACC , C3.num\\
03: 74 87&\hspace{1cm} ST ACC , [C4.next]\\
05: 62 86&\hspace{1cm} LD ACC , C4.num\\
07: 74 83&\hspace{1cm} ST ACC , [C2.next]\\
&\hspace{1cm} END\\
\hline
\end{tabular}
\end{center}
\end{table}


 \subsection{結果}
プログラムを実行すると、表\ref{課題4−1答え}のように出力された。\\
 表\ref{課題4−1答え}より、C2.nextが86、C4.nextが84になったことが分かる。

\begin{table}[!h]
\caption{課題4−1の結果}
\label{課題4−1答え}
\begin{center}
\begin{tabular}{|p{3cm}|}
\hline
\hspace{0.8cm}80 : 08\\
\hspace{0.8cm}81 : 00\\
\hspace{0.8cm}82 : 02\\
\hspace{0.8cm}83 : 86\\
\hspace{0.8cm}84 : 05\\
\hspace{0.8cm}85 : 80\\
\hspace{0.8cm}86 : 04\\
\hspace{0.8cm}87 : 84\\
\hspace{0.8cm}90 : 82\\
\hline
\end{tabular}
\end{center}
\end{table}

\section{課題4−2}
連結リストの全要素のnumメンバの和を求めるプログラムを作成せよ。

 \subsection{プログラム}
課題4−2のプログラムは表\ref{課題4−2}のようになる。

\begin{table}[!h]
\begin{center}
\caption{課題4−2のプログラム}
\label{課題4−2}
\begin{tabular}{p{2cm}|p{5.5cm}}
\hline
\hspace{0.3cm}機械語&\hspace{1cm}アセンブリ言語\\ \hline\hline
80: 08&\hspace{1.2cm} C1.num:EQU 80H\\ 
81: 00&\hspace{1.2cm} C1.next:EQU 81H\\
82: 02&\hspace{1.2cm} C2.num:EQU 82H\\ 
83: 86&\hspace{1.2cm} C2.next:EQU 83H\\
84: 05&\hspace{1.2cm} C3.num:EQU 84H\\ 
85: 80&\hspace{1.2cm} C3.next:EQU 85H\\
86: 04&\hspace{1.2cm} C4.num:EQU 86H\\ 
87: 84&\hspace{1.2cm} C4.next:EQU 87H\\
90: 82&\hspace{1.2cm} head:\hspace{0.6cm}EQU 90H\\
A0: 00&\hspace{1.2cm} sum:\hspace{0.7cm}EQU A0H\\ \hline
00: C0&\hspace{1.2cm} EOR ACC , ACC\\
01: 6C 90&\hspace{1.2cm} LD IX , [head]\\
03: B6 00&Loop : ADD ACC , [IX]\\
05: 6E 01&\hspace{1.2cm} LD IX , [IX+1]\\
07: FA 00&\hspace{1.2cm} CMP IX , 00\\
09: 31 03&\hspace{1.2cm} BNZ Loop\\
0B: 74 A0&\hspace{1.2cm} ST ACC , [sum]\\
0D: 0F&\hspace{1.2cm} HTL\\
&\hspace{1.2cm} END\\
\hline
\end{tabular}
\end{center}
\end{table}

 \subsection{結果}
プログラムを実行すると、表\ref{課題4−2答え}のように出力された。
$$\rm{sum} = 08 + 02 + 05 + 04 = 13$$
より、A0が13になったことが分かる。ただし、値は16進数である。
\begin{table}[!h]
\caption{課題4−2の結果}
\label{課題4−2答え}
\begin{center}
\begin{tabular}{|p{3cm}|}
\hline
\hspace{0.8cm}A0 : 13\\
\hline
\end{tabular}
\end{center}
\end{table}

\section{考察}
アセンブリ言語とC言語は、データの書き込みや読み込みの違い、レジスタの数
などの違いから、アセンブリ言語の方が、プログラムとして複雑になることが分かった。
他に、アセンブリ言語でのデータの変更、for文の表現は、
いくつかの命令文が必要になり、命令が多くなることが分かった。\\
 しかし、機械語に翻訳しやすい点を考えると、C言語などと比べ1つ1つの動作が
分かりやすいと感じた。
\section{感想}
最初、やってることがよく分かりませんでしたが、アセンブリ言語がどんな言語かが
分かってきました。また、データ構造についても考え方が変わりました。
特にリストについて、機械側ではnumとnextの違いはないと感じました。\\
 あと、工学実験は論理回路やアセンブリ言語とかなり大変でしたが、
知らないことが分かったので、とても面白かったです。他に、実験内容には関係ないですが、
レポートを{\LaTeX}で書けたので、そのことも面白かったです。

\end{document}

back