[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 11:52 / Filesize : 195 KB / Number-of Response : 910
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… Part 12



1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ]

アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… ( ゚д゚)ウッウー
pc11.2ch.net/test/read.cgi/tech/1174825173/



520 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:01:00 ]
今度はキャメルケースが全部小文字になる方が気になるw

521 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:27:59 ]
大文字、小文字を意識するネーミングは、たいていの場合においてよくないことだと思うぞ。
MontaVista Linux のソースなんか大文字、小文字違いで同じ名前のファイルが
あちこちにあるんで、Windows 上に持ってきて作業できない。
おかげで vi がそこそこ使えるようになっちまったよ。(w

522 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:51:11 ]
>>521
Windowsでも大文字小文字を区別できなかったっけ?
レジストリの設定にそんなのがあった気がする

523 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:36:27 ]
Win32サブシステムがDOSとの互換性のために区別してないだけで
カーネルやファイルシステムレベルじゃ区別されてるな

524 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:39:23 ]
Win32サブシステムでも区別する設定はあるけど
区別しない前提で作ってるアプリばっかりだから
きっとまともに動かないんじゃないだろうか

525 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:48:11 ]
Aとaは区別されない

えーっ

526 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/22(木) 21:55:19 ]
大小違い同名ファイルが作れるかどうかは別だよな

527 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:56:18 ]
NTカーネル(つかNTFS)で
全角アルファベットが酷い扱いだった時代があったことを知らないのかね。

528 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:57:55 ]
うわ知ったか消防が来た



529 名前:デフォルトの名無しさん [2008/05/22(木) 22:03:40 ]
晒しage


530 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:52:14 ]
ケースの話してるのに、なぜ「全角」が出てくるのか、まずはそこからだ。

531 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:21:35 ]
だんごさんのせいでオヤジギャグがスルーされたな。

532 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:40:54 ]
>>530
全角Aとaのcaseが区別されない、と言うことを525が言ってるからだろ

533 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:37:28 ]
そういうケースもあるさ


534 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:48:18 ]
団子とやりあってたヤシだがしばらく書き込めなかった。
予想通り俺の説得スキルが足りないようなのでもうやめる。
続けたければ隔離スレでも立ててくれ。

535 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:26:55 ]
SBB  AL,[EAX]
ADD  [EAX],AL
XCHG [EAX],EAX
ADD [EAX],AL

あるゲームのHPの格納アドレスの近くにあるのですが
これってどういう意味があるのでしょうか


536 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:53:07 ]
ただのデータじゃね?

537 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 08:27:58 ]
>>534
お前が無知なだけだろ。モダンなx86の物理レジスタは100本以上あるんだよ。

538 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 08:41:39 ]
俺を説得とか馬鹿にもほどがある。
釈迦に説法と言う気はないが、俺に無意味に噛みついて質問者を混乱させてどうするんだ。

「重要なこと」さっさと答えろよ



539 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:20:27 ]
>>538
無意味に噛みつていたのはおまえだろ

540 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 09:24:41 ]
「重要なこと」があると言いつつ、それを言わないこと自体が論理矛盾じゃないか。
俺は「無い」と断言したがな

541 名前:デフォルトの名無しさん [2008/05/24(土) 09:30:04 ]
ここで聞くことかどうかわかりませんが、電子手帳とかそういうのもマイコン
使ってますよね。そういうのに入っているデータもアセンブラがわかれば
吸い出せるんですか。昔のやつが何台もあるので。

542 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 09:31:44 ]
データそのものは機械語で保存されてるわけではない。どっちかというと構造体が解析できればOK。

543 名前:デフォルトの名無しさん [2008/05/24(土) 09:32:50 ]
>>542
もう少しヒントを教えてくれるとありがいです。または参考となるURLなど
あれば。お願いいたします。

544 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:41:39 ]
せめて機種を書け。

545 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:47:18 ]
www.wotsit.org/ くらいは読みこなせるようになって、
日本語漢字コードのあれこれを理解できたら
独自解析も夢ではないと思うよ


546 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:41:11 ]
団子さんのカキコでスレが猛烈にヒートアップしたな

547 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 11:20:44 ]
>>546
あんたよく飽きないねぇ

548 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 11:30:52 ]
レス番飛んでる



549 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:19:25 ]
お宝鑑定団子供大会

550 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/24(土) 15:34:56 ]
「さ­ん­の­(レス|カキコ)」

551 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:33:19 ]
みんなが

