[表示 : 全て 最新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/



18 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:25:32 ]
これと
xchg edx, [eax]
これ
mov ecx, [eax]
mov [eax], edx
mov edx, ecx
どっちが早い

19 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:37:41 ]
>>18
前者の方が早い。
速いかどうかはしらね。

20 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 08:56:52 ]
メモリとのxchgはロックがかかって高価だったような

21 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:46:28 ]
ループ内で行っていた場合、
後者だと命令が伸びてフェッチ回数が増える可能性があって、
それが効いてくる可能性はあるかもしれん。

22 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:12:34 ]
xchgでバスロックがかかる点に比べれば、他の要素など微々たる差

23 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:43:25 ]
>>18
下のは一体何をやってるんだ?

24 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:14:20 ]
上が
edx <-> *eax
下が
ecx <- *eax
*eax <- edx
edx <- ecx
でどちらもedxの内容とeaxの指すメモリの内容を交換してる。
下は命令が増えているのとecxを余計に消費している。
上は命令の実行中に他の要因でeaxの先が変化しない事を保証しているのでロックがかかる。

25 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 02:59:41 ]
他の言語なら最初に "Hello world" とかあると思うんだけど
アセンブラならまず何を書けばいいの?

26 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:31:42 ]
ダンゴさんの聡明なるアドバイスが望まれるところだ



27 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 08:40:58 ]
        mov     ah, 09
        mov     dx, msg
        int     21h 
        mov     ax, 4C00h
        int     21h
msg     db      'Hello, world!$'


28 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 19:40:20 ]
ナツカシス

29 名前:25 mailto:sage [2007/08/28(火) 20:00:25 ]
>>27
ありがと
んで、コンパイルなんだけどインストールされてるアセンブラ?って呼べばいいのかな、調べたら
yasmとnasmってのがあった。OSはLinux使ってますがLinux歴2ヶ月なんでへたれなんです。
アセンブラのコンパイルはどうやるんでしょうか?
Cの初心者向けサイトは多かったけどアセンブラは少なくて。
よろしくです。

30 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 20:17:26 ]
>>29
Linuxなら>>27はだめだな… MS-DOS割り込み使ってるし

31 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 20:30:04 ]
そこでqemuですよ

32 名前:25 mailto:sage [2007/08/28(火) 20:52:06 ]
そうなんすか……。
では、>>27のようなコードをLinux向けに自分で書きたいので
>>27で使ってる命令文の意味などを理解したいです。
ここでダメならどこか誘導してくれるかサイトを教えていただけるとありがたいです。

33 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 21:10:23 ]
int 21 はMS-DOS割り込み
DOS時代のソフトを逆汗するといっぱい出てくる
ahレジスタの数字で呼び出す機能を指定するんだが、
09は文字列を標準出力にアウトプットしてくれる。
このとき文字列のアドレスをdxレジスタに入れておく。
で、文字列は $ で終わっている必要がある。(Cのヌル終端みたいなもんだ)
4Cでint21するとプログラムを終了する
でも俺はint20が好きだ大好きだお前もint20を使え

34 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:05:36 ]
Linuxでアセンブラっていうと真っ先に浮かぶのはgasだなあ

35 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:26:36 ]
> でも俺はint20が好きだ大好きだお前もint20を使え
俺はCOM限定だけど ret だな。



36 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 23:34:35 ]
男なら黙ってhlt



37 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 01:26:53 ]
勝手に止めるな

38 名前:25 mailto:sage [2007/08/29(水) 02:52:06 ]
>>33
解説ありがとうございます
パッケージ管理で手間取ってしまいまして返事が遅くなりました。
>>27氏と>>33氏の書き込みを参考に理解していこうと思います。
もういちど勉強になりそうな本やサイトを探して>>27を書き換えれるよう取り組んでみます。
では、今日は遅いのでこれにて失礼します。
スレの皆さんありがとうございました。またよろしくです。

39 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 06:54:40 ]
この辺でも参考にしとけ
www.google.co.jp/search?q=linux+%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB+int80h

40 名前:デフォルトの名無しさん [2007/09/01(土) 00:13:15 ]
>>27
に似てるけど
>>143↓は何をするものですか?
c:\>debug
-a 100
2732:0100 mov dx,110
2732:0103 mov ah,9
2732:0105 int 21
2732:0107 mov ax,4c00
2732:010A int 21
2732:010C nop
2732:010D
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-r ip
IP 0100
:100
-g

41 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:22:18 ]
>>40
debug.exeでCOM形式の実行ファイルを作ってるな。
ほんと懐かしい。

42 名前:デフォルトの名無しさん [2007/09/01(土) 00:43:50 ]
>>41
46.32 01.63 E8.68 08.21 D9.24
は文字ですか?
 2732:0100 mov dx,110
 2732:0103 mov ah,9
だから、110の内容は文字みたいなのですが、nopが有るのが分かりません。
-r ip
IP 0100
:100
-g
は -g 100とすればいいのにわざわざipの値を確認してgの引数を省略しただけですね。

43 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:48:17 ]
俺もなんでnopがワザワザあるのか分からんw

あとこの例だと-eで十六進データを入力しているけど
俺なら文字列を入れるのにはDB擬似命令使うなあ。

44 名前:デフォルトの名無しさん [2007/09/01(土) 00:58:20 ]
-eでドットがいくつかあるけど、スペースだと思えばいいんでしょうか?

45 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:01:53 ]
これは入力じゃなくて、画面表示をそのままコピーしてるだけ。
ドットは入力の催促で、
古い値.
って表示されるから、数値を入れて、スペースを入れると次のアドレスに移動する。

46 名前:デフォルトの名無しさん [2007/09/01(土) 01:08:49 ]
謎の文字列は2chという文字と関係があるんでしょうか?
-e 100 46 32 01 63 e8 68 08 21 d9 24
-d 100 209
1034:0100 46 32 01 63 E8 68 08 21-D9 24 F2.c.h.!.$
↑21-D9のハイフンは何でしょうか?熊さんのバグ?



47 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:17:28 ]
    LD    C, 9
    LD    DE, MSG
    CALL   5
    RET
MSG: DB    'Hello, world!', 0DH, 0AH, '$'

48 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:20:28 ]
>>47氏へ、、、MASMじゃまず無理

49 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:26:57 ]
>>46
8バイト目の区切り。

50 名前:デフォルトの名無しさん [2007/09/01(土) 01:30:20 ]
>>49
あっあー!そうだったんですね、ありがとうございます。
$が文字終端ですね。2chの前のFという文字とnopが未解決ですが満足しました。

51 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:33:24 ]
>>48
つ HIT-88

52 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:39:19 ]
>>50
Fは、入力前のごみデータだろ。って、>45に書かれているじゃん。
nopは作者の癖かなんかじゃないか? コード終端であることを示すために入れたり、
コード領域はnopで埋め尽くしておいたり、色々流儀があったからね。

53 名前:デフォルトの名無しさん [2007/09/01(土) 01:56:24 ]
>>52
そんな癖があるんですか。それは知りませんでした。
>45が分かりませんでした。今もまだ分かっていません。

54 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 02:02:09 ]
>>53
コマンドラインで「debug」と入力して「-」が表示されたら「e 110」と入力すればわかる。

55 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 02:05:35 ]
入力過程を順に見ていこう。便宜上、カーソルをアンダーバーで表すよ。
--(1)コマンドプロンプト
-_
--(2)コマンド(e 110)入力
-e 110_
--(3)改行入力→データプロンプト
-e 110
2732:0110 46._
--(4)データ(32)入力→次のデータプロンプト
-e 110
2732:0110 46.32 01._
--(5)以下同様に
-e 110
2732:0110 46.32 01.63 E8._
--
-e 110
2732:0110 46.32 01.63 E8.68 08._
--
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9._
--($)データ入力完で次のコマンドプロンプトに
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-_
--
これで雰囲気をつかんでくれ。

56 名前:デフォルトの名無しさん [2007/09/01(土) 02:29:37 ]
>>55
やったー!ありがとうございます。古い値.の意味が分かりました。



57 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 02:40:52 ]
しかし
こんな旧時代の遺物を教材に使うのってどうよw

58 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 03:26:45 ]
MASMの脳内発音はマズムですか?

59 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 03:30:09 ]
自分は えむあすむ

60 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 03:42:39 ]
自己完結している脳内発音を尋ねることに意味があるのか?
コミュニケーションのために実際の発音を尋ねるのならまだ分かるが。

61 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 12:08:19 ]
NASM ナズム

62 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 12:34:42 ]
YASM 休む

63 名前:デフォルトの名無しさん [2007/09/01(土) 16:22:15 ]
最近アセンブリを学ぼうと思い「高級プログラマのためのアセンブラ入門」
と言う本を買ったのですが内容が16ビットプログラミングでの.comファイル
作製が主なのです。
それで、VS2005のMASMで16ビットリンカを適用さしてコマンドラインから
comファイルを作る方法は解ったのですが、いまいち本の内容を理解しきれてない
と思いデバッガでステップインしていってどう動いているのかを知りたいのですが
VSでどういう風に設定したらasmファイルのみでデバッグ出来るのかが
わからないです。
もし出来る方法があるなら、教えていただきたいです。
VS使うよりも良い開発環境があるなら、そちらも是非教えて頂きたいです。
なにとぞよろしくお願いします。

64 名前:デフォルトの名無しさん [2007/09/01(土) 17:50:42 ]
>>63
つ Emu8086
www.emu8086.com/

65 名前:デフォルトの名無しさん [2007/09/01(土) 18:53:06 ]
いまどきCOMモデルもないだろ。

66 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 19:01:28 ]
>>63
C> debug hoge.com



67 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:43:38 ]
高級プログラマって表現はどうなのかと思った
「高級言語プログラマのための たしなみアセンブラ」
ぐらいが妥当だろ

68 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:13:38 ]
これのことだろ。

林晴比古 「高級言語プログラマのためのアセンブラ入門」
ttp://www.sbcr.jp/books/products/detail.asp?sku=4797332816


69 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:04:17 ]
TASM タズム

70 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:34:13 ]
LASM ラスム

71 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:39:34 ]
LASM えるあすむ
MASM えむあすむ
NASM えぬあすむ
TASM ていあすむ

72 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:58:23 ]
MASM まさみ

73 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 10:55:56 ]
MASM マシン

74 名前:デフォルトの名無しさん [2007/09/05(水) 00:26:52 ]
int 80h とか int 21h に至るまでをまずやれれば


75 名前:デフォルトの名無しさん [2007/09/05(水) 22:11:27 ]
PEからELFに変換できるツールってありますか?


76 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:36:09 ]
call 5とか。
もう使わないか



77 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:15:05 ]
>>75
PEはCOFFみたいなものだから
多少自分で前処理する必要があるかもしれないけど
ツールはある
しかし変換しても使えないと思うが

78 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:59:22 ]
binutilsのobjcopyをほげれ。

79 名前:デフォルトの名無しさん [2007/09/12(水) 22:59:29 ]
アセンブラ入門のホームページを見ながら勉強してるんですが
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4919.txt
上記のソースで
BUFFER db 128 dup(?)
の部分で128byte初期値無しで宣言したBUFFERに間接的に
値を入れていくのはわかるんですが
invoke MessageBoxA, 0, offset BUFFER, offset TITLENAME, 0
の部分でBUFFERの末尾に0が入ってないと思うんですが
なぜ問題なくMessageBoxAが実行されるか解りません。
すいませんが、どなたか教えていただけないでしょうか。
お願いします。

80 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:45:57 ]
>>79
masmがBUFFERの全領域を0で初期化しているようだね。

81 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:12:23 ]
( ゚∀゚)<プップー
OSがdataセクションを初期化してる。


82 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:56:42 ]
行儀の悪いプログラムだな

83 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:08:48 ]
>>79 の記述だとmasmならオブジェクトファイルの段階で128バイトの0が確保されるだろ
OSが初期化するわけではない
ロードはするけど


84 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:23:44 ]
セキュリティのためにOSがやってんじゃなかったのか

85 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:25:08 ]
>>81
>>81
>>81

86 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 13:19:50 ]
なぜ、初期値を持つdataセクションをOSが初期化すると思うのか?



87 名前:デフォルトの名無しさん [2007/09/14(金) 18:16:40 ]
dataセクションでもexeに無い部分はOSが初期化するんじゃね?

88 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 18:20:51 ]
obj ダンプすりゃわかる 素人だらけw

89 名前:デフォルトの名無しさん [2007/09/14(金) 18:41:40 ]
俺は、
仕様上、
誰かが確実に初期化すると定められたものがあっても、
そういうものに依存するのが嫌なので
自分で必ず初期化するのである。

90 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 18:45:02 ]
C の static に全部 = 0; とか書かかないと気持ち悪いタイプ?

91 名前:デフォルトの名無しさん [2007/09/14(金) 18:47:46 ]
何か
問題
あるかね

92 名前:デフォルトの名無しさん [2007/09/14(金) 18:57:49 ]
分かりやすく言えば、俺が江頭だとして
「この人は佐藤ですからヒップアタックしてください」と
人からアイデンティファイされたものはダメである。
俺が、この目と足でチェックしてはじめて、
「ぅお前は!佐藤だー!!」(ででででーでででででででで)と、
ヒップアタックする気になるのだ。


93 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 20:57:57 ]
staic int i;
if(i) i = 0;

これね

94 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 21:05:09 ]
それは
ちがう
だろう

95 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 22:39:18 ]
MASMの
すごい
初期化

96 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:22:32 ]
objをダンプしてexeの中身がわかる人がいるのはこのスレですか?



97 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:00:24 ]
アセンブラと機械語は違うけどね。

98 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 13:28:19 ]
初期化しない値は、.dataではなく.data?に書く。

99 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 17:11:23 ]
.bss

100 名前:デフォルトの名無しさん [2007/09/18(火) 15:25:32 ]
age

101 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:13:41 ]
>>96
君はわからんのかね

102 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:41:38 ]
外部シンボルが未解決でわかりません。

103 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 06:26:18 ]
もとがMASMの話だけにobjdumpもアレだ。

104 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 22:58:08 ]
>>102
サブシステム→WinDows

105 名前:デフォルトの名無しさん [2007/10/18(木) 21:25:44 ]
age

106 名前:デフォルトの名無しさん [2007/10/26(金) 00:02:09 ]
KITE-1マイクロプロセッサで
exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n!
=1+(1+1/2(1+1/3(1+…+1/n)))
の展開した式からネイピア数を求めるアセンブラのプログラムの作り方がさっぱりです。
指定は除算を引き戻し、引き放しで行わず、ループを使わないことらしいです。
ググって見た感じではSRT法を使おうと思っているのですが
これまたアセンブラで表現しようと思うのですがさっぱりです。
どなたかプログラムを教えていただけないでしょうか。
またSRT法以外に簡単な方法ががあるなら是非教えて頂きたいです。
よろしくお願いします。



107 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:31:28 ]
>アセンブラのプログラムの作り方がさっぱりです。
うむ、まずアセンブラとテキストエディタを用意しよう!

108 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:38:33 ]
インプリメンテーションチャートは?

109 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:23:40 ]
int n;
long double e,a,p;
e=0;a=1;n=1;
do {
p=e;e+=a;a/=n;n++;
} while (e != p);

こんなのしかかけないヘタレな俺

110 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:35:11 ]
アセンブリでおk

111 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 23:47:27 ]
>>106を解こうとしてsrt除算の上位ビットのからの条件分岐が書けなかった俺は負け組

112 名前:デフォルトの名無しさん [2007/11/02(金) 11:10:15 ]
アセンブラの勉強したくて本がほしいんだけど本屋に全然本が売ってないんだよ
あってもあんまよさそうな本が見つからない
なんかお勧めのアセンブラの本教えてください

113 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 11:30:45 ]
はじめて読む8086あたりでいいんじゃね?

古い本だけど、基本的なことはわかると思うよ


114 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:53:33 ]
とりあえず入門用マイコンとしてそこそこのものなら、AVRのTinyあたり?

AVRマイコン活用ブック―オリジナル電子ゲーム&ロボット製作
→アマゾン:ttp://www.amazon.co.jp/AVRマイコン活用ブック―オリジナル電子ゲーム-ロボット製作-わかるマイコン電子工作-松原-拓也/dp/4885540011/ref=pd_bbs_sr_2/503-7396570-5979118?ie=UTF8&s=books&qid=1193988330&sr=8-2

AVRは(PICも)会社によって嫌われることがあるので、あくまで勉強用として。


115 名前:114 mailto:sage [2007/11/02(金) 17:05:00 ]
>>114の補足
この本のプログラムはgccで書かれています。
>gcc -S ...
のように -S オプションを付けてコンパイルするとアセンブラコードが吐き出されるので、
コードと対比させると勉強になると思います。


116 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 18:07:53 ]
他のコンパイラと違って-S付けてもソースコードと混成にならないのが惜しい



117 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 20:51:27 ]
どのコンパイラが?

118 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 00:09:16 ]
>>117
横レスだけどgccで混合できんの?

119 名前:117 mailto:sage [2007/11/03(土) 01:32:44 ]
>>118>>116
ゴメン。今意味が分かった。

120 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 01:40:09 ]
混成表示するにはobjdumpです



121 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:03:54 ]
turbo c++ exploreからtasm32.exeを入手できたんですが、
tasm32のドキュメントってどこかにないでしょうか?

122 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:18:26 ]
>>121
ttp://citforum.yspu.yar.ru/programming/tasm3/index.shtml

123 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:22:32 ]
>>122
ロシア語読めねえよアホ

124 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:32:19 ]
ロシア語で考えるんだ!

125 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:50:19 ]
しかし、MASMが合法的に無料で手に入る時代にtasm32を使う理由って一体・・・。

126 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 04:41:20 ]
Idealモードフェチの人なんだよきっと



127 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/03(土) 11:05:47 ]
NASMが64ビット対応してるよ。SSE4.2もAMD SSE5も吐けるよ

128 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 11:06:01 ]
>>125
相変わらず何かのSDKの中について来るの?


129 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/03(土) 11:09:43 ]
>>128
www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja

130 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:08:08 ]
>>121
こんなのみつけた
ttp://www.phatcode.net/downloads.php?id=308&action=get&file=pasmug.pdf

ttp://lzasm.hotbox.ru/
によるとTASM5.0のcloneらしい

131 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:39:04 ]
>>129
thx

Linkerとかはどうしろって?w


132 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/05(月) 00:11:03 ]
普通にVC++のリンカ使いましょう。Expressならタダだし。

