アセンブラ… Part 12at TECH
アセンブラ… Part 12 - 暇つぶし2ch2:デフォルトの名無しさん
07/08/14 17:18:50

【過去ログ】
アセンブラ… ( ゚д゚)ウッウー (Part11)
スレリンク(tech板)
アセンブラ… (゜□゜) ↑アッー!↓ (Part10)
スレリンク(tech板)
アセンブラ… (0w0)ウェーイ (Part9)
スレリンク(tech板)
アセンブラ… (´・∀・`)ヘー (Part8)
スレリンク(tech板)
アセンブラ… (°Д°)ハァ? (Part7)
スレリンク(tech板)
アセンブラ… (;´Д`) ハァハァ (Part6)
スレリンク(tech板)
アセンブラ… (*´д`*)アハァ… (Part5)
スレリンク(tech板)
アセンブラ… (゚д゚)ウマー (Part4)
スレリンク(tech板)
アセンブラヽ(`Д´)ノモルァ (Part3)
URLリンク(pc2.2ch.net)
アセンブラヽ(`Д´)ノモルァ (Part2)
URLリンク(pc3.2ch.net)
アセンブラ… (・∀・)イイ! (Part1)
URLリンク(pc.2ch.net)


3:デフォルトの名無しさん
07/08/15 19:09:11
アセンブラ… Part 12  (ρΩρ) ニョローン

4:デフォルトの名無しさん
07/08/15 19:10:11
nop

5:デフォルトの名無しさん
07/08/15 19:12:43
hlt  ; 恒例の

6:デフォルトの名無しさん
07/08/15 19:17:25
sll r0, r0, r0

7:デフォルトの名無しさん
07/08/16 15:34:25
AAが無いぞ、どうしたの?


8:デフォルトの名無しさん
07/08/16 15:37:47
>>1 のせい

9:デフォルトの名無しさん
07/08/16 15:44:25
>>8のせい

10:デフォルトの名無しさん
07/08/16 15:48:51
一か八か

11:デフォルトの名無しさん
07/08/16 16:00:40
だれがうま

12:デフォルトの名無しさん
07/08/16 22:17:34
ん?ダンゴさんの許可は?

13:デフォルトの名無しさん
07/08/16 22:24:47
団子は当スレから出るな
いいか?


14:デフォルトの名無しさん
07/08/16 22:41:17
親が経営者で愚民を使う教育しか受けていない
ダンゴさんになんてことを!


15:デフォルトの名無しさん
07/08/16 22:45:11
アセンブラブラ~♪(石丸電気のメロディーで)

16:デフォルトの名無しさん
07/08/16 22:50:17
かわいそうな愚民未満、団子。
仕送りを20万円くれるパパに謝りなさいよ。

17:デフォルトの名無しさん
07/08/16 23:33:34
そろそろ団子さんに愚民どもをピシッとシメてもらい所だな。
親が経営者であるところをちゃんと示してもらわないと。


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

19:デフォルトの名無しさん
07/08/23 00:37:41
>>18
前者の方が早い。
速いかどうかはしらね。

20:デフォルトの名無しさん
07/08/23 08:56:52
メモリとのxchgはロックがかかって高価だったような

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

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

23:デフォルトの名無しさん
07/08/26 22:43:25
>>18
下のは一体何をやってるんだ?

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

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

26:デフォルトの名無しさん
07/08/28 03:31:42
ダンゴさんの聡明なるアドバイスが望まれるところだ

27:デフォルトの名無しさん
07/08/28 08:40:58
        mov     ah, 09
        mov     dx, msg
        int     21h 
        mov     ax, 4C00h
        int     21h
msg     db      'Hello, world!$'


28:デフォルトの名無しさん
07/08/28 19:40:20
ナツカシス

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

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

31:デフォルトの名無しさん
07/08/28 20:30:04
そこでqemuですよ

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

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

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

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



36:デフォルトの名無しさん
07/08/28 23:34:35
男なら黙ってhlt

37:デフォルトの名無しさん
07/08/29 01:26:53
勝手に止めるな

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

39:デフォルトの名無しさん
07/08/29 06:54:40
この辺でも参考にしとけ
URLリンク(www.google.co.jp)

40:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/01 00:22:18
>>40
debug.exeでCOM形式の実行ファイルを作ってるな。
ほんと懐かしい。

42:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/01 00:48:17
俺もなんでnopがワザワザあるのか分からんw

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

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

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

46:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/01 01:17:28
    LD    C, 9
    LD    DE, MSG
    CALL   5
    RET
MSG: DB    'Hello, world!', 0DH, 0AH, '$'

48:デフォルトの名無しさん
07/09/01 01:20:28
>>47氏へ、、、MASMじゃまず無理

49:デフォルトの名無しさん
07/09/01 01:26:57
>>46
8バイト目の区切り。

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

51:デフォルトの名無しさん
07/09/01 01:33:24
>>48
つ HIT-88

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

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

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

55:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/01 02:29:37
>>55
やったー!ありがとうございます。古い値.の意味が分かりました。

57:デフォルトの名無しさん
07/09/01 02:40:52
しかし
こんな旧時代の遺物を教材に使うのってどうよw

58:デフォルトの名無しさん
07/09/01 03:26:45
MASMの脳内発音はマズムですか?

59:デフォルトの名無しさん
07/09/01 03:30:09
自分は えむあすむ

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

61:デフォルトの名無しさん
07/09/01 12:08:19
NASM ナズム

62:デフォルトの名無しさん
07/09/01 12:34:42
YASM 休む

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

64:デフォルトの名無しさん
07/09/01 17:50:42
>>63
つ Emu8086
URLリンク(www.emu8086.com)

65:デフォルトの名無しさん
07/09/01 18:53:06
いまどきCOMモデルもないだろ。

66:デフォルトの名無しさん
07/09/01 19:01:28
>>63
C> debug hoge.com

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

68:デフォルトの名無しさん
07/09/02 11:13:38
これのことだろ。

林晴比古 「高級言語プログラマのためのアセンブラ入門」
URLリンク(www.sbcr.jp)


69:デフォルトの名無しさん
07/09/02 18:04:17
TASM タズム

70:デフォルトの名無しさん
07/09/03 00:34:13
LASM ラスム

71:デフォルトの名無しさん
07/09/03 00:39:34
LASM えるあすむ
MASM えむあすむ
NASM えぬあすむ
TASM ていあすむ

72:デフォルトの名無しさん
07/09/03 00:58:23
MASM まさみ

73:デフォルトの名無しさん
07/09/03 10:55:56
MASM マシン

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


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


76:デフォルトの名無しさん
07/09/05 23:36:09
call 5とか。
もう使わないか

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

78:デフォルトの名無しさん
07/09/09 15:59:22
binutilsのobjcopyをほげれ。

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

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

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


82:デフォルトの名無しさん
07/09/13 13:56:42
行儀の悪いプログラムだな

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


84:デフォルトの名無しさん
07/09/13 14:23:44
セキュリティのためにOSがやってんじゃなかったのか

85:デフォルトの名無しさん
07/09/13 23:25:08
>>81
>>81
>>81

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

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

88:デフォルトの名無しさん
07/09/14 18:20:51
obj ダンプすりゃわかる 素人だらけw

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

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

91:デフォルトの名無しさん
07/09/14 18:47:46
何か
問題
あるかね

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


93:デフォルトの名無しさん
07/09/14 20:57:57
staic int i;
if(i) i = 0;

これね

94:デフォルトの名無しさん
07/09/14 21:05:09
それは
ちがう
だろう

95:デフォルトの名無しさん
07/09/14 22:39:18
MASMの
すごい
初期化

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

97:デフォルトの名無しさん
07/09/15 04:00:24
アセンブラと機械語は違うけどね。

98:デフォルトの名無しさん
07/09/15 13:28:19
初期化しない値は、.dataではなく.data?に書く。

99:デフォルトの名無しさん
07/09/15 17:11:23
.bss

100:デフォルトの名無しさん
07/09/18 15:25:32
age

101:デフォルトの名無しさん
07/09/19 01:13:41
>>96
君はわからんのかね

102:デフォルトの名無しさん
07/09/19 01:41:38
外部シンボルが未解決でわかりません。

103:デフォルトの名無しさん
07/09/19 06:26:18
もとがMASMの話だけにobjdumpもアレだ。

104:デフォルトの名無しさん
07/09/21 22:58:08
>>102
サブシステム→WinDows

105:デフォルトの名無しさん
07/10/18 21:25:44
age

106:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 19:31:28
>アセンブラのプログラムの作り方がさっぱりです。
うむ、まずアセンブラとテキストエディタを用意しよう!

108:デフォルトの名無しさん
07/10/27 19:38:33
インプリメンテーションチャートは?

109:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/30 18:35:11
アセンブリでおk

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

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

113:デフォルトの名無しさん
07/11/02 11:30:45
はじめて読む8086あたりでいいんじゃね?

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


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

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

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


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


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

117:デフォルトの名無しさん
07/11/02 20:51:27
どのコンパイラが?

118:デフォルトの名無しさん
07/11/03 00:09:16
>>117
横レスだけどgccで混合できんの?

119:117
07/11/03 01:32:44
>>118>>116
ゴメン。今意味が分かった。

120:デフォルトの名無しさん
07/11/03 01:40:09
混成表示するにはobjdumpです



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

122:デフォルトの名無しさん
07/11/03 03:18:26
>>121
URLリンク(citforum.yspu.yar.ru)

123:デフォルトの名無しさん
07/11/03 03:22:32
>>122
ロシア語読めねえよアホ

124:デフォルトの名無しさん
07/11/03 03:32:19
ロシア語で考えるんだ!

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

126:デフォルトの名無しさん
07/11/03 04:41:20
Idealモードフェチの人なんだよきっと

127:ヽ・´∀`・,,)っ━━━━━━┓
07/11/03 11:05:47
NASMが64ビット対応してるよ。SSE4.2もAMD SSE5も吐けるよ

