トップページ > プログラム > 2019年11月22日 > 2jFqraTL

書き込み順位&時間帯一覧

1 位/124 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000000000013000005110



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
WPF(.NET4.x, .NET Core) GUIプログラミング Part23
アセンブラ初心者スレッド 2©2ch.net

書き込みレス一覧

WPF(.NET4.x, .NET Core) GUIプログラミング Part23
817 :デフォルトの名無しさん[sage]:2019/11/22(金) 15:16:56.99 ID:2jFqraTL
>>811
WinFormsはまだ、Win32のコントロールを使っていたそうですが、WPFは
使ってないそうですから、もっと嫌われている可能性もありますね。
しかも、WPFは書き方もWindows伝統とはかけ離れて、HTML+JSの書き方に
近いようですし。
アセンブラ初心者スレッド 2©2ch.net
507 :デフォルトの名無しさん[]:2019/11/22(金) 16:26:18.45 ID:2jFqraTL
>>498
ニモニックの美しさと分かり易さではZ80。
実用的には8086。
アセンブラ初心者スレッド 2©2ch.net
508 :デフォルトの名無しさん[sage]:2019/11/22(金) 16:34:56.93 ID:2jFqraTL
>>507
ちなみに、CPUとしては両者は親戚みたいなもので、Z80を学んだ後から、
8086へ進んでも文化に共通点が多いので理解し易い。
たとえば、条件分岐は、cmpなどの比較命令を実行して
zero flag や carry flag などに影響を与えた後に、Jcc 命令を使う点や、
cmp以外にsubやaddでも全く同様に zero flag, carry flag などに影響を
与えると言う点が両者で共通している。
他のCPUでは全く違うやり方をとるものも多い。

ところが、Z80は8BIT CPU としてはとても上手くできていた方だが、
8086は、16BIT CPU としては残念な方であった。一つの理由は、
当時は低価格で理想的な16BIT CPUを作るためには、ICにおけるトランジスタの
集積度が不足していたが、8BIT CPUを作るには十分であったためらしい。
なので、8BIT CPUは使い易いものが作れたが、16BIT CPU は使いにくいもの
しか作れなかった、と考えることが出来る。
アセンブラ初心者スレッド 2©2ch.net
510 :デフォルトの名無しさん[sage]:2019/11/22(金) 16:56:01.19 ID:2jFqraTL
>>508
他にも、

1. 両者とも、アラインの揃ってないアドレスからでも16BIT以上のデータを
 読み出せると言う特徴がある。これが出来ないCPUも多く、Apple系は昔そういう
 CPUを使っていたと聞いている。今でもC言語の構造体などで align が細々と
 決まっているのは、後者の文化圏の人達が主導しているのかも知れない。

2. carry flag(8086 では「borrow flag」という名前になっている)を使うと、
 多倍長の加減算が容易に出来るのも両社に共通している。この特徴は、
 他のCPUには無いことが多いらしい。だから、LLVMなどには adc や sbc(sbb)
 相当の命令が無いし、carry flag を捕捉する命令も定義されていない。

3. LLVM では、単純な引き算の延長線上にある cmp 命令でフラグを作った後、
 条件の種類によっていろいろな種類のJcc で条件分岐するという流儀をとっておらず、
 条件の種類によって比較命令自体を変えてしまって、結果は常に 1BIT の
 BOOL値とし。逆に Jcc 命令は原則一種類となっている。これは、LLVMが
 Z80や8086とは異なる文化圏の人が作ったものであるのではないかと推定される。

4.アカデミカルな世界では、CPUとして、業界事実標準の Z80 や 8086 系統ではなく、
 どうも違う文化のものを想定していることが多い気がする。
 色々な言葉が、Z80 や 8086 ではかなり多く共通しているが、LLVMとは全く
 違う。
アセンブラ初心者スレッド 2©2ch.net
529 :デフォルトの名無しさん[sage]:2019/11/22(金) 22:22:56.50 ID:2jFqraTL
>>517
>ただし、命令を組み合わせて同じことが出来る
一年ほど前に調べていたら、x+y に対するキャリーフラグをC言語を使って
作り出すようなことを書いているコードを見つけた。
普通に考えればx,yの最上位ビットに着目すればいいんだけど、
最初に思いつくコードよりかなり短いコードだった。
x,yが8BITの場合、x+yに対するキャリーフラグをcfとすると、
意味的には、
cf = 0;
if ( (x & 0x80) != 0 && (y & 0x80) != 0 ) {
 cf = 1;
}
でいいはずだけど、
cf = (x & y) >> 7;
かな。でも、もっとエレガントなコードだったような気がする。
何か知っていれば教えて欲しい。
アセンブラ初心者スレッド 2©2ch.net
530 :デフォルトの名無しさん[sage]:2019/11/22(金) 22:28:55.69 ID:2jFqraTL
さらに、x, y が符号なし8BIT整数の場合の x - y に対する carry flag については、
cf = 0;
if ( x < y ) cf = 1;
で一応求まるんだと思う。
また、sf(sign flag) に関しては、
sf = 演算結果 >> 7;
でいいと思われる。
アセンブラ初心者スレッド 2©2ch.net
531 :デフォルトの名無しさん[sage]:2019/11/22(金) 22:33:04.48 ID:2jFqraTL
>>530
短く書きたいのであれば、
cf = (x < y);
sf = (x - y) >> 7;
アセンブラ初心者スレッド 2©2ch.net
532 :デフォルトの名無しさん[sage]:2019/11/22(金) 22:40:25.25 ID:2jFqraTL
>>529
cf = (x < (-y));
でも求まるかもしれない。
>>530 を書いてみて気付いた。

>>531 は逆に、
cf = (x & (-y)) >> 7;
でも行ける気がする。
アセンブラ初心者スレッド 2©2ch.net
533 :デフォルトの名無しさん[sage]:2019/11/22(金) 22:46:49.23 ID:2jFqraTL
>>532
すまん。後半部は間違いらしい。
アセンブラ初心者スレッド 2©2ch.net
534 :デフォルトの名無しさん[sage]:2019/11/22(金) 23:19:09.49 ID:2jFqraTL
>>533
>>532の前半部も多分、間違い。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。