133 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:34:12 ]
課題で質問があるのですが、Formatのような感じで
文字列を表示させるにはどのようにしたらよいでしょうか?

PUSH EBP
MOV EBP,ESP
SUB ESP,104
MOV EAX,DWORD PTR SS:[EBP+C]
AND DWORD PTR SS:[EBP-4],0
MOVZX ECX,BYTE PTR DS:[EAX+F]
PUSH ECX ; /<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+E]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+D]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+C]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+B]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+A]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+9]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+8]
PUSH ECX ; |<%02X>


134 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:35:08 ]
MOVZX ECX,WORD PTR DS:[EAX+6]
PUSH ECX ; |<%04X>
MOVZX ECX,WORD PTR DS:[EAX+4]
PUSH ECX ; |<%04X>
PUSH DWORD PTR DS:[EAX] ; |<%08X>
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH testtest.0044AD6C ; |Format = "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
PUSH EAX
CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA
MOV ECX,DWORD PTR SS:[EBP+8]
ADD ESP,34
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH EAX
CALL testtest.0042D903
MOV EAX,DWORD PTR SS:[EBP+8]
LEAVE
RETN 8

135 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:42:22 ]
Cで書いて、コンパイラが吐くコード見れば?

136 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:12:21 ]
上の2レスがたぶんそうだとおもう



137 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 21:15:38 ]
いきなり質問失礼します。
8085で、

[8091h] [8090h] ←[8080h]*2+[8081h]    和を16ビットで求める(分岐命令を使用してもよい)

16ビットで求めるという意味がいまいちわかりません。
どなたか解答お願いします。

138 名前:133,134 mailto:sage [2007/11/05(月) 21:54:11 ]
>>135
レスありがとうございます。
一応Cで書くのも考え試したのですがなにぶんアセンブラは素人なものでして…。
PUSHで変数をスタックして上から開いているんだろうなぁっとまでは
なんとなく理解できたのですがCで書いたらエラー吐きまくりで…

できればどなたかヒントか一部サンプルを書いてもらえないでしょうか?

139 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:23 ]
「8ビット×2+8ビット」の結果は値によって8ビットじゃオーバーフローするじゃん。
だから16ビットで演算して結果を8090-8091H番地に格納すんだろ。

140 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:08:58 ]
>>139
さっそくのレスありがとうございます。
あ、何となくわかったようなきがしました。

LDA 8080h アキュムレータが8080h になって
ADD A アキュムレータが8080h*2になって
MOV M 8080h*2をHLレジスタにコピー
LDA 8081h アキュムレータに8081hをロードして
STAX D 8081hをDEレジスタに格納して
DAD D 8080h*2+8081hをHLレジスタにいれて
SHLD 8090h [8091h][8090h]に8080h*2+8081hを格納

って感じですかね?




141 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:12:24 ]
↑ 見にくかった。
LDA 8080h          アキュムレータが8080h になって
ADD A            アキュムレータが8080h*2になって
MOV M             8080h*2をHLレジスタにコピー
LDA 8081h           アキュムレータに8081hをロードして
STAX D             8081hをDEレジスタに格納して
DAD D               8080h*2+8081hをHLレジスタにいれて
SHLD 8090h               [8091h][8090h]に8080h*2+8081hを格納


142 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:12:38 ]
それだとADD A(×2)の時点でオーバーフローすることがある。
が、まぁだいたいそんな感じだ。

143 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:13:41 ]
3番目は MOV Mではなく MOV M,Aでした。

144 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:16:10 ]
なるほど。ありがとうございます。

今日知人に教えてもらうと、
LDA 8080h
MOV L,A
MVI H.0
DAD H
LDA 8081h
MOV D,A
MVI E,0
DAD D
SHLD 8090h

↑のような感じだったんですがこれでもあっているのですか?

145 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:19:09 ]
↑の下から3番目のMVI E,0 は MVI D,0だったかも

146 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:27:26 ]
>>145
なら、MOV D,A も MOV E,Aだな。

8085のニモニックよくしランが、
全部16ビットのHL,DEで演算してるようだから多分合ってんじゃね。

蛇足だが、
>>141の方法で、ADD A後、CフラグがONならHに+1すればOK。
多分設問の「分岐命令を使用してもよい」はそれを期待していると思われる。



147 名前:アセンブラ初心者 mailto:sage [2007/11/06(火) 00:58:58 ]
>>146
あなたが神か

アドバイスありがとうございます。
ただ、最後のCフラグがONならHに+1にするほうほうがよくわかりませぬ。
ADD A をADC Aにすればいいのでしょうか?

148 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:33:06 ]
ADD A でCがONした場合てのは8ビット同士の加算結果が8ビットを溢れたことを表す。

例)
FF+FF→1FE →Aの内容はFEとなって CがONする→
CがONなら上位8ビット(H)に+1(HLで+100)することで補正する必要あり


...ああ、もう書いちゃえw

H=0;  //あらかじめクリアしとく
A=A+A; //ADD A (桁あふれがあればC_flagが1になる。なければ0になる)
if(C_flag!=0){ //桁あふれあり?
 H++; //演算結果が8ビットで溢れたので上の桁に1を加算(HL全体で+100)
}
L=A; //下位8ビットを格納


Cフラグでの条件分岐命令は調べれ。

149 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 04:55:07 ]
あ〜♪残念、珍しく得意な8085のQが来てたのに、終わっちゃったよ。 蛇足だが、141の
MOV M,A とか、STAX D とかって、アドレッシングの概念間違えてるよ。
左は[HL]<--A で、右は[DE]<--A のこと。 HLとDEを使う知人さんの手法が一般的だけど、
レジスタが足りないようなときには148さんの手法も有効なのね。ADD Aの後はこうなる。
   JNC LBL
   INR  H
LBL: MOV L,A
   SHLD [結果]  こちらの手法のほうが一般性に欠けるかわりに 「軽い」 という利点がある

150 名前:アセンブラ初心者 [2007/11/07(水) 23:24:11 ]
[8081h]←(A+B)*3-[8080h]*2の処理を行うプログラミングを教えてください。

151 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 23:32:45 ]
同じ奴か?
応用だろ。考えろ。

152 名前:アセンブラ初心者 [2007/11/07(水) 23:37:43 ]
違いますよ。初投稿です。

153 名前:アセンブラ初心者 [2007/11/08(木) 00:40:56 ]
本当に、誰か教えてください。考えてもわからない。

154 名前:デフォルトの名無しさん [2007/11/08(木) 00:42:21 ]
応用だろ。ログみて考えろ

155 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:47:48 ]
@A+Bはレジスタか?そのまんまだろ。
A3倍はその結果を3回足せばいい。
B[8080h]はメモリからレジスタにロードして、×2は同じものを足せばいい。
CAの結果からBの結果を引いて
D[8081H]に格納

以上。

156 名前:アセンブラ初心者 [2007/11/08(木) 01:05:07 ]
LDA [8080h]
ADD A
MOV C←A
ADD B
ADD A
ADD A
SUB C
STA [8081h]
HLT
こんな感じですか?



157 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:18:23 ]
「感じ」としてはそんなもんだが
ADD B
の時点でAの中身がどうなってるかよく考えろ。

158 名前:アセンブラ初心者 [2007/11/08(木) 01:21:06 ]
ADD Bの前にSUB Aを入れればいいのですか?

159 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:03:05 ]
>アセンブラ初心者
お前KIT生だろ?

160 名前:アセンブラ初心者 [2007/11/08(木) 02:03:43 ]
そうですけど

161 名前:sage [2007/11/08(木) 02:03:56 ]
>アセンブラ初心者
蜷川先生もここ見てるから、おまえ落第決定だなwwwww

162 名前:age [2007/11/08(木) 02:06:28 ]
>アセンブラ初心者
石塚お兄さんも見ているから覚悟しておけよwwwwwww

163 名前:デフォルトの名無しさん [2007/11/08(木) 02:10:32 ]
注意:
過去最近、試験はできたのにレポートが書けていなくて(あるいは他人の丸写しで)不合格に
なる例が多く見られた。レポートはじっくり時間をかけて考えられるので、レポートでは全員満
点が取れるものとして試験の評価基準を設定してある。必ず満点が取れるような内容のものを提
出すること。よく考えず簡単に書いたまま本当に合っているか再確認を怠ったり、わからないか
らといって一部の問題を未記入で提出することのないよう注意すること。追跡を行うなどして、
答が正しいかよく確認すること。

って先生も言ってんだろ。

164 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:25:26 ]
>>156
つ [紙と鉛筆]

レジスタとメモリの内容がどう変化するのか
1命令毎に自分で書き出してみぃや

165 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 07:44:11 ]
>[8081h]←(A+B)*3-[8080h]*2の処理を行うプログラミングを教えてください。
  LHLD [8080h] ; LDAしたらAがなくなっちゃうでしょ
  MVI H,0
  DAD H ; 8bitの加算じゃ元が80h以上の場合オーバーフローする
  MOV E,L
  MOV D,H ; [8080h]*2をDEにsave
  MOV L,A
  MVI H,0 ; Aの値を16bitに
  MOV C,B
  MVI B,0 ; Bの値を16bitに
  DAD B ; (A+B)を計算
  DAD H
  DAD H ; *3
  MOV A,L
  SUB E
  MOV L,A
  MOV A,H
  SBB D
  MOV H,A ; HL-DE "DAD"はあるが"DSUB"が無いので8bitで計算
  SHLD [8081h] ; 結果はぎりぎり8bitに収まる
  HLT

166 名前:165 mailto:sage [2007/11/08(木) 07:51:04 ]
レジスタの使い方の一般則:Aはアキュムレータだから、保持には使わないのが原則。
(計算に使えるように常に空けておくべき)
HLは16bitのアキュムレータとして使う。(8085の命令セットがその思想でできている)
BC,DEは一時的な保持のために使ってよい。
165は冗長だが、この原則で書いてあるので一般性がある。156だと頭でAを壊すとか、
元の値が8bitフルレンジだと結果が正しくならないとかの欠陥がある。



167 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 08:44:16 ]
世間じゃ8085が流行ってるのか?

168 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 08:58:16 ]
いまどき大学でやるようなネタでもないような気がするんだけどね。
まー制限が多い方が HW という偶像につかえる司祭としての PG っつー
立場を痛感できて良いという思想の教授なのかもしれんが。

169 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 09:24:12 ]
俺は68kが一番無難だと思ってる。


170 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:21:57 ]
MIPS の方が良くね?


171 名前:デフォルトの名無しさん [2007/11/08(木) 11:47:58 ]
4004だろ

172 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:22:13 ]
RISCアセンブラじゃ単純すぎて面白みが足らないじゃんw
CPUを作るならMIPSが一番いいと思うけど。


173 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:24:31 ]
そこでARMですよ

174 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:51:52 ]
それは人生の無駄遣い。

175 名前:デフォルトの名無しさん [2007/11/08(木) 22:35:04 ]
MIPSって普及してるの?
ARMに押されていそうだよね。

176 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:44:04 ]
宿題丸投げがあるところをみると
馬鹿大学生の間では普及率が高いらしい。<MIPS



177 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:50:44 BE:1657152779-2BP(125)]
それはパタヘネ(コンピュータの構成と設計)がMIPS使ってるからじゃないかな

178 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:19:47 ]
だね。大学だとMIPSで教えるから認知度は大きい。
ARMは作ると訴えられてしまうw


179 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 19:49:23 ]
PICがMIPSになったそうだからMIPS逆襲のオカン。

180 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:33:34 ]
ほぅ。
ttp://www.microchip.com/stellent/images/mchpsiteimages/BLOCK.jpg
AVR32みたいな独自コアじゃないのか。

まあMIPSのアセンブラを手書きしたいとは思わねーが。


181 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 13:23:42 ]
「アセンブラが怖い」なんて、誰がいってるの?(1/3) − @IT MONOist
ttp://monoist.atmarkit.co.jp/fembedded/articles/miconkiso1/07/miconkiso1_07a.html

182 名前:デフォルトの名無しさん [2007/11/15(木) 23:30:45 ]
64ビットのすごさがわかるマシン語書ける人、
サンプル見せて欲しい。

183 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:49:40 ]
なにも考えずに書いても速度アップするのが64ビットの凄いところ

184 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:40:24 ]
linuxのコード読みたいんだが疑似命令がよくわからん。
どこかいい解説してるとこない?

185 名前:デフォルトの名無しさん [2007/11/16(金) 16:13:08 ]
>>1

186 名前:デフォルトの名無しさん [2007/11/16(金) 21:29:23 ]
初回例外は ntddll.dll にあります。
0xc00000008:invalid handle

7C94EB53 mov dword ptr [esp],eax
7C94EB56 mov dword ptr [esp+4],0
7C94EB5E mov dword ptr [esp+8],0
7C94EB66 mov dword ptr [esp+10h],0
7C94EB6E push esp
7C94EB6F call 7C94EBAC
7C94EB74 mov eax,dword ptr [esp]
7C94EB77 mov esp,ebp
7C94EB79 pop ebp
7C94EB7A ret
7C94EB7B nop
7C94EB7C lea esp,[esp]
7C94EB83 lea ecx,[ecx]

どういう意味かわかる方居ませんか。
ドラッグドロップ系の操作をするとこれが出ます。



187 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:36:35 ]
その情報の意味を知り得るのはそのソースを持ってる奴だけだよ。

188 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:07:38 ]
>>186
エラーメッセージ以上の事はわからない。
invalidなhandleを渡してるために例外発生して止まってる。
表示されてるコード自体はスタックにパラメータ積んで関数呼び出ししてる部分だけ。
意味の通じるラベルが表示されてないから、callで呼びだしてる先の動作がどうなってるかは不明。

原因はわからないが、おそらく次にあげる2つのうちどちらか。
・dllを使ってるプログラムにバグがある。
・ntddll.dllが壊れている。

対策としては
・プログラミングしててデバッグ中に出るなら、ソースを良く確かめる。
・何かアプリケーションソフトを使ってて出るのなら、sfc /scannowでWindowsファイルが壊れてないかチェック。
もしくは、そのソフトの使用を諦める。

189 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:24:42 ]
kiRaiseUserExceptionDispatcherでinvalid handle

190 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:46:05 ]
メモリ破壊系のバグ(ex同期ミス)がkernel handle/critical section(内部でeventを持ってる)に及ぶと
そうなるときもあるけど、正直それアセンブラがどうとかじゃなくてwindowsプログラミングだから。
デバッガでsymbolちゃんと設定すりゃもうちょいマシな逆アセになるよ

191 名前:デフォルトの名無しさん [2007/11/17(土) 12:46:44 ]
アセンブラでマシン(ノートPC Dynabook)をrebootさせる方法が知りたいです。
簡単にできるのでしょうか?


192 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 13:08:54 ]
何故アセンブラ?
OS依存のAPI使えばできるだろうが

193 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:02:15 ]
rebootなんて、どこだかのアドレスに飛ぶだけだぞ。
どこだったか忘れたがw

194 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 16:08:18 ]
>>193
なんとも脆弱なOSだな、それ

195 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/17(土) 17:04:00 ]
rundll user.exe,exitwindowsexecってもう使えないんだっけな

196 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:14:18 ]
>191

OSによるけど、簡単にはできない。
Win系、PC-UNIX系ならカーネルモードで動作する必要があるだらうから、
ドライバじゃないと無理。
あるいはOS依存のAPIに飛ばせばよいが、引数をちゃんと設定するには
Cとかで作った実行ファイルを逆アセンブルしないとわからん。

古いMS-DOSだと193の言う通り、FFFF0hに飛ぶだけ。




197 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:09:47 ]
nasm 2.00RC1
バージョン飛んだwww

198 名前:デフォルトの名無しさん [2007/11/19(月) 20:22:46 ]
AT互換機でハードよりの何か良い書籍はありませんか?

199 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/19(月) 23:09:35 ]
Pentiumマシン語入門編

200 名前:デフォルトの名無しさん [2007/11/21(水) 19:55:02 ]
1<=N<=12の範囲で0<=a<=b<=c<=d<=Nかつa+b+c+d=Nとなるすべての数を求める
プログラムでN==6,のときd=2,c=2,b=2,a=0の次の配列はd=2,c=2,b=1,a=1と
しないといけないのですがd=2,c=2b=2,a=0でプログラムが終了してしまいます
分岐式がおかしいと思うのですがうまくいきません、アセンブラはこうなりました
EOR ACC,ACC
ADD ACC,07h
ST ACC,[0A0h]
EOR ACC,ACC
ST ACC,[0A1h]
LD IX,0B0h
ST IX,[0A2h]
LOOP1: CMP ACC,[0A0h]
BGE END
LD ACC,[0A0h]
SUB ACC,[0A1h]
CMP ACC,01h
BNZ LABEL7
ST ACC,[0A3h]
LD ACC,[0A0h]
CMP ACC,04h
BGT END

201 名前:デフォルトの名無しさん [2007/11/21(水) 19:56:51 ]
LD ACC,[0A3h]
LABEL7:ST ACC,[0A3h]
LD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A3h]
LOOP2: CMP ACC,IX
BLE LABEL1
SUB ACC,01h
BA LOOP2
LABEL1:ST ACC,[0A6h]
LD IX,[0A3h]
LD ACC,[0A6h]
ADD IX,ACC
ST IX,[0A4h]


202 名前:デフォルトの名無しさん [2007/11/21(水) 19:57:37 ]
LABEL4: LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A6h]
LOOP3: CMP ACC,IX
BLE LABEL2
SUB ACC,01h
BA LOOP3
LABEL2:ST ACC,[0A5h]
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A5h]
CMP ACC,IX
BLE LABEL3
LABEL6:LD ACC,[0A1h]
ADD ACC,01h
ST ACC,[0A1h]
BA LOOP1
LABEL3:ST ACC,[0A7h]
LD IX,[0A2h]
LD ACC,[0A3h]
ST ACC,[IX]
ADD IX,01h
LD ACC,[0A6h]
ST ACC,[IX]
ADD IX,01h


203 名前:デフォルトの名無しさん [2007/11/21(水) 19:59:31 ]
LD ACC,[0A5h]
ST ACC,[IX]
ADD IX,01h
LD ACC,[0A7h]
ST ACC,[IX]
ADD IX,01h
ST IX,[0A2h]
LD ACC,[0A6h]
CMP ACC,02h
BGE LABEL5
LD ACC,[0A5h]
cmp ACC,02h
BZ LABEL8
BA LABEL6
LABEL5: SUB ACC,01h
ST ACC,[0A6h]
LD IX,[0A3h]
ADD IX,ACC
ST IX,[0A4h]
BA LABEL4
LABEL8:SUB ACC,01h
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A3h]
SUB ACC,IX
ST ACC,[0A5h]
BA LABEL3
END: HLT
end
ご助言お願いします