128:デフォルトの名無しさん
07/11/03 11:06:01
>>125
相変わらず何かのSDKの中について来るの?


129:ヽ・´∀`・,,)っ━━━━━━┓
07/11/03 11:09:43
>>128
URLリンク(www.microsoft.com)

130:デフォルトの名無しさん
07/11/04 22:08:08
>>121
こんなのみつけた
URLリンク(www.phatcode.net)

URLリンク(lzasm.hotbox.ru)
によるとTASM5.0のcloneらしい

131:デフォルトの名無しさん
07/11/04 23:39:04
>>129
thx

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


132:ヽ・´∀`・,,)っ━━━━━━┓
07/11/05 00:11:03
普通にVC++のリンカ使いましょう。Expressならタダだし。

133:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/05 15:42:22
Cで書いて、コンパイラが吐くコード見れば?

136:デフォルトの名無しさん
07/11/05 17:12:21
上の2レスがたぶんそうだとおもう

137:アセンブラ初心者
07/11/05 21:15:38
いきなり質問失礼します。
8085で、

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

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

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

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

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

140:アセンブラ初心者
07/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:アセンブラ初心者
07/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:デフォルトの名無しさん
07/11/05 22:12:38
それだとADD A(×2)の時点でオーバーフローすることがある。
が、まぁだいたいそんな感じだ。