団子さんのカキコでスレが云々

とか書いておけば団子ハブにできるのか。いいな。


552 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:19:49 ]
団子さん兄弟

553 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:35:16 ]
もうこの板の名無しを「団子さん」にすりゃいいんじゃね?

554 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 08:54:41 ]
そもそも彼奴が名無しで書き込めば解決なのだから
今後もハンドル付きで書き込むようなら
内容にかかわらず荒らし扱いで問題ないよな

555 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:32:52 ]
.text:0040135A loc_40135A: ; CODE XREF: sub_401350+28j
.text:0040135A cmp [ebp+arg_4], 0
.text:0040135E jz short loc_40137A
.text:00401360 mov ecx, [ebp+var_4]
.text:00401363 mov byte ptr [ecx], 0
.text:00401366 mov edx, [ebp+var_4]
.text:00401369 add edx, 1
.text:0040136C mov [ebp+var_4], edx
.text:0040136F mov eax, [ebp+arg_4]
.text:00401372 sub eax, 1
.text:00401375 mov [ebp+arg_4], eax
.text:00401378 jmp short loc_40135A
.text:0040137A loc_40137A:

ループで文字列の比較をしてるんでしょうか?

インクリメントしてる方の処理が何をしているのか。

556 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:59:34 ]
// >>555
for (; arg > 0; ++var, --arg) {
* var = 0;
}
// ただの配列のクリアだね。随分と無駄なコードだけれど。

557 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:09:37 ]
>>556
ありがとうございます。

558 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:48:45 ]
x86やAMD64向けの、NUL文字の位置を最速で求めるコードって何ですか?




559 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:57:03 ]
ダンゴ様のピリっとしたベンチマークが求められているな

560 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:31:16 ]
ダンゴちゃんの愛されっぷりがわかるスレだな


561 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 17:17:41 ]
みんなツンデレすぎ

562 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/25(日) 19:18:01 ]
長い文字列なら16byteごとに一気に判定してしまうのが吉

lea edx, [str]
pxor xmm0, xmm0
loop1:
movdqu xmm1, [edx]
pcmpeqb xmm1, xmm0
pmovmskb ecx, xmm1
test ecx,ecx
jnz skip1
add edx, 16
jmp loop1
skip1:
bsf eax, ecx
add eax, edx ; eaxに結果格納

SSE4.1対応ならpcmpeqb+ptestでNULLが含まれる16バイトを検出可能。
SSE4.2に対応してればATAを使えばNULL文字の位置まで特定できる。

まあレイテンシ隠蔽とかの最適化は各自でやれ

563 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 19:25:54 ]
SSSE3だのSSE4.1、4.2だの…
最近わけわかめ

564 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:33:37 ]
そんなことよりMIPSやろうぜ。

565 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 23:35:56 ]
Intel 64 and IA-32 Architectures Software Developer’s Manual の日本語版ない?

566 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/25(日) 23:41:06 ]
www.intel.com/jp/download/index.htm

日本法人は変なFlashゲーム以外仕事しねーな

567 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:43:04 ]
>>562
すげー倍以上速くなった。

568 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 09:14:22 ]
>>567
想像で勝手な事言うが、メモリがボトルネックで流石に倍は無いだろう。

そら自力で1byteずつ調べてたらxmm使った場合の16倍の調査が必要になって
メモリアクセスに隠蔽されないくらい遅くなるかも知れないが
strlen使ったら普通4byteずつ調べてくれるから比較とかの時間はメモリアクセスの時間に隠蔽されるはず。

よく話題に上がる高速版memcpyを考えるのと同じで
ハードウェアプリフェッチを邪魔しない程度にプリフェッチの方法を考えた方がスピード上がるはず。



569 名前:デフォルトの名無しさん [2008/05/26(月) 12:09:40 ]
Windows上で動くCASL2のアセンブラを探しているんですが、何かありませんか?
ソースプログラムと実行結果をテキストで出力可能なら良いのですが。


570 名前:デフォルトの名無しさん [2008/05/26(月) 12:27:03 ]
>>569
いくらでもあんじゃない?
ttp://www.vector.co.jp/vpack/filearea/win/prog/casl/

571 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/26(月) 12:30:32 ]
stlrenで4バイト同時って可能なの?
dword単位で0が含まれるバイトを検索する命令なんてないと思うんだが。

基本的に巡回操作の場合は明示的な prefetch* 命令は使う必要ない。
文字列が全部キャッシュに載ってるなら尚更だし。