204 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:16:54 ]
デバッガで試せ。

205 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:10:49 ]
>ご助言お願いします
だらだらコピペすんな。

206 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 07:35:01 ]
フローチャート起こしてじっくり考えてみろ。




207 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 08:52:56 ]
8086(x86)の逆アセンブラでお勧めってあります?
98のゲーム(プリペル)を解析してWindowsに移植しようと思っているんだけど…

98エミュレータに手を加えて、CPU上で動くコード部をそのままdumpするつもりです。
そしてdumpされたコードを逆アセンブルして解析していく方法を考えています。

208 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 12:18:35 ]
一から作ったほうが早いんじゃまいか・・・

209 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:45:27 ]
>>208
あのプリペルの、歩幅とキー入力の絶妙なシンクロは
ぜひともそのまま再現したいんですよ

210 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:54:11 ]
ZZ86

211 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:54:36 ]
98をよくしらないんだがエミュレータを間に挟むのはなんで?

212 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:01:33 ]
>>210
98用のアセンブラはちょっと。
でもMDEとか懐かしいね。

>>211
DOSフォーマットじゃない独自のファイルシステムなので、
ディスアセンブルするのは起動から追わなくてはいけないので
結構面倒なんです。どこがコード部分かもわかりませんしね。

知りたいのはメインルーチンのみなので、
明らかにコードが通過した場所のみをダンプするのが楽そうに思えました。
ただ、万が一ダイナミックにコードが展開されていたらダメですけどね。

213 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:16:38 ]
だいたいわかった
その用途なら高機能なのより素直な奴の方がよさげだが詳しくないのでなんとも
dispeかおりーでばっぐあたりじゃだめか

214 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:35:26 ]
>>213
プロセスでもexeファイルでもなく、
単純にコードの羅列を逆アセンブルするという用途なのですが、
どうもそういう低機能な逆アセンブラはないみたいなんです。

dispeもOllyDbgも、プロセスもしくはファイル単位で
ディスアセンブルをするようです。

215 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:12:05 ]
ああdispeはともかくollyはエミュごとかけるってのを想定してた


216 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:19:49 ]
あるいはダミーのPEヘッダつけてやるってのも手か?



217 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:05:06 ]
ダミーのPEヘッダだとJMPFとか面倒そうですね
下手に分析されると変なところにラベル作られてしまいそう
そこらへんは手作業でやるしかないかな

218 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:25:28 ]
だなあ
シンプルなのが欲しいなあ

219 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:52:01 ]
>単純にコードの羅列を逆アセンブルするという用途

うさみみハリケーンだと、プロセスメモリの指定範囲だけ逆アセンブルできる。
あと、うさみみハリケーンの付属ソフトを使えば、バイナリデータをテキストか
ファイルで指定して、逆アセンブルするのも可。

シンプルな逆アセンブラってことなら、↑でいけるかと。

220 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:50:25 ]
>単純にコードの羅列を逆アセンブルするという用途
俺はnasmについてくる逆アセンブラを使ってる。

ndisasm test.bin > test.asm

コレでおkだと思う。

221 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:51:22 ]
debug.exe…

222 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:48:10 ]
Sourcer

ってまだ売ってたっけ・・・?

223 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:53:25 ]
symdeb.exe

224 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:10:36 ]
>>207
古のソーサー

225 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:53:23 ]
まずファイルを抽出すること

226 名前:デフォルトの名無しさん [2007/11/24(土) 22:31:13 ]
MASMの演算子offset,segと同じ意味のNASMは何にあたるのでしょうか?

NASMの本で良書をご存知の方、教え



227 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:07:27 ]
>>226
「教え」?
「てちょんまげ」?



228 名前:デフォルトの名無しさん [2007/11/24(土) 23:53:30 ]
>>227

て下さい。

です。失礼しました。


229 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:59:27 ]
あーちくしょー
アセンブラ使いてー
ニモニックで書きてー
スタック使いてー
オールレジストリの高速関数書きてー

 あーちくしょー

230 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:30:38 ]
レジストリ?

231 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:21:21 ]
もうちょっと激しく突っ込んで下さいですorz

232 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:22:18 ]
オールレジストリか…
変数の格納場所としては面白いかもな

233 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:43:09 ]







???

234 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:15:05 ]
table番地以降にいくつかの32ビットの符号付きの整数が入っているとして
その中に負の数がいくつあるかをカウントして
結果をcount番地に入れるプログラムを書け
ちなみにARMを使ってます
AREA QET13,CODE
ENTRY
LDR R0, =table
MOV R1,#0
MOV R2,#0
loop
LDR R0,[R0, R1, LSL #4] ;R0 = table[R1]
CMP R0,#0
ADDLT R2,R2,#1
BNE loop
SWI 0x11
table DCD 0xf1560012
DCD 0x1560012f
DCD 0x80330123
DCD 0x7f611c22
DCD 0xa0000242
tableEnd
DCD 0
END

まだ習いはじめでよくわかりませんが正の数1回カウントするとループをぬけてしまいます
どうか御教授お願いします

235 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:52:31 ]
>>234
ARM知らないけど、
R0をポインタとして使っているのに中身を代入して破壊してたり、
R1を更新していなかったりしてない?

236 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 16:43:47 ]
俺も知らないけど、ADDを非フラグ操作にするんじゃね〜の?



237 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:36:17 ]
ARMしらんけど

ADDLT R2,R2,#1

これはなにやってんの?

238 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:45:39 ]
R1加算が抜けているので無限ループするはずだがそれは置いておいて
LSL #4は4ビット左シフトだから一度に16バイト進んでいるのが原因だと思う

239 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:54:46 ]
ENTRY以降を擬似cで書くと、こういうことじゃないの?

R0 = table;
R1 = 0;
R2 = 0;
loop:
R0 = R0[R1 << 4];
condition = R0 - 0;
if (condtion < 0) R2 = R2 + 1;
if (condtion != 0) goto loop;
SoftwareIntrrupt(0x11);

となると、問題点は
・R0の破壊(from >235)
・R1の更新がない(from >235, >238)
・R1のシフト量がおかしい(from >238)
ってことだね。

240 名前:デフォルトの名無しさん [2007/11/27(火) 23:50:55 ]
NASMでセグメント演算子はどうするのでしょうか?
オフセットは以下のようにすればOKですが、このセグメントはわかりません。


mov ebx, orz
hlt

orz 0


241 名前:デフォルトの名無しさん mailto:age [2007/11/28(水) 00:25:46 ]
youtubetv.atspace.com/?2xfbo5@JustKakuuYoSay

242 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 15:09:30 ]
初めて自力での改造に成功したぜ

( ゚д゚)ウッウー

243 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:48:28 ]
mpeg compass.jp
名古屋駅近辺でお話しましょう

244 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:49:24 ]
A8R8G8B8のα値まで含めたアルファブレンドをMMX化しようと考えているのですが、
どうしても除算が3回から減らせず、なかなか思うような速度が出ません。
Cで書くと

temp_a = ((256 - src_a) * dest_a) >> 8;
new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;
new_g = (dest_g * temp_a + src_g * src_a) / new_a;
new_b = (dest_b * temp_a + src_b * src_a) / new_a;
(ただし 0 < dest_a <= 255, 0 < src_a < 255)

のようになり、積和の部分が目にとまったので、MMXで書けないかと考えました。
案の定RGBの積和部分(dest_x * temp_a + src_x * src_a)は簡単に書けたのですが、
三色素同時にnew_aで割る方法や式変形がどうしても分からず、結局三回divを使ってしまっています。
この除算を減らす、もしくは他の方法で高速化するような方法はないでしょうか。
諸事情によりPen2でそれなりの速度を出さなければならず、四苦八苦しています……。

245 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 14:02:16 ]
ソースうp

246 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 14:17:49 ]
さきに
temp_a / new_a
src_a / new_a
を計算しておいてそれをかけりゃいいんじゃないの?



247 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 15:14:17 ]
それを整数演算でやるわけにはいかないだろ。しかも、割り算が二回だし。
# それはそうと、Pen2はSSEないんだっけ? あれば単精度演算も遅くないんだが……

248 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 16:07:39 ]
ちょっと誤差がでるけど、俺だったらこうするかな?

new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;



new_a = src_a + temp_a;
temp_div = 65535/new_a; //実際にはテーブル化して temp_div = table[new_a];
new_r = ((dest_r * temp_a + src_r * src_a) * temp_div) >> 16;
// ( x * temp_div ) >> 16 はPMULHWを使用

249 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 17:02:47 ]
pmullwは符号付きだから>>244のdest_r * temp_aとかできないと思ったが、
下位16bitだけのpmullwは符号なしにも使えるんだったな。

>>248にもpmulhwは符号付きだとツッコミ入れようとしたら、
出てくるnew_rの値は明らかに32767以下だから関係なかった。。

250 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 17:18:32 ]
PMULHWは符号付きだったのか…。
符号なしのPMULHUWはPen3で追加された命令で
Pen2ではサポートしてないのね。

251 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/12/29(土) 05:12:56 ]
MMX アルファブレンドでググったらそのものなソースが出てくるが。


252 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:25:45 ]
RGBで分けなくてもいいと思うんだけど

253 名前:244 mailto:sage [2007/12/29(土) 21:39:45 ]
>>245-252
ありがとうございます。
>>246さんのアイデアを元に少しもじって、
無事除算の回数を一回に減らすことができました。
また、>>248さんのテーブルを使った手法でも、
それとほぼ同程度の速度を出すことに成功しています。
これなら何とか要求されている時間を満たせそうです。

参考までに変形後の式を書いておきます。

temp_a = (256 - src_a) * dest_a >> 8;
new_a = src_a + temp_a;
// temp_a / new_a + src_a / new_a = 255より
dest_temp_a = (temp_a << 8) / new_a;
src_temp_a = 255 - dest_temp_a;
// 以下、pmaddwdを用いて並列計算
new_r = (dest_r * dest_temp_a + src_r * src_temp_a) >> 8;
new_g = (dest_g * dest_temp_a + src_g * src_temp_a) >> 8;
new_b = (dest_b * dest_temp_a + src_b * src_temp_a) >> 8;

>>251
MMXを使うものも含め、アルファブレンドのソースはよく紹介されていますが、
出力先のα値まで保証するものは少し調べた限りでは見当たらなかったので、
今回は自作してみることにしました。

254 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:06:46 ]
出力先のα値は何に使うの?

255 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 06:31:12 ]
>>254
最終的に別の画像にまたアルファブレンドします。
出力先のα値が保証されていると、
複数枚の画像をブレンドした状態でキャッシュできるので、
枚数が跳ね上がったときに重宝しています。

256 名前:デフォルトの名無しさん [2007/12/31(月) 23:16:29 ]
全部アセンブリでCからリンクできる関数を書きたいのですがどうすればいいでしょうか?
まったく見当もつかず途方にくれてます。
ポインターだけでもいいので教えてください。



257 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:21:35 ]
gcc -S foo.c

258 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:23:57 ]
>>256
というか、先ずは環境を明らかにしようぜ。

259 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:39:11 ]
x86のLinuxか、PowerPCのLinuxでお願いします。
gccです。
>>257
それはアセンブラをじっと眺めろということでしょうか???

260 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:48:21 ]
何か関数を作って、法則見つけようぜ、ってことじゃね。

とりあえず、

・ 最初と最後にはスタックフレームの確保を行うと楽。
 ebp とか esp とかいじってる部分がそれ。
・ 退避すべきレジスタがいくつかある。最初と最後で push/pop してるやつがそれ。
・ 引数を渡すときは、基本的には引数をスタックに push する。
 後ろの引数から push するか前のから push するかはコンパイラ次第。確認しる。
 可変長引数かどうかで変わる事もあるので注意する。
・ 関数を呼んだ後に引数の分だけスタックポインタを戻すには、
 呼び出し側から esp に引数のサイズだけ add するか、
 関数から戻る時に ret の引数を使うかする。
 どっちなのかはコンパイラ次第。確認しる。
 可変長引数かどうかで変わる事もあるので注意する。
 標準関数を call した後に add する必要があるかどうかも確認しる。

261 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:08:32 ]
2008年こそアセンブラをマスター!

262 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:50:30 ]
>>260
どこかにその法則を説明しているサイトなり書籍はないですか?
というとか誰かアセンブラを習うのに最適な学習書を紹介してください

263 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:20:46 ]
>>262
gcc.gnu.org/

264 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:19:25 ]
>>262
asm-cだけわかればいいのか?
結局、石のアーキ知らないと、asm使う意味が薄いよ。
x86とppcじゃ違いすぎ。

265 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:26:57 ]
昔、ボーランドのTURBOシリーズでCやPASCAL(Delphi)やらからAssmを呼び出す為の説明が在ったのを思い出した。

266 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:39:36 ]
calling convention gcc でぐぐれ。stdcall fastcall cdeclでもいいぞ。




267 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:08:01 ]
regparm使って破綻しそうな予感。

268 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:38:01 ]
久しぶりにbinutilsのスナップショットきた。
asでも-marchのサポートとかが入ったから遅れたのかな?

269 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:32:51 ]
コードをエンコードしてセクション名ブランクにしてセクションの属性を
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
にしてる実行時デコード型プログラムの逆アセ面倒くせー!!

はぁ、ちょっちスッキリした。

270 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:44:45 ]

IA-32(x86) GASでよかったら
「プログラミングの力を生み出す本 インテルCPUのGNUユーザーへ」
ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13207-2
なんてどうかな?
NASMにシフトするにしてもGASは知ってて損はないとおもうし
スタックフレームの説明ぐらいなら書いてありますよ

271 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:54:50 ]
人生nopだ。

