プロが教える店舗&オフィスのセキュリティ対策術

初心者です。下記アセンブラを使った「数値表記」プログラムの中で、「10進数と2進数とのXOR処理 33行」をするというCASLⅡのメカニズムが全く解りません。どなたか御教授お願いします。
 A=-32145(10進数)をビット反転処理を用いてGR1(16進数対応)にインデックスとしての数値-32145をSTする。)
; 初期設定
  1 XOR GR1,GR1 GR1:編集格納領域のインデックス
2 LAD GR2,1 GR2:定数1(計算用)
3 LAD GR3,4 GR3:重みテーブルのインデックス
4 LD GR0,A GR0:変換するデータ
  
  ; GR0の2の補数を求めて、符号を反転する
33 XOR GR0,=#FFFF ビット反転・・・・・ビット反転をCASLⅡはどう処理するのか?
34 ADDA GR0,GR2 +1する

   44 A DC -32145


4行目GR0,Aに10進数を入力しておきながら 33行で16進数GR0との間ででXOR のビット反転処理をしておりますが私にはこの処理が全く不自然に写ります。
やさしく説明シテいただくようよろしくお願いしたします。               SK

A 回答 (3件)

10進、16進、2進数などは人間が解りやすいように表現する手段でしか無い。


「数」としては等価である事が理解できていないのでしょうか?
    • good
    • 0
この回答へのお礼

OnneName様
 早速ご返答いただきましてありがとうございます。貴殿の
「数としては等価」は非常に合理的な回答でありました。しかしながら初心者である私としては、その根拠たる資料を現在、書籍、Webにて収集している段階です。できれば関連資料がありましたら教えていただけませんでしょうか?
                      sk1954

お礼日時:2018/03/02 13:08

高校の数学の教科書にでもあたれば「同じ数であってもいろいろな表し方がある」ことは書いてあると思うよ.

    • good
    • 0
この回答へのお礼

お答え有難うございました。残念ながら私の質問とは別のカテゴリーのようです。質問が悪かったようです。申し訳ありませんでした。                  sk1952

お礼日時:2018/03/02 17:16

10進数と16進数でXOR演算をしていることが不自然、ということでしょうか?


ひとことで言えばアセンブラソースリストでの表現法が違うだけでメモリーに記憶させてしまえば同じ状態になります。つまり電圧の高い状態と低い状態が16個並んだものになります。その内容が10進数なのか16進数であるのかといった情報は記憶されません。
お尋ねの -32145 は10進数ですね。これは、
2進数で表現すると 1000 0010 0110 1111 になり、
16進数で表現すると 826F となります。
この3つの表現方法はマシン語になってしまえば同じ形になります。

XORという演算でビット反転ができるのか、との疑問でしょうか。
できます。XOR演算は2つの入力A、Bに対して次のような演算をします。
  A B 結果
  0 0 0
  0 1 1
  1 0 1
  1 1 0
一方の入力(例えばA)が1なら結果は他の入力(例えばB)の逆になっていますね。これを使います。
33行のXORでは、
 ( 1000 0010 0110 1111 ) XOR ( 1111 1111 1111 1111 ) の演算をします。
対応するビットごとに上の表をあてはめてください。結果は左の 1000・・・の1と0を逆にしたものになります。

余計なことですが自分自身とXORすると全ビットがクリアーされます。
上の表で 0 XOR 0 = 0 、 1 XOR 1 = 0 となることでわかりますね。
プログラム1行目でこれを使っています。XORはこのようなちょっと変わった使い方もできます。

うまく書けなくて申しわけありません。不明点は補足に書き込んでください。
小生アセンブラ専門でやっていました。6800からZ80、6502やPICもやりました。CASLは全く知りませんがnetにリファレンス一覧表があったので何とかお答えできると思います。
    • good
    • 0
この回答へのお礼

m-jiro様
 明快かつ懇切丁寧なる回答をいただき、大変「嬉しい」気持ちです。これで次のステップに行けると思うとやる気満々になりました。重ね重ねお礼申し上げます。     sk1952

お礼日時:2018/03/03 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!