143:アセンブラ初心者
07/11/05 22:13:41
3番目は MOV Mではなく MOV M,Aでした。

144:アセンブラ初心者
07/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:アセンブラ初心者
07/11/05 22:19:09
↑の下から3番目のMVI E,0 は MVI D,0だったかも

146:デフォルトの名無しさん
07/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:アセンブラ初心者
07/11/06 00:58:58
>>146
あなたが神か

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

148:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:アセンブラ初心者
07/11/07 23:24:11
[8081h]←(A+B)*3-[8080h]*2の処理を行うプログラミングを教えてください。

151:デフォルトの名無しさん
07/11/07 23:32:45
同じ奴か?
応用だろ。考えろ。

152:アセンブラ初心者
07/11/07 23:37:43
違いますよ。初投稿です。

153:アセンブラ初心者
07/11/08 00:40:56
本当に、誰か教えてください。考えてもわからない。

154:デフォルトの名無しさん
07/11/08 00:42:21
応用だろ。ログみて考えろ

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

以上。

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

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

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

159:デフォルトの名無しさん
07/11/08 02:03:05
>アセンブラ初心者
お前KIT生だろ?

160:アセンブラ初心者
07/11/08 02:03:43
そうですけど

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

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

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

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

164:デフォルトの名無しさん
07/11/08 02:25:26
>>156
つ [紙と鉛筆]

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

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

167:デフォルトの名無しさん
07/11/08 08:44:16
世間じゃ8085が流行ってるのか?

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

169:デフォルトの名無しさん
07/11/08 09:24:12
俺は68kが一番無難だと思ってる。


170:デフォルトの名無しさん
07/11/08 11:21:57
MIPS の方が良くね?


171:デフォルトの名無しさん
07/11/08 11:47:58
4004だろ

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