272 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:45:38 ]
>>271
イ`

273 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:57:29 ]
死ぬということじゃなくて,
何もせずに時(クロック)だけが進んでいく,って意味じゃまいか

274 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:08:24 ]
hlt
後で起こしてくれ

275 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:25:46 ]
俺なんか here: jmp here してるんだぞ

276 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:17:37 ]
Windows32プログラミングするのにお薦めのアセンブラ、デバッガってなんですかね。

インラインアセンブラと EXDEB使ってるんだけど、32bit部分対応で微妙に使いにくい。



277 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:25:01 ]
>>276
アセンブラが使いにくいのかデバッガが使いにくいのかどっちだ。

278 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:49:40 ]
>>275
暖房器具ですか?
つうか"jmp $"でいいんでないかい。

>>277
デバッガじゃないかい。
機械語レベルでまともなデバッガなんて絶滅したと思うが。




279 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:39:58 ]
教えてください。
int __stdcall AsmFunc(int *v1, int *v2);
という関数の中身をMASMで書きたいのですが、下のように書いてもうまく動作しません。
v1に数値3hを代入したいだけなのですが、何も変化がありません。アセンブル、コンパイル、リンクでエラーは出ませんでした。
// asmfunc.asm
_AsmFunc@8 PROC PUBLIC
 push  ebp
 mov  ebp, esp
 mov  eax, 3h
 mov  dword ptr [ebp + 8], eax
 leave
 ret  8
_AsmFunc@8 ENDP
// test.c
int v1, v2, ret;
ret = AsmFunc(&v1, &v2);
どう書くのが正しいですか?

280 名前:デフォルトの名無しさん [2008/02/24(日) 15:40:49 ]
age忘れ

281 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:51:39 ]
mov  ecx, dword ptr [ebp + 8]
mov dword ptr [ecx], eax
こうじゃない?

282 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:55:59 ]
>>281
ありがとうございます!その通りでした。
上のソースでは、v1の参照先ではなく、v1そのものに入れてしまっていたんですね。
助かりました。

283 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:45:07 ]
279ですが、逆アセして色々調べたところ、下の1行で良いことがわかりました。
mov  dword ptr 8[ebp + 8], eax
MASM特有の記法でもない様子なので、これで行こうと思います。

284 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:28:17 ]
インラインアセンブラでasmの前に _ が
一個の場合と二個の場合の違いを教えてください。


285 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:32:25 ]
コンパイラのマニュアル読め

286 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:19:03 ]
インラインアセンブラの記法はコンパイラ独自



287 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:04:50 ]
ちなみにVisual C++だったらどっちでも同じだな。

288 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:57:59 ]
Visual C++の場合
_asm は/Zaオプション使用時には未定義になるが
__asm は/Zaオプション使用時でも有効

289 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/27(水) 23:08:56 ]
asmだか__asmのどっちかって規格の予約語じゃなかったっけ?
はずされたんだっけ?

290 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:20:36 ]
とりあえず C++ の規格には asm がある。
どういう意味になるかは処理系定義。

291 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:26:04 ]
ANSI規格の解説も読めない白痴が来るとスレがひたすら引き締まる

292 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/27(水) 23:28:10 ]
アンシー(笑)

スイーツ(笑)

293 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:33:06 ]
7.4 The asm declaration
An asm declaration has the form
 asm-definition:
  asm { string-literal } ;
The meaning of an asm declaration is implementation-defined.
[Note: Typically it is used to pass information through the implementation to an assembler. ]

294 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/27(水) 23:46:55 ]
__asm__ はCのほうな

295 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:56:26 ]
asm は J.5.10 にあるようだが、
__asm__ なんてどこ探してもないぞ。

296 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/28(木) 00:15:58 ]
gcc



297 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:25:21 ]
自分から規格の話振っといて
何で処理系依存の話してるんだ?

298 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/28(木) 00:28:57 ]
いいえ、ケフィアです。

299 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:55:32 ]
>>297 病気の子なんだからほっときなさい


300 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:18:28 ]
aboneばかりだが前後の状況から察するに
またあいつ負けてるのか

301 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 17:29:58 ]
MSVCについてくるアセンブラソースを、勝手に流用したらタイーホ?
例えばx86用strcpy.asmをGAS用に移すとか。

302 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 18:39:56 ]
ライセンス嫁

303 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:43:27 ]
>>301
そりゃダメだろ。

まあ、strcpy() あたりだとどう書いても似たようなものになるとは思うが。

304 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:01:48 ]
>>301
MSVCRT.DLLをリンクする程度だったら
それはシステムライブラリ扱いだからモウマンタイ?

ていう話ではない?

305 名前:301 mailto:sage [2008/03/05(水) 12:26:41 ]
やっぱり黒か…
ライセンスを探したがどこにも無くて。

x86でNULLを探すための、アライメントを考えた4バイトを一気に調べるソースが、とても参考になったから使わせてほしかったけど、止めておきます。

306 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:37:20 ]
単独でルーチンにもならんような、部分的なテク(イディオム)をまねするぐらいなら
問題ないな



307 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:18:57 ]
>>306
現時点の業界内での常識的判断からは「問題ない」かも知れないが、
訴訟などでイチャモンをつけられる可能性は否定出来ない。
仕事のコードは 判っている範囲ではクリーンにせざる得ない世になっている気がする。


308 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:08:10 ]
>>304
.dll のリンクはまた別の話だろ。

それがダメなら、Windows のアプリなんか作れないだろ。

309 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:46:02 ]
かといって
for(i=0;i<max;i++){
の行をコピペしただろとか噛み付かれることまで気にすんのは杞憂がすぎるよーな。
つか strcpy ぐらいなら gas に移植しなくても gcc が標準で同等版もってそうな
気がするけど。

310 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:33:57 ]
原則に戻ろう
創造性のあるコードをコピーすることが違法

311 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:43:52 ]
人間は違法


312 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 07:55:54 ]
違法だが合憲

313 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:18:58 ]
どなたか教えてください。
参考書を見ながら学習中ですが、1.の環境で2.のファイルを3.のコマンドでビルドした結果4.のアセンブリコードを得ました。コールして欲しいsys_writeがコールされず、実行ファイルは思った動作になりません。
5.のように修正し、6.で実行ファイルを生成すると思った動作になります。
何が問題となって3.のコマンドでsys_writeコールが生成されないのかわかりません。


314 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:19:37 ]
1.環境
CPU:AMD-K6(tm)
gcc version 4.1.2
GNU ld version 2.17 Debian GNU/Linux
ldconfig (GNU libc) 2.3.6

2.ファイル hello-asm.c
#include<unistd.h>
char message[]="Hello, world!\n";
int sys_write(int fd, const void *buf, int len){
int ret;
asm("int $0x80" : "=a" (ret) : "a" (4), "b" (fd), "c" (buf), "d" (len));
return ret;
}
void sys_exit(int stat){
asm("int $0x80" : : "a" (1), "b" (stat));
}
void main(){
sys_write(1, (void*)message, sizeof(message));
sys_exit(123);
}

3.コマンド
gcc -nostdlib -save-temps -Wl,--entry=main -Wl,-t -o hello-asm -O2 -finhibit-size-directive -fno-ident -fomit-frame-pointer -fcall-used-ebx hello-asm.c


315 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:21:57 ]
4.生成アセンブリコード一部
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ecx
subl $4, %esp
movl $123, (%esp)
call sys_exit
popl %eax
popl %ecx
leal -4(%ecx), %esp
ret

5.正常動作アセンブリコード
main:
削除: leal 4(%esp), %ecx
削除: andl $-16, %esp
subl $16, %esp
pushl $15
pushl $message
pushl $1
call sys_write

6.修正後コマンド
as hello-asm.s -o hello-asm.o
/usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --entry=main -o hello hello-asm.o


316 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:10:48 ]
asmにvolatileを付けてみたらどうかね。




317 名前:313 mailto:sage [2008/03/11(火) 00:25:38 ]
>>316
おおー、直りました!
コンパイラは不要なソースとして認識したんですね。。。
-O2 → -O0 に変更したらvolatile無しでも動作しました。
ありがとうございましたm(_ _)m

318 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:31:21 ]
gccでアセンブラはかせてみたら下のようになった(抜粋)んだが・・・

main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax


"andl $-16, %esp"の部分は動作的にはスタックポインタの下位4bit切り捨てはわかるんだけど、
どういう意味なのかがよく分かりません。
ページング方式だからメモリ確保かなあと思ったけど確保される容量みても全然すくないし・・・

319 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:43:39 ]
アラインメント合わせだと思うけど

320 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 19:19:06 ]
-n での AND は便利なので覚えるべし。
>>318の例だと
16バイトアラインで8バイト以上のスタック領域を確保
という意味になる。
机上で考えてごらん。

もちろん>>318の例のエピローグコードは理解できるね?

321 名前:318 mailto:sage [2008/03/14(金) 14:02:58 ]
レスありがとうございます。
いろいろ自分でも調べてましたが、アライメントの調整っぽいですね。
アセンブラは学校で理論的なことは教えてもらったんですが、実践的なことは全然ならってなくて・・・

>>320
エピローグコードって最初の3行のコードですよね?
これって
呼び出し元のベースポインタの退避
呼び出し先のベースポインタの設定
最初のプッシュしたデータ分のスタックポインタの設定
ですよね?

322 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:24:59 ]
辞書位引け epilogue prologue

323 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:37:20 ]
プロローグとエピローグのどっちがどっちだったか分からない時期が俺にもありました…

324 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:41:13 ]
pro- 前〜
epi- 後〜

325 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:01:46 ]
GCCの拡張で、".code16gcc"を使えば、32bitセグメントから16bitセグメントの関数を
呼び出したり(その逆も)するのが簡単になるようなんですけど、16bitと32bitが混在
するようなコードを書く場面ってあるんですか?

326 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:51:51 ]
ブートローダーとか?



327 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:54:18 ]
仮想86モードとか?

328 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:55:11 ]
リブートのためのエピローグコードとか?

329 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 00:06:50 ]
16ビットで書いてあるコードを32ビットに移植したいときとか?

330 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:44:52 ]
物好きとか?

331 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:27:27 ]
code16gccは16bitコードを埋め込める機能であって呼び出せる機能ではないようだが

332 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:28:17 ]
DEADBEEF

333 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/03/20(木) 22:31:35 ]
BADFACE

334 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 12:18:21 ]
CAFEBABE

335 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 13:13:16 ]
EFFACED

336 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:47:17 ]
BACA



337 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:13:58 ]
LCDのバイアス電源は主電源落とす前に切っとけよ。
とかいうときに。

338 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 12:46:20 ]
Ce11Ba11

339 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 09:51:15 ]
最近アセンブラ勉強し始め、初めての8086+Debugコマンドで本を読み終わったんだが、
次はどこぞのアセンブラを使ってみたいと思う。

少し前だとnasmだと思うけど、最近は何がメインで使われてる?
Win+CygwinかFreeBSDの環境で使う予定。

340 名前:デフォルトの名無しさん [2008/04/13(日) 10:03:05 ]
あげ

341 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:13:32 ]
>>339
Windowsのデバドラ開発とかだったら由緒正しいMASM。確かDDKに添付。
PC-Unix界隈だとやはりnasmか、あるいはgas

342 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:28:09 ]
こんな過疎スレ常に見てるやついないって 今でもNASM・GAS

343 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:38:01 ]
>>341,342
thx
まだnasmがいいのか。MASMも使えるならやってみるかな

ム板ってアセンブラスレ、ここくらいだっけ?
やっぱり2chにはアセンブラ使い少ないのか。。。

344 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 11:38:47 ]
て言うか、RISC が流行りだした頃から、アセンブラのコード書くのが
激しく面倒になったし C でそれなりの性能が出るようになったから、
BIOS / ブートローダとか、ほんとにカリカリチューニングする奴ぐら
いしか使ってないだろ。

345 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 11:46:34 ]
音声処理、画像処理、暗号化、圧縮…
まあこんなとこか

346 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 11:55:44 ]
ダンゴさんはもっと有用なことに使ってそうだな



347 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:01:05 ]
>>344
R3000とかは、そこら辺のCISCなどよりむしろ楽だったよ、しかも高速だった。
R4000以降は最低だけどね

348 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:03:01 ]
gas は嫌いだ、人が書くようにできてない

349 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:04:07 ]
gasの構文はきもいんだよな

350 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:55:30 ]
>>347
アセンブラの書きやすいCPU(基本に忠実な32ビットCPU)
68020、MIPS32、V70
アセンブラの書き難いCPU
SuperH、Alpha、SPARC、ARM、IA64など

351 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:23:07 ]
アセンブラの書き難いCPU
x86も追加してくれ

352 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:49:20 ]
ARM そんなに悪くないけどなぁ。


353 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:40:32 ]
こなれてると思う。

354 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:17:44 ]
350がロートルだということはわかった

355 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 19:18:04 ]
遅延ジャンプの理由は何?

356 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/13(日) 19:54:15 ]
SHは「Cの関数で変数はほとんど16個以内に収まるからレジスタ数は16あれば十分」
みたいな設計思想で作られてるんでアセンブラではそんなに扱いやすくないんでないの?
良くも悪くも高級言語時代の組み込みCPUアーキテクチャって感じ

あとIA64も同意する。



357 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:33:20 ]
SH はセコくて嫌だったな。
そーゆー設計思想だからしゃーないけど。


358 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 21:39:52 ]
アドレスの指定がめんどくさい

359 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 04:44:51 ]
8085やZ80や6809や8051はASM書きやすかったな。85は今でも現役だけど。

360 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 04:47:36 ]
要求がそれほどじゃなかったからね、昔は。

361 名前:デフォルトの名無しさん [2008/04/14(月) 07:01:20 ]
8085よりは演算命令が充実してレジスタの多い8086の方が書きやすい。
でも68000はもっと書きやすい。って行くとR3000は書きやすかった。

362 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 10:31:08 ]
>>356 はGPLv3とAGPLを混同する悪質なFUDをばらまいてた固定

363 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/14(月) 11:46:57 ]
一言で言うとGNUは嫌いです

364 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 11:48:32 ]
>>359
この時代で一番いいのは6502だろ、マイナーだったことと周辺LSTのそろいが悪いので売れなかったけど。
反面一番売れたZ80は、タイマー・DMA・I/Oインターフェイスと大抵の物がそろっていて、はんだこて握らなくて済むように
ソケットにでもしてしまえば今のPC自作と変わらないレベルだった。
それ以外にもZ80は、メモリーを節約しやすかったので、この点もメモリーの制約の大きな時代では大きなアドバンテージになったと思う。
それで、書きやすかったかといえば・・・・・ちょっと微妙な気がするな。
16ビット計算もなんちゃって計算なのでフラグが使えなかったりと・・・
高速な乗算に使える1を入れての右シフトは公開してほしかった、こんな大事なもの非公開の隠し命令にするなんて何事だと当時思った。
もうひとつついでにDRAMのリフレッシュをする機能であるRレジスタは、CPUリセットで停止してしまう片手落ちをなんとかして使えるものにしてほしかったな。
リセットするごとにメモリーが消えては使い物になりましぇん。
こんな事書いていると年がばれるぅぅぅ

365 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 13:06:09 ]
>>363
わざと誤情報をばら撒いたという事か
悪質だね

366 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:18:02 ]
>>361
MIPSは良かったねぇ

>>365
かわいそうな子にさわっちゃいけません




367 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:22:44 ]
>>364
今もこれだけの愚痴が出るということは
かなり根に持ってるな?w

アセンブラ、ゴリゴリいじってみたい気もするけど、
今いじる仕事といえばかなり卓越してないと無理だろうな。。。
趣味だけにしとこ

368 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:40:36 ]
6502ってハミコンか?

369 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:05:09 ]
ダンゴさんがピシっと〆てくれたな

370 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 06:51:48 ]
6800作ったMotorolaからスピンアウトした連中がMostekって会社作って6502作った
6800は8bitとしては歪んだ(贅沢な)設計だったが6502は潔かったので安くて速かった
AppleIIに採用されたことで有名
ファミコンはそれのカスタム版だったと思う

371 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:22:15 ]
>>367
いやぁ、懐かしい思い出だよ
Z80はプログラムを作る方はともかく、ロボットを作ったりしたときなどはそりゃもう一番楽しいチップだったよ。
大手メーカーがこぞってこれを使ったのは、技術的なハードルが低いのとコストの安さだろうね。
逆にいえば、これを使っているメーカーの技術力はしれていたと思ってます。
シャープのテレビ事業部の製品などは、技術とかそんなの関係なしに楽しかったな、ハードはああでなきゃいかんです。
富士通は技術力あったけれど、つまらんマシンだったと思ってるので。

>>370
6502は、無駄を省き必要最小限にシェープアップすると、ここまで変わるのかという例だね。あとR3000も。
不必要な命令セットは、憶える事も余分に増えるし、大して代わり栄えのしないトライアンドエラーによるチューンが増える。
時間が無駄になる割には効果は薄いと思った。

372 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:25:44 ]
>>371
全くだ。6502は6802に対応するチップだが本家より先に出したんだから凄い。
多分Moto内部で6800に負けたデザインなんだろ。

373 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 21:44:58 ]
>>371
そういう経験っていいなー。ハード屋目指してみるかな?w
けど、今のハードのレベルだと三十路過ぎから勉強しても無理だよな。。。

趣味でやろうと幾つか買ってるけど全然いじってないしorz

374 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:26:42 ]
>>373
それハード屋じゃない。

375 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:02:56 ]
>>374
じゃあ何屋になるんだろ?単純に組み込み系かな?
すまん、門外漢で全然分からんw

376 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:13:07 ]
>>372
> 6502は6802に対応するチップ

どこが対応してるんだ?



377 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:21:28 ]
ソフト屋(低レベル)とか制御屋とか?

378 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:40:43 ]
>>377
thx

ハード屋=回路設計だっけ?

379 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 13:06:17 ]
組み込みとか楽しそう。

380 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 03:10:43 ]
>>376
中味の話じゃなくて位置付け

381 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:49:11 ]
>>390
だから、位置付けのどこが対応してるんだ?

# 中身は、言わずもがなだろ。

382 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:49:29 ]
対抗するチップ、のほうがしっくり来るな。

383 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:50:25 ]
はいはい、おじさん同士喧嘩しないの!

384 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:13:22 ]
横からお邪魔しますが,型番が全てを表してるんじゃないの?

385 名前:デフォルトの名無しさん mailto:sage 全てって何さ [2008/04/18(金) 12:22:59 ]
いえ、型番だけではビット数もパッケージのピン数も
開発者の嫁の顔もわかりません。

386 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 13:02:05 ]
【コラム】Hello Worldコレクション (5) アセンブラ編 - OSごとに微妙に異なるスタイルを使い分ける
ttp://journal.mycom.co.jp/column/helloworld/005/index.html



387 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:08:28 ]
昔はVRAMのアドレスやジョイステックのポートを直接読んだり書いたり、Hello World なんかよりよほど面白かったんだけどな
アセンブラがわからなくても、ベーシックについているモニタモードなどでアドレス指定して直に書き換えしているうちに憶ちまった人もいるし
今はいちいちOSにお問い合わせしないと何もできないからすぐに結果が出せなくて面白くないね。
言語関係をやっている人以外には興味の湧くところでなくなった。

388 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:20:14 ]
> 昔はVRAMのアドレスやジョイステックのポートを直接読んだり書いたり

必要なのはアセンブラではなくてメモリのマッピングの情報だったりする。
自身でも書いているけど、ベーシックだろうがCだろうが可能だよね。

ちょっと前に趣味でDSの自作ソフト作ってみたけど、
そこでもARMのアセンブラの知識が有効活用されたと思ったことはあまりなかったな。

本当にもうコンパイラ屋さんしか必要ない情報なのかも

389 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:21:53 ]
思い出した。ゲームのプロテクトを外すのにはアセンブラ必須だったね。
9801のディスクアクセス割り込みの CD 1B とか懐かしいな。

390 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:48:26 ]
>>388
コンパイラのアセンブリ出力見たりしない?
私は最適化をどう行なったのか当たりをつけるために、しばしば見てるんだけどねぇ。

391 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:08:06 ]
>>388
> 本当にもうコンパイラ屋さんしか必要ない情報なのかも

ブート部分を書く人にも必須だよ。

まあ、流通量の多い機器ならコンパイラ屋さんがサンプル提供している
ケースも多いけど。

>>390
>>388 は知らんけど、俺は何か問題かある時とかよっぽどきちきちに組み
たい時以外は見なくなった。

392 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:26:12 ]
最近はコンパイラの品質も高く

あとは言わな(ry

393 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:31:45 ]
>必要なのはアセンブラではなくてメモリのマッピングの情報だったりする。
最近のハードウェアがまたI/Oをメモリーにマップする(x86場合はIO空間か?)より
通信が中心になってパケットをDMAまたは、それに類似する方式で送る形式になっているので、
「すぐにアクセスできる感」は直に触ってもないんだよな。
近年のハイパフォーマンスを実現するにはアドレスとデータのペアなんか送っていたのでは性能が出ないというのも難解にしているような気がする。
すっかり総ネットワークプログラミング状態だよ。
昔ながらのアクセス方法が今に続いているのはメモリーだけになってきている。

394 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:37:08 ]
>>392
高くはないけれど、最近のハードウェアの特性が地味チューンを無意味にしている所はある。
メモリーキャッシュに乗せる技術でほぼ全部だし、それ以外はやってもやらなくても殆ど変わらない。

395 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:46:25 ]
うーむ、アセンブリ出力を眺めてループ内にdivがいくつあるか数えるような使い方するのはうちくらいか?w

396 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:06:55 ]
よし、みんなで秋葉原の鈴商にHD64180を買いに行こう!



397 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:50:36 ]
>>389
よく SYMDEB で弄ったな。

>>396
作りかけのCP/Mボードが部屋に転がってるw
まだ64180なんて売ってるのか。
まぁ8085とか6800とかも売ってる所が在るから不思議では無いか。

398 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 21:33:00 ]
6800系はまだ現役だね。マイクロコントローラになっちゃってるけど。

399 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:24:05 ]
>>395
多分君のところだけ。

普通のところはそんなことする必要がある部分は初めからアセンブラで書くと思う。

400 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:24:59 ]
86や使いこなせばこなすほどコンパイラなる我が身なりけり
68kどれを使えばよいのやらgccに道を問ふまで

引用元忘れた

401 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 16:31:46 ]
最初のコンパイラはASMで書いたけど、cができたらそのcもcで書き直すよね。
そうすると新しいチップができてもそのコンパイラはコンパイラで書くんじゃないの?

402 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/21(月) 16:45:42 ]
機械語やデータのバイト列生成するだけならfwriteとかfputcharで十分だな

403 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 17:42:38 ]
sレコードとかならprintfでいける。

404 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 17:47:04 ]
ところで昨日鈴商いったんですよ、でね、HD64180探してたら目の前に8085があるじゃないですか。
マルチプレクスされたバスなんて、ちょっと回路組んだ気分にひたるには丁度よさそうなんで、
そのまま8255と8251と8KSRAMまで買って帰ってきちゃいましたよ。
あと373とかも。
あとはROMが欲しいので、今日、若松でDIPのFlash買って来ました。

さて、ハンダ付けハンダ付け・・・

>>397
CP/M関連でお勧めのサイトありますか?
あったら教えてください。

405 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 17:58:42 ]
www.auction.co.jp/mem1/item/mem_itm_item.asp?LOT=1036477
120円、高っ、いつか10円になっていた時代があったような・・・

406 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 19:56:06 ]
>>396
俺が知っているのはTMP64180だな。



407 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:52:02 ]
>>401
コンパイラ本体は C で書くけど、どんなコード生成すればいいかはアセンブラと
言うか機械語の知識が必要でしょ。

あと、コンパイラによってはアセンブラソースを吐く奴もいるし。

408 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:14:04 ]
>>407 コンパイラの最終一歩手前フェーズ(機械語生成フェーズ)がその知識を抱え込めば
いいはずですよね。 その後に最適化フェーズが何パスかあるかも。
アセンブラソースを吐かすのはデバックとかそのフェーズ検証のためが第一義で、
コンパイラでアプリを開発する人には、ゼロとは言わんがあんまりメリット無い気がする。

409 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:22:49 ]
>>408
いや。コンパイラ使いにも、-S 出力のメリットはある。
同じ処理で、どっちの書き方が効率良さそうかをみる時には活用できる。
もちろんベンチを取るでもいいんだけど。


410 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 18:19:15 ]
半田づけする時のヤニが焦げる香りが好きで吸い込んでいた事があったのを思い出して今ぞっとした。鉛中毒は何年後にでるかなorz
融点が高いという話は聞いていますが今の鉛フリーの半田は取り扱い難くなっているとかあるんですかね?

411 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 18:32:06 ]
はげしく板違いだな。
鉛フリーは使った事ないけど、濡れにくいと聞いている。

412 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 19:40:41 ]
上でも言われてるけどコンパイラの最適化具合見る為にアセンブリ吐かせるっしょ。
iclもifort単純な演算にハメてやらないとすぐベクトル化諦めやがる。
ま、大抵の場合はそこまで単純化出来ないから結局intrinsics使う事になるんだけどな。

413 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:41:25 ]
>>411 処女みたいなもんだな。

414 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 01:55:57 ]
技量に大きく依存する点も似てるな

415 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:28:01 ]
intelプロセッサに未だにDWORDの並列演算が無いのは嫌がらせか?

416 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:49:34 ]
DWORD*4ならSSE2になかったっけ?



417 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 10:33:42 ]
〜〜やるのに都合のいい命令が無いっていうならわかるけど、
並列演算が無いっていうのは調べて無さすぎだろ

MMX かなり限定的な使用のみ
SSE 大幅に拡張された
SSE2 かなりのところまで使えるようになった
SSE3/SSE4 さらに便利に

wlog.flatlib.jp/archive/1/2007-4-21


418 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 23:00:14 ]
415だが正しくは32bitの飽和並列演算が無いの間違いだった。


419 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:24:48 ]
実行頻度低そー

420 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/03(土) 11:49:23 ]
2byte空間にOpcode余ってないからじゃないの?
それよりSIMDにNEG代替命令が無くて困る。
NANDやNOR入れてくれよ。

421 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 11:53:14 ]
>>420
pcmpeq で all 1 つくって、pxor じゃ駄目なの?
レジスタ節約したいとか、クロック節約したいとか切実に思うけど。

422 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/03(土) 12:07:40 ]
ぼくがかんがえたAVX 2に入れるべき最強命令(笑)

vpnand ymm0, ymm1, ymm2
vpnor ymm0, ymm1, ymm2
vporn ymm0, ymm1, ymm2
vpeqv ymm0, ymm1, ymm2
vpcmov ymm0, ymm1, ymm2, ymm3

あと、3〜4入力のAND, OR, XORがあってもいいくらいだな
これなんてDSP?

つーかDWORDの飽和演算なんてARGB128bitとか使わない限り要らんな。

423 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:51:40 ]
>3〜4入力のAND, OR, XOR
これいいな

424 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 20:38:30 ]
>>420
AVXの発表で思ったんだが、まだ1byte空間に空きがある事の方が驚き。

NEGは俺も凄く欲しい。しかしVMXにも無いよな。
マイナス取るって事はその後演算するって事なんだろうから、
可能な限り演算順序を入れ替えて対処しろって事かと。

あとはuOP Fusionみたいのでxor/subの組み合わせを特別に認識している可能性はある。
もしくは入れ替えに対処出来ない状況というのはa*(-b)のような積や商に入っている場合だから、
どっちにしろ積のレイテンシ待ちだしその間にやれば?って発想かも知れん。

>>423
ハードウェアの仕組みを知らんが、入力ポートと出力ポートの数に制限があるんじゃないか?
そうじゃないと配線が大変な希ガス。

425 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:00:04 ]
> ハードウェアの仕組みを知らんが

ハードウェアの勉強してから書けよ。

426 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/03(土) 22:57:45 ]
negはできるわ。SSSE3のpsign*が使える。まあ2段構えになるが。
無いのはNOTだな。

AVXでは4引数(3入力1出力)を実現するのにVEXの他にimm8の上位4ビットを使ってるが
下位4ビットも使えば5引数(4入力1出力)も可能だろうし、実際に何かしらやる計画はあるのだろう。



427 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:34:13 ]
>>425
スマン。
>>426
命令にエンコード出来るかどうかじゃなくて、実装出来るかどうか。
多分レジスタファイルが何十とあって、
そこから処理する値を取ってきて保管する場所があって、
それを処理して、出力を保管する場所があるんじゃないか?

例えばパラレル配線で繋がっているメモリからの読み出しをクロック当たり1byte増やそうと思ったら
CPUのピン、メモリのピン、基盤の配線が全て8本増えるって事だと思うんだが、
オペランド数を増やすのも似たようなことが起きそうな気がする。

3オペランド化は殆どの命令に恩恵があるからやる価値があったのだろうけど
たった数命令の為に膨大なトランジスタリソースを裂く必要があれば全く目もくれないと思うんだが。

428 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 11:58:02 ]
謝る暇があったら、勉強しなよ。

> 多分レジスタファイルが何十とあって、
> そこから処理する値を取ってきて保管する場所があって、
> それを処理して、出力を保管する場所があるんじゃないか?

何を言いたいのかさっぱりわからん。

そのあとの文章も同様。

429 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 13:31:06 ]
>>428
お前は分かっているのか。
大雑把に教えてくれるなり指摘してくれ。

CPUにレジスタファイルが何十と入っているのは分かるよな。
処理部分がVHDLで記述されていようと自分で回路書いていようと、結局は回路な訳だ。

例えば1bitのAND回路があった時に、通常入力は2つで出力は1つだろう。
レジスタファイルが100あってもその全てがAND回路に繋がっているはずがない。
入力として必要な2つだけが選択的に一次レジスタのような格好で取り出され、処理が選択されるんじゃないかと。

> そのあとの文章も同様。
妄想だらけな文章でも、そのあとの方が理解しやすいと思うんだがどの辺が分からなかった?

430 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 14:56:18 ]
>>429
「CPUの作り方」みたいな本が沢山出てるから、どれでも一冊読んでみ。
バスとかセレクタとか・・・

431 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/04(日) 19:48:18 ]
「imm8を使えばとれる引数増やせるじゃん」って言ったら
「デコーダが複雑になるだろ」とか集中砲火浴びたことがあった。


今じゃ、 Opcode ModRM [SIB] [DISP] imm8, imm8
なんて命令すらありますね。AMDだけど。
SSE5では最初のimm8をDREXに置き換えたのかな?

432 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:14:41 ]
ダンゴさんは先見の明がありすぎるな

433 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:34:10 ]
>>429
デコーダはあっち置いといて。
4入力ANDを追加するとして、バスから4入力ANDへ引く線と
AND回路と、結果を書き戻す回路が必要になるだけだろう。
ファンアウトでも気にしてるのか?

434 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:43:56 ]
つ「74LS181」
focus.ti.com/lit/ds/symlink/sn74s181.pdf


435 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/04(日) 21:22:57 ]
4入力のANDは

[A]─AND─AND-[E]
[B]─┘   │
[C]─AND─┘
[D]─┘

一方、VMXでいうvselbとかAMD SSE5のpcmovは

[A]━━━━AND-OR-[D]
[B]─AND─╂─┘
[C]━┷NOT┛

VMXに関してはvand/vor/vnor/vxorと同じレイテンシで実現できてることを考えれば
3〜4入力はそんなに実装難易度は高くない気がする。

436 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:45:39 ]
多オペランド演算の問題はALUではなく
レジスタからALUへのパスが複雑化することにあるんだが。
どうせ回路を複雑にするなら特殊な専用命令を追加するより
スーパースカラやベクトル演算器を入れた方が効率がいい。




437 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:00:32 ]
今はregister fileのportからALUへのpathはoperandの数だけ独立に引いてる?
それとも時分割してる?

438 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 02:19:03 ]
レジスタファイルって何を指してる?
ただのレジスタってか、FFのことを言ってるのか?

439 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 08:01:28 ]
何十って言ってるから、32/64bit レジスタを1個と思ってるんじゃね?

440 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 11:15:38 ]
64ビットx8本くらいのレジスタファイルが100セットくらいあると思ってるのかもよ。

441 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 11:41:00 ]
いや、だから、そのファイルって、何を言おうとしてるのかなと。
どこかのメーカの用語か?

442 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 11:48:39 ]
ああ、レジスタ全体のことか。失礼。

443 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 12:08:55 ]
つ ttp://en.wikipedia.org/wiki/Register_file

444 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 12:45:41 ]
レジスタファイルはプロセッサコア方面では普通に使われる。
CPU作ろう系の本には必ず出てくるよ。

445 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 12:56:12 ]
アーキテクチャによるだろ

446 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 13:10:05 ]
アーキテクチャはあんまり関係ないだろ。
全部ワイアードでも、マイクロプログラムの説明は出てくるように。

ただ、萌え系のあの本にはレジスタファイルの解説は無さそうだ。



447 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 13:20:06 ]
レジスタファイルの概念が確立した以後の本で、その本で造ろうとする石で
プロセッサファイルを使っているか、総合的な解説に字数を割いていれば
出てくるとは思うけど。

448 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/05(月) 13:23:53 ]
とりあえずレジスタリネーミング機構のあるプロセッサには確実にあるものだと思ってるが。
ATOMにすらあるようだな。2スレッドで独立してるらしいが。

449 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:20:32 ]
>>447
> プロセッサファイルを

また、俺の知らない単語が出てきたよ...。

450 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:26:06 ]
おれも初耳だよ(´・ω・`)