むしろmovdquの方に突っ込み入るかと思ったが(16byte境界からの探索にしてmovdqaしたほうがいいかも)



>>569
ここは良いGoogle検索代行スレですね。

www.vector.co.jp/vpack/filearea/win/prog/casl/

572 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/26(月) 12:35:07 ]
ああ、MSVCRTのstlren.asm見たらようやく理解できた。
1バイト毎にbranch命令じゃ確かにパイプラインハザードで性能でない罠。

573 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/26(月) 22:35:00 ]
まあ、俺は性能どころかまともに動くかすら全然確かめてなかったんで
とりあえず実験してみましたよ。

smallcode.weblogs.us/2006/08/22/fast-strlen-function/
のソース一式を改造して俺仕様stlrenベンチを作成。
NULL文字検出方法自体は>>562をベースに小改良をしたものね。

で、それぞれ一番最後のスコアだけ抽出

strlen - short strings
Microsoft: 1625 ticks, a = 145
Peter: 1093 ticks, a = 145
A.Fog: 1273 ticks, a = 145
DQN(SSE2): 674 ticks, a = 145←ここ

strlen - long string
Microsoft: 1225 ticks, a = 926
Peter: 1225 ticks, a = 926
A.Fog: 874 ticks, a = 926
DQN(SSE2): 437 ticks, a = 926←ここ

とまあ、MSVCRT版strlenの倍以上は余裕で速い。
もっとも、pmovmskbの性能によって前後するみたいだが(Pen4とかAMDのプロセッサなんかだと全力で遅いかも)
ちなみにうちの環境はCore 2 Duo (Wolfdale) 3.17GHz, Windows Vista Ultimate x64 Editionその他諸々ね

改造ソースとバイナリ一式→download.kousaku.in/trip/fast_strlen_mod.zip
ちなみにSSE4.1(ptestを使う方法)だとSSE2と比べても伸びなかった。

574 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:11:38 ]
OoOやら予測分岐やらでかい口叩いてもCPUがメモリに負けてるってことか。

てかMacBook Pro (Merom)でWinXP(32bit) on VirtualPCだとDQNおせぇ。
VMWareにデュアルコア割り当てちゃってるけどバッテリ駆動じゃねえのになあ。
(VMWareは片コアだけにした方が速いと言われている)

strlen - short strings
Microsoft: 6024 ticks, a = 145
Peter: 6708 ticks, a = 145
A.Fog: 6036 ticks, a = 145
DQN(SSE2): 12792 ticks, a = 145

strlen - long string
Microsoft: 6612 ticks, a = 926
Peter: 6792 ticks, a = 926
A.Fog: 4716 ticks, a = 926
DQN(SSE2): 12936 ticks, a = 926

イレギュラーな使い方だが、何故遅くなるのかは興味あるな。

575 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/26(月) 23:22:02 ]
ああ、うちのMerom機(T5500 Vista Home Premium (32bit))でも遅くなる。

【実行結果】
www.vipper.org/vip829067.txt.html
pass [1234]


ちなみに答えはわかってる。
Merom/ConroeはShuffle Engineの実装がしょぼくて
pmovmskb reg, xmmがアホみたいに遅い。

MMXでやったほうがかえって速いかも知れない。

576 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/26(月) 23:48:49 ]
あれ?まともだ。
コンソール出力をリダイレクトすると何故かまともな結果が出るらしい。
そして、Meromでもシャッフルは思ったよりネックじゃない。
原因が別のところにありそう。



MMX(+SSE1 64bit整数SIMD)版追加版
download.kousaku.in/trip/fast_strlen_mod2.zip

Merom機で追試
www.vipper.org/vip829134.txt.html PASS: [1234]

577 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:33:24 ]
576をWindows Vista 32bit + T5600 (Merom) で実行したけど、ほぼ同じ結果なのだが、
short stringsのDQN(MMX)が a = 145 だった。
あとMMXとSSE2に限り、1/20くらいの割合で平均の3倍以上かかる時があった。
大体649ticksや660ticks前後なのに、突然1738ticksになったり。
でもMMX/SSE2はMSVCRTの倍を超えている。
L2キャッシュがあふれるほど長い文字列なら話は別だろうけど。

578 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:40:51 ]
レジスタ退避コスト?



