アセンブリ言語で、最大公約数を求めるプログラムを
つくらなければならないんですが、
まぁ...だいたいできたんですが...ちょっとわからないトコが
ありまして...
acc(アキュムレータ)にはいってるデータが、負のバアイに、
それを正にかえたいんですが、どうしたらいいんでしょう?
ビット反転さして、1足したらいいんじゃないか、ってのを思いついたんですが、
(これもあってるのかどうか自信ないんですけど...)
ナンカ、反転さす命令がないみたいで...がっくシ...
ということで、だれかお力ゾエをおねがい致しまス。
必要かどうかワカリマセンが、とりあえず、
ちょっとだけ命令を以下に挙げておきます。
(たしか、アセンブリ言語って、それぞれ違うっていっても、どれも結構
似てるんですよね...ぼくの頼りない知識がタシカなら...)
ADD,SUB,INC,DEC,OR,EOR,AND,NOT,
LSL,ASL,LSR,ASR,ROL,ROR,SWP
JP,JPc,JPz,JPs,JPv,JP,JP,Call,Ret,
No.5ベストアンサー
- 回答日時:
補数とはですね、「与えられた数を、定められた数から引くことによって得られる数」という意味です。
定められた数には、基数のべき乗か、それより1少ない値を使います。※以下、与えられた数をA、Aの基数をn、Aの桁数をkとします。
※以下、aのb乗を、a^bと表します。
※以下、n進数のAという表現を、A(n)と表します。
基数のべき乗を使って求めた補数を、「基数の補数」といいます。
Aの基数の補数は、n^k-A
基数のべき乗-1を使って求めた補数を、「基数-1の補数(減基数の補数)」といいます。
Aの減基数の補数は、(n^k-1)-A
具体的な例を挙げてみます。
1)300(10)の10の補数(基数の補数)
n=10 k=3 なので
10^3 - 300 = 1000 - 300 = 700
2)300(10)の9の補数(減基数の補数)
10^3-1 - 300 = 999 - 300 = 699
3)01001101(2)の2の補数 (10進数に直すと77)
n=2 k=8 なので
2^8 - 01001101 = 100000000 - 01001101 = 10110011
(1BYTEの符号付き10進数に直すと-77)
4)01001101(2)の1の補数
2^8-1 - 01001101 = 11111111 - 01001101 = 10110010
(1BYTEの符号付き10進数に直すと-78)
ざっとなので、あまり伝わらないかもしれません。
第2種情報処理、あるいは基本情報処理試験用のテキスト(問題集ではない)に、たいていは解説されていると思いますので、一度足を運んでみてはいかがですか?
詳しい解説ありがとうございました。
この「補数」の本質はあまり理解することはできなかったものの、
定義はつかめたので、今後、詳しく習うかもしれないときの基盤となったと思います。
P.S.
>「与えられた数を、定められた数から引くことによって得られる数」
この定義にのっとって数でいろいろ遊んでたら、2進数において
全ビット反転させて、1足せば符号がかわると発見したんですかねぇ...
それとも、2進数において全ビット反転させて、1足せば符号がかわる、
ということから拡張してこの体系ができたんですかねぇ...
いずれにしても先人たちは数字遊びが好きですねぇ...
あっ、追伸かいててまたギモンが...
2の補数とかって、符合が変わるっていう有用性が明らかに存在するようですけど、
一般的な補数って何かの役に立ったりしているんですか?
余計な質問ですが、ヒマがあったらでいいので、おねがいします。
No.6
- 回答日時:
>いずれにしても先人たちは数字遊びが好きですねぇ...
全くですよね。
>2の補数とかって、符合が変わるっていう有用性が明らかに存在するようですけど、
>一般的な補数って何かの役に立ったりしているんですか?
これは数学全般にいえることですよね。
実際に必要になってみないと、何言ってるのか分からない(笑)
公式暗記、問題のケース分け作業の繰り返しになっちゃう。
・・・というわけで、私も「補数」が何の役に立っているのか、2進数の符号反転という一面しか知らないんです。中途半端ですいません、、、(汗)
カテゴリを数学に移して、質問されてみてはいかがですか?
くだらない質問に付き合っていただき、ありがとうございました。
そうですね。
大事なことは、なんの役に立つのか、ではなく、どう役に立てるか、ということでしたね。
ちょっとウッカリしてると、何のためにベンキョウしてるのかすぐ忘れちゃいますね。
イカンイカン。
No.4
- 回答日時:
> ビット反転さして、1足したらいいんじゃないか
すごいですね。まさしくその通りです!
ある数Aの2の補数を求めると、それが-Aになるのです。
ただ2の補数を求めるには、本当は「補数」をよく理解しておく必要があるのですが、これが結構覚え難いので、みな簡単な方法を使うのです。
それが「全ビット反転+1」なんです。
正確には「減基数の補数+1」という考え方に基づいた計算なのですが、2進数に限った場合、全ビットを反転させるだけで「減基数の補数」が求まります。
つまり、
NOT acc
INC acc
でいいわけですね。
ymmasayanさんがおっしゃっていた、
> オール1とEORをとれば全ビット反転する
のオール1とは、全ビットが1になった値、つまり-1のことです。
つまり、
EOR acc, -1
INC acc
でもいい、というわけです。
(アセンブラによっては、いきなり-1とのEORをとれないものもあります。その場合、データレジスタに-1を転送して、EORをとってください)
「補数」の完全制覇は難しくても、これならだれでも覚えられますよね。
アドバイスありがとうございました。
みなさんのおかげで、最大公約数を求めるプログラムはメデタク完成したわけなんですが...
ところで、ちょっと気になったのですが、補数、とはいったい何なんですか?
そういえば、昔、センセがチラッと口にしたことがあったような気がします。
そのときはタシカ...
「全ビット反転させたモノが1の補数、それに1加えたものが2の補数。」
とだけ言って後は何も言いませんでした。補数の本質って何ですか?
どういう意味が込められているのですか?
かなりオクワシソウナ印象を受けたので、
よかったら教えてくださるとありがたいでス。
(サワリだけでもいいんです。ちょっと気になってしまって...)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
Python: 数値を反転させたい
-
ビットシフトってどんな時使うの?
-
エクセルVBAのIf,Then 構...
-
文字参照は10進数と16進数では...
-
verilog 符号付加減算(最上位...
-
命令について
-
10進数(+-)→2進数への変換(2)
-
シフト演算子について・・・意...
-
03分22秒36のような時間の単位...
-
入力回数のカウントをする方法
-
アセンブラからC言語に変換する...
-
PICに書き込むプログラムや変数...
-
レジストってなんですか?
-
H8マイコンについて教えてくだ...
-
delph5 ボタンの色を変更するに...
-
昔のゲーム製作に使用する言語...
-
VisualStudioでC++からx64のア...
-
フローチャートを書く書かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
8ビットのデータの、先頭ビット...
-
命令について
-
ビットシフトってどんな時使うの?
-
一般のソフトで画像を扱う場合...
-
文字参照は10進数と16進数では...
-
符号無し整数xを右にnビット回転
-
verilog 符号付加減算(最上位...
-
03分22秒36のような時間の単位...
-
算術シフト演算が成り立つ理由...
-
C言語で128bitの2進数のビット...
-
1の補数
-
C言語やC++言語でビット毎に値...
-
16ビットCPUで32ビットの計算方法
-
PLC 命令について
-
アクセス(2003)のVBAでビット...
-
Python: 数値を反転させたい
-
整数除算の意味とは?
-
シーケンス制御についての質問...
おすすめ情報