451 名前:447 mailto:sage [2008/05/05(月) 15:27:42 ]
かきまつがえたorz

452 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:47:13 ]
いまのうちに実用新案出しておくんだ!

453 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 20:06:44 ]
商標登録でもいいんじゃね?

454 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 11:50:06 ]
おれはネコ耳だよ

455 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:41:44 ]
娘さんを下さい

456 名前:デフォルトの名無しさん [2008/05/16(金) 11:56:11 ]
x86 について調べていますが、Core 2 にも U パイプラインや V パイプラインがあって、それぞれペアリングできる条件がありますか?
intel の資料で「ペアリング」や「Uパイプライン」で検索してもヒットしないので、どうすればペアリングされるのか分かりません。



457 名前:デフォルトの名無しさん [2008/05/16(金) 12:01:59 ]
OSもなにもなしにx86系のCPUに直接マシン語を読ませて、実行するには
どういう環境が必要でしょうか

458 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 12:05:45 ]
コードをROMに書いてみるなりしたら?

459 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/16(金) 12:10:11 ]
>>456
Core 2は4Wayパイプラインでアウトオブオーダ実行だからそんな古い知識は捨ててしまいなさい
ALUのポートとレイテンシさえ知ってればいい。


まあAtomではまた必要になりそうだがな

460 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 12:36:46 ]
>>457
WindowsやLinuxなどのUnixなどたいていのOSは、
CPUの保護モードを利用して、普通の機械語プログラムは
直接CPUにくべて走らせています。

もし、OSの保護下でなく直接機械語を実行させたいなら、
MS-DOSのような保護のないOSを使うか、ブートセクタに
書き込んで実行させるのが手軽です。

461 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 16:34:03 ]
>>457
『30日でできる!OS自作入門』という本が参考になるかもしれない。
読んだことないけど。


462 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 17:33:42 ]
リアルタイムOSを利用しましょう

463 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:12:26 ]
>>459
U/V パイプラインというものはないということでしょうか?
参考にしていたサイトが古かったようです。
ALUのポートは Core 2 では確か 3 つですよね。ということは、ALU を使う演算は同時に 3 つできるのですね。
レイテンシは Intel の資料の付録にあったので、それを参考にします。

スループットは大事ではないのですか?

464 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/16(金) 18:44:09 ]
>>463
もちろん大事。

スループットは、殆どの命令で1クロックサイクル。
ALUの3ポートのどれでも実行出来る命令は1/3と表現される。
んで、レイテンシ・スループットサイクル数が多い命令は概して複数のμOpsに分解して実行する命令ですね。

まあ各命令ごとの使用ポートの詳細はagner.orgあたりが詳しいと思う。
掛け算とかシフトとか発行できるポートが決まってるから、その辺さえ抑えておけばOK。

ちなみにPentium Pro以降のx86アーキテクチャは命令の並べ方自体にはそんなに意味はない。
10数命令前後する程度なら、依存関係さえ無ければ平気で並べ替えて実行できます。

465 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 02:32:22 ]
>>464
なるほど、ありがとうございました。

466 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 02:40:59 ]
レジスタ少ないからこの
>依存関係さえ無ければ
って意外と手で書くには難しいところはあるかもしれないけどね。



467 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 19:54:18 ]
>>466
それは団子に散々指摘してるんだが学習しないんだよな。
ストレステスト(笑)しか作った事無いんじゃないかと。

CPUが割と広い視野を見てくれる事は事実だろうから知識として与えてもいいが、
質問者がわざわざintrinsicsじゃなくてアセンブラでやりたい/出来るだけの知識がある人なんだから
重要なところから目を反らすような発言はいただけない。

468 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/17(土) 19:56:24 ]
>>467←レジスタリネーミングも知らないのかこいつ

469 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:11:11 ]
依存関係がなければリネームできるけど
あったら無理だろ

470 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/17(土) 20:28:31 ]
依存関係を断ち切る方法だってIntelの最適化マヌアルに載ってるんだがな。
逆に、OoO・レジスタリネーム機構で断ち切れない依存関係なんて
インオーダ時代のアーキテクチャの知識があってもどうにかなるわけがないだろう。

tripper.kousaku.in/20080307.html#p01
↑これだってレジスタ利用数を意図的に絞ってコード組んでるんだけどね。

471 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:13:29 ]
> 依存関係を断ち切る方法だってIntelの最適化マヌアルに載ってるんだがな。

最初からそういう方向性でものを言った方がいいだろって言ってるんだよ。

否定されたものだから否定で返しやがって
ほんっと主語が読めてないな。

472 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/17(土) 21:17:27 ]
前述のagnerのにもIntelの資料読む必要ないくらい詳しく載ってる。

473 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:01:13 ]
>>471

>ほんっと主語が読めてないな。
期待したあなたの負け


474 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:15:40 ]
ダ●ゴさんのカキコでスレが一気にヒートアップしたな

475 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/17(土) 22:26:26 ]
474 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

476 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/17(土) 22:27:36 ]
>>471
自分の了見の狭さを露呈したからといって相手に理解力がないことにするのは詭弁以外のなんでもないよ。



477 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 23:25:54 ]
自分の了見の狭さ


478 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:44:31 ]
いちいち例は挙げないが団子が知ってる知識だけ披露して、
外野の煽りはまだしも理論的に攻められてもスルーするのは昔から。

479 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 01:39:07 ]
団子さんの知識に嫉妬する輩のせいでスレがションボリしたな

480 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 01:40:45 ]
外野アァン

481 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 02:17:41 ]
壊れたラジオみたいなもんだ
使い方によっては便利?


482 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 05:59:17 ]
せいぜいお笑い系番組聞くくらいだね。
登山途中で天気図書くとか、急いでる時に渋滞情報聞こうとかいう用途には不向き。

483 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 07:34:34 ]
>質問者がわざわざintrinsicsじゃなくてアセンブラでやりたい/出来るだけの知識がある人なんだから
>重要なところから目を反らすような発言はいただけない。


これがどこがどう理論的なんだ自画自賛か

「知識がある人」だとみとめつつも、ちょっとマニュアル調べればわかることを理解できないと過小評価してるわけだよね。
俺は「アウトオブオーダ」と「依存関係」というヒントがあればちゃんとたどり着くことは期待してたんだがな。


ついでにいうとx86はレジスタが少ないからこそかえってレジスタリネーミングは実装しやすい。
ISAレベルで数十レジスタあるようなCPUだとかえって複雑になるからね。

484 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 07:53:01 ]
団子の場合、読みにも書きにもフィルタが入っていると思っておけば間違いないよ。

485 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 08:10:35 ]
自画自賛くんは放置するか
自分の意見通したいだけで困ってる当事者に何の配慮のレスもしない
ただの荒らしでしかない

486 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 08:53:24 ]
誤読して>>468みたいな発言するからまずいんじゃないのか
>>485まで通して読むとあまりに見苦しいよ



487 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 09:12:22 ]
ダンゴさんの指導でスレが猛烈にヒートアップしたな

488 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 09:18:31 ]
>>486←自己弁護見苦しい。理論もクソも無いじゃないか

489 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 09:22:52 ]
>>467からレジスタリネーミングを知らないなんて飛躍するのが理論なの?

490 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 09:57:13 ]
x86って何の気も無しにコード組んでればレジスタリネーミングのヒントを与えてるんだよ
値のロードやxor eax, eaxなど第1オペランドで指定するレジスタの元の値に非依存の結果が得られる命令のほとんどがそうだ。
第2オペランド以降が依存関係がないか解決できてるのも条件だけど。

>>466が的外れなのも言うまでもないし、SPARCみたいな古くからあるレジスタ大量に積んだ
RISCがOoOを実装してないのはご周知の通り。
そもそもOoOみたいな複雑な機構自体がRISCと矛盾する。

ところで「重要なところ」って何なのかな。
無知故の発言にしかみえないが。


命令列レベルで並列なんて考えない方が良いんだよ。
x86の少ないレジスタで命令レベル並列なんて根本的に無理だし、
結局ロード・ストアを連発する羽目になりRAWハザードで性能でないのが落ち。

491 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 10:00:20 ]
おっと最近のSPARC64はOoO実装してるね。無茶なのに。