579 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:07:18 ]
参考までにログをうp。fast_strlen > result.logとして出力。
パスは1234。Core 2 Duo T5600 Merom
Vista HomePremium SP1 32bit
www.dotup.org/uploda/www.dotup.org4863.txt.html
+ VirtualPC XP Pro SP2 32bit
www.dotup.org/uploda/www.dotup.org4864.txt.html

580 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/27(火) 02:17:30 ]
>>576の追試結果のテキストファイルはミスで、MMXのはShortのほうでLongを実行しちゃってるオチ。
今上げてるEXEとソースは修正済み。
PenM(Banias)でも計ってみたんだけど僅差でSSE2>MMXになってる。
並列度の低いコードではベクトル長の引き伸ばしはある程度有効ということがわかる。


>>578
あーそれもありそうだな。
Windowsってコンソールへの描画すらなにげに重たいようだ。
(ファイルだと軽いと思われる)

何周か回して平均値で算出したほうがよさそうかも。

581 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:42:01 ]
こんなタイトなループで並列度が低いとか


582 名前:デフォルトの名無しさん [2008/05/27(火) 09:53:49 ]
>>570
ありがとうございます

583 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:00:07 ]
いまどきアセンブラよりJavaのほうが速い。
JNI使えばハードの機能もフルアクセスだし。

584 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:18:41 ]
つ、釣られるもんか!

585 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:20:27 ]
>>583
開発速度のことですね、わかります。


586 名前:デフォルトの名無しさん [2008/05/27(火) 11:41:02 ]
Core2Quad Q9450でPS2エミュをやると、実機と違い処理オチせず、激ムズになることが判明
namidame.2ch.net/test/read.cgi/news/1211740649/l50


587 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:09:50 ]
>>583
wwwwwwwwwwwwwwwwwwwwwww

588 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/27(火) 20:31:16 ]
JNIでfast_strlen.cppの関数をコールですね。わかります。



589 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:05:50 ]
このスレを見ている人はこんなスレも見ています。(ver 0.20)
フロントミッション総合 - FRONT MISSION - 105th [家ゲーSRPG]
この会社辞めようと思った腐れ上司の一言0x21 [プログラマー]


590 名前:デフォルトの名無しさん [2008/05/29(木) 16:29:58 ]
すいません。アセンブラの宿題が終わらなくて。。。
どうか、手伝ってください。。。

Define a character string named CO_NAME containing "Internet Service" as a content.

コレ分かる方います?

あ〜!わかんね〜!

591 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:33:02 ]
自己解決しました

592 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:49:58 ]
>>589
涙出てきた

593 名前:デフォルトの名無しさん [2008/06/03(火) 00:55:58 ]
アセンブラでポインタってできるんですか?
変数の値の番地のプログラムに飛びたいんですが

594 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 03:45:37 ]
どの石よ?

595 名前:デフォルトの名無しさん [2008/06/03(火) 05:16:21 ]
PICです

596 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 06:28:13 ]
>>595
間接アドレシングで出来るから、手元にあるデータシートに記載されてる説明を確認の事。
手元になければ↓からダウンロードして欲しい。
ttp://www.microchip.co.jp/document.htm


597 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 13:11:35 ]
すごいですありがとうございます!

598 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:41:56 ]
【算術演算結果による分岐】 N 番地の内容から M 番地の内容を引き,答えが負なら P 番地に -1(#FFFF)を,正なら +1(#0001)を格納するプログラムを作成しなさい.



599 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:46:02 ]
>>598
だが断る


600 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:58:03 ]
>>598
問題文が糞だから書き直せ屑

601 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 18:58:36 ]
>>598
#define V(X) *(short *)(X)

r = V(N) - V(M), r < 0? V(P) = -1 : r > 0? V(P) = 1 : 0;

602 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:40:05 ]
答えが 0 の時は、格納しちゃダメなんじゃないのか?

603 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:20:57 ]
そーゆー問題のときは"0"=正で考えていいんでないかい。
特別扱いする必要があったらそういう注意書きがあると思う。


604 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:52:33 ]
>>598
CLRX
INCX
LDD M
CPD N
SBEX #0
CPD N
SBEX #0


605 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:55:52 ]
STX P

606 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 07:25:19 ]
>>598
;うろおぼえ68000
START:
MOVE.W SR, -(SP)
MOVEM.L D0-D1, -(SP)
MOVEQ #1,D1
MOVE.W N(PC),D0
CMP.W M(PC),D0
;SUB.W M(PC),D0
BPL L_PLUS(PC)
NEG.W D1
L_PLUS:
MOVE.W D1,P(PC)
MOVEM.L (SP)+, D0-D1
MOVE.W (SP)+, SR
RTS
N: DC.W $FF00
M: DC.W $00FF
P: DS.W 1

