- 締切済み
68000アセンブリについて
68000アセンブリを用いて四則演算をしたとき ADDとSUBで求めた結果は2進数の符号付、符号なしで計算した両方の結果で答えがでますか? 今68000のアセンブリをもちいて16進数のEOOOと1000の和と差を出しているのですが符号なしだと結果はあうのに 符号付きだと結果があいません。 つまりADDとSUBの結果を符号付き、と符号なしの2進数に変換して10進数に変換した結果と 足すものを初めから符号付き、符号なしにして自分で手計算した結果と同じになりますか? わかりにくい文章ですみませんが わかるかたお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
2の補数を使えば全く同じ命令で加減算できます. オーバーフローするときも, 「オーバーフローした」という情報を適切に扱えば正しい結果を得ることができます. だからこそ, ほとんどの場合で符号付きの整数を表すときに 2の補数を使うんだけどね.
- titokani
- ベストアンサー率19% (341/1726)
#1です。 まったく正しい結果に見えますが・・。 符号なしとすると、 E000h+1000h=F000h E000h-1000h=D000h であるのは明らかとして、 符号ありで考えると、 E000h→-(10000h-E000h)=-(2000h)=-8192 1000h→4096 ですから、 -8192+4096=-4096=10000h-(4096)=10000h-1000h=F000h -8192-4096=-12288=10000h-(12288)=10000h-3000h=D000h となります。 符号あり、符号なし、どちらで計算したとしても正しい結果です。 「2の補数」について調べれば、もっと詳しいこともわかると思います。
- titokani
- ベストアンサー率19% (341/1726)
具体的にどんなコードを書いて、どんな結果となったのでしょうか? 68000の場合、add,subともに、バイトかワードかロングワードかの区別が必要だったかと記憶していますが。
補足
ADD.w D0,D1 SUB.w D2,D3 です。 D0、D3にはE000がD1,D2には1000が入っています。 結果はそれぞれF000とD000になります。 この場合に結果は符号付き、符号なしの両方で通用するのですか?