492 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 10:23:19 ]
クソコテは放置推奨

493 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 10:44:41 ]
(ISAレベルで)レジスタが多いと、インオーダでもちゃんと組んでやれば性能は出せるけど
ユニット構成が変わったりパイプラインが深くなったりすると総崩れを起こすんだよね。
レジスタが多いが故にOoOで依存関係を解決してやるのも回路が膨大になる。

OoO時代になって、回路規模あたりの効率はレジスタの多いPOWERみたいなアーキよりもx86のほうがむしろ勝ってたりね。
ジョブズがG4/G5よりCoreのほうが性能が良いって掌を返したのも無理もない話なんだよ。

あと様々なプラットフォームに移植されてるJavaVMはスタックマシン。
スタック階層が依存関係のヒントにもなるから動的最適化もしやすいんだよ。
今やx86もVMみたいなもんだからな。JavaVMほどには洗練されてないが、ソフト資産の面で優れてる。

命令セット使い捨てのアーキには優れたアーキなんだけどねRISCみたいなのは。
CellのSPEなんかも使い捨てだろう。
PS2のときもワークステーションを作るだとかふかしてたが結局EE(ベクトルコプロセッサ付きカスタムMIPS)は使い捨てられた。

494 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 11:04:59 ]
>>492
もうちょっとやりあっちゃ駄目?

あーでも納得させる自身は無いなあ。
誰も奴の知識に文句をつけてる訳じゃなくて
知識に自分の思想/宗教を付加してる事が教育的ではないと思うんだが。

> x86の少ないレジスタで命令レベル並列なんて根本的に無理だし、

そんなの思想だ。俺は無理だと思っているが、無理かどうかは分からない。
お前は今まで反対に命令レベルの並列を説いて「少ないレジスタで並列なんて無理だろう」って言われてたよな。

> CellのSPEなんかも使い捨てだろう。

単なるお前の予想だし蛇足だろう。そもそもLarabeeマンセーはどこいきましたか(笑)

495 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 12:22:18 ]
インオーダのベクトル指向プロセッサはデータレベル並列性が高い処理にしか有効でないよ。
1スレッドあたりの性能が重要な用途ではOoOのスーパースケーラが引き続き有効。
バランスが大事だな。

Larrabeeは既存のx86アーキの代替ではない。
置き換わるなんて言ってるのは後藤くらいだ。

496 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 13:08:06 ]
で、それは「アセンブラ」の話題なのか?





497 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 13:47:28 ]
そりゃそうだろう

498 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:14:06 ]
CPUの話題ではないのか、ってこと?

499 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:24:40 ]
壊れたラジオだから
期待するだけ無駄
スレに住みつかれたら
無視するしかないだろ


500 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 15:01:24 ]
CPU の話題を出さずにアセンブラの話をするのは無理というものだ

501 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 15:20:58 ]
団子じゃなけりゃ文句も出ないんじゃね?


502 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 18:59:14 ]
CPUの話題なら何でもいいってわけじゃないし。

503 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 20:10:04 ]
団子が名前欄に何も入れなければ済む話だと思う

504 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 21:21:20 ]
入れて欲しすぎる。NG設定が面倒。

505 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 21:41:53 ]
まあなんでもいいんだけど。

「重要なこと」があると言いつつ自分は例示せずに俺に噛みついてれば彼の脳内では「理論的」なんだから
たまったもんじゃないよな。
まあレジスタリネームの存在を前提としないトンデモ仮説なら何言っても否定してやるけどさ。

506 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 22:59:52 ]
はいはい壊れたラジオ




507 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/05/18(日) 23:26:51 ]
耳の痛い話に壊れたラジオって言っておけば「理論的」なんだね

508 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 23:55:06 ]
コテハンvs名無し ですか

509 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 23:59:19 ]
団子さんへの嫉妬でスレが埋まりつつあるな

510 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 00:44:52 ]
>>505
>まあレジスタリネームの存在を前提としないトンデモ仮説なら何言っても否定してやるけどさ。
ご遠慮ください。

511 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:50:44 ]
アセンブリ言語の教科書に
org 100H
section .text
start:
mov ax, 0200H
mov bx, HELLO
PRINT:
mov dl, [ds:bx]
cmp dl, 00H
jz PRINTEND
int 21H
inc bx
jmp PRINT
PRINTEND:
mov ah, 4CH
int 21H

section .data
HELLO db 'Hello World!',00H

というプログラムがあるのですが、
文字列のアドレスを入れるのはbxレジスタでなければいけないんでしょうか?
例えば、
mov bx, HELLO
mov dl, [ds:bx]
inc bx
の部分を
mov cx, HELLO
mov dl, [ds:cx]
inc cx
に変更したら動かないのですが、何が問題なのかよくわかりません。

512 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:04:00 ]
int 21H
というファンクションの仕様。
cなどでいう関数の引数。

513 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:42:22 ]
[ds:cx]と表現するようなアドレッシングモードは存在しないから

514 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:54:30 ]
;ファイル作成
org 100H
section .text
start:
mov ah, 3CH
mov dx, filename
xor cx, cx
int 21H
mov ah, 4CH
int 21H

section .data
FILENAME db 'test.txt', 00H

とした時にtest.txtではなくTEST.TXTが作成されてしまうのですが。
test.txtを作成する時はどうすればいいのでしょうか?

515 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:11:58 ]
LFN (Long File Name) ファンクションを使うんだ。
www.vector.co.jp/soft/data/prog/se044198.html


516 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:49:21 ]
>>514
大文字、小文字なんか気にするな。

気になるなら set DIRCMD=/L とすれば気にならなくなるよ。

君の使ってる OS で使えるかどうかは知らんが。



517 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:05:32 ]
>>515
Windows 2000/XP でも有効ですか?

518 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:10:54 ]
なんかアセンブラと関係ない気がする

519 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 07:43:35 ]
>>517
有効です。

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


621 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 20:07:17 ]
って最初からボケてる LDX N 或いはLEAX [N] か?

622 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 20:11:46 ]
>>621
だね。6809は専門じゃないからつっこみかねてた。
ときに C6 01 にコメント振ってくれるとありがたい。





つか SEX 書きたかっただけじゃないか?

623 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 20:35:48 ]
バレたか(w
C6 はLDBのつもりだった、反省はしてない。


624 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/09(月) 20:39:00 ]
Obj-Cでsuper freeとか書くようなノリか

625 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 21:05:43 ]
ただ8bitCPUだから、コスト的にはどうなんだろうな?
クロック表が見当たらないぜ。

626 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 21:29:08 ]
68系ばっかりになるのなw



627 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 21:59:12 ]
このスレで最高にビューティフルなマシン語を持つ超エレガントなアーキテクチャのCPU仕様を作ってARM超えを目指そうぜ!
プロジェクトリーダーはダンゴさんに任せた!

628 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:46:38 ]
Kaltfeuerとでも名付けよう。

629 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:19:05 ]
沢村さんを推します

630 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:28:34 ]
ある命令の実行に何クロックかかるかを知りたいんですが、
CPU毎に"命令Aにはnクロックかかるよ"っていうのがリストされた資料があるんですか、それとも実測ですか?
もし実測しかないならその方法を簡単に教えてください

631 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:33:45 ]
自己解決しました
amdとintelの最近のプロセッサものはとりあえず見つけました
メーカーがwebで公開してるんですね・・・

632 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:28:44 ]
なんか昨今はGoogleする前に2chって思考なのかね

人の脳みそをあんまり安く考えてると、働くようになってから
苦労するんじゃねーかな

まあ、半可通の糞ほど教えたがりなんだが

633 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:43:33 ]
これがゆとりか・・・

634 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:05:52 ]
普通に勉強してれば命令語一覧とかに載ってるのを知ってそうなものだが・・・
そのうち
「ある命令の実行でフラグがどう変わるか知りたいんですが?」
とかの質問も来るのかな。

635 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:54:57 ]
>>632
逆に半可通だからこそそういう疑問が出るんじゃないかな?
ビンゴワードを知らないと何回か周辺ワードでググってそれを探さないといけないから意外と難しい。
昔は頭使わなくてもマイコン雑誌の特集とかで載ってて必修みたいなものだったけどさ。

636 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/13(金) 21:14:19 ]
実測するためのCソースもIntelが提供してるな。

アレもわかりにくいところにあるけど



637 名前:デフォルトの名無しさん [2008/06/14(土) 01:40:46 ]
>>635
> 逆に半可通だからこそそういう疑問が出るんじゃないかな?

半可通の酋長ダんゴ先生をバカにシュルナ!!!!





638 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 03:53:12 ]
知っているのならさっさと教えろやクズどもが。

639 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:32:33 ]
>>638
あんただれ?

640 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:38:30 ]
俺だよ俺俺

641 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:43:50 ]
あちこちで、教えるクンがオナニーしすぎて>>638みたいな機知外
が本当に増えている


642 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:36:40 ]
>>634
それも実験して調べるのです(Z80の隠し命令かよ・・・)。

643 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:00:18 ]
>>641
それ以上にそいつ等をスルーできないやつ等のほうが増えて内科医。

644 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:11:17 ]
おっさんくさいスレになりました

645 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:23:13 ]
まあアセンブラなんて今時の若い者はあまりやらんからな。

646 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:17:34 ]
つPIC



647 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:22:19 ]
最近の若い奴はJVMとCLRのアセンブラ(バイトコード)は結構読めるよ。


648 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:17:07 ]
NASM のドキュメントの Appendix B って消えた?
あれ便利してたんだが。

649 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:28:15 ]
今時アセンブラの需要はあるのかねえ

650 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:34:13 ]
コンパイラベンダにゃ必須だろう。

651 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:36:25 ]
エンコーダとか

652 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:40:54 ]
ベクトル化ガリガリやりたいなら必要だね

653 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:03:58 ]
組み込みで、ブートローダー書く人とか。

654 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:31:20 ]
高級言語で書けない命令がどれだけあると思ってるんだ?

655 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:10:10 ]
ローテート命令。
なんでC言語にはローテート演算子が無いんだ。
何度欲しいと思ったことか…


656 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:13:10 ]
ローテートってそんなに速くなかったような気がするよ



657 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:45:22 ]
シフトと論理和もしくは加算で書くより速いだろJK

何でもかんでもアセンブラで書きたがるのは昔の厨二病

658 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:47:15 ]
結果をすぐ使わないのであれば
うまく並列実行されれば
ローテートより速いんじゃね?

659 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:48:59 ]
>>657
それがだな、昔シフト系の命令がクソ遅い Pentium4 とかいう CPU があってだな。
x86 の rol/ror 命令使うよりも mmx シフトと mmxor で書いたほうが速いとかいう
ふざけたこともあったのだよ。フツーの 32bit の SISD でね。

660 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:00:51 ]
つーか、ローテート命令が遅いなんてデマを流さないでほしい。

661 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:53:52 ]
>>660
CPU によるけど、ローテート命令が速くない環境はあるよ。
intel の 24896604_j.pdf からの引用だけど、x86 では

add : レイテンシ 0.5clk, スループット 0.5clk
shl/shr: レイテンシ 4clk, スループット 1clk
rol/ror: レイテンシ 4clk, スループット 1clk

でー mmx だと

pslld: レイテンシ 2clk, スループット 1clk
psrld: レイテンシ 2clk, スループット 1clk
por: レイテンシ 2clk, スループット 1ckl

ね。

SISD で rol/ror より速いっつーのは記憶違いで嘘だったけど。
まーこういう糞な石はメインストリームじゃなければ無視できる
のだけど、一時期多数派を占めてたりしたから無視するわけにも
いかんのよ。

662 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:25:13 ]
そんなにCがいいならインラインアセンブラつかえよ

663 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:31:41 ]
ローテートぐらいならgccの拡張で使えたような気がする

664 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:26:14 ]
rol や ror はintrinsicであるんだけどrolxやrorxのようにキャリーと一緒に回すのが無いんだよね

665 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:45:41 ]
そもそもCにはキャリーの概念すらないし。

666 名前:デフォルトの名無しさん [2008/06/20(金) 09:47:19 ]
Cのソースからアセンブラ吐いたんだけど,Cのソースではhoge(0,1)って引数で関数
呼び出してるけど、アセンブラでは
movl $1, 4(%esp)
movl $0, (%esp)
という風に引数を逆に処理してるのは、どういう意味があるの?ご教示お願いします





667 名前:デフォルトの名無しさん [2008/06/20(金) 09:54:29 ]
>>666 悪魔乙
gas の記法だろ。アセンブラによってオペランドを書く順番が違ってくるのさ


668 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 10:02:58 ]
いや,オペランドじゃなくて引数の順序だろ.
C では良くあること.

669 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 10:05:04 ]
>>666
・スタックは数が減る方に向かって伸びる。
・その例でも引数1が %esp+0, 引数2が %esp+4 になってるでしょ?
・引数のポインタを取ったとき、スタック上の引数列が配列になるでしょ?
hoge(int foo, int bar) を例に取ると
int *p = &foo; によって
p[0] == foo
p[1] == bar
となる。

で、このことは、引数不定とか可変長引数を実装するときに
すごく都合がいい。スタックトップが必ず引数1になる。
K&Rの頃は引数不定がまかり通ってたし。

なお、>>666 の例では、%esp はあらかじめ減じられていると思われるため
movl $0, (%esp)
movl $1, 4(%esp)
のように引数順に処理することもできるが、コンパイラの都合上それをやっていない。

670 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:45:08 ]
処理系によるんじゃないか?

671 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:04:24 ]
>>666
Cの引数の評価順は特に決められていないので、コンパイラの都合で好きな順序で処理してよいわけだが、
たまたま逆順の方がコンパイラを作りやすかったとか、特に気にしないで作ったらたまたま逆順になったとか、
そんなとこだろうと思うよ
特に意味はないかと

672 名前:デフォルトの名無しさん [2008/06/20(金) 12:12:48 ]
厳格に決まっているわけではなく、
>>669
の述べているような理由などから、私が使っている処理系では引数がたまたま
決まっているということでいいんですか?



673 名前:デフォルトの名無しさん [2008/06/20(金) 12:13:51 ]
↑訂正、
引数がたまたま逆に処理されている




674 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:55:25 ]
>たまたま逆に
いや単に右から左なだけで,逆順とか正順とか決まってないから

675 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:34:07 ]
カウントダウン方向で繰り返し処理すれば
フラグ見るだけで処理の終わりがわかる

676 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:03:55 ]
コード生成とスタックに積む都合から言うと、スタックに先に積むほうから
評価をしたいわけだ。
それと、可変長引数のことを考えると、Cの引数は右から左の順で積んだ
ほうが都合が良い、ということ。



677 名前:デフォルトの名無しさん [2008/06/20(金) 18:12:47 ]
やり方は、複数あるが後々都合が良い
ってことですね。ありがとうございます。

678 名前:デフォルトの名無しさん [2008/06/20(金) 18:21:36 ]
富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね

富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね

富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね

富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね

679 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:45:53 ]
呼出し規約とかは関係してこないの?

680 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/20(金) 18:47:45 ]
push/pop命令の動きはABI云々じゃなくてCPUの動作仕様だからな

681 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:23:35 ]
VC++ に限って言うなら、
普通の関数は右から左、
普通のメンバ関数は左から右、
可変長引数を持つメンバ関数は右から左、だな。

682 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:25:17 ]
Cっていうか、WindowsAPIの仕様に引っ張られてるんじゃね?

683 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/20(金) 20:28:54 ]
thisポインタ=ecxは何とかならんかったのかと思う
まあ、他に無いっちゃないが

684 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:29:03 ]
PASCALキーワード!!!

685 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:57:03 ]
VC++のメンバはthisをecxに積んで右からスタックだったはずだが

686 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:39:15 ]
なんか、引数をスタックに積む順序と引数の評価順序の区別が付いてない
奴がいるな。



687 名前:デフォルトの名無しさん [2008/06/20(金) 22:48:48 ]
↑どういうこと?

688 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:49:28 ]
>>685
ごめん。まちがえてた。

689 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:59:53 ]
引数の評価順序って決まってたっけ

690 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 01:07:38 ]
68000での質問です。
cmpi.w #$1234, D0

cmpi.l #$12345678, D0
と同等な事をA0に対しても行いたく思い、
cmpaを使ってみましたが上手くいきません。
なぜでしょうか?

691 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 08:33:30 ]
>>687
左から評価して、右から積んでも規約に違反はしてない。

評価した順にスタックに積んで行くほうが楽。
という「都合」が引数の評価とスタックに積む順序に影響しているってこと。


692 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:13:13 ]
>>690
エスパーはいないぞ!
もっと詳しく書け。

693 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 16:40:04 ]
>>687
スタックに積まれた引き数の配置は処理系で決まっている。

順番に詰まれるかどうかは分からない。

評価順序も決まっていない。

>>690
> 上手くいきません。

何をやって、どうなることを期待してて、どうなったかを書け。

694 名前:690 mailto:sage [2008/06/21(土) 17:07:42 ]
解決しました。
理由もなんとなくわかりました。
ありがとうございました。

695 名前:690 mailto:sage [2008/06/21(土) 17:15:55 ]
お前らの役立たずっぷりに呆れました。
もう二度と来ません。

696 名前:690 mailto:sage [2008/06/21(土) 17:18:51 ]
>>695
まあそれが本音ですけどね。
もはや揚げ足取りですし。
ありがとうございます。



697 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 17:23:01 ]
なんかね、どこからが釣りだったのかね、もうね

698 名前:690 mailto:sage [2008/06/21(土) 18:27:33 ]
詰まらない偽者がスレ汚ししてすみません。
最終レスは>>695です。
ありがとうございました。


699 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:48:48 ]
いいから消えろよクズ

700 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:57:46 ]
ほっとけ
構うな

701 名前:690 mailto:sage [2008/06/21(土) 19:16:46 ]
>>700
まったく同意

702 名前:690 mailto:sage [2008/06/21(土) 20:47:38 ]
誰だお前

703 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 22:33:55 ]
もう誰が誰だかわやくちゃなんだけど、休日にわざわざこんなスレにまできて...

なんかかわいそうだな。

704 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:35:43 ]
Re:> お前はなにを言っているのか

705 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:44:09 ]
king、コテ付け忘れてるぞ

706 名前:1stVirtue mailto:sage [2008/06/24(火) 21:10:58 ]
Reply:>>705 お前に何がわかるというのか。



707 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:47:33 ]
キングさんって、スクリプトですか。??

708 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 10:58:32 ]

数学板のking?

709 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:27:12 ]
いきなりkingネタかよ
数学板以外にもたまーに顔出してるよ、奴は