607 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 10:50:12 ]
しれっと特権命令使ってんじゃネーヨw

608 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:31:03 ]
ああ、そうか。
MOVE.W (SP)+, SR
RTS
じゃなくて
RTR
で、いいんだ。



609 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:17:04 ]
>>603
> そーゆー問題のときは"0"=正で考えていいんでないかい。
> 特別扱いする必要があったらそういう注意書きがあると思う。

そう言う思い込みはバグの元になるぞ。

610 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:21:17 ]
68000だけはmove SRが一般命令だったり。
010になって特権命令になったが。

ところで、PC相対ってオペランドの右に使えたっけ?
なんか制限あったような気がするんだが。




611 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:52:58 ]
>>610
> 68000だけは

68008 のこともたまには思い出してください。

> move SRが一般命令だったり。

move from SR の方だけね、move to SR は 68000 でも特権命令。

> ところで、PC相対ってオペランドの右に使えたっけ?

て言うか、CMP 命令は右にしか使えない。

Add/Sub なんかはどっちにでも使える (但し、反対側は Dn のみ)
けど、CMP はその後の条件判定を反対にすればいいので、片方しか
必要ないと判断したんだろうな。

612 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:25:06 ]
;青い本みてやりなおした68000
START:
MOVE.W SR, -(SP)
MOVEM.L D0-D1/A0, -(SP)
MOVEQ #1,D1
MOVE.W N(PC),D0
CMP.W M(PC),D0
BPL L_PLUS(PC)
NEG.W D1
L_PLUS:
LEA P(PC), A0
MOVE.W D1, (A0)
MOVEM.L (SP)+, D0-D1/A0
RTR

dstにd16(PC)使えるの4命令しかなかた

613 名前:607 mailto:sage [2008/06/08(日) 15:33:43 ]
* ステップ数を詰めてみた。

MOV.W N,D0
CMP.W M,D0
SMI D0 *(00/FF)
EXT.W D0 *(0000/FFFF)
ORI.W #1,D0 *(0001/FFFF)
MOV.W D0,P

* もっと変則にしてみたがステップ数縮まらず。

MOV.W N,D0
CMP.W M,D0
SPL D0 *(FF/00)
EXT.W D0 *(FFFF/0000)
ASL.W #1,D0 *(FFFE/0000)
NOT.W D0 *(0001/FFFF)
MOV.W D0,P

* Scc を用いない方法。

MOV.W N,D0
SUB.W M,D0
ASR.W #8,D0 (00??/FF??)
ASR.W #8,D0 (0000/FFFF)
ORI.W #1,D0 (0001/FFFF)
MOV.W D0,P

* そして分岐を使っていないことに気が付く。

614 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:27:20 ]
素直な人間の思考から外れるものはコメント無いと泣けるので勘弁してください。

615 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:32:57 ]
>>613
(PC)を使ったらもっと縮まるんじゃない?

616 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:55:49 ]
直感的ではない技巧に走るのは厨房

617 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:35:35 ]
それは実務に限った話だ。

618 名前:>>611 mailto:sage [2008/06/08(日) 20:52:52 ]
>>612
> dstにd16(PC)使えるの4命令しかなかた

ほんとだ、俺もすっかり忘れてた。

そもそも、PC 相対はアクセスモードがプログラム参照 (FC=ユーザープログラム
or スーパーバイザプログラム) になるから、可変データを PC 相対でアクセスす
る領域に置くのは推奨されない。

さすがにデータ参照とプログラム参照で違うメモリをアクセスするシステムは見
たことないけど、プログラム参照領域は書込み禁止を設定しているシステムはあ
るのでちょっと注意した方がいいかも知れない。

> MOVE.W SR, -(SP)

move ccr, (-a7) でいいと思うが。

あと、68k は大抵の命令でコンディションコードが変化するから、サブルーチン
の前後でコンディションコードを保存しないと言う流儀の方が多いと思う。



619 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:23:20 ]
コメントなしにいきなり殴り書きされてるんじゃない限り
技巧のうちにゃ入らんだろ

620 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:12:54 ]
>>598
LEAX N
CMPX M
BPL L_PLUS+1
LDB #$FF
L_PLUS
CMPX #$C601
SEX
STD P







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<195KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef