- 1 名前:デフォルトの名無しさん [2011/08/28(日) 12:36:52.66 .net]
- 初心者OK!質問大歓迎!のアセンブラのスレッドです。
基本情報の勉強中の人、PICやH8を勉強中の学生などなど…
- 231 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:23:05.68 .net]
- 説明がおかしいという考えに及ばないところが馬鹿丸出し
- 232 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:24:23.70 .net]
- >>226
>こんなこと一々説明されないと理解できないことは恥だと思うべきだと俺は思うが、 >今問題にしているのは実行効率だから。 > >なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても >コードに現れない。 説明求められてんのはロジックなのに変な言い訳w
- 233 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:26:43.37 .net]
- コード提示すりゃ済む話を長々と引っ張るネw
- 234 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:27:39.23 .net]
- >>229
馬鹿って本当鳥頭だよな。 >>226は>>225に対する回答だ。
- 235 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:29:21.92 .net]
- >>226
>今問題にしているのは実行効率だから。 > >なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても >コードに現れない。 どういう処理を機械語に落としたらどの程度の効率になるかなんてのは、自分で触ってる プロセッサなら当たり前に想像付くようなモンじゃね? お前、自分はそういう見積もりが出来ませんと言ってるワケ?
- 236 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:31:25.73 .net]
- >>231
求められてるのはロジックだと言ってるよ。お前が実行効率を理由にコードを提示しない理屈は通らんよ。
- 237 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:34:38.69 .net]
- まあ、コードの提示がない時点で出来ませんと言ってるも同然なんだが
- 238 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:38:55.58 .net]
- >>203
>っていうか、こんだけ絡んでくる馬鹿が多いってことは、 >つまりこの程度の常識を知らない奴が多いってことか.... 常識って言うなら、どっかの他人が書いるコードとかロジックの説明のページ、ゴマンとあんじゃね? お前に具体的なコード書いたりすんのが無理ならそのURL書くだけでもいんじゃね?
- 239 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:41:40.33 .net]
- 訂正
×どっかの他人が書いる ○どっかの他人が書いてる
- 240 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:45:14.11 .net]
- >いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)
>に変換するのに普通はそんな間抜けな方法は取りませんw まあ、BCD(=二進化十進数)の言葉の意味も理解してない馬鹿みたいだし。
- 241 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:54:43.27 .net]
- >>165
>いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw) Man page of PRINTF linuxjm.sourceforge.jp/html/LDP_man-pages/man3/printf.3.html > o, u, x, X > unsigned int 引き数を、 符号なし8進数 (o), 符号なし10進数 (u), 符号なし16進数 (x と X) に変換する。 「10進数」なんて↑に限らず良く使われる用語では? 何がおかしいのだろう?
- 242 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:17:06.12 .net]
- スレタイも読めない奴が上から目線で初心者を叩くスレがあると聞いてきたんですが、もしかしてここですか?
- 243 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:23:59.34 .net]
- ここはアセンブラ初心者が上級者ぶって初心者を叩くスレだから
- 244 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:24:21.05 .net]
- >>239
違いますね。ここは知識豊富な上級者様(=>>203)に、「この程度の常識を知らない奴」等が教えを請うスレです。
- 245 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:52:24.06 .net]
- >>187
ひょっとしてお前こういうこと↓言いたいわけ? typedef unsigned char bcd_t[5]; void put10(unsigned n) { bcd_t ans; bcd_t t; int i; memset(ans, 0, sizeof(ans)); for (i = 0; i < 32; i += 8) { byte2bcd(&t, n & 0xff); bcdMultPowerOf2(&t, i); bcdAdd(&ans, &t); n >>= 8; } bcdPut(ans); } byte2bcd() の中身、割り算なしでどういう実装になるか教えてくれん? まさかテーブルじゃねぇよな?
- 246 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:53:06.34 .net]
- >>238
たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw 「整数値を、8進法 (o), 符号なし10進法 (u), 符号なし16進法で数字(列)に変換する」が正しい。
- 247 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:53:54.99 .net]
- つーかこの程度のコードも明示できないんだとしたら終わってるだろ。
- 248 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:59:20.39 .net]
- >>243
>たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw 日本人が書いたと思われる Ruby のマニュアルにも「2進数」なんて語が出てくるが、これも間違い? sprintfフォーマット www.ruby-lang.org/ja/old-man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html > Ruby の sprintf フォーマットは基本的に C 言語の sprintf(3) のものと同じです。ただし、 > short や long などの C 特有の型に対する修飾子が ないこと、2進数の指示子(%b)が存在すること、
- 249 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:07:11.64 .net]
- >>242
byte⇒BCDはuintの上位バイトから実行した方が効率がいい。 byte⇒BCDの部分は除算命令でもテーブル参照でも何でも構わない。 そこで除算を使うななんて言ってない。
- 250 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:10:25.84 .net]
- おっ、コードの一つも提示できなかった奴がなんか言ってるw
- 251 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:11:41.24 .net]
- >>246
>そこで除算を使うななんて言ってない。 「というか、だから少なくとも除算がネイティブな機能として実装されてないようなCPUなら 10で割るなんて方法は取らない。」
- 252 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:13:50.08 .net]
- >>248
ホント馬鹿の頭脳は8ビットだな。
- 253 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:14:53.62 .net]
- なーんか、こういう高速化方法もあるよぐらいで済ましときゃよかったのに「常識」とか言っちゃって引っ込みが付かなくなったカンジね
- 254 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:17:21.46 .net]
- 馬鹿の癖にプライドだけは高い奴の典型
- 255 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:18:03.42 .net]
- >>250
恥を知らないって幸せだね。
- 256 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:21:00.70 .net]
- >>187
>次のものはどんなCPUでも比較的実装が簡単 > > - BCD同士の加算 > - BCDの2のべき乗倍 > - byte(nibbleでもいいけど) ⇒ BCD変換 「どんなCPUでも」って、BCD演算サポートしてないCPUにはしんどいんじゃないの?
- 257 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:23:30.92 .net]
- 結局、馬鹿が自分の思い込みを常識と勘違いしてただけでしたチャンチャン
- 258 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:28:13.40 .net]
- PLC(いわゆるシーケンサ)のCPUならBCD演算今でもサポートしてるよ
ニモニックで書けば一応アセンブラか? もっともPLCのCPUはSHとかのどこにでもあるCPUの上の仮想CPUだけど
- 259 名前:ね []
- [ここ壊れてます]
- 260 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:50:48.10 .net]
- >>187
>次のものはどんなCPUでも比較的実装が簡単 > - BCDの2のべき乗倍 試しにZ80で2**24倍するコード書いてみたが処理重すぎだろ。 ld c,24 loop1:push hl ld b,5 loop2:ld a,(hl) add a,(hl) daa ld (hl),a inc hl djnz loop2 pop hl dec c jp nz,loop1 ret これだけでざっと見て5000サイクル位掛かるじゃねーか。10で割ったほう速いだろ。
- 261 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:53:56.86 .net]
- >>255
>PLC(いわゆるシーケンサ)のCPUならBCD演算今でもサポートしてるよ だから何? 8080だって6502だってBCD演算今でもサポートしてるけど?
- 262 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 22:13:24.54 .net]
- BCDで2倍を24回繰り返すのと、BCDで16777216倍すんのと、どっちが速いだろう?
- 263 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 04:46:30.85 .net]
- ここまでスレが伸びるとか10進数表示って奥が深いんだな
- 264 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 04:53:24.87 .net]
- Cでprintf("%d",v);だけのプログラム作って解析すりゃいいんじゃね
- 265 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 04:57:06.07 .net]
- 解析は犯罪です
- 266 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 05:14:19.27 .net]
- 6502って現役なの?リモコン用?
- 267 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 09:44:15.10 .net]
- gccのコード見た方が早くね?
- 268 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 14:16:19.57 .net]
- CASL2で10進数表示のコードを提示してください
- 269 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 14:28:12.28 .net]
- >>264
CASL II 入門講座 第5章 数値を10進数の文字列に変換する www.officedaytime.com/dcasl2/pguide/chapter5f.html
- 270 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 14:33:07.30 .net]
- >>264
IN命令とOUT命令 - 3. 応用:符号なし10進数を文字列に変換して表示する www-cg.cis.iwate-u.ac.jp/~fujimoto/prog3/printud.html
- 271 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 17:39:33.83 .net]
- このアルゴリズム的に何の意味もないコメントの付け方をみると無性に腹がたつ。
学習用とはいえ、いちいち命令をすべて日本語に読み下すなと。
- 272 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 17:53:25.73 .net]
- >>267
どれのこと言ってんの?
- 273 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 17:57:42.24 .net]
- >>262
割と最近の製品の例 www.brielcomputers.com/wordpress/?cat=24 動作しているところ nicoviewer.net/sm4158739
- 274 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 18:23:18.16 .net]
- >>269
どんだけ特殊な製品なんだw こいうお遊び以外では需要なんてないだろ。
- 275 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 18:47:55.08 .net]
- WDCの製品ラインナップにあるからまだ需要もあるのだろう
www.westerndesigncenter.com/wdc/w65c02s-chip.cfm 6年前のトラ技の記事 toragi.cqpub.co.jp/Portals/0/backnumber/2006/06/p245-246.pdf
- 276 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 18:56:26.10 .net]
- 世の中に出回ってる製品のうち、使ってるマイコンの種類をエンドユーザーが分かるものなんて稀だろう。
俺らの知らんところで6502が使われてても不思議はない。
- 277 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:10:17.02 .net]
- ないないw
そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の CPUに需要はない。
- 278 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:14:50.89 .net]
- >>273
>そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の >CPUに需要はない。 新規開発に限ればまあだいたい合ってるが世の中それだけではない。
- 279 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:25:35.33 .net]
- 国内のパチンコやパチスロの
- 280 名前:当たりを決めてるところの制御はいまだにZ80の派生品で行ってるらしい。
外国から見れば、日本のパチンコやパチスロの事情なんてわけの分からん話だろうし、一般に情報も伝わらないだろう。 どこかの国に「日本のパチンコやパチンコ」に該当するものがあったとして、我々はそれを知りうることができるだろうか? 「組み込み「マイコン」以外のCPUに需要はない」と断言する奴は視野が狭いと思う。 [] - [ここ壊れてます]
- 281 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:29:54.80 .net]
- 訂正
×「日本のパチンコやパチンコ」 ○「日本のパチンコやパチスロ」
- 282 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:41:07.16 .net]
- >>275
パチンコ業界のことは知らんが、恐らく派製品ですらなくIPでしょ。 あれをZ80と呼んでよいかは微妙だね。 そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。 都市伝説の類じゃないのか?
- 283 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:43:34.37 .net]
- LE-Techも聞いたことない素人さんですか?
- 284 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:46:42.79 .net]
- まあなんにしろ、仮に事実パチンコにZ80が使われ続けているとしても、
それは政治/行政上の理由という特殊事情で選択されているに過ぎず、技術的あるいは経済的理由で 選択されているわけではない。
- 285 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:47:17.91 .net]
- >>277
>そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。 >都市伝説の類じゃないのか? パチンコ関係じゃ、いまだにZ80の求人あるの知らんの? www.careerjet.jp/search/jobs?s=Z80&l=%E4%B8%AD%E9%83%A8%E5%9C%B0%E6%96%B9
- 286 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:48:37.06 .net]
- >>279
そういう事情が日本以外には存在しないと考えるおバカさんですか?
- 287 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:50:04.35 .net]
- >>275はもはや持論を正当化するための屁理屈に過ぎんな
- 288 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:51:42.19 .net]
- だから知らねえって言ってるだろ。
それに、求人があるからって現行製品かどうか分からんでしょ。 ある種の保守用人員かもしれない。 例えば古い台をゲーセン用に改造するためとか
- 289 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:54:43.54 .net]
- 知らない奴が何いってんだろ?
- 290 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:57:00.93 .net]
- >>283
>それに、求人があるからって現行製品かどうか分からんでしょ。 >ある種の保守用人員かもしれない。 >例えば古い台をゲーセン用に改造するためとか 求人内容見て言ってる? 必死すぎw
- 291 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:58:51.32 .net]
- 初心者の質問スレじゃなくて
プロが語り合うスレになっちまってるな
- 292 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 19:59:12.10 .net]
- >>283
>だから知らねえって言ってるだろ。 知らないくせに断言とか良くできるなー。感心するわ。
- 293 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 20:01:35.65 .net]
- どう見ても片っぽは素人
- 294 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 20:36:32.24 .net]
- 暑苦しいおっさんどもだなぁ
- 295 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 14:45:16.63 .net]
- 64bitだとアセンブラ使えないのか・・
どうしよう
- 296 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 14:49:25.74 .net]
- >>290
インラインアセンブラか何かを勘違いしてる?
- 297 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 19:13:53.50 .net]
- 何ビットだろうと出来ないことはないだろう
最悪、ハンドアセンブルで!
- 298 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 21:08:36.30 .net]
- C言語の入門書をやり終えたら
パソコンが中で何やってるか知りたくなって、アセンブラに興味が湧いたんだけど スレの上のほうで64bit環境じゃうまく動かないって報告があったから… アセンブラで何か作りたいってわけではないのですが、いい参考書あったら教えて下さい 因みにラ・リ・ルって 「アセンブラでアセンブリをアセンブルする」 でいいんですよね?
- 299 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 21:16:26.09 .net]
- >>293
> いい参考書あったら教えて下さい はじめて読む486―32ビットコンピュータをやさしく語る www.amazon.co.jp/gp/product/4756102131/ インテルのマニュアル水で薄めたような内容だけど、まあやさしく書いてる。
- 300 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 23:32:15.67 .net]
- 本読んで終わりって人達ですか?
- 301 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 23:
]
- [ここ壊れてます]
- 302 名前:56:43.22 .net mailto: >>294
それと、はじめて読むアセンブラ―ソフトウェアツールの原点を探る を買ってみます >>295 触って動かしてみたいけど64bit環境しか無いので… [] - [ここ壊れてます]
- 303 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 02:04:23.84 .net]
- >>296
パソコンで64bit環境(x86系)なら、32bitなアプリも作れるでしょうに 何を読んで?そう思ったのかしらんけどね アセンブラっていっても、どのCPU?でやりたいのかな?
- 304 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 02:44:39.11 .net]
- >>293
CPUの中身を知りたいのならオレが今読んで学んでる、Z80マイクロプログラミング実習って本がわかりやすい いきなりx86系とか学ぶと頭ついていかなかった頭の悪いオレからの助言
- 305 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:03:00.55 .net]
- それは違うだろ
Z80も一応調べてみたけど「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」 って感じだった x86の方が明らかに組みやすい
- 306 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:03:50.85 .net]
- 書けても動かないとか?
- 307 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:20:15.82 .net]
- >>299
>「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」 >x86の方が明らかに組みやすい そういうレベルで分かった気になってると、自前で乗除算組まなければいけなくなったときに泣きを見るゾw
- 308 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:27:54.03 .net]
- >おれ、x86のアセンブラ知ってるんだ
それって、かっこいいの?
- 309 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:29:52.70 .net]
- 楽したければ
- 310 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:38:21.04 .net]
- 浮動小数点は上位言語で使えるようになってるからね
アセンブラよりは低レベルな考え方を身につける方がいいんじゃね 今は、CPUに依存した命令が読めればいい方
- 311 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:00:29.29 .net]
- >>302
>それって、かっこいいの? むしろ知らないとCのデバッグにも苦労すると思う。 性能出したいところでコンパイラの出力したコードを参照してソースの書き方変えるとか、当たり前のことだし。
- 312 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:02:43.52 .net]
- >>305
レベルの高いことまでやろうとは思ってないんじゃないの?
- 313 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:43:58.20 .net]
- IEEE754に準拠した浮動小数点演算命令パッケージは探せばあちこちに落ちてるけど
回転/シフト命令だけで結構楽に組めるんだな 超越関数に至ってはSSE2で書いた方がFPUよりも速いという
- 314 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:18:00.98 .net]
- >>297
Intel Core i7 860です >>10-14 を見て64bitだとうまくいかないのかと思いました
- 315 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:25:14.65 .net]
- >>308
>を見て64bitだとうまくいかないのかと思いました Windowsの64bit版だと16bitのコードが動かないのはその通り。 64bitか32bitのコードを動かすか、エミュレータ上で16bitのコードを動かせばよいだけ。
- 316 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 23:46:39.85 .net]
- >>309
調べてみたら win7のxpモードで16bitが動くようなので それでやってみます!
- 317 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:10:27.88 .net]
- mov CS:[w_sp],SP
この第一オペランドの:の意味がわからんのです これはCSとw_sp両方にSPを入れるってことなの?
- 318 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:13:02.28 .net]
- >>311
本かインテルのマニュアルかなんか見れ。
- 319 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:33:38.29 .net]
- 本見たりググったりしたんだけどわかんねーんだよ
記述自体が古いのかな… なんせPC9801のアセンブラだから…
- 320 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:43:22.21 .net]
- >>313
超基本的なことだから、書いてないなら本が悪い。ぐぐってわからんのならお前の頭が悪いわ。
- 321 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:46:33.52 .net]
- 基本的なことなのか!!
すまん…もうちょっと頑張ってぐぐってみる ありがとう
- 322 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:53:13.25 .net]
- あ!わかった!!!
CSってのはコードレジスタだから、そこを基準に[w_sp]分オフセットがかかってるってことなんだな!! わかったぞ! >>313さんありがとう ちゃんと考えなかったオレが悪い 考えるキッカケを作ってくれてありがとう
- 323 名前:デフォルトの名無しさん mailto:sage [2012/09/26(水) 23:54:19.26 .net]
- ごめん313じゃなくて314でした
- 324 名前:デフォルトの名無しさん mailto:sage [2012/09/27(木) 09:47:06.61 .net]
- @
inc dword ptr [count] というのはアトミックですか? ++cnt; をVC10でReleaseコンパイルしたら上記のようになったのですが、 デバッグコンパイルしたら下記のように分解されてしまいました。 A mov eax,dword ptr [count] add eax,1 mov dword ptr [count],eax Aは明らかにアトミックではないと思いますが、 コードの途中で、他のスレッドが同じコードを通ったときに カウントがおかしくなってしまうのは構いません。 2つ以上のスレッドが同時に@かAを通ったときに 動作が異なる可能性があるのかを知りたいです。 (動作が異なるならインラインアセンブラで書くか、 カウントがおかしくなるのが困るようになったときは クリティカルセクションでも使います)
- 325 名前:デフォルトの名無しさん mailto:sage [2012/09/27(木) 10:04:35.72 .net]
- InterlockedIncrement
- 326 名前:デフォルトの名無しさん mailto:sage [2012/09/27(木) 10:06:38.40 .net]
- 一応、そのx86での実装は
普通はinc等ではなく、lock+xadd
- 327 名前:318 mailto:sage [2012/09/27(木) 11:59:10.28 .net]
- >>319 >>320
知りたいのは、マルチスレッドで同じコードを同時に通った場合に、 @とAで動作が異なる可能性があるかどうかなのです。 カウントがおかしくならないようにするための方法を 示していただいたということは、@もアトミックではないと 解釈して良いのでしょうか?
- 328 名前:デフォルトの名無しさん mailto:sage [2012/09/27(木) 21:16:39.57 .net]
- 割り込みコントローラ回りのコーディングが、どうしたものかわかんないんだよなぁ
- 329 名前:デフォルトの名無しさん mailto:sage [2012/09/27(木) 23:58:41.44 .net]
- cmpxchg
- 330 名前:デフォルトの名無しさん mailto:sage [2012/09/28(金) 00:47:19.87 .net]
- H8なら@に相当するコードはアトミックだったよ。割込とタスク両方からカウントを
変更するときに割禁かまさなくて済むから意識的に使った。 だからx86でも@はアトミックだと類推する。
- 331 名前:デフォルトの名無しさん mailto:sage [2012/09/28(金) 01:14:48.26 .net]
- *
add eax,1 * mov dword ptr [count],eax *印のところでスレッド切り替えが起きたらどうなると思う?
|

|