710 名前:デフォルトの名無しさん [2008/06/30(月) 16:29:09 ]
MASM MSからダウンロードしたけど、VC++ Express 2005が必要だと・・・
VC++ Express 2008じゃだめ?なの?

711 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 16:53:44 ]
>>710
強制解凍してけば長いファイル名のが出てくるからそれを拡張子exeにリネーム

712 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/30(月) 17:07:48 ]
もうNASMでえーやん

713 名前:デフォルトの名無しさん [2008/06/30(月) 17:32:54 ]
>>711
thnx・・・thnx......

冷静に考えて
そうだ、ここは俊足なレスポンスを期待しちゃいけない、
と思い、

無い頭で考えて、
オーソドックスにプロンプトの指示に従い、

アンインストールをしたところで、
>>711発見 orz


あうぅぅぅ

714 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:35:23 ]
JWasmってどうなんだろ?

715 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:41:44 ]
>>712
YASMどうよ?

716 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:20:57 ]
Yasm www.tortall.net/projects/yasm/ NASM/GAS互換 64bit対応 修正BSDライセンス
JWasm www.japheth.de/JWasm.html MASM v6/WASM互換 Open Watcomライセンス



717 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 08:54:17 ]
ちょっと使ってみた個人的な感想など:

Jwasm: コマンドラインの引数など使い勝手がいいとは言い難い。
特にリンカは最悪で、設定ファイルが必要だとか訳が判らん。
結局、リンカだけ alink alink.sf.net/download.html
そこにある win32.lib を使うことでバイナリ作成した。

その後に使った fasm flatassembler.net/ なら、
単体で実行バイナリまで生成することが判った。
記法も独特ではあるけども、ヘルパのインクルードが充実していて
あるAPIの挙動を確かめるようなテスト・ルーチンなんかをスクラッチするには
いい感じだと思った。


718 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 17:48:04 ]
いや、互換物はオリジナルと比較しないと意味ないでしょ。
あと、wlinkはなんでもできる強力なリンカだよ。libだけ用意すれば(.aでも.libでも食べてくれる)
jwasm .\samples\windows1
wlink FORM Windows NT runtime CON F windows1 L kernel32.lib
みたいな感じでいける筈。

たしかwatcom本体の方にMSのlink互換の奴(ラッパー?)が入ってる筈だから
それの差し替え用なのかもね?

719 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 19:23:34 ]
masm32のinc参照してるやつも導入pathを調整すれば同様に
jwasm .\samples\windows3
wlink FORM Windows NT F windows3 L kernel32.lib,user32.lib
でバイナリは出来るんだけと、これって豆腐窓が出れば成功なのかな?
窓プログラムはソース見てもいまいちわからないorz


720 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 19:58:28 ]
lzasmってTASMのideal文法サポートだけで、MASM互換部分はごっそり抜けてるのかな?
それとも元々こんなもんなの? 共通ソースってどうやったら書けるんだろうこれ?

721 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:02:44 ]
masm support なんて書いてないけど

722 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:30:44 ]
っていうかTASMとMASMの共通ソースってことね。
ローカルラベルとか使わなきゃ出来るんだと思ってた。

723 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 22:30:47 ]
TASM,MASM両用にしたい場合
TASMのMASM5.1互換モードだかなんだかを使っていた記憶がある

724 名前:デフォルトの名無しさん [2008/07/05(土) 04:50:49 ]
ゲームの解析をしているのですが

MOV EDX,exe.00666666
00666666 は XOR AL,31 となっています
近くに1〜31範囲外の定数ビットシフトというコメントが多く使われているのですが
どのような処理をしているのかわかりますでしょうか?


725 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 05:19:48 ]
単なるデータじゃないってなんでわかったの?

726 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/07/05(土) 15:53:04 ]
つかDSに命令書くとDEPに殺されるだろJK萌え〜

その命令らしきものの後にretなりjmpがある?



727 名前:724 [2008/07/06(日) 02:01:18 ]
>>725
00666666 はrdataセクションでしたorz
MOV EDX,exe.00666666のASCII"41C6tvejeNiWj・・・・"の中身が格納されてるだけでした


>>726
MOV EDX,exe.00666666
SUB EDX,EAX
CMP EDX,ESI
JNB SHORT exe.0050175C

0050175C TEST EDI,EDI
0050175E JNZ SHORT exe.00501764
00501769    MOV EAX,66666667
0050176E IMUL EDX

この↓にもジャンプ命令がたくさんあります。リターンはずっと後にでてきます。

728 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 07:03:07 ]
うんこい質問で申し訳ないですが、

00401239 |. B9 64000000 MOV ECX,64
0040123E |. F7E1 MUL ECX
00401240 |. 83F8 00 CMP EAX,0
00401243 |. 75 06 JNZ SHORT xxx.0040124B
00401245 |. B8 01000000 MOV EAX,1
0040124A |. C3 RETN
0040124B |> 33C0 XOR EAX,EAX
0040124D \. C3 RETN

関数の末尾のコピペなんですが、
アドレス0x00401239時点でのEAXが0以外で、この関数が1を返す事はあり得ますか?
ECX(=0x64)を掛けている理由がよく分からないので、そういう可能性があるのかと思いまして。

729 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 10:26:35 ]
eaxの値が0x04000000〜0xf4000000の範囲なら1

730 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 16:44:24 ]
>>724
単なる難読化だろw

731 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 04:23:03 ]
初歩的な質問ですが教えてください

MOV DWORD PTR DS:[ESI],00400000

例えば、00400000にはアドレスが入っています。この場合、00400000を移動するのか
格納されているアドレスを移動するのか、どちらでしょうか?



732 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 19:34:23 ]
// ESIはポインタ
*ESI = 400000;


733 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 23:41:52 ]
それだと誤解を招きそうなので

// ESIはポインタ
TYPE_T *ESI;
ESI = 0x400000;

って書いた方が

734 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 23:48:37 ]
ポインタじゃなくて、ただのレジスタとメモリ領域。
ポインタって言ってると、わかり辛い。

735 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:19:54 ]
>>731

セグメントアドレスがDSの値でオフセットアドレスがESIの値なメモリ領域に十進数の400000を入れているように見える

736 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 10:02:54 ]
// DSの説明ははしょるけど  DWORD PTRなんだから
DWORD* ESI;
*ESI = 0x400000;
// でええんでないか?




737 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 10:42:06 ]
皆さんありがとうです
ESIにデータセグメントのアドレス00400000を示しているということですね
ではそのままなら[ESI+8]は00400008でよいのですか?

738 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 11:28:25 ]
>>737
だめ

739 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 11:47:50 ]
ddebでも落として飽きるまで実験しろ

740 名前:デフォルトの名無しさん [2008/07/13(日) 07:45:00 ]
だめだこりゃ

741 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 18:39:18 ]
キャリーフラグの反転ができる CPU では、
コイツも使ってやってね(Z80 表記)。

  CP   0AH
  CCF
  ADC   30H
  DAA

742 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 13:12:01 ]
www.computerworld.jp/topics/vs/115629.html

743 名前:デフォルトの名無しさん [2008/07/18(金) 00:00:59 ]
質問:アセンブラの除算

質問です。アセンブラの除算は、具体的に どのような処理をしているのでしょうか。
「ビット レベルの計算」のイメージができません。
また、除算は ほかの計算と比較して、クロック数を消費するとインターネットに書いてありました。
それが なぜなのか、理解できていません。
おそらく、どのような計算をしているかを把握できれば、理解できるとおもうのですが。
インターネットで「除算 アセンブラ div 」などで検索しましたが、求めている情報が入手できませんでした。
そのため、質問させていただきます。
また、読むべきサイト、書籍などがあれば、教えていただければ幸いです。
よろしく お願い致します。

744 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 00:06:58 ]
除算器で検索

745 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 00:10:28 ]
>>743

journal.mycom.co.jp/column/architecture/

ここを読んでまるっきり理解できなきゃ筋がないと見なす。

746 名前:デフォルトの名無しさん [2008/07/18(金) 00:40:01 ]
ありがとうございます。よんで勉強します。
論理回路の基礎は知っているので、何とか理解できそうです。



747 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 05:25:03 ]
ビットレベルの計算って、要するに2進数で筆算してるだけの話じゃないか?

748 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 07:05:38 ]
それ前にアセンブラの除算もCの除算もみな一緒だと思うが

749 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:00:46 ]
>>747
筆算ってこたーない。。

750 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:51:37 ]
>>749
マジなんか面白く上げ足とっただけか知らんが、イメージは筆算だ。
掛け算も同じ。

751 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:56:38 ]
その人がどういうモデルで筆算というものを把握してるかに依るだろJK

752 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 10:30:08 ]
>>745の84回で、モロに筆算の図が載っているわけだが

753 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:23:14 ]
>>751
筆算にモデルもクソもあるか JC

754 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:40:04 ]
夕食ってどうやって作るんですか->一例を回答->それは調理だな


755 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 16:51:24 ]
CASLの問題のこと聞いてもおk?

756 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:43:28 ]
レスがどんなアセンブラでも構わないならいいんじゃね?
っていうか専門スレないの?



757 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:51:47 ]
情報処理試験のあれか、1バイトが16ビットだっけか。

758 名前:デフォルトの名無しさん [2008/07/18(金) 19:26:11 ]
おいおい
1バイトは8ビットだろ・・・。

759 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:32:52 ]
情報処理技術者試験出題範囲を見る限りでは、1語16ビットとは書いてあるが「バイト」という単語は出てこないっぽい。

760 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:38:38 ]
>>758
決まってるわけじゃないよ。多いだけ。

761 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:23:51 ]
>>760
このスレの住人ならそんなこと百も承知だろう

762 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:36:07 ]
ワードアドレッシングマシンなんだよな確か

763 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:54:27 ]
CASL でシフトによる割り算がまったく思いつきません。どなたかお手本をみせていただけませんか?

764 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:21:16 ]
>>763
とりあえず1ビット右シフトを考えてみて。

765 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 02:29:36 ]
昔々あるところに、1byteが6bitや9bitのコンピュータがあってだな…

766 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 04:10:28 ]
>>765
自作?



767 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 06:11:10 ]
基本的に1byteは8bitだけど8bitじゃない場合もあるんだっけ?
マスタリングTCP/IPでは明確にするためにoctetを使う、みたいなのが書いてあった
ちなみに1hydeは156cmで固定

学生の知識だから合ってるか分かんないけど

768 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:59:51 ]
PDP-10とかだな

769 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:53:32 ]
> 学生の知識だから合ってるか分かんないけど

156cmをどこで習うんだよ!

770 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:36:10 ]
>>763
34÷10
=0x22/0x0a
=100010b/1010b

            011
      ────
1010)100010
          1010
          ───
          01110
            1010
            ──
            0100

=11bあまり100b
=3あまり4

771 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:47:02 ]
以下はメモリ上に格納された数値の合計を計算して持ち帰るサブルーチンSUMである。
www.dotup.org/uploda/www.dotup.org2018.txt

これを元にメモリ上に格納された数値の最大値を見つけるサブルーチンMAXを作れ。見つけた最大値はメモリ上のANSの番地へ格納すること。

どなたかボスケテ

772 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:55:43 ]
ここは宿題スレじゃありません。

773 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:58:50 ]
ww

774 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:58 ]
CASLはほとんど忘れてるよ。
算術系の命令がなくてアドレスの計算命令で代用するのが
ポイントだったのがよみがえった。

775 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:53:42 ]
なんすかその8086のLEAみたいな小技は

776 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:29:09 ]
内部レジスタをけちってるんですよ。たしかCOMETを後付けで内部解説する教科書があったような気が。



777 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:53:14 ]
>>774
即値の加減算命令がないからLEAでなんとかすれ。
という話ですか。

つうか即値扱えるのってLEAだけしかないんだっけ?

>>776
内部レジスタつうか命令デコーダがものすげーシンプルになる命令セット。
だった気がする。
その割にGRが5個とか半端なのがよくわからん。

778 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 15:36:31 ]
CASL命令の基本がレジスタとメモリ間の演算で、加算減算もレジスタとメモリ。
そなものでレジスタ間の演算がわりとめんどい。
LAD GR1,0,GR0 // MOV R1, R0
LAD GR0,1,GR0 // ADD R0, 1
LD GR1,0,GR0  // MOV R1, [R0]
比較演算は代替手段がないので片方を必ずメモリに落とす必要がある。


779 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:04:32 ]
6809を考えれば‥‥。

780 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:36:25 ]
09は掛け算が意外にもレジスタ間なんだよな。

781 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 20:25:29 ]
どこが意外なんだか。

782 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 20:35:59 ]
あのニーモックの中では特異に思えたんだけど、他のCPUじゃ当たり前かな?

783 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 00:20:30 ]
Addressを取れるOP codeが余ってなかったから必然

しかし遡るなら6809なんて中途半端なんじゃなくて
PDP-8とかHITAC-10とかもっと昔の制御用コンピュータだろ


784 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 01:00:46 ]
63C09は・・・忘れた(w

785 名前:デフォルトの名無しさん [2008/07/22(火) 01:06:43 ]
ジャンプ命令について質問です。
いま、以下のような命令があるとします。
BRA _main
この命令ではmainの前に_(アンダーバー)が付いています。
この命令と、次の命令
BRA main
では、どのような違いがあるのでしょうか?

786 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 01:13:10 ]
ラベルが違う。



787 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 02:26:35 ]
もしC言語のソースをコンパイルした結果を見ての質問ならこう。

「キミの使っているCコンパイラが扱うオブジェクトフォーマットの仕様は
 関数名の前にアンダースコア(_)を付ける仕様だった。」

C言語なら必ず付くわけでもなく、アセンブリ言語だから必ず_から始まらなければ
ならないわけでもなく、何か特殊な効果を狙って_を付けた表記にしているわけでも
ない。

788 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:59:27 ]
ついでに言うと、C言語のソースで A という名前の関数を作ったとして
BRA A
ってコードを吐くと、BRA命令のオペランドにAレジスタは指定出来ないとか、ラベルAは不正な名前、とかのエラーになるかもしれん。
なので、なにかしら法則を決めてアセンブラの予約語とぶつからないようにしてあげる必要が有る。
ということで _ をつける規則を採用したコンパイラがそこにある、ってわけだ。

789 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 01:31:36 ]
ホスト(z/OS)下でアセンブラを触ることになりました。
が、ソースを見てもさっぱりです。

命令とかを解説しているサイトや参考書ってありません?


790 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 08:46:31 ]
>>789
z/OSだったらIBMに聞けよ :-)


791 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 12:18:08 ]
いったいどこをいじるんだろう・・・

792 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 21:14:48 ]
JWasm、バージョン上がってたんで何か少し本格的なものをアセンブルしたくなって
CDSD-STDで試してみたんだけど、妙なところでエラーが出た。
これなんでだか誰かわかります?

他にMWSAでも試そうかと思ったけど、あれコマンドラインじゃシンボル使えなかったんだな。

793 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:39:27 ]
BYTE PTR DS:[EAX+8]の意味を教えていただけませんでしょうか?
BYTE PTR [EAX+8]なら分かるのですが。
何故セグメントレジスタが出てくるのか分かりません。
また、MASMの良書も教えていただければ幸いです。

よろしくお願いいたします。

794 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:42:02 ]
結果を比較してみればいいのに

795 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:15:30 ]
>BYTE PTR [EAX+8]
これを本当に理解していれば、DS:も理解出来るはず。

796 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:47:30 ]
>>793
リニアアドレスを算出するには
セグメント + オフセット
だけど、どの『セグメント』を使うのかはCPUが暗黙の内に決めてる。
例えば、マシン語命令はCSで示すセグメントからフェッチしてくる・・とか。
でも>>793の上の命令のように、『セグメント:オフセット』と明示的に
セグメントを指定すると、暗黙のセグメント指定をそのセグメントで『上書き』出来る。
「セグメント オーバライド」辺りでググれ。



797 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 19:03:29 ]
まずCPUの名前を書かなきゃわからんだろう。
86とレジスタ名前が似ているだけかもしれんぞ。

798 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 20:38:45 ]
個人的には動作モードのほうが気になる

799 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:17:23 ]
ありがとうございました。
なんとなく分かった気がします。
根本的なことが分かっていない気がするのではじめからきちんと勉強したいのですが
なにか良いサイト、書籍などありませんでしょうか?

800 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:45:55 ]
>>799
Intel限定で良いなら「はじめて読む486」はどうよ?

801 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:47:48 ]
>>800
いや、これはプロテクトモード入門でしょうね。リアルモードでの経験+Cの経験があればOKですが。

802 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:07:58 ]
>>800
図解コンピュータシリーズの「図解 32ビットマイクロコンピュータ80386の使い方」とかも良いね。

803 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 05:47:39 ]
教えられた書籍を買ってみます。
皆さんどうもありがとうございました。

804 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 13:47:50 ]
便乗質問ですがx86_64用で上記みたいな感じの書籍はありますか?
最悪英語でもいいです。

805 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:26:59 ]
インテルが公開してる技術資料はどう?
www.intel.co.jp/jp/download/index.htm

806 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 16:11:58 ]
86系だったら特権モードのことをがっちりやりたいか、
ユーザーモードだけでいいかでアプローチは変わってくる。
ユーザーモードだけなら、cl /FA でコンパイルして、
そのソースを読んだり変更してアセンブルするといいかも。
生っぽい機械語がいいならリアルモードがわかりやすいが今更DOSもないよな。




807 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 20:48:31 ]
アセンブリの学習をしたいと考えていますが、以下の条件でお勧めの
アセンブラ(GAS/NASM/MASMなど)をご教授いただければ幸いです。

・開発も実行もx86環境。
・WindowsとLinux環境、両方を利用しており、WindowsにはCygwinが導入されている。
・出来るだけ両方の環境で学習したく、特定環境に依存するアセンブラ本体・文法は避けたい。

早い話、「これから始めれば無難」というものをお願いします。

ちなみに、手元にはMASMベースで解説してある以下の書籍があります。
『高級言語プログラマのためのアセンブラ入門 林晴比古著 ソフトバンククリエイティブ刊』

808 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 21:14:26 ]
そういえばJWasmにlinux向けのサンプルが増えてたけど、
MASM互換のアセンブラで一体なにするつもりなんだろう?

809 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 21:39:33 ]
>>807
アセンブラってのはどうせバイナリと紙一重なんだから
あまり特定の処理系に依存してどうこう、というのは少ない。
(まぁ技巧的なマクロはそれなりに違うけどね)
むしろ、Linux ならシステムコールとか、gccの関数インタフェースとか
そこらへんがわかる資料をネットで見つけることが大事じゃないかと思う。