173:デフォルトの名無しさん
07/11/08 13:24:31
そこでARMですよ

174:デフォルトの名無しさん
07/11/08 21:51:52
それは人生の無駄遣い。

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

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

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

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


179:デフォルトの名無しさん
07/11/11 19:49:23
PICがMIPSになったそうだからMIPS逆襲のオカン。

180:デフォルトの名無しさん
07/11/11 20:33:34
ほぅ。
URLリンク(www.microchip.com)
AVR32みたいな独自コアじゃないのか。

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


181:デフォルトの名無しさん
07/11/15 13:23:42
「アセンブラが怖い」なんて、誰がいってるの?(1/3) - @IT MONOist
URLリンク(monoist.atmarkit.co.jp)

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

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

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

185:デフォルトの名無しさん
07/11/16 16:13:08
>>1

186:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/16 21:36:35
その情報の意味を知り得るのはそのソースを持ってる奴だけだよ。

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

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

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

189:デフォルトの名無しさん
07/11/17 00:24:42
kiRaiseUserExceptionDispatcherでinvalid handle

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

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


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

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

194:デフォルトの名無しさん
07/11/17 16:08:18
>>193
なんとも脆弱なOSだな、それ

195:ヽ・´∀`・,,)っ━━━━━━┓
07/11/17 17:04:00
rundll user.exe,exitwindowsexecってもう使えないんだっけな

196:デフォルトの名無しさん
07/11/17 23:14:18
>191

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

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


197:デフォルトの名無しさん
07/11/18 10:09:47
nasm 2.00RC1
バージョン飛んだwww

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

199:ヽ・´∀`・,,)っ━━━━━━┓
07/11/19 23:09:35
Pentiumマシン語入門編

200:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/21 20:16:54
デバッガで試せ。

205:デフォルトの名無しさん
07/11/21 22:10:49
>ご助言お願いします
だらだらコピペすんな。

206:デフォルトの名無しさん
07/11/22 07:35:01
フローチャート起こしてじっくり考えてみろ。


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

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

208:デフォルトの名無しさん
07/11/22 12:18:35
一から作ったほうが早いんじゃまいか・・・

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

210:デフォルトの名無しさん
07/11/22 13:54:11
ZZ86

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

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

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

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

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

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

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

215:デフォルトの名無しさん
07/11/22 15:12:05
ああdispeはともかくollyはエミュごとかけるってのを想定してた


216:デフォルトの名無しさん
07/11/22 15:19:49
あるいはダミーのPEヘッダつけてやるってのも手か?

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

218:デフォルトの名無しさん
07/11/22 17:25:28
だなあ
シンプルなのが欲しいなあ

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

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

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

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

ndisasm test.bin > test.asm

コレでおkだと思う。

221:デフォルトの名無しさん
07/11/22 20:51:22
debug.exe…

222:デフォルトの名無しさん
07/11/22 21:48:10
Sourcer

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

223:デフォルトの名無しさん
07/11/22 23:53:25
symdeb.exe

224:デフォルトの名無しさん
07/11/23 00:10:36
>>207
古のソーサー

225:デフォルトの名無しさん
07/11/23 17:53:23
まずファイルを抽出すること

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

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

227:デフォルトの名無しさん
07/11/24 23:07:27
>>226
「教え」?
「てちょんまげ」?



228:デフォルトの名無しさん
07/11/24 23:53:30
>>227

て下さい。

です。失礼しました。


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

 あーちくしょー

230:デフォルトの名無しさん
07/11/25 17:30:38
レジストリ?

231:デフォルトの名無しさん
07/11/25 18:21:21
もうちょっと激しく突っ込んで下さいですorz

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

233:デフォルトの名無しさん
07/11/26 14:43:09







???

234:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/27 02:52:31
>>234
ARM知らないけど、
R0をポインタとして使っているのに中身を代入して破壊してたり、
R1を更新していなかったりしてない?

236:デフォルトの名無しさん
07/11/27 16:43:47
俺も知らないけど、ADDを非フラグ操作にするんじゃね~の?

237:デフォルトの名無しさん
07/11/27 17:36:17
ARMしらんけど

ADDLT R2,R2,#1

これはなにやってんの?

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

239:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/27 23:50:55
NASMでセグメント演算子はどうするのでしょうか?
オフセットは以下のようにすればOKですが、このセグメントはわかりません。


mov ebx, orz
hlt

orz 0


