大学生エンジニアの技術ブログ

Technical blog

Learn More
投稿日:2019年01月27日

【アセンブラ言語】固定少数点から浮動少数点に変換するプログラムを実装してみた!

ゴール

アセンブリ言語で固定小数点から浮動少数点に変化するプログラムを実装する。

 

入力の2進固定少数点に制限をつける

[制限]

1:符号はつける

2:数字の先頭はかならず1

3:必ず16桁

 

 

固定少数点をINで入力する

以下のコードを実装して、固定小数点を入力させる。

 

 

 

DS(領域確保命令)

[例]

LABEL1 DC 16 #LABEL1番地から16語の領域を確保

 

つまり、入力コードではDATAとLENにそれぞれ256語と1語の領域を確保したことになる。

 

+111.1を入力

+111.1を入力した時のメモリの内容を見ると以下のようになっている。

 

[番地]:[内容]

 

[DATA]:[+]

[DATA+1]:[1]

[DATA+2]:[1]

[DATA+2]:[1]

[DATA+3]:[.]

[DATA+4]:[1]

 

[LEN]:[6]

 

符号部の処理

 

 

指数部の処理

 

 

ST(ストア命令)

ここで簡単にストア命令に関して、解説する。

 

使用例を2つあげる。

 

1:ST  GR0,LABEL1 #GR0のデータを実行アドレスLABEL1にストア

2:ST  GR0,LABEL1,GR1 #GR0のデータを実行アドレス(LABEL1+GR0)にストア

 

といった形で用いられる。

ここでいう、ストアというのはデータをメモリに格納するといっても良いだろう。

 

 

仮数部の処理

ここでは小数点が抜かれた、入力値を用いることを前提で処理を行う。

 

 

SUBL

SUBL(論理減算命令)について、簡単に解説する。

 

今回の場合だとリテラルを用いて記述されているので

SUBL  GR4, =#30

 

GR4-30(16)の結果をGR4に格納するという処理である。

 

 

またこのコードでやっていることを簡単にまとめると、

仮に小数点を除いた、1010101010101010で入力されたとすると

10進数の43690でGR3に保存するという処理になっている。

 

 

 

感想・気づき

アセンブラってめんどいけど、ちゃんと理解すれば、プログラムを理解する基礎力が高まるとおもう。

 

 

最後まで読んで頂き
ありがとうございました。
SNS等でのシェアが頂ければ幸いです。

Created by KATUO - Copyright 2019