Cygwinでいい本は知らない。
GAS は gcc に -S オプションを付けて出力させたものが参考になる。
NASM は付属のドキュメントを読んで参考にできるのなら使える。

810 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:15:45 ]
細かい記法がわからない時は、逆汗使ってみた事があったな。

811 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:28:17 ]
www.ibm.com/developerworks/jp/linux/library/l-gas-nasm.html
このあたりの比較を見ていたら、オペランドの書き方などアセンブラ依存の文法がありそうだったので、
どれから覚えた方がいいかな、という意図の質問でした。

>>809さんのレスを見ると、Cなどの他の上級言語の一部にアセンブリを使い
特定OS上で動作するアプリケーション開発レベルの話だと思いましたが、
IPL開発などのレベルではあまり関係ないような気もしました。
>>807にてWindowsやLinuxと書いたのは、あくまでも開発環境としてのOSということで
理解頂ければ幸いです。分かりづらい質問を失礼しました。

「GAS、NASM、MASM、入門者に勧めるとしたらどれ?」ということでひとつ・・・

812 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:33:35 ]
Windowsメインならmasmかnasm、Linux or GCCメインならgas。
別にどっちでもいいが、たまにコンパイラの出力読むときによく使うコンパイラが吐くアセンブリソース読めたほうがいい程度の話で。

813 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:35:36 ]
>>812
なるほど、専らgcc環境なのでgasを使ってみようと思います。
的確なご指摘、ありがとうございました。

814 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:43:45 ]
そういえばYASMってgasの代替にはなるの? それとも只似た記法が使えるだけ?

815 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:59:42 ]
nasmと比べた事はあるんだけと、org周りのよくわからない挙動がなんかすっきりしてたのは覚えてるんだよな。


816 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 19:45:12 ]
masmとnasmってどう違うのですか?



817 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 19:49:47 ]
見た目からして違うんじゃないか?

818 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:15:08 ]
あっそ

819 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:42:19 ]
さすがにmasm/nasm共通ソースなんてのは観たことないぞ。
プリプロセッサ駆使すれば出来るんだろうか?

820 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 04:34:23 ]
そんなんマクロ定義でどうにでもなるべ。

実際にやろうとは思わんが。


821 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 08:47:29 ]
逆汗の作成に挑戦してるんだけど、
jmp命令とか出てきたらその都度、jmp先アドレスに飛びながらバイナリ読んでいかなきゃだめ?
試しに某exeを頭から順番に読み込んでみたら、jmp先アドレスが命令の先頭じゃなくて途中をさしちゃってるんだけども・・
別の逆汗でも同じ結果になるんだけど、難読化かなにか?

822 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 09:31:32 ]
>>821
命令の途中にデータ埋め込んでるだけだろ。
 jmp main
msg db 'hello world', 0dh, 0ah, '$'
main:
 mov dx, offset msg
 

823 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 09:52:43 ]
>>821
やってみておかしかったら、JMP 先の整合を付けてみる、でよい。たいていは

824 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:59:49 ]
その方向でとりあえずやってみる。ありがとう


825 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 20:15:55 ]
NASMの構造体がうまく使えません、教えてください!
WIN32N.INCを使ってAPIの時間を取得しようとして

section .text
global start
start:
move eax,my_time
push eax
call GetLocalTimeA

section .data
my_time:
ISTRUC SYSTEMTIME
at SYSTEMTIME.wYear,dw 0
at SYSTEMTIME.wMonth,dw 0
at SYSTEMTIME.wDayOfWeek,dw 0
at SYSTEMTIME.wDay,dw 0
at SYSTEMTIME.wHour,dw 0
at SYSTEMTIME.wMinute,dw 0
at SYSTEMTIME.wSecond,dw 0
at SYSTEMTIME.wMilliseconds,dw 0
IEND

みたいな感じで書いたのですが、
mov eax,my_time
のところが error: parser: instruction expected
となってしまいました。
何が問題で、どうすれば解決できるのでしょうか?

826 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 20:23:23 ]
moveってなってない?



827 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:10:10 ]
>>826
ありがとうございます
私って馬鹿ですね

828 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:47:58 ]
>>821
命令の途中?

俺はIDAでしてる

829 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:04:28 ]
アセンブラの勉強するのならやはり、はじめて読む8086を買って勉強するのがベストなんでしょうか?
それとも、独習アセンブラや>>68の本のほうが良いのでしょうか?


830 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:20:56 ]
8086の勉強をするなら、俺ならはじめて読む8086を勧めるけど。

831 名前:829 mailto:sage [2008/09/09(火) 12:33:16 ]
8086にも興味はありますが、アセンブラの文法について学びたいと思ってます。

832 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:05:58 ]
マクロとか型とかはアセンブラ毎に違うので、一般的に学ぶ方法はない。
いい教科書も無いと思う。

833 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:07:07 ]
文法はアセンブラによって異なる
C言語のような決まりがあるわけではない
MASM/NASM/TASM/GASなど色々あるからそれに合う本を探せ

834 名前:829 mailto:sage [2008/09/09(火) 13:19:39 ]
>>832-833
有難うございます。実際に見て理解しやすそうな本を購入することにします。

835 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:42:15 ]
アセンブラで実際組むわけじゃなくどんな動作してるのか
見たいって程度ならCASLで十分じゃないか?

資料も豊富だし

836 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:20:41 ]
いまどきワードアドレッシングなアーキテクチャはおすすめしがたい



837 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:29:48 ]
なんで?

838 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 23:45:31 ]
>>831
文法って、
> 命令 レジスタ,メモリ;
ぐらいじゃない?
命令のこと?

839 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 02:09:47 ]
>>838
正直セグメント絡みの方言が色々あってわけわからなくね?

840 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 08:18:25 ]
疑似命令のバリエーションとか、
即値やレジスタ名の記法とか、
いろいろ違うけど?

ソースとデスティネーションの順序が違うというのもあるか。

841 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 08:44:36 ]
キャッシュとか絡んでくると・・・

842 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 09:03:59 ]
アキュムレータ丸出し、暗黙のレジスタ参照、直交性の無いアドレッシングですね、wkrms

843 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 16:31:58 ]
>>839
全然

844 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:03:23 ]
>>843
一体いくつのアセンブラ使えるのさ?

845 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 05:55:11 ]
>>839
セグメントなんてもう10年近く意識したことないが。
もうDOSの.EXEなんて作れねえな。

>>840
違うCPUだと思えば別に問題ない。


846 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 09:38:50 ]
ASSUMEの具体的な効果とかもう覚えてない



847 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 13:44:13 ]
USINGは覚えてる?

848 名前:デフォルトの名無しさん [2008/09/17(水) 02:06:26 ]
バイトでアセンブラやるんだけど
アセンブラて何

849 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 05:09:10 ]
馬鹿たれ、たとえバイトでもそんな質問がでてくるようなレベルの人間雇ったりしねえよ。


850 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 07:44:45 ]
工場のラインに並んで部品を組み立てる仕事じゃない?


851 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 10:49:10 ]
なるほど確かにアセンブルする人だな。

852 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:30:16 ]
そっちの分野ではアッセンブルって言うけど、ここは黙っておこう。

853 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:03:39 ]
斡旋ぶるぶる?

854 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:58:55 ]
汗バイブ

855 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 22:45:17 ]
未経験者でも大丈夫! やる気だけでOK!

仕事内容: アセンブラ プログラミング
※コンピュータの命令を並べていくだけの単純なお仕事です。

応募資格:
・経験不問
・学歴不問
・未経験者歓迎
・髪型自由
・フリーター歓迎

みたいな?


でもこれだけ見ると単純にネタ扱いできない現実味がw

856 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 23:17:06 ]
>>855
海外アウトソーシングとか実はそんなもんだったりしないよね?



857 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:04:33 ]
アセンブラの仕事をバイトでできるなんてすごいよね。
C言語とかをさらに訳の分からん言葉に翻訳する仕事なんでしょ?

858 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:48:15 ]
ある意味Cよりシンプルともいえる

859 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 02:20:33 ]
フラグを覚えりゃ後はバッチファイルレベルだしな。

860 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 07:15:13 ]
アセンブラって最適化できるのかな?

861 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 07:44:25 ]
>>860
Cコンパイラのようにはアセンブラが最適化することは通常無い。
但し、実際には使えないインストラクションを他のインストラクションに置き換えたり
相当するより速いインストラクションに置き換えたりするケースはある。

勿論、プログラマが自身で最適化する余地はいくらでもある。

862 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 13:28:40 ]
ブランチ命令のオフセットは最適化されるな。

863 名前:,,・´∀`・,,)っ-○●◎ mailto:sage [2008/09/20(土) 02:50:26 ]
おれ団子だけどRIP相対アドレッシングのうまい使い道教えれ

864 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:55:31 ]
今まで通り使えばいいのでは。

命令の近くにデータを置くとか
switchので等間隔に処理を並べて分岐とか今までのCPUだって出来るわけで
ただの命令長削減以外の何物でもないと思う。

865 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 19:01:04 ]

アブラカタブラアセンブラ

866 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 19:01:35 ]
やった
j規制かいじょされてるよー



867 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 12:08:55 ]
>>863
DLL再配置の手間が省けるってことはないの?

868 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/09/23(火) 12:42:52 ]
いやさ、Xbyakに追加してやったんはいいんだけど
あれってもともと動的生成じゃん


869 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 22:20:16 ]
なんか該当するスレが見つからないのでここで質問させていただきます

単純に与えられた回数分インクリメントして総和を求めるプログラムで時間をみつもろうとしました
カウンタのインクリメント分と結果となる値のインクリメント分でADDが2回、ジャンプが1回
どれも最小の1クロックで処理できるとすると1ループで4クロック

でこれをathlon64 3000+(2G)のCPUで10^9回まわすとすると
4*10^9 / 2.0*1024^3 = 1.862645149230957と概算を行いました

しかし実際にtimeを使って10^9, 10*10^9の場合を計った結果は1.00と1.42
そこから求めるとかかった時間は0.42/9=0.046..
ディスアセンブルしてもADD*2,CMP,JNEの繰り返しになってました

どう考えても1クロックの間に1以上の命令が実行されてるわけなんですが
こういう動作が前提だとするとどうやって実行時間を見積もればいいんでしょうか?

870 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 22:24:33 ]
IPCも知らんのか

871 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 22:52:15 ]
Intelの資料によれば(AMDじゃなくてすまそ)、
ADD命令は0.5クロックで、ALUは2器載ってるらしいから、
1クロックでADDを4つ実行できることになるな

872 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/09/26(金) 22:53:59 ]
>>871
ニヤニヤ

873 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 23:00:06 ]
後は任せた

874 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 23:07:29 ]
まあ、そもそも命令数とクロックから実行時間を見積もろうとするが大馬鹿なんだが。

875 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/09/27(土) 02:01:31 ]
っていうかさ、Pentium 4はパイプラインが3 issueなのに、4つ実行なんてどうやるんだよ。
日本語資料じたいが相当旧いし



876 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 03:03:13 ]
確かに日本語版のIA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアルの
本書の対象となるIA-32プロセッサの中にcore2duoとかの文字が無い。
やっぱ最新版は英語じゃないとだめなのか。



877 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 07:33:50 ]
>>874
いやあでも、こうやって一つ賢くなれるんだからいいんじゃねーの?
それより見積もりも出来ないで、処理がハードウェアの能力と釣り合っているかを考えない方が大馬鹿者。

現代のCPUで処理に必要なクロック数を机上で計算するのが難しいとしても
プロファイル取ってIPCを見たりはするし、それによって局所的にどの命令が
ボトルネックかを考える事もある。
机上という静的な方から攻めるか、プロファイルという動的な方から攻めるかの違いで、たどり着くところは一緒。

878 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/09/27(土) 08:43:46 ]
Agner.orgを参考にしたらいいと思う

879 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:50:24 ]
VC++でint cx; と変数を宣言して、
インラインアセンブラでcmp eax,cx と書いてエラーになったから助かった。
imul ebx,cx はimul ebx,ecx にコンパイルされてエラーになっておらず、
危うくハマるところだった。

880 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/10/02(木) 00:41:47 ]
「goto」というシンボルすら作らせないJavaは徹底してる。

881 名前:デフォルトの名無しさん [2008/10/22(水) 14:04:06 ]
オペランドの前に=が付くとどういう意味があるんですか。
教えてください。

882 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:42:54 ]
どの石のなんてアセンブラかわからないと答えようがない

883 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:42:12 ]
gcc asm の制約のことだったりして。

884 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 11:41:49 ]
たぶん、リテラルのことでしょう。名無しの定数が作られる。昔のメインフレームのASMなんかで
  LD  R0,=F'00F0'  とか書くと、フルワードの 000000F0h という定数がどこかに作られて
それをアクセスするアドレッシングが命令に組み込まれる。

885 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:19:28 ]
CPU:Intel 8085

(1) [80A1h] ← (B+C)*2-[80A0h]*3 オーバーフローは考慮不要
(2) [80B3h] [80B2h] ←[80B0h] +[80B1h] *2    和を16ビットで求める(分岐命令を使用してもよい)
(3) A ← B ・C + H ・L (論理演算)

これらを実行するプログラムを教えてください。
よろしくお願いします

886 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:19:24 ]
>>885
(3)
170o
241o
107o
174o
245o
260o



887 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:29:15 ]
>>885
(1)
041o 0a0h 80h
170o
201o
207o
226o
226o
226o
043o
167o

888 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:35:13 ]
>>885
(2)
052o 0b0h 80h
051o
042o 0b2h 80h

889 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:28:09 ]
>>886-888
ありがとうございます。
すごくありがたいのですが、私の知識不足のせいで思っていた結果ではありませんでした。

.8085
ASEG
ORG    8000h
LDA D1
LXI    H,D2

のような形で、もう一度教えてもらえませんか?
頼ってばかりで申し訳ないのですが、よろしくお願いします

890 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:29:31 ]
なんという攻防戦

891 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:55:46 ]
>>889 ほれ。アセンブルリスト。エラーも取れてる
        CSEG
    ;(1) [80A1h] ← (B+C)*2-[80A0h]*3 オーバーフローは考慮不要
0000 78         MOV    A,B
0001 81         ADD    C    ; (B+C)
0002 87         ADD    A    ; *2
0003 F5         PUSH    PSW    ; を退避
0004 21A080         LXI    H,80A0h
0007 7E         MOV    A,M
0008 86         ADD    M
0009 86         ADD    M    ; *3
000A 6F         MOV    L,A    ; をLに
000B F1         POP    PSW    ; (B+C)*2を復元
000C 95         SUB    L    ; 引き算
000D 32A180         STA    80A1h    ; 結果をストア

892 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:57:03 ]
    ;(2) [80B3h] [80B2h] ←[80B0h] +[80B1h] *2 和を16ビットで求める(分岐命令を使用してもよい)
0010 3AB180         LDA    80B1h
0013 6F         MOV    L,A
0014 2600         MVI    H,0
0016 29         DAD    H    ; [80B1h] *2
0017 11B080         LXI    D,80B0h
001A 1A         LDAX    D
001B 4F         MOV    C,A
001C 0600         MVI    B,0    ; [80B0h]の内容を16bitに
001E 09         DAD    B    ; HLに16bitで加算
001F 22B280         SHLD    80B2h    ; 結果をストア

893 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:58:52 ]
    ;(3) A ← B ・C + H ・L (論理演算)
0022 78         MOV    A,B
0023 A1         ANA    C
0024 5F         MOV    E,A    ; B・Cを退避
0025 7C         MOV    A,H
0026 A5         ANA    L    ; H・L
0027 B3         ORA    E    ; H・L+B・C
0028         END
最後の行は ADD E かもしらん。論理演算とのことでORAにしといた。

894 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 09:48:11 ]
なんという親切回答


895 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:56:43 ]
ありがとうございます。
助かりました

896 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:07:01 ]
どういたしまして。実際には、(1)の問題も、8bit加算→9bit、8bit*3→10bitになるので、
(2)のようにHLに結果を保持する手法のほうが一般的です。
最終結果が8bitでいいなら、Lレジスタのほうだけを使えばいいので。



897 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:16:05 ]
>>885
KITの学生のお前にひとつ忠告しておくが、
過去ログくらい見ろwwwwwwwww

特に↓
>>137-167

今更忠告してももう遅いかもしれねぇけどな。レポートの提出は明日だっけ?笑


898 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:40:04 ]
うぁはは、丁度1年なのねw

899 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 08:29:19 ]
うひょーーーーー


いまからレポートやろうと思ったらちょうど良いものみつけたーーーーーーー




さんきゅーーーーーーーー

900 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:02:57 ]
KITは8085なのか

901 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:17:42 ]
KITはレベルが低いな

さすがFランク

902 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:22:04 ]
ナイトライダーかと思ったらスパルタFランクか

903 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:15:47 ]
おまいら
レポート提出はできたのか?


落第しないよう頑張れよwwwwwwwwwwwwwwwww

904 名前: ◆0uxK91AxII mailto:sage [2008/10/30(木) 05:53:46 ]
東洋経済の本当に強い大学ランキング19位。
( ゚,_J゚)

905 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 10:12:17 ]
機械語教育が8085だからってレベル低いとは思えんが
お約束のようにこのスレに質問があるのはどうかと思うが

906 名前:896 mailto:sage [2008/10/30(木) 13:29:33 ]
とほほ 165-166のレスしたのは俺だったよ。1年前のコードのほうが896の示唆守ってるし・・・



907 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:28:53 ]
Wikipedia「アルベルト・アインシュタイン」より
>>簡単な数字や記号を記憶することが苦手だったとされる。ある新聞社のインタビューの中で、光速度の数値を答えられず、記者から揶揄されると「本やノートに書いてあることをどうして憶えておかなければならないのかね?」とやりかえしたという。

KITの学生曰く「ネットで簡単に教えてもらえることをどうして自分で考えなければならないのかね?」ってとこだな。
KITの学生はアインシュタインより進んでるってことだ、多分。

908 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:38:58 ]
手元にある本やノートはページを開けば数秒〜十数秒ほどで情報を得られるが、
ネットで教えてもらうには数分〜数日かかるわけで、
そのタイムロスが許容範囲かどうかってことだ、多分。

909 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:46:39 ]
手元にある本やノートに書いてある情報からでは解答を導き出せない、
自力で解こうにも数分〜数日かけても解答を導き出せない、
となるともう誰かに教えを乞うか潔く落第するしかないもんな。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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