アセンブラ… (;´Д`) ハァハァ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG【前スレ】
アセンブラ… (*´д`*)アハァ…
http://pc5.2ch.net/test/read.cgi/tech/1076157613/l50
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNGキャッシュが絡むとどうなるのか分からないんで
「この説明でいいのかなぁ」等と思いながら書いてました。
キャッシュを持たない16bit外部バスのイメージで書いてました。
キャッシュなしで32bit外部バスで、2byte目と3byte目を
組み合わせた16bitを取ってくる場合などを考えてみると
奇数バイトから始まってはいても
境界をまたいでないから
ペナルティーはつかないだろうと思います。
0234デフォルトの名無しさん
NGNG> 内部外部の区別そのものがなかった
これ間違ってたので訂正。
8086の廉価版である8088は内部16bitで外部8bitだから、内部外部の概念は昔からあったんだった。
16bit(1word)読むのに8bit x 2でやってたらしいけど、それでも速度低下は2割くらいだったらしいから、
いかに昔のCPUのロジックが遅い(クロックペナルティがでかい)かが分かる。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG023768K + 68881/2
NGNGentry
fmove.b #0,fp1 ;result := 0
fmove.b #0,fp0 ;result := result + f(0.0) / 2.0
bsr myfunc ; 両端は半分にして最初に足す
fdiv.b #2,fp0
fadd.x fp0,fp1
fmove.b #1,fp0 ;result := result + f(1.0) / 2.0
bsr myfunc
fdiv.x #2,fp0
fadd.x fp0,fp1
move.l #step-1,d0 ;for x := step-1 downto 1
loop:
fmove.l d0,fp0 ;result := result + f(x/step)
fdiv.l #step,fp0 ; 中間は関数値をそのまま加えあげる。
bsr myfunc
fadd.x fp0,fp1
subq #1,d0
bne loop
fdiv.l #step,fp0 ;result := result / step. 最後に幅で割る。結果はfp0に残る。
rts
myfunc: ;積分する関数本体 exp(-(x^2))
fmul.x fp0,fp0 ;x^2
fneg.x fp0 ;-x
fetox.x fp0 ;exp(x)
rts
0238台形公式
NGNG↓
○ fdiv.l #step,fp1
か。レジスタ間違えた。
“幅で割る”じゃなくて、幅をかける、若しくは分割数で割る、だね。
最終結果はfp0じゃなくてfp1に入ってる、です。
0239デフォルトの名無しさん
NGNGこれで>>227の宿題もバッチリだね( ´ー`)b
0240デフォルトの名無しさん
NGNG, ´, ヽ
! ! !リノ从ハ.〉
l r! krェ rァ|.| <又吉イエス!!又吉イエス!!
| | l、 ー .ィ!l
| /'\V/、ヽl.|
! i く小> リ
0241デフォルトの名無しさん
NGNGではないと思う。
0242デフォルトの名無しさん
NGNG実際にベンチマークとって最適なコードを選択・出力するコンパイラとかできないのかね。
0243デフォルトの名無しさん
NGNGJava の JIT コンパイラではわりとふつーではないかと。
0244デフォルトの名無しさん
NGNG//´≠`ヾ彡三=三≠=・/=三=・∀\
//彡ヽヾ)))三=.ノ─ヽ、─=≠三 ミ ミ i
|/(/UUし彡’ ミミ\ヽヾ !
/i||iシ/ ∧_∧ \!l |l|| i
ソli・∀/ ( ;´Д`) !i li i|l・∀|l
||i l |||lつ (U_U )つ li li ((l|lil
ヽヽ_/|ノ モナクロサンボ / //|Y l|/
\ミミ\ヽ / //|/彡
ミヽ・\ヾ゙、三 ─ = _ __ _≠/// ゴロゴロゴロゴロゴロ…
ヽとと\≠=( ̄))∧_∧//´(((((三彡∨彡ノ/
(__ト(((ト三 =》∩ _)≠─=つつ三彡彡
─二三__,三二 ,.≫三=三彡
0245デフォルトの名無しさん
NGNGエントリが読み込まれるのか、それとも1つだけ読み込まれるのか?
どうなんでしょう。
0246デフォルトの名無しさん
NGNGそのうちの1エントリがTLBに読み込まれる、じゃないかな??
0247246
NGNG0248デフォルトの名無しさん
NGNGメモリアクセスのストライドを4、8、12KB・・・と、それぞれ時間を計測して
みれば分かるんじゃない?
0249デフォルトの名無しさん
NGNGメリットほとんどないから、そんなことしないと思う。
4Kおきに連続してアクセスするような稀なアプリの性能上げても無意味。
他のページにアクセスに行ったりしたら、
エントリを余計につぶしておいても損する可能性大。
それより、x86じゃ広すぎ。
0250デフォルトの名無しさん
NGNGメモリから直接TLBに値が入るということはないとおもう。
AMDはL2にTLB用のキャッシュがあったような。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGといっても外から見りゃ普通のメモリアクセスと区別出来ないのでは?
このへんはデータシートに書いてあると思うが。
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGこれの4,5ページを見ると、命令用のTLBはL2からデータをもらっている
ようですね。
P4のデータ用TLBってこの図から見られないんだけど、L1と共用なのかな?
0255デフォルトの名無しさん
NGNGftp://download.intel.co.jp/jp/developer/jpdoc/vol6iss1_art01_j.pdf
DTLB はアドレスを物理アドレスに変換します。
DTLB には完全にアソシアティブな64のエントリが
用意されており、各エントリは4K または4MB の
ページのいずれかをマッピングできます。
0256デフォルトの名無しさん
NGNGのHPを見ながらアセンブラの勉強させてもらってるんですが
http://www5c.biglobe.ne.jp/~ecb/assembler/2_5a.html
の練習問題のところで
moval,[si+1]
mov[di+1],al
moval,[si+2]
mov[di+2],al
moval,[si+3]
mov[di+3],al
と書いてあるのですがこれはどういう意味なのでしょうか?
レジスタにoffsetでdata1や2の格納アドレスを代入し
そのアドレス行をずらしたモノをまた代入してると思うのですが
一体なんの意味があるんでしょか?
私的には
movsi,offset DATA1
movdi,offset DATA2
moval,[si]
mov[di],al
これだけでコピーはできているハズだからそれでいいのではないかと思うのです。
後の行のラベルやシステムコールなどについてはいろいろなHPをみたり
して理解できたのですがここの部分だけがどうしてもわかりません。
どうかお力添えをお願いします。
;アセンブラ本って凄く少ないのですね・・本屋を歩き回って見つけたのが4冊・・
0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGal = si[1];
di[1] = al;
al = si[2];
di[2] = al;
al = si[3];
di[3] = al;
下
al = si[0];
di[0] = al;
て事でいいですか?
movsb×3でいいんじゃないかと思うが。
0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNGmov eax,[si]
mov [di],eax
の間違いじゃなくて。
関係ないけど、そのページ、内容が古すぎてあまり役に立たないと思う・・・
この前ここに張って有った入門�nより多少ましな感じはするが、どっこいどっこい。
0261デフォルトの名無しさん
NGNG練習問題までのページを5回、他HPも読み返しているのですがマジでアホでごめんなさい。
>>258
はい。字詰め表示になってしまいました。その通りです。
>>259
4バイトだから4バイト分づらす?う〜んどういうことだろ・・
0262デフォルトの名無しさん
NGNGぇ
そうなのですか。
確かにdosのシステムコールなんてもう使わないような気もします
32bitではなく16bitCPU用に書いてあるとも思うのですが
アセンブルに関する資料がネット、書籍ともに少なくて。
0263デフォルトの名無しさん
NGNGDATA1db'ABCD',24h
DATA2db'0000',24h
↓
DATA1db'ABCD',24h
DATA2db'A000',24h
↓
DATA1db'ABCD',24h
DATA2db'AB00',24h
↓
DATA1db'ABCD',24h
DATA2db'ABC0',24h
↓
DATA1db'ABCD',24h
DATA2db'ABCD',24h
0264デフォルトの名無しさん
NGNGDATA1 db 'ABCD',24h
DATA2 db '0000',24h
↓
DATA1 db 'ABCD',24h
DATA2 db 'A000',24h
↓
DATA1 db 'ABCD',24h
DATA2 db 'AB00',24h
↓
DATA1 db 'ABCD',24h
DATA2 db 'ABC0',24h
↓
DATA1 db 'ABCD',24h
DATA2 db 'ABCD',24h
0265262
NGNGご説明ありがとうございます。
dbというニモニックは1バイトの文字を
メモリアドレスのどこかに一行目A 二行目B 三行目C 4行目Dのような形で
順次連番アドレスで一つ一つ格納していくものである。
ラベルはそのdbで定義されたデータの先頭アドレスを示すものである。
よってABCDを求めたいのであればラベルの示す行から3行目、全部で4行を
指定してやる必要がある。
こう言う解釈でよろしいでしょうか?
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGttp://www.ascii.co.jp/books/detail/4-7561/4-7561-4466-7.html
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG0271ぽろじょあ ◆niBmDfC40k
NGNG|・ ・|
ノ( 。3。)ヽ エルァー ボクちょっとしか真面目じゃないYO
0272ほんたま
NGNGおみゃ〜らよ、おれはほんたまよ。
おみゃ〜らよ、おれがほんたまになった件わかるか?
おみゃ〜らよ、「Visual E++」が「Slim de Can」になった件わかるか?
「Slim de Can」は限りなくマシン語に近いアセンブラよ。
疎いな…おみゃ〜らは…詳しくはここだ↓
http://hp.vector.co.jp/authors/VA015412/
自分じ見ちみれ♪
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGNASMの16bit exe形式なんですが、これで上手くいきません。
どうすれば上手くいくのでしょうか?
;worldの最初の'a'を'H'にしたい
;省略
mov si,hello
mov di,world
movsb
mov dx,hello
mov ah,09h
int 21h
mov dx,world
int 21h
;省略
segment data
hello: db 'Hello World',13,10,'$'
world: db 'aaaaaaaaaaaaaaa','$'
0275デフォルトの名無しさん
NGNGの直後に
mov ax,data
mov ds,ax
mov es,ax
とか?
0276デフォルトの名無しさん
NGNGこないだから質問してる人かな? CPUのマニュアルもっとよく読んだほうがいいよ。
高級言語と違って「よしなに」はやってくれないからね。
0277デフォルトの名無しさん
NGNGmov ax, SEG data
では?
0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG考えまとまってから書けよ
0281デフォルトの名無しさん
NGNGお前には無理だ。
0282デフォルトの名無しさん
NGNG物理的には別かも知らんけど、な。
わかるやろ?
0283デフォルトの名無しさん
NGNGスルーしなって。
この手の人にはいくら言っても無駄だから。
0284デフォルトの名無しさん
NGNGコンパイラってなに使うのx86系で。
Cとかとリンカで混合して使うのそれともフルアセンブラ?
0285デフォルトの名無しさん
NGNG聞きたいことがわからん。もう一度整理してくれ
0286デフォルトの名無しさん
NGNG用語と日本語文法の勉強して出直せ。
0287デフォルトの名無しさん
NGNG買ったけど意味不明
0288デフォルトの名無しさん
NGNG私はx86系でインラインアセンブラを使っているのですが、
皆さんはソフトウェアを作るときアセンブラをどのように使っているのですか。
(例えば一部Cなどで書いて、それとアセンブラのコードとはリンカで1つにリンクしているなど)
それとも全てアセンブラだけで書き上げたりするものなのでしょうか?
0289デフォルトの名無しさん
NGNGit is an INRAIN assembler-only user -- ど
and KOMPAIRA って -- what -- the x86 system of 使う
C -- と -- using by RINKA, mixing, or a full assembler
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGアセンブラの方がよっぽど簡単。いざとなったら動かして試せるし。
0295デフォルトの名無しさん
NGNGこの業界で仕事してると、ほんとそう思うよ名
「プログラムって簡単!」
0296デフォルトの名無しさん
NGNGよくあるけれど、既出をがいしゅつと読んだり、
巣窟をすくつと読んだりするの、やめよう・・ね?
0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304ほんたま
NGNGスリムドカンはおれのページにあるから見ちみれ?
http://hp.vector.co.jp/authors/VA015412/
おみゃ〜らよ、おれはいまリソースエディタをつくってるのよ。
スリムドカンに装備させるためよ。
おみゃ〜らよ、アセンブラをつくるのはいいが、リソースエディタのないアセンブラはアセンブラとはいわんぞ!
自分じわかるかな?
0305デフォルトの名無しさん
NGNG行いたいのです.しかも,僕は C以外の言語を知りません... Cコンパイ
ラに bsr を使わせる事は出来るのでしょうか? もしくはインラインア
センブラを使うならばどう書けばよいのでしょうか? とりあえず,素
人なりに VC inline asmembly 書いてみました.これってどうなのでしょ
う...
int scan_three_integers( int i1, int i2, int i3 )
{
__asm { bsr edx, dword ptr i1
mov eax, 31
jnz l1
bsr edx, dword ptr i2
mov eax, 63
jnz l1
bsr edx, dword ptr i3
mov eax, 95
l1: sub eax, edx }
}
0306デフォルトの名無しさん
NGNG0307306
NGNG0308デフォルトの名無しさん
NGNG>これってどうなのでしょう...
何をする関数なのか仕様を書いておかないと
ソースから仕様を分析せなならんので俺はスルーしたくなる。
0309305
NGNG上記の関数 scan_three_integers() は,3つの int 引数からなる 96 bit 列
を左から走査し,ビットの立っている位置 {i|0,1,...,95} を返すようになっ
ている筈です.但し,引数 96 bit のうち,少なくとも 1 つのビットは立って
いることを仮定しています.
パイプライン・条件分岐等のことは一切考えず(いや,むしろ考えられず),
ただただ動くように命令を並べただけです(汗).
0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNG(1)下記、1次元8点DCTのCPU命令によるプログラムの実行サイクル数を求めよ。
ただし、MUL Ri,Rjについては演算はEステージ、結果格納はSステージで行うとする。
(2)このプログラムの最内ループのパイプラインステージを描け。
(3)MULのEステージが2サイクルかかるとした場合、実行サイクルはどうなるか?
MOV #8,R13 MOV.W aStart,R5 MOV.W Sstart,R6 L2:MOV.W sStart,R4
SUB R10,R10 #r10:accumulater MOV #8,R12 L1:MOV.W@R4+,R8 MOV.W@R5+,R9
MUL R8,R9 ADD R9,R10
DT R12 #r12 –1,if r12=0 then T=1
BF L1 MOV.W R10,@R6+
DT R13 #r13–1,if r13=0 then T=1
BF L2
End:
メモリ(URAM)
R4 S(0) S(1) S(2)::
R5 a(0,0) a(1,0) a(2,0) ::
R6 S(0) S(1) :
7
ΣS(x) a(x,y) 1次元8点DCT
x=0
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG役に立つ書籍等があれば教えてください
0316デフォルトの名無しさん
NGNGお約束だが
0317デフォルトの名無しさん
NGNG21364は、SMPとメモリコントローラ周りの統合がメインで、
コアは、21264からほとんど変更無いから
英語本で良ければ21264の文献はいくつか見つかる。
0318ほんたま
NGNGおりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪
「Slim de Can」ってすげ〜な〜、イベントドリブンプログラムが作成できるとこまでついに進化したよ。
おりはもう神だね♪どうよ?
http://hp.vector.co.jp/authors/VA015412/
0319305
NGNG> 確率が高いほうから調べる
なるほど.どの bit が立っている確立が高いか考えて順番を入れ替えて
見ます.
> まずバイト単位で0じゃないバイトを探してからビットを探すっての
> はどう?
C でプログラムを書く場合,上記のような方法も考えました.8 bit 単
位で bit の立っている位置,もしくはどこも立っていないという情報を
格納した 256 要素からなるテーブルを参照する方法です.しかし,
inline assembly で bsr 命令を使うと,32 ビット単位の bit scan
をしつつ,どの bit もたっていなければフラグを立ててくれるのです.
0320デフォルトの名無しさん
NGNGbit scan命令が遅いのは知ってる?
0321305
NGNG知りませんでした.情報ありがとうございます.ただ,bit scan 命令より
も速い手法を知らないのです.
Inline assembly での bsr 命令使用以外で試したのが,bit が見つかるまで
ループさせる方法と,テーブルを数回参照する方法です.
テーブル参照の方法で試したのは,要素数 256 のテーブル 12回参照と,要素数
65536 のテーブル 6回参照の2通りです.
PentiumIII では bsr 命令のほうが効率が良かったです.
0322デフォルトの名無しさん
NGNGbit scan命令が遅いって
いつの時代のCPUですか?
0323デフォルトの名無しさん
NGNG0324おばかさん
NGNGもしまず0チェックすることによって bsrをただ3回やるより速くなるのならばこんなのどうかな?1000万回くらいループしてベンチとんないと最近のはキャッシュがあるから性能はわかんないね。
int scan_three_integers( int i1, int i2, int i3 )
{
__asm {
mov ecx, dword ptr i1
jecxz NEXT1
bsr edx, ecx
mov eax, 31
jmp DONE
NEXT1: mov ecx, dword ptr i2
jecxz NEXT2
bsr edx, ebx
mov eax, 63
jmp DONE
NEXT2: bsr edx, dword ptr i3
mov eax, 95
DONE: sub eax, edx }
}
0325おばかさん
NGNGint scan_three_integers( int i1, int i2, int i3 )
{
__asm {
mov ecx, dword ptr i1
jecxz NEXT1
bsr edx, ecx
mov eax, 31
jmp DONE
NEXT1: mov ecx, dword ptr i2
jecxz NEXT2
bsr edx, ecx
mov eax, 63
jmp DONE
NEXT2: bsr edx, dword ptr i3
mov eax, 95
DONE: sub eax, edx }
}
0326デフォルトの名無しさん
NGNGモード切り替えには物理アドレスと仮想アドレスが同じとなるメモリ領域を確保する
必要があると思うのですが、どのようにしたのでしょうか?
お願いします。
0327デフォルトの名無しさん
NGNG微妙に重いね
0328デフォルトの名無しさん
NGNGP5で7〜71クロック。
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGMOV EAX,[ESP + 4] ' EAX = p1
ADD EAX,-1
SBB EAX,EAX 'EAX = (p1 != 0) ? -1 : 0
ADD EAX,EAX 'EAX = (p1 != 0) ? -2 : 0
MOV ECX,[ESP + 8] 'ECX = p2
ADD ECX,-1
SBB ECX,ECX 'ECX = (p2 != 0) ? -1 : 0
AND ECX,EAX 'ECX = (p1 != 0) ? -2 : ((p2 != 0) ? -1 : 0)
MOV EAX,ECX
SHL EAX,5
ADD EAX,95 'EAX = (p1 != 0) ? 31 : ((p2 != 0) ? 63 : 95)
BSR EDX, [ESP + 12 + ECX * 4]
SUB EAX,EDX
RET
_scan_three_integers ENDP
速いかどうかはわからんがこういう方向もあり
0331デフォルトの名無しさん
NGNGVectorPathだから一番いい状態のときのものだと思う。
■ このスレッドは過去ログ倉庫に格納されています