241:デフォルトの名無しさん
07/11/28 00:25:46
URLリンク(youtubetv.atspace.com)

242:デフォルトの名無しさん
07/11/30 15:09:30
初めて自力での改造に成功したぜ

( ゚д゚)ウッウー

243:デフォルトの名無しさん
07/12/20 16:48:28
mpeg compass.jp
名古屋駅近辺でお話しましょう

244:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/28 14:02:16
ソースうp

246:デフォルトの名無しさん
07/12/28 14:17:49
さきに
temp_a / new_a
src_a / new_a
を計算しておいてそれをかけりゃいいんじゃないの?

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

248:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/28 17:02:47
pmullwは符号付きだから>>244のdest_r * temp_aとかできないと思ったが、
下位16bitだけのpmullwは符号なしにも使えるんだったな。

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

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

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


252:デフォルトの名無しさん
07/12/29 16:25:45
RGBで分けなくてもいいと思うんだけど

253:244
07/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:デフォルトの名無しさん
07/12/29 23:06:46
出力先のα値は何に使うの?

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

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

257:デフォルトの名無しさん
07/12/31 23:21:35
gcc -S foo.c

258:デフォルトの名無しさん
07/12/31 23:23:57
>>256
というか、先ずは環境を明らかにしようぜ。

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

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

とりあえず、

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

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

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

263:デフォルトの名無しさん
08/01/01 14:20:46
>>262
URLリンク(gcc.gnu.org)

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

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

266:デフォルトの名無しさん
08/01/01 17:39:36
calling convention gcc でぐぐれ。stdcall fastcall cdeclでもいいぞ。


267:デフォルトの名無しさん
08/01/07 01:08:01
regparm使って破綻しそうな予感。

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

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

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

270:デフォルトの名無しさん
08/02/12 19:44:45

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

271:デフォルトの名無しさん
08/02/14 02:54:50
人生nopだ。

272:デフォルトの名無しさん
08/02/14 19:45:38
>>271
イ㌔

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

274:デフォルトの名無しさん
08/02/15 21:08:24
hlt
後で起こしてくれ

275:デフォルトの名無しさん
08/02/16 00:25:46
俺なんか here: jmp here してるんだぞ

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

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

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

278:デフォルトの名無しさん
08/02/24 02:49:40
>>275
暖房器具ですか?
つうか"jmp $"でいいんでないかい。

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




279:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/24 15:40:49
age忘れ

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

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

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

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


285:デフォルトの名無しさん
08/02/24 19:32:25
コンパイラのマニュアル読め

286:デフォルトの名無しさん
08/02/24 20:19:03
インラインアセンブラの記法はコンパイラ独自

287:デフォルトの名無しさん
08/02/24 22:04:50
ちなみにVisual C++だったらどっちでも同じだな。

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

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

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

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

292:ヽ・´∀`・,,)っ━━━━━━┓
08/02/27 23:28:10
アンシー(笑)

スイーツ(笑)

293:デフォルトの名無しさん
08/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:ヽ・´∀`・,,)っ━━━━━━┓
08/02/27 23:46:55
__asm__ はCのほうな

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

296:ヽ・´∀`・,,)っ━━━━━━┓
08/02/28 00:15:58
gcc

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

298:ヽ・´∀`・,,)っ━━━━━━┓
08/02/28 00:28:57
いいえ、ケフィアです。

299:デフォルトの名無しさん
08/02/28 11:55:32
>>297 病気の子なんだからほっときなさい


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

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

302:デフォルトの名無しさん
08/03/04 18:39:56
ライセンス嫁

303:デフォルトの名無しさん
08/03/04 22:43:27
>>301
そりゃダメだろ。

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

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

ていう話ではない?

305:301
08/03/05 12:26:41
やっぱり黒か…
ライセンスを探したがどこにも無くて。

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

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

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


308:デフォルトの名無しさん
08/03/05 22:08:10
>>304
.dll のリンクはまた別の話だろ。

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

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

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

311:デフォルトの名無しさん
08/03/06 14:43:52
人間は違法


312:デフォルトの名無しさん
08/03/08 07:55:54
違法だが合憲

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


314:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/11 00:10:48
asmにvolatileを付けてみたらどうかね。


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

318:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/13 12:43:39
アラインメント合わせだと思うけど

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

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

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

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

322:デフォルトの名無しさん
08/03/14 18:24:59
辞書位引け epilogue prologue

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

