アセンブリ言語で、最大公約数を求めるプログラムを
つくらなければならないんですが、
まぁ...だいたいできたんですが...ちょっとわからないトコが
ありまして...
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.6
- 回答日時:
>いずれにしても先人たちは数字遊びが好きですねぇ...
全くですよね。
>2の補数とかって、符合が変わるっていう有用性が明らかに存在するようですけど、
>一般的な補数って何かの役に立ったりしているんですか?
これは数学全般にいえることですよね。
実際に必要になってみないと、何言ってるのか分からない(笑)
公式暗記、問題のケース分け作業の繰り返しになっちゃう。
・・・というわけで、私も「補数」が何の役に立っているのか、2進数の符号反転という一面しか知らないんです。中途半端ですいません、、、(汗)
カテゴリを数学に移して、質問されてみてはいかがですか?
くだらない質問に付き合っていただき、ありがとうございました。
そうですね。
大事なことは、なんの役に立つのか、ではなく、どう役に立てるか、ということでしたね。
ちょっとウッカリしてると、何のためにベンキョウしてるのかすぐ忘れちゃいますね。
イカンイカン。
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.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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- 哲学 《光あれ》という命令法は どういう実態か 1 2023/01/24 17:57
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- 運転免許・教習所 青信号になったら何秒以内に発進しないといけませんか?、どれだけ慌てても遅いと文句、無視が正解ですか? 6 2022/05/04 14:15
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- IT・エンジニアリング 大規模言語モデルは今後どのように進化していくでしょうか? 1 2023/07/20 19:17
- 政治 自民はどの面下げて憲法違反だと言うてますか? 2 2022/10/20 22:08
- アニメ 「悪役令嬢」の定義は? 2 2023/03/23 11:00
- 発達障害・ダウン症・自閉症 自閉症の自閉度や成長について 1 2023/04/05 16:26
- その他(悩み相談・人生相談) 友達と縁を切ったら逆ギレをしてきました 理由は私に過剰な要求をしてきたからです 相手は車種の指定して 1 2022/04/23 09:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
ビットシフトってどんな時使うの?
-
一般のソフトで画像を扱う場合...
-
8ビットのデータの、先頭ビット...
-
fortran
-
03分22秒36のような時間の単位...
-
シーケンス制御についての質問...
-
情報科学の飽和演算、ラップア...
-
ビットの取り出し方法
-
verilog 符号付加減算(最上位...
-
スロースキャンコンピュータ 加...
-
16ビットCPUで32ビットの計算方法
-
上位ビットと下位ビットの入れかえ
-
PLC 命令について
-
[VBS] 素早くローテート演算したい
-
CASL2(減算命令と比較命令の...
-
シフト演算子について・・・意...
-
実数rの3乗はどうするの?
-
通常の表記から逆ポーランド表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ビットシフトってどんな時使うの?
-
一般のソフトで画像を扱う場合...
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
算術シフト演算が成り立つ理由...
-
03分22秒36のような時間の単位...
-
Python: 数値を反転させたい
-
上位ビットと下位ビットの入れかえ
-
verilog 符号付加減算(最上位...
-
命令について
-
剰余の法が大きい場合のアルゴ...
-
ビット列を表示するプログラム
-
アクセス(2003)のVBAでビット...
-
16ビットCPUで32ビットの計算方法
-
C言語で128bitの2進数のビット...
-
10進数(+-)→2進数への変換(2)
-
シーケンス制御について質問で...
おすすめ情報