KATUBLO
2019年01月28日

【アセンブラ言語】CASSLIIで分数を入力し既約分数に変換する方法

こんにちは。KATUOです。CASSLIIで分数を入力し、アセンブラ言語で既約分数に変換するまでの過程をまとめていこうと思います。

 

既約分数とは?

分母と分子がそれぞれ共通の約数を持たない分数のこと。一般的にはこれ以上約分することができない分数といったりもする。

 

 

 

分数を入力する

入力は 32/24 といったように間に 「/」を挟んで、入力を行う。

 

メモリ空間内ではこれらの入力は以下のように保存されている。

 

 

[番地]:[内容]

 

[DATA]:[3]

[DATA+1]:[2]

[DATA+2]:[/]

[DATA+3]:[2]

[DATA+4]:[4]

 

 

入力された値を数値に変換

実際のコードはここでは書かないが、方針として、3×10+6×1 = 36 といったようにそれぞれの桁の値を[math]10^n  (1桁だったらn=0)[/math]をかけて足し合わせれば、分子、分母を求めることができる。

 

 

既約分数表現に変換

分母と分子をそれぞれ

 

[math]a/{gcd(a,b)}[/math]

[math]b/{gcd(a,b)}[/math]

 

[math]gcd(a,b)[/math]はa,bの最大公約数。

として分母、分子、それぞれの最大公約数で割ったものを再度、分母、分子とすると既約分数に変換することができる。

 

ユークリッドの互除法を用いて最大公約数を求める

 

高校数学でやりましたね。懐かしい。笑

 

 

では今回の入力32/24のgcd(32,24)を求めて見よう。

 

32 ÷ 24 = 1 … 8

24 ÷ 8 = 3 … 0

 

余りが0になった時に割る数が最大公約数なので、gcd(32,24) = 8 である。

 

 

ユークリッド互除法のアルゴリズム

実際のコードでは書かないが、考え方を載せておく。

 

 

何の言語でもこんな感じに実装すれば、ユークリッド互除法のアルゴリズムが組めるとおもう。

 

 

 

アセンブラ言語を学ぶ上でおすすめの参考書

 

64ビットアセンブラ入門―64ビットCPUの基本構造もやさしく解説

↑良さげな参考書。実際、大学の授業やネットで調べるよりも参考書でじっくり勉強した方が身につくと思います。将来有望な情報工学を学ぶ学生は基礎力を学生のうちに身に付けるのが大切であると思うので、リンク先の参考書を一目通して置くと良いかもしれません。

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

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習をスタート。この時期からプログラミングにどハマりし、現在までに「AIスタートアップ」「Webマーケティング会社」でエンジニアとしての業務に没頭してきた。

大学生必見就活イベント