324:デフォルトの名無しさん
08/03/16 23:41:13
pro- 前~
epi- 後~

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

326:デフォルトの名無しさん
08/03/17 10:51:51
ブートローダーとか?

327:デフォルトの名無しさん
08/03/17 10:54:18
仮想86モードとか?

328:デフォルトの名無しさん
08/03/17 10:55:11
リブートのためのエピローグコードとか?

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

330:デフォルトの名無しさん
08/03/20 19:44:52
物好きとか?

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

332:デフォルトの名無しさん
08/03/20 22:28:17
DEADBEEF

333:ヽ・´∀`・,,)っ━━━━━━┓
08/03/20 22:31:35
BADFACE

334:デフォルトの名無しさん
08/03/21 12:18:21
CAFEBABE

335:デフォルトの名無しさん
08/03/21 13:13:16
EFFACED

336:デフォルトの名無しさん
08/03/21 15:47:17
BACA

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

338:デフォルトの名無しさん
08/03/22 12:46:20
Ce11Ba11

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

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

340:デフォルトの名無しさん
08/04/13 10:03:05
あげ

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

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

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

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

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

345:デフォルトの名無しさん
08/04/13 11:46:34
音声処理、画像処理、暗号化、圧縮…
まあこんなとこか

346:デフォルトの名無しさん
08/04/13 11:55:44
ダンゴさんはもっと有用なことに使ってそうだな

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

348:デフォルトの名無しさん
08/04/13 12:03:01
gas は嫌いだ、人が書くようにできてない

349:デフォルトの名無しさん
08/04/13 14:04:07
gasの構文はきもいんだよな

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

351:デフォルトの名無しさん
08/04/13 15:23:07
アセンブラの書き難いCPU
x86も追加してくれ

352:デフォルトの名無しさん
08/04/13 15:49:20
ARM そんなに悪くないけどなぁ。


353:デフォルトの名無しさん
08/04/13 16:40:32
こなれてると思う。

354:デフォルトの名無しさん
08/04/13 17:17:44
350がロートルだということはわかった

355:デフォルトの名無しさん
08/04/13 19:18:04
遅延ジャンプの理由は何?

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

あとIA64も同意する。

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


358:デフォルトの名無しさん
08/04/13 21:39:52
アドレスの指定がめんどくさい

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

360:デフォルトの名無しさん
08/04/14 04:47:36
要求がそれほどじゃなかったからね、昔は。

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

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

363:ヽ・´∀`・,,)っ━━━━━━┓
08/04/14 11:46:57
一言で言うとGNUは嫌いです

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

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

366:デフォルトの名無しさん
08/04/14 22:18:02
>>361
MIPSは良かったねぇ

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


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

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

368:デフォルトの名無しさん
08/04/14 23:40:36
6502ってハミコンか?

369:デフォルトの名無しさん
08/04/15 01:05:09
ダンゴさんがピシっと〆てくれたな

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

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

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

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

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

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

374:デフォルトの名無しさん
08/04/15 23:26:42
>>373
それハード屋じゃない。

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

376:デフォルトの名無しさん
08/04/16 00:13:07
>>372
> 6502は6802に対応するチップ

どこが対応してるんだ?

377:デフォルトの名無しさん
08/04/16 00:21:28
ソフト屋(低レベル)とか制御屋とか?

378:デフォルトの名無しさん
08/04/16 00:40:43
>>377
thx

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

379:デフォルトの名無しさん
08/04/16 13:06:17
組み込みとか楽しそう。

380:デフォルトの名無しさん
08/04/17 03:10:43
>>376
中味の話じゃなくて位置付け

381:デフォルトの名無しさん
08/04/17 21:49:11
>>390
だから、位置付けのどこが対応してるんだ?

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

382:デフォルトの名無しさん
08/04/17 21:49:29
対抗するチップ、のほうがしっくり来るな。

383:デフォルトの名無しさん
08/04/17 21:50:25
はいはい、おじさん同士喧嘩しないの!

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

385:デフォルトの名無しさん
08/04/18 12:22:59
いえ、型番だけではビット数もパッケージのピン数も
開発者の嫁の顔もわかりません。

386:デフォルトの名無しさん
08/04/18 13:02:05
【コラム】Hello Worldコレクション (5) アセンブラ編 - OSごとに微妙に異なるスタイルを使い分ける
URLリンク(journal.mycom.co.jp)

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

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

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

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

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

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

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

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

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

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

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

392:デフォルトの名無しさん
08/04/20 18:26:12
最近はコンパイラの品質も高く

あとは言わな(ry

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

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

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

396:デフォルトの名無しさん
08/04/20 19:06:55
よし、みんなで秋葉原の鈴商にHD64180を買いに行こう!

397:デフォルトの名無しさん
08/04/20 20:50:36
>>389
よく SYMDEB で弄ったな。

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

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

399:デフォルトの名無しさん
08/04/20 23:24:05
>>395
多分君のところだけ。

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

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

引用元忘れた

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

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

403:デフォルトの名無しさん
08/04/21 17:42:38
sレコードとかならprintfでいける。

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

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

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

405:デフォルトの名無しさん
08/04/21 17:58:42
URLリンク(www.auction.co.jp)
120円、高っ、いつか10円になっていた時代があったような・・・

406:デフォルトの名無しさん
08/04/21 19:56:06
>>396
俺が知っているのはTMP64180だな。

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

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

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

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


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

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

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

413:デフォルトの名無しさん
08/04/26 12:41:25
>>411 処女みたいなもんだな。

414:デフォルトの名無しさん
08/04/28 01:55:57
技量に大きく依存する点も似てるな

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

416:デフォルトの名無しさん
08/05/01 22:49:34
DWORD*4ならSSE2になかったっけ?

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

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

URLリンク(wlog.flatlib.jp)


418:デフォルトの名無しさん
08/05/02 23:00:14
415だが正しくは32bitの飽和並列演算が無いの間違いだった。


419:デフォルトの名無しさん
08/05/03 01:24:48
実行頻度低そー

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

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

422:ヽ・´∀`・,,)っ━━━━━━┓
08/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:デフォルトの名無しさん
08/05/03 14:51:40
>3~4入力のAND, OR, XOR
これいいな

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

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

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

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

425:デフォルトの名無しさん
08/05/03 22:00:04
> ハードウェアの仕組みを知らんが

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

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

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

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

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

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

428:デフォルトの名無しさん
08/05/04 11:58:02
謝る暇があったら、勉強しなよ。

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

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

そのあとの文章も同様。

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

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

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

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

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

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


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

432:デフォルトの名無しさん
08/05/04 20:14:41
ダンゴさんは先見の明がありすぎるな

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

434:デフォルトの名無しさん
08/05/04 20:43:56
つ「74LS181」
URLリンク(focus.ti.com)


435:ヽ・´∀`・,,)っ━━━━━━┓
08/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:デフォルトの名無しさん
08/05/04 21:45:39
多オペランド演算の問題はALUではなく
レジスタからALUへのパスが複雑化することにあるんだが。
どうせ回路を複雑にするなら特殊な専用命令を追加するより
スーパースカラやベクトル演算器を入れた方が効率がいい。


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

438:デフォルトの名無しさん
08/05/05 02:19:03
レジスタファイルって何を指してる?
ただのレジスタってか、FFのことを言ってるのか?

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

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

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

442:デフォルトの名無しさん
08/05/05 11:48:39
ああ、レジスタ全体のことか。失礼。

443:デフォルトの名無しさん
08/05/05 12:08:55
URLリンク(en.wikipedia.org)

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

445:デフォルトの名無しさん
08/05/05 12:56:12
アーキテクチャによるだろ

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

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

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

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

449:デフォルトの名無しさん
08/05/05 15:20:32
>>447
> プロセッサファイルを

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

450:デフォルトの名無しさん
08/05/05 15:26:06
おれも初耳だよ(´・ω・`)

451:447
08/05/05 15:27:42
かきまつがえたorz

452:デフォルトの名無しさん
08/05/05 15:47:13
いまのうちに実用新案出しておくんだ!

453:デフォルトの名無しさん
08/05/05 20:06:44
商標登録でもいいんじゃね?

454:デフォルトの名無しさん
08/05/06 11:50:06
おれはネコ耳だよ

455:デフォルトの名無しさん
08/05/06 18:41:44
娘さんを下さい

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

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

458:デフォルトの名無しさん
08/05/16 12:05:45
コードをROMに書いてみるなりしたら?

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


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

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

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

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


462:デフォルトの名無しさん
08/05/16 17:33:42
リアルタイムOSを利用しましょう

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

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

464:ヽ・´∀`・,,)っ━━━━━━┓
08/05/16 18:44:09
>>463
もちろん大事。

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

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

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


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch