1 :
デフォルトの名無しさん :
2006/05/24(水) 01:43:34
2 :
デフォルトの名無しさん :2006/05/24(水) 01:44:05
3 :
デフォルトの名無しさん :2006/05/24(水) 02:04:26
∧_∧ ∧_∧
( ´∀`) ( )
三 (, つ ノ (
>>1 ) TDNスレは・・
/ ) ) | | |
. 〈_)\_) (__(___)
∧_∧ .∧_∧
( ´∀) ( )
( つ (
>>1 .) 立てんなって
≡≡三 三ニ⌒).| | |
〈__)__) ̄(__(___)
∧_∧∧
( ´) ) ←
>>1 /  ̄,ヽつ 言ったろうが
C /~/~
> > くっ
\__)し'
∧_∧ オラ、気持ちいいだろ
( ´∀`)
/ ヽ、 ∧∧
(( C( ヽ__( ´Д) アッー!!
/ ( 、__ Y、
〈__∠__,)) ヽ_'っっ
5
5
5
DEC B
jmp $-8
前スレ埋めてから使えアホども
「埋めは荒らし」と、はっきり言われているんだけど。 バカが埋めなくちゃいけないと言い出し、アホがそのデマを信じてる それだけのこと。
ごく小規模のアセンブリなら分かるようになってきたけど デバッグの混合モードで表示される windowsアプリなんかのコードがイマイチ理解できません。
>>12 人間が書いたものとコンパイラが書いたものの違いだから気にするな
人間が書いたもの:多様性に富みトリッキーで読みづらい
コンパイラが書いたもの:定型句で構成されシンプルで読みやすい
>>12 人間向き不向きがあるんだから気にするな
最近、やっとこさ商用ソフト(ノートン先生)のキージェネレータを作って、キーを生成できるところまでに至りました。 僕はこれからクラッカーを名乗ろうと思う。 そしていろんな物をクラックすることに従事しようと思う。 誰も俺を止められはしないよ。
誰も止めてくれないよ?
次に止まるのは捕まったとき
前スレに貼られたEICAR Test String、 debug.exeにロードして逆汗したけど、無意味な演算命令ばっかり並んでる。subとかincとか。 asciiコードだけで構成された機械語sugee 探したら他にもありそうだな。
ASCIIコードだけで構成された機械語では足し算が面倒。 ADDもADCも範囲外だから ADD ax,bx ってやるにも PUSH dx XOR dx,dx SUB dx,bx SUB ax,dx POP bx ↓ 52 33 D2 2B D3 3B C2 5B ↓ R3メ+モ;ツ[ とかやらなくちゃなんない。 この場合のキャリー演算ってどうやんだろ。
POP bxじゃねーや、POP dxだ。 で、その場合のコードが52 33 D2 2B D3 3B C2 5A で R3メ+モ;ツZ だ。
だれかASCIIコードだけで構成された長大関数へリンク張ってくれ
>21 お前はまずASCIIコードの意味を勉強し直してこい。
25 :
21 :2006/05/28(日) 00:05:52
American Standard Code for Information Interchange
ASCII != alnum
C++でインラインアセンブラ使ってたら 32ビットOSから64ビットOS対応に変えるのってめんどい?
よーしパパx86-64なLinuxでFPU使いまくっちゃうぞー
>25 「American Standard Code」に半角カナが混じっていいわけねぇだろw
相変わらずここのスレタイはこの板でちょっと異彩
21のやつASCIIにしてみたけど自信ない。 BX=0以外で結果のCF逆転? ;ADD AX,BX PUSH SI ; V PUSH BX ; S PUSH AX ; P DB
切れたorz ;ADD AX,BX PUSH SI ; V PUSH BX ; S PUSH AX ; P PUSH 2121h ; h!! POP AX ; X XOR AX,2121h ; 5!! PUSH BX ; S POP SI ; ^ PUSH AX ; P PUSH SP ; T POP BX ; [ SUB word ptr[BX],SI ; )7 POP SI ; ^ PUSH SP ; T POP BX ; [ SUB word ptr[BX],SI ; )7 POP AX ; X POP BX ; [ POP SI ; ^
35 :
デフォルトの名無しさん :2006/05/29(月) 08:09:49
日本語で読める、PowerPCアセンブラの書籍ってないものでしょうか? x86なら沢山あるようですが、PPCはなかなか見つからない。
36 :
デフォルトの名無しさん :2006/05/29(月) 21:21:46
バブルソート誰か書いてくれ・・・ 簡単なのでいいから
>>35 昔あったんだが、絶版になったらしい。
金があれば買いたかったんだが。
40 :
デフォルトの名無しさん :2006/05/29(月) 22:53:08
41 :
デフォルトの名無しさん :2006/05/30(火) 07:28:26
43 :
36 :2006/05/30(火) 07:44:13
また質問でホントゴメン
マイクロプロセッサ実験にバブルソートプログラム書かなくちゃいけないんだけど
・初期データはメモリ上に用意
・データ数のラベル名:NumberOfData
・データ配列のポインタのラベル名:DATA
・任意のデータ数に対応
・ソート後のデータ出力の際はinとoutを交互にしておく
>NumberOfData:
> .word 10
>DATA: .word 1000
> .word 200
> .word 6000
> ・・・
> .word 1000
>in
>ld kekka1
>out
>in
>ld kekka2
>out
全く意味がわからん・・・
>>37 見てとりあえずそのサイトで勉強したけど
メモリ上に用意ってのが理解できないんだ(;´Д`)
初めてここでまともな質問を見た気がする
まともか? どのプロセッサ使ってるか書かずに
>>43 それだけじゃ誰にも意味わからないぞ。
省略してるだろ。
>メモリ上に用意
ここだけは喪前以外の誰でも意味がわかるw
そういうことか
自作です
50 :
36 :2006/05/30(火) 15:23:07
言葉足らずでスイマセン・・・ KITEプロセッサっていう実験用のプロセッサみたいです。
>>50 じゃあ、まずプロセッサの仕様書の一ページ目の一行目から四行目を写してみよう。
KITAAプロセッサのことなら分かるんだが KITEはちょっと手に負えないな スマン
A. 任意のデータ数に対応するにはメモリ空間が不足するため 仕様を満たすプログラムは作成不可能です
確かにポインタの桁数が決定できないな。 あと、長大なポインタでメモリをアクセスできることが保証されてなかったりして。
すみません、アセンブラの勉強をしようと本を探してるのですが 何かおすすめの本はないでしょうか アセンブラに関しては全くの初心者です C言語やJava等の経験はあります 今のところ独習アセンブラを買おうと考えてます…
アセンブラのことしか書いてない本は避けよう
>56 何を目的に勉強するかによるんじゃね? インラインでSIMD使うのか、組み込み系にシフトするのか、OS書くのか。
>>56 現状の最善手(新書)では独習一択かもしれないが、取り敢ず立ち読みで判断すべし。
初心的な話なら素人ながらの意見、変なゲーム改造ネタだけの本よりかマシかと。
60 :
デフォルトの名無しさん :2006/06/01(木) 01:31:47
「いまどきの〜」と名の付くシリーズは 買ってはいけない
いまどきの土器 確かに駄目そうだ
「時代遅れのアセンブラ」 「これから来るアセンブラ」
PIC のマイコン工作関連の本でも漁ってみたら? タダで処理系はばっちり入手できるし、結構工作関連の人ってアセンブラ 苦手なようで、複雑なプログラムはあんまり載ってないし。
>>57 了解です
>>58 一応Windows上で動くのをやりたいです
>>59 田舎ですから置いてないんですよね…図書館にリクエストしてみます
>>60 そのページは全部読んだんですが、どうもリファレンス的で基本を分かってない自分にはさっぱりで…
>>61 悪書として聞いた事があります
>>65 PICも後々やってみたいと思っています
67 :
60 :2006/06/01(木) 23:11:11
>>66 じゃぁ、アセンブラの教科書の前に
矢沢久雄「プログラムはなぜ動くのか」(2001年10月)日経BP社\2400
ってのもある
「CPUの創りかた」 この本マジおすすめ
なんか、表紙を見ただけで手に取るのが憚られるなw
時々出てくる萌え子ちゃんは、 実は筆者の愛を表現するために、編集者が勝手に登場させたのでしょう。 本書の最後にある「おわりに」に筆者自身が萌え子ちゃんの登場に衝撃を 受けた様子が暴露されています。
いや、文章も絵も同じ人間が書いてるんだが、それ。
なんか住む世界が違うと言うかなんと言うか… 出来損ないのCPU作るよりまず頭のry
頭の?
りぼんが表紙が白で裏表紙が赤なのが気になるとか?
あるサイトで見かけたんだけど、 ebxとecx*8を足して1000を引いてeaxに代入する最速コードは? という問題で、 lea eax,[ebx+ecx*8-1000] とlea命令一発でやっているんだけど、CPUはこういう計算は乗算・減算を しないでさくっと 1clock で済ますことが出来るの? なんでこんなことが出来るのかさっぱり仕組みが分かりません。 あと、MSVC++(うちで使ってるのは6.0)とかは実行速度で最適化をすれば こういう処理の置き換えは自動でやってくれるんですか?
> 1clock で済ますことが出来るの? プロセッサによって違うに決まってる。 少なくとも、i386では出来ない。 > なんでこんなことが出来るのか そういうハードウェアを搭載してるから。 > 自動でやってくれるんですか? コンパイラの出力くらい、自分で確かめろよ。
>76 減算はともかく乗算なんかしてないだろ。
lea eax,[ebp+ebx*8-1000] ならi386でも可能?
leaはi386では2クロック。
82 :
デフォルトの名無しさん :2006/06/04(日) 00:31:44
DSP得意の積和演算だろ
すみません質問です。 スレタイの 「アッー!」 が発音できないのですが・・・どう読むんですか?
>82 lea は積ではなくビットシフト >83 ガイドライン池
85 :
デフォルトの名無しさん :2006/06/04(日) 03:47:54
x86のRPLとはなんですか?説明見てもなんのことかよく分からないんですが・・・
はじめて読む486あたりの説明で理解できないなら、そういうものだと思っとくしか。
セグメントディスクリプタのDPLフィールドと セグメントセレクタのRPLフィールドの 二つあるのが意味不明というか
データa,bをキーボードから入力するとa×bの計算結果が表示素子に表示する ソースはどうなりますか?
>88 IOの情報も無いのに出力出来るかとか、 せめてCPUくらいは書けとか思ったが・・・ 宿題くらいは自力でやれ、な?(AA略
>>88 よし、出来たぞ。
不明な部分は俺が勝手に脳内補完してやったから安心しろ。
ORG 100H
START: LD C,1
CALL 5
SUB 30H
PUSH AF
LD C,1
CALL 5
SUB 30H
POP BC
JR Z,DISP
LD C,A
XOR A
LP01: ADD A,B
DAA
DEC C
JR NZ,LP01
DISP: LD HL,STR+2
LD (HL),A
LD A,33H
RRD
INC HL
LD (HL),A
SK01: LD C,9
LD DE,STR
JP 5
STR: DB 0DH,0AH,00H,00H,0DH,0AH,24H
END START
>>88 どうもです。参考にさせていただきます。ちなみに8085プログラミングで
やったらどうなりますかね?
>>91 Z80→8080(8085)変換くらい自分でやれ
>>93 先ずはZ80でアセンブルして8080で逆アセンブルしてみたら?
#取り敢えずJR ZはJP Zに置き換えるとして後はLD DEが問題かな?
##RRDってなんだっけ。
95 :
93 :2006/06/04(日) 20:02:03
いや、俺に言われても…
>>94 RRDは4ビット単位のローテートだな
LD DEについてはCP/Mでなんでメッセージ出力にDEレジスタを使うと思ってるんだi8080でも問題なしだよ
8085で入力した数を表示素子に出力するとこうなるだろう? .8085 ASEG DISP EQU 0040H DHEX2 EQU 0046H KEYIN EQU 004FH ORG 8000H LOOP : CALL KEYIN JNC LOOP MVI C,1 CALL DHEX2 CALL DISP END
>>88 8085で作ってみたけど間違っているところない?
.8085
ASEG
DISP EQU 0040H
DHEX1 EQU 0043H
KEYIN EQU 004FH
ORG 8000H
IN1 : DB 0
IN2 : DB 0
ANS : DB 0
LP1 : CALL KEYIN
JNZ LP1
STA IN1
CALL DHEX1
CALL DISP
LP2 : CALL KEYIN
JNZ LP2
STA IN2
CALL DHEX1
CALL DISP
MVI C,IN1
MVI A,IN2
LXI H,0000H
LP3 : DCR A
DAD B
JNZ LP3
CPI 15H
CALL DHEX1
CALL DISP
END
99 :
デフォルトの名無しさん :2006/06/05(月) 00:21:11
>>36 >>50 去年は足し算引き算掛け算だけだったんだが
今年はバブルソートかよ。
100 :
デフォルトの名無しさん :2006/06/05(月) 04:34:21
アセンブラでゲーム作れますか?
ゲーム機はほとんどアセンブラですが
>>101 対応コンパイラが無くて困ってるPS3開発さんですか?
マクロアセンブラに条件アセンブル、繰り返し、出力などがあれば アセンブラでもライフゲームくらい作れるんじゃないの? TeX でライフゲーム作ったと言う話は聞いたことがある。
>104 んなもん無くたって作れる。
あるCPU上で実行可能な全てのプログラムはアセンブラで記述することが可能。 現実的かどうかはともかくとして。
みんな。アセンブラとアセンブリ言語をまちがえてないか?
そういうばやいはアセンブリ言語を使って会話してください
フルアセンブラでOS創ったよ
mov trash,107 fire trash
>>106 そのCPUに対応したアセンブリ言語があると仮定した場合にその命題は常に正しい。
だがCPUに対応したアセンブリ言語がそもそも存在しない場合、記述は不可能。
なかなか無い反例だが?
>>112 >なかなか無い反例だが?
普通にあるような・・・ENIAC とか
クロスアセンブラ作ればいいんじゃない。
いや、そもそもENIACのプログラムは電気的な配線(コード)として表現されるから。 強いていうと、アセンブラの出力が配線図として出力されるとか?
ここ数年の話だって、intel/AMDが新しいSIMD命令追加した直後、 アセンブラ未対応で直接バイナリ埋め込んだりとかあったなぁ。
117 :
112 :2006/06/05(月) 21:07:12
>>113 「現在は」なかなか無い反例 と言いなおそうか。
たしかにENIACについちゃ反例になるだろうが。そもそも機械語なんて概念が無いから。
>>115 手作業でプログラムを入力しないといけないんだっけ?
そうなると、エニアックはCPU載せてるとは言えない説を提示したい。
xor (107),(107)
>>115 ENIACは10進数で計算する事を忘れてはいけない。そのアセンブラがあったとしてもそれだけで膨大な「配線組み合わせ」(プログラム)になってしまう。
>>120 アセンブルは最新PCでやればいいじゃん。
まさに組み立て!
アセンブル結果を自動的に配線してくれるメカを作ればいいんだ。 ただ、メカの製作はハードウエアであり、ソフトウエアではないが。
DNA計算の場合も普通の意味でのアセンブリ言語はないような気がする。
>>124 今だと PLD とか FPGA がそれにあたるのかな。
エニアックって、数式記憶機能付き関数電卓みたいなもので、 プログラミングができる「PC」とは違うものなのかな。 あ、でも分岐命令はサポートしてる?
>>127 電卓とは違う。どう考えても卓上には乗らない。(大きさと重さの面で)
そもそも、現在使われているCPUとは根っから構造が違う。
誰も卓上に乗るかどうかなんて聞いてないよ! 構造がどう違うのか教えてくれ。
分岐は知らんがループというか繰り返し演算は出来る。 それしか出来ないというか・・・
弾道の計算が30秒でできたそうだが、 今のC言語とかで書くとどんな処理だったんだろう。
まずは回路図が欲しいな。ぐぐっても見つからないorz
エミュレータ欲しいな〜。
はい。タケコプター!
アンアンアン
8085アセンブラでデジタル時計ってどんなプログラムリストになるの?
137 :
128 :2006/06/06(火) 01:43:11
>>129 現在のCPUを始めとする演算システムのほとんどは2進法を用いて計算する。
ENIACは10進数で演算するため、2進数に比べてとても難しい回路になる。
あとは、メモリの保存方式の違いとか。
最近世間じゃ8085が流行ってるのか? 学校の課題にしても今時せめてZ80互換くらいにしろよと言いたいが。
この際だから4004とか、6ビットのキャラクターマシンなんかでも…
しかしFPGAでループ書くっつってもなー ちょっと違うんじゃないか?
ちょっと血が膿んで内科医?
>>139 学習用マイコンボードは何故か8085な奴が多いのですよ。
TK-85もどきとか。
確かに85の方がI/O周りが80よりは楽だが……
147 :
デフォルトの名無しさん :2006/06/11(日) 08:48:29
System Requirements Supported Operating Systems: Windows 2000 Service Pack 3; Windows Server 2003; Windows XP Service Pack 2 Required Software: Visual C++ 2005 Express Edition Disk space requirements: 1 MB (x86)
激しく外出
test
jz
153 :
デフォルトの名無しさん :2006/06/21(水) 01:50:38
cygwinと本物のLinux環境の双方でコンパイル可能な、ポータブルな アセンブラコードを書くことは可能でしょうか? 試しにGentooLinuxとcygwinで、同じ内容のCのソースコードを アセンブラに落としてみました。 (gcc -S xxx.c -o xxx.s) ちなみにどちらも同じPC(CPUはアスロンXP)です。 出力されたファイルを見ると、同じgccでも内容が結構違うみたいです。 お互いのxxx.sファイルをコンパイルすることもできません。 cygwinとはいえ、アセンブラレベルまでソース互換とすることは 対象外ってことでしょうか。
ものによる
つーかそもそもCygwinはLinux互換環境じゃねーよ
発想がまるで駄目だな もうちょっと勉強してこい
最新のPentiumでアセンブラを組むと、VC++より遅かったりする。 ロード処理と命令処理とストア処理が並列に並ぶようにスケジュールしないと速くならないんだよね。 しかも演算ユニットが増えて、分岐予測しながらキャッシュしているなか、マルチスレッドのこともあるし、 その情報を元に、マイクロソフトは最適化してVCコンパイラ作ってるものだから、全然速度が追いつかないッス。
>>157 × アセンブラを組むと
○ 8086〜386のイメージで命令を並べると
パイプライン構造を持つCPUに関してただ命令を順に並べると
パイプラインストールなど発生する可能性があるのが当たり前
159 :
デフォルトの名無しさん :2006/06/21(水) 16:48:43
アセンブラで書いても速くならないのね
どんなバカがアセンブラコード書いてもCより速くなる時代はとっくに終わったんだよ。 その程度の事も解らないバカだから、最適化すべき箇所と手法を間違えて 時間を無駄にした挙句、機械的な最適化のコンパイラなんぞに負けるわけだ。
161 :
デフォルトの名無しさん :2006/06/21(水) 17:31:13
バカっていうなよ・・・
機械的な最適化を行うためのプログラムは・・・
163 :
デフォルトの名無しさん :2006/06/21(水) 21:25:24
アセンブラ遅いのー?
Javaが一番速い
オレコードが一番早いに決まってるだろ。 コンパイラに負けるやつは単に勉強不足。
>164 x86環境ではJavaScriptにすら劣る低速言語だけどな。
JavaScript ってやっぱ遅いのか。
そりゃJavaベースだしな
>>170 しかし、自分がアセンブラを書いてもコンパイラに負けることを
自覚している点で、本当のばかではないと言える。
CPUにもいろいろあるが、Z80くらいだったら、アセンブラで作った方が Cで最適化したよりも格段に速いと思う。 最適化したCのプログラムにBUGが有ったときには、最悪な結果に なりそうな気がする。
Cでプログラム組む奴って、ハードの事が判ってない奴が多い。 故に、信頼性の低いプログラムになりやすい。はっきり言って仕様BUG
というかハードにあまり深く踏み込まなくても良いように高級言語があるんだが
踏み込まないと踏み込めないの違いだな
アセンブラの知識はあるけど極力Cで済ませる漏れが勝ち組。
アセンブラの知識もCの知識もあるけど極力Rubyで済ませる漏れが本当の勝ち組。
「ぬるぽ」と恐れずに言える漏れが真実の勝ち組。
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>178 (_フ彡 /
Cは使えるけどバグは怖いしめんどくさいからアセンブラで済ます俺は負け組。
言語も人も適材適所と思ってる俺が勝ち組 下らんこと話してないでおまいら働け
今、アセンブラの仕事って、有るのか?
ある。安物チップの組み込みで性能を出そうとする場合はそうだな。 試作品なら使いもしない周辺回路がごっそり入ってても問題ないが、量産品の場合はコスト優先の場合が多い。 俺はこんど、WEBサイトをアセンブラで書こうかと考えている。今はアパッチ使ってるが、サーバー含めてALLアセンブラ。
OSもアセンブラ使ってね
>183 なんのメリットも見出せないんだが? ボトルネックは回線、次いでHDDアクセスか? アセンブラで記述しても1%も高速化出来まい。 「WEBサイト」とか言ってる時点でネタだろうが、それにしても酷い。
>サーバー含めてALLアセンブラ って言ってるから、ハード自作してファームウェアからアセンブラで書くんだよ きっと。
PICでWeb鯖なら実現してるのいっぱい居るけどな
あれ中途半端だけどね でもあそこまでやってれば立派だお
>>186 回線は光の16IPに増強済み。メモリは2Gで極力メモリ上で動くようにはしてある。
ボトルネックはリクエストに対するアパッチの応答。
一秒当たり500とか1000のリクエストにはちょっと厳しいのでは?
まあ、アパッチの設定を弄って済む位のアクセスであれば「なんのメリットも見出せない」と言うのは真かもね。
191 :
あや :2006/06/25(日) 13:18:40
こんにちは! 今学校でMIPSのシミュレータを勉強してます★ それで、「N掛けるNの掛け算表表示プログラム」 を出力するプログラム(Nは入力して与える)を書けという課題を出されたのですが、 全くわかりません>< 誰か助けてください! 先生がくれたメインルーチン部分は
192 :
あや :2006/06/25(日) 13:19:28
#timesTable.asm-- N掛けるNの掛け算表表示プログラム、Nは入力して与える。 #使用レジスタ $v0 - syscallパラメータ 及び 戻り値 # $a0 - syscallパラメータ 及び サブルーチンprintValue呼び出し用引数1 # $a1 - サブルーチンprintValue呼び出し用引数2 # $s0 - 掛け算用の変数1 # $s1 - 掛け算用の変数2 # $s2 - カウントダウンループ制御用変数、$s0と対で、$s0が1増えると$2が1減る # $s3 - カウントダウンループ制御用変数、$s1と 対で、$s1が1増えると$3が1減る # $s4 - いくつまで表を出力するかをいれておくための変数 # $t0からt4までをテンポラリレジスタとして利用
193 :
あや :2006/06/25(日) 13:20:44
.text main: li $v0,5 #整数入力のためにシステムコール番号 syscall #5を$v0に格納 move $s4 $v0 #大きさを$s4に格納する li $s0,1 move $s2,$s4 #外側の変数を初期化する loop1: li $s1,1 move $s3,$s4 #内側の変数を初期化する loop2: move $a0 $s0 move $a1 $s1 jal printValue #値を出力するサブルーチンを呼び出す jal print SP addi $s1,$s1,1 #掛ける数を増やす addiu $s3,$s3,-1 #ループ変数を減らす bne $s3,$zero,loop2 #ループ変数が0になるまでループする jal printfCRLF #改行を出力する addi $s0,$s0,1 #掛ける数を増やす addiu $s2,$s2,-1 #ループ変数を減らす bne $s2,$zero,loop1 #ループ変数が0になるまでループする li $v0,10 syscall #プログラム終了 です。誰かわかる人いませんか?
>全くわかりません>< >誰か助けてください! 俺もよくわからないから 今度デートしようよ。
195 :
あや :2006/06/25(日) 14:25:13
わからないならやだーー笑。
あやちゃんのフルネームは 綾小路源五郎
197 :
あや :2006/06/25(日) 15:12:20
みんな使えない!! パソコンに関してはすごいのかと思ったらぜんぜんじゃんか!
#printValueの中身は引数かけて表示 #printSPはスペース表示 #printCRLFは改行表示 .data SPACE: .asciiz " " CRLF: .asciiz "\r\n" .text printValue: mult $t0, $a0, $a1 li $v0, 1 move $a0 $t0 syscall jr $ra printSP: li $v0, 4 la $a0, SPACE syscall jr $ra printCRLF: li $v0, 4 la $a0, CRLF syscall jr $ra
お題はプログラムを出力するプログラムじゃないの?
>>197 馬鹿だなあ
お前のようなネカマに使われたくないだけだよ(w
201 :
あや :2006/06/25(日) 19:30:05
>198 ありがとうございます♡→ܫ←♡ まだ動かないですけど、かなり助かりました! mult $t0, $a0, $a1 ^ のところでsyntax errorが出るんですよね〜↓ なんでだろう? でもマイクさんすごいです!!
♡→ܫ←♡
→ ← ܫ ♡ ♡ ܫ ♡
204 :
あや :2006/06/25(日) 20:32:54
(´^ิu^ิ`)
「mult」ってアセンブラ命令なのか?
>190 お前は俺の言っている意味が全然解ってない。 メモリアクセス>>(超えられない壁)>>HDDアクセス>>>回線 だと言っている。 リクエスト数が多いなら、IOアクセス量の問題だから なおの事アセンブラ化での高速化では解決しない。 更に言うなら、そんなシステムをデバッグの困難なアセンブラで書き起す事自体がネタとしか思えない。
>>201 じゃmultをmulに変えてみてくれ。
>でもマイクさんすごいです!!
感謝の気持ちは電話番号でのみ受け取るよ。
IA-32でのCMPとTESTの使い分け方を教えてください。 とりあえず今は全部CMPにしていますが…
引き算とand演算の違い。
210 :
デフォルトの名無しさん :2006/06/26(月) 02:49:00
アセンブラ遅かったら使う意味無いじゃん!(><) 騙された!
今のクピュはアッセンをエミュで実行してるからCの方が早いよ
>>206 206は>>190に書かれている日本語を理解してない。
>ボトルネックはリクエストに対するアパッチの応答。
と書いてある。
なぜ
>リクエスト数が多いなら、IOアクセス量の問題だから
と言う話になるのだ?
206はそもそもWEBサーバーを動かした事が無いのか?
>デバッグの困難なアセンブラで書き起す事
デバッグが困難なのはつくりが悪いからであってアセンブラのせいじゃ無い。
リクエスト数の多さって、結局データ転送量の問題になる気がするけど? 具体的に何処を高速化したいのかわからん。 マルチスレッドのリアルタイム性ならOS書き換えるかCPU変えるor増やすしかないし、 「アパッチの作りが悪い」と言いたいだけなら該当箇所修正しる。 今主流のシステムでアセンブラ化で高速化出来るのはメモリアクセスの効率と演算の最適化で、 ランダムアクセスと転送が主になるwebサーバは高速化できない。 それと、もう余りにもアホらしくて突っ込む気も失せ気味だが、 高級言語と低級言語の開発効率とメンテナンス性の違いが理解出来てないなら ホントにプログラマやめたほうがええよ。
リクエスト数増えたらマシン増やして負荷分散だろ それとも負荷分散装置でも作ってるのか?
携帯用のサイトなので、データー量はしれてるのだけど、広告媒体が動いた瞬間にアクセスが急に増えたり
昼の休み時間や夕方にアクセスが集中する。平均的には大したリクエスト数ではないのだけど
>>190 に
書いたようにピークがとにかくすごい。ピークに合わせてマシン増やすのは誰でも出来るが
専用の最適化されたWEBサーバーを立てれば、多分マシン1台で10サイトくらいは余裕で行ける見積もりなので
他社との差別化が出来る。中小企業にはブレードサーバーなんて置けない所もあるのだよ。
アパッチのつくりが悪い訳じゃ無い。高機能すぎて不要な機能の為に速度が犠牲になってるだけ。
PMがGO出すわけねぇし、どうせ学生の遊びだろ。
>ランダムアクセスと転送が主になるwebサーバは高速化できない。 知ったかぶり乙
>具体的に何処を高速化したいのかわからん。 日本語勉強汁!
趣味でやるなら、まあ好きにやれ。健闘を祈る。 仕事でやるならメンテする人間の冥福を祈る。
>>219 「応答」が具体的だと思ってるならそれは間違い。
>>215 そのためにホスティングサービスやASPって物があると思うんだが
ピークの合わないサイトを組み合わせて手の空いた時間は別のサイトに処理能力を廻す見たいな感じで
そこら辺はデータセンタ/ASP運用の肝って所だな
あとは中小企業でブレードサーバ置くなんて考えがそもそもおかしい
それをあえて自前でやろうって考えは別に止める気は無いが
まずはWebProg板へ行ってぼろ糞に叩かれて来い
俺も206と殆ど同意見だな。 WEBアプリケーションをアセンブラで作ろうという奴の気がしれない。
サーバをWEBサイトとほざいた
>>183 とWEBアプリケーションと抜かした
>>223 さーて不思議な符合ですね。
このスレには2人しか居ないから
いや、3人いる。俺とお前と大五郎だ。
昨日からアセンブリ弄り始めた私を含めて4人だな。
アセンブラじゃなくて、マシン語でプログラム書いている酔狂もいるらしいな。
明日からアセンブリ弄り始める私を含めて5人だな。
明後日からアセンブリ弄り始める私を含めて6人だな。
俺はもう卒業するから4人だな
メールが届いた。 >1.流出したお客様情報の内容 > 2003年12月18日までにインターネット接続サービス「DION」にご契約 > されたお客様に関する同年同日時点の以下の情報 > (1)お名前、ご住所、ご連絡先電話番号 : 3,996,789名様分 > (2)上記(1)のうち、性別、生年月日、ご連絡先メールアドレスも含ま > れていたもの > ・性別 : 26,493名様分 > ・生年月日 : 98,150名様分 > ・ご連絡先メールアドレス : 447,175名様分 > > ■ご契約のDIONメールアドレス(※)、パスワード、口座番号等の信用 > 情報、通信記録は流出していません。 自鯖で済む物を、貧弱でセキュリティ大甘の連鯖使うなんて俺には出来ん。 7人。
今日は早上がりの漏れ様が経験の無い
>>215 にアドバイスしておく。
ドコモやボダのゲイトウェイはかなり低速(auのは知らん)。
なので、多くの携帯が1台のサーバにアクセスしてくると、プロトコルスタックや
サーバアプリ(←これは作りにもよるが、それなりに高速だとして)の性能限界に
達する前にTCPコネクション数(多くの場合3万弱くらいか)を使い切ってしまう
という事態が起きる。
ので、ZenでOSを分けるとかするのでなければ、十分高速であればそれ以上
カリカリにチューニングしてもあまり意味は無い。
・・・それは別として自分で作るくらいなら tux とか IIS の方が良いような気もする。
234 :
デフォルトの名無しさん :2006/06/27(火) 22:40:24
汗んブラで書くんだったらカーネルドライバとかプロトコル部だね 本気でパフォーマンス稼ぐつもりならFPGAで2層以上をオフロード つーかL5ロードバランサ使えww
FPGAなんぞ遅延でかいから速度あがらん ASICでいいよ
BASICでインジャネ
LISPマスィーン
>>233 アドバイスありがとうございます。
ページキャッシュが使えない事もあり、現状では300アクセス/秒程度しかさばけないのですが
この時のCPU負荷が100パーセント近いので、まずはIOやTCPコネクションよりもこちらを改善する予定です。
とりあえずCで簡単なサーバーを書いて動かせばCPU負荷が極端に減り、10サイト位はいけそうな雰囲気はあります。
ZenはTCPコネクションの問題回避では無く、複数のサイトを動かす為にメンテのしやすさから導入したかったのですが
zen1.1ではアパッチはまともに動かなかった気がします。最新版では大丈夫なのでしょうか?
>>234 TCPスタック迄はとりあえず弄るつもりは無いです。
HDLで実現できれば面白いですね。制限付きのNTPサーバーなんかは有るみたいで、触発はされたのですが実力がorz
スレ違いのWEBサーバの話題終了ー。 以降通常運営でお送りいたします。
nasmのEQUと%defineって何が違うの?
下のように乗算のプログラムを完成させたいのですがさっぱりわかりませんorz 誰かボスケテ start: add $1, $0, $0 ; $1: address of X addi $2, $0, 16 ; $2: counter = 16 add $3, $0, $0 ; $3: product Z lw $4, 0($1) ; $4: X, load X to $4 addi $1, $1, 4 ; address + 4 ... loop: ... add $3, $3, $4 ; Z = Z + X shift: ... addi $2, $2, -1 ; counter-- bne $2, $0, loop ; go to loop if counter != 0 sw $3, 0($1) ; store Z finish: j finish ; dead loop
13(10) x 10(10) = 130(10) 1101(2) = 13(10) x 1010(2) = 10(10) ---------------- 11010(2) 1101000(2) ---------------- 10000010(2) = 130(10)
244 :
デフォルトの名無しさん :2006/07/02(日) 11:15:33
質問なのですが C言語の for(t=1;t<9;t++) をアセンブラで書くとどうなるのでしょうか?
>>244 mov eax,1
L1:
cmp eax,8
jg L2
inc eax
jmp L1
L2:
xor ax,ax mov cx,8 a: inc ax loop a
>>244 XOR GR7,GR7
ST GR7,t
JUMP L02
L01 ・・・
・・・
LD GR7,t
LAD GR7,1,GR7
ST GR7,t
L02 LAD GR1,9
CPA GR7,GR1
JMI L01
・・・
248 :
デフォルトの名無しさん :2006/07/02(日) 12:49:08
>>245 さん
ありがとうございます
eaxというのは変数と解釈して良いのでしょうか?
あと各命令は
eaxを1とおく
<L1>
8と比較してeaxが以上ならば
<L2>へ飛ぶ
eaxが小さければ
<L1>を実行する
<L2>
というかんじでしょうか
jgは「以上」じゃなくて「より大きい」だよ。
> eaxというのは変数と解釈して良いのでしょうか? おーい。 だいたい、「アセンブラで書け」というなら、プロセッサ書けよ。
251 :
デフォルトの名無しさん :2006/07/02(日) 13:14:22
H8/3664 です
>>247 × XOR GR7,GR7
○ LAD GR7,1
だな。
>>251 組み込みCPU関係は電気・電子板で聞いたほうがいいかも。
254 :
デフォルトの名無しさん :2006/07/02(日) 14:15:00
ありがとうございました
なんでもいいからアセンブリ書きたい気分だったんだろ
CPUの指定がない場合は回答側が好きなCPUを選べます。
258 :
デフォルトの名無しさん :2006/07/03(月) 22:49:18
NASM MASM TASM どれを使ってますか
GAS 一択。
TASM。
261 :
デフォルトの名無しさん :2006/07/03(月) 22:56:42
GASでCOMを作成できますか
NASM MASM LASM GAS
263 :
デフォルトの名無しさん :2006/07/04(火) 00:19:44
YASM
265 :
デフォルトの名無しさん :2006/07/04(火) 03:16:08
NASMを使っているけど、コンパイルするまでの手間がだるい。 中間ファイル作成→ALinkでコンパイル この手間を無くしたい。 MASMって使用者が多いと思うけど、上記項目を一括して出来るの? 出来るなら乗り換えようかな。
近頃の若いもんはmakeもしらんのか
統合環境に組み入れられるだろ。 つーか make でいいよな?
DOSの頃はMASMやTASMを愛用してたけど、 Win環境に移ってからこっちインラインアセンブラしか書かなくなったなぁ。
makeはいちいちMakefileを書くのが面倒だろう なのでbat ・・・フルアセンブリ・1ファイル完結の話だよな? そうじゃないなら俺もMakefile書くが
アセでそんなにでかいプロジェクトなんてやらないし どうせ全ビルドでも一瞬で終わるんだ 数行書くごとに全ビルドでもまったく苦にならんw
nasm.exe(-f win32)で作成したobjはld.exeでもリンクできるなぁ‥‥ めどいならgccでリンク。 それはそうと、nasmのセクション宣言で共有属性をつけることは出来ない? とりあえずFMOで共有メモリを実現している。 gasなら .section .sdata,"rws" って書けば共有属性が付くけど。
SHのプロジェクト預かったのだがコンパイラ先生が生成したアセンがまったくわからんのです。シミュレータぶんまわしてもそこがわからんorz タヂケkt SuperH RISC engine C/C++ Compiler (V.8.00.05) EX). Address ML Assembler 00007E66 D23D MOV.L @(H'00F4:8,PC),R2 以下考察 Inst Dest Displacement b1101 0010 0011 1101 h d 2 3 d 構文のDisplacemnetは下位2bit分(1/4としている)を省略し記述になっているようだ Destinationは簡単にR2を2としているだけ MOV.L @(disp,PC),Rnの解説(仕様書抜粋) ディスプレースメントは8bitまで(H'1-FF) LONG WORD 拡張×4 最大:b1111111100:0x1020 WORD 拡張×2 最大:b0111111110:0x 510 としている よってDisplacementはH'03D0 PCは下位2bitをマスクする H'00007E66 & H'FFFFFFFC よってH'7E64 R2 = PC + Displacement = H'8234となる? しかし実際は シムではR2 = H'00003774 ドボヂテ(TロT)
>>273 Displacementは、普通±を考慮すると思うのだが。
8bitのDisplacementだと、bit7が1だと「−」になるとか…。
SHは触ったことが無いので間違っていたらゴメン。
@は即値じゃなくて、間接アドレッシングじゃないのか?
考察ってのはどういうことなの?ちゃんとマニュアルに命令形式が載ってるでしょ。
>b1111111100:0x1020
>b0111111110:0x 510
ってのもおかしいし。
R2=Read_Long( (0x00007E66 & 0xFFFFFFFC) + (0x3D<<2) ) = Read_Long( 0x7E64+0xF4 ) = Read_Long(0x7F58)
アドレス0x7F58にあるLong値がR2に入る。
ttp://japan.renesas.com/ から「SuperH RISC engine ファミリ」>「ドキュメント」で
日本語のソフトウェアマニュアルにたどり着けるから、それ読むといいよ。
誰もドキュンの意見は聞いてません 帰れ
278 :
デフォルトの名無しさん :2006/07/06(木) 11:37:38
add, sub, and, or, lw, sw, beq, bne, j, addi, andi, ori, sll, srl, sra これだけの命令で16or32ビット同士の数字の掛け算のプログラムを作れますか?
279 :
278 :2006/07/06(木) 11:59:57
/* multiplication.c: Unsigned 16-bit x 16-bit */ main(){ int x = 0x0000c9ae; int y = 0x0000f6e5; int z = mul(x, y); printf("%08x * %08x = %08x\n", x, y, z); } int mul(int x, int y){ int a, b, c; int i; // counter a = x; b = y; c = 0; // production for(i = 0; i < 16; i++){ // for 16 bits if((b & 1) == 1){ // LSB of b is 1 c += a; // c = c + a } a = a << 1; // shift a 1-bit left b = b >> 1; // shift b 1-bit right } return(c); // return production } ちなみにC言語で書くとこうなるらしいです
ふと思ったが、何でもできる最小限の命令セットってどのくらいだろう。 メモリのリードライト、条件ジャンプ、あと加算? そういやBrainFuckが何でもできるんだったな。
チューリングマシンとか、RAM とかの話になると思うけど、 多分 定数 1 加算 0 判定 間接参照 程度で大丈夫じゃないかな?
分岐はいるだろう
PCに加算できれば分岐は要らない
レジスタから指定したアドレスの内容を減算し、 結果をレジスタとアドレスにストアする。 これでどんなプログラムでも書けるらしい。 実用的にはPCやレジスタにもアドレスを付け、 1番地と2番地に書くと3番地に加算結果、4番地に減算結果、etc というハードにすると、MOVE命令だけでOK 1命令CPUのすごいところは、命令デコーダが不要なことだ!
>>284 その分コーディングで効率を上げないと無駄が増える
>>278 シフト命令の他に回転命令が無いと面倒臭くなるな。
出来る出来ないは別にして最低限無いと人間が記述する時に不便or不都合が生じる、 という最低限な命令セットの話で。
RISC系CPUの初期モデルの命令セットでも見れば? まあ、x86とかでもアセンブラレベルでの命令の種類はそう多くはないんだが。
俺なら真っ先にHALTとNOPとブレークポイント例外を入れるね。
290 :
デフォルトの名無しさん :2006/07/06(木) 19:52:24
>>290 HALTが無いとチューリングマシンとして成り立たないのでは?
もろもろどうもです
>>273 LONG WORD 拡張×4 最大:b1111111100:1020
WORD 拡張×2 最大:b0111111110: 510
正しくは上記10進です。うっかりしてました。
マニュアル確認しました。
MOV.L @(H'00F4:8,PC),R2 PC:0x00007E66
R2=Read_Long( (0x00007E66 & 0xFFFFFFFC) + (0xF4<<2) ) = Read_Long( 0x7E64+0x3D0 ) = Read_Long(0x8234)
マニュアルの形式に沿って計算したが、シミュレータではR2=0x00003774と出力している。
そのあとには"JSR @R2"として関数を呼び出している。シミュレータでの動作は問題ないので手計算が間違っている!間違いはどこなんですかね?
>>291 それが世の中HALTが無いCPUもあったりするんですよ。
>>292 ちゃんとマニュアル読んでるのか?
H'8234番地の中身確認してみれ。
295 :
291 :2006/07/06(木) 23:54:15
>>291 ええと、少し調べたところ、チューリングマシンはHALTが無くてもいいそうな。
無限ループに陥ったと確定した時点で「停止」扱いでOKらしい。
すまん。
>>294 0x8234に目的の値が確保されてるってこと?アドレスから値を持ち込むにはMOV.L @R2,Rnが必要じゃないの?
マニュアル(RJJJ09B0228-0700,Rev7.00 P6-59)には計算通りに導けるが、MOV.L @(H'00F4:8,PC),R2 PC:0x00007E66のシミュレーション結果がR2 = 0x00003774となるのかがどうにも
そーゆーもまいらにBrainF*ck
6502の命令セットはシンプルで若干不足気味に まとまった命令セットだったと思う。
アセンブラ全般といいつつx86系ばかりだね UNIXベンダのプロセッサのアセンブリプログラムは無いポ?
300ゲットしておきますか。
すごくPPCをやりたいんですけど… わかりません。
302 :
デフォルトの名無しさん :2006/07/09(日) 10:23:20
>>303 ヒマだから反応しておく。何がわからないんだ。
命令そのものか、又は命令の使い方か?
>>305 「玄箱」と「PowerPC」でぐぐればPowerPCの解説HPが見つかるかもしれない。
Macでぐぐってもアセンブラを解説したHPは出て来ない気がする。
しかし、PowerPCのアセンブラも知らないで、何を作るつもりなのか?
その辺を明確にしておかないと、上達は有り得ないと思う。
アセンブラで逝く!逝く!逝っちゃうの!
みさくら語でおk
i386にバイト反転付き整数ロード/ストア命令ってある?
ない
26時間観ながら保守。
う〜、誤爆した。
スリムでドボンとか言う奴はどこいったんだ
糞コテは呼ばんでええよ
インラインアセンブラはスレ違いかもしれないけど質問。 Xeonで動かそうと思って double func(double *sx, double *cx, double *sy, double *cy, int xe, int ye) { double sum = 0; for (int ix = 0; ix < xe; ix++) { double sx1 = sx[ix]; double cx1 = cx[ix]; for (int iy = 0; iy < ye; iy++) { double sy1 = sy[iy]; double cy1 = cy[iy]; sum += (cx1 * cy1 - sx1 * sy1) + (cx1 * sy1 + sx1 * cy1); } } return sum; } こげな関数のループ内部を asm volatile( " movsd %1, %%xmm0; movhpd %3, %%xmm0; movapd %%xmm0, %%xmm2 movsd %2, %%xmm1; movhpd %4, %%xmm1; movapd %%xmm1, %%xmm3 mulpd %%xmm1, %%xmm0; movhlps %%xmm0, %%xmm1; subsd %%xmm1, %%xmm0 mulpd %%xmm3, %%xmm2; movhlps %%xmm2, %%xmm3; addsd %%xmm3, %%xmm2 addsd %0, %%xmm0; addsd %%xmm0, %%xmm2; movsd %%xmm2, %0" : "=g" (sum) : "g" (cx[ix]), "g" (cy[iy]), "g" (sx[ix]), "g" (sy[iy]) : "%xmm0", "%xmm1", "%xmm2", "%xmm3" ); こう書いてみたんだが、もっと効率上げられないもんかな。 ループ部はiccの各種最適化に頼りたいから残しておきたいんだが。
>>317 素直に2要素ずつやったらいいんでないの。
> ループ部はiccの各種最適化に頼りたいから
とはどういうこと?
この処理なら関数全部をインラインアセンブラで
書くのが、速度も出るし手っ取り早いと思うが。
だいたい、Cなんて中身の何も無いループ回すだけでちんたら遅すぎ。 ポインタなんか使ったら余計な演算入りまくりで遅いし。まあ、最近のCPUは掛け算が早くなったから大分良くなったが。
>>317 コンパイラがサポートしてるならintrinsics関数で書く。
C言語レベルで最適化する余地があると思うが ヒント for(int iy = 0; iy < ye; iy++){ sumA+=cx1*(cy1+sy1); sumB+=sx1*(cy1-sy1); } sum+=sumA+sumB;
>>322 まだ最適化できる。
ヒント
for(int iy = 0; iy < ye; iy++){
sumA += cy1;
sumB += sy1;
}
sum += cx1 * (sumA+sumB);
sum += sx1 * (sumA-sumB);
324 :
323 :2006/07/17(月) 22:19:41
>>323 あ、自分で書いといて今気づいた。
この書き方だとループも外に括りだせるからO(n)で計算できる。
もとのコードだとO(n^2)だから圧倒的に性能が向上する。
というかアセンブラに手を出す前に論理レベルで最適化しろという典型例ですな。
まぁ、このスレで言うのは無粋だけどw
うーん惜しいな。yだけじゃなくてxも最適化できる。 for(int iy = 0; iy < ye; iy++){ sumA += cy1; sumB += sy1; } for(int ix = 0; ix < xe; ix++){ sumC += cx1; sumD += sx1; } sum = sumC * (sumA+sumB) + sumD * (sumA-sumB); ま、こっちはオーダーレベルの最適化にならないがな。
326 :
317 :2006/07/17(月) 23:01:47
ひーん、諦めかけてからレスがたくさんついてる〜
#あ、icc使用って書くの忘れてた。
そもそも、「コンパイラよりもアセンブラの方が絶対速い。ループ内部だけでもアセンブリ化しろ」と
主張する頭の固い人たちを納得させられればいいので、ループの最適化には手を出さずに済ませたいわけです。
で、「xmmレジスタは並列演算できるのだから絶対速い」というヒント(という名の指示)の元、
>317のようなコードを書いてみたわけですが。
処がこの程度のアセンブリ化ではC部分とのI/Fに時間を取られるようで効率が上がっていません。
実際元のソースをiccでコンパイルするとループをアンロールして4回分ずつ回すようです。
勿論SSE命令も使うし並列化オプションを指定すれば並列化してくれるし。
なので、このまま「保守性と開発工数を考えればコンパイラに任せたほうが無難」という報告をしてもいいのですが、
念のため(と技術的興味から)アセンブリ部分で無駄がないかを聞いてみたかったのです。
>>318 恐らく2回分ずつアンロールしたコードを書くと速そうですが、コンパイラも同じ程度のコードを出しそうです。
>>320 正直私には、gcc辺りのコードを書くのがやっと。iccに勝てるコードを書けるとは思いません。
#この場合、Cの単純な翻訳と言う意味で。
>>321 iccのマニュアルをさっと読んだ限りでは見た記憶がないのですが、調べてみます。
>>322-325 えーと、最終的なコードはもそっと複雑になるのでロジックレベルの最適化は>317で止めた次第です。
#後出しすんません。
ってことで、何かあれば引き続きお願いします。
#FPU命令とSSE命令って組み合わせるとどうなるのかなぁ。こればっかりはニモニック表にらめっこしてもわからん……
>恐らく2回分ずつアンロールしたコードを書くと速そうですが、コンパイラも同じ程度のコードを出しそうです。
インラインアセンブラの内部はコンパイラの最適化は効かない。
movsdやmovhlpsで1要素ずつ移動してるのが無駄だ。
>えーと、最終的なコードはもそっと複雑になるので
それがどんなコードか書いてくれないとレスのしようがない。
>>324 のような最適化が最も重要なのに、それを検討する前から
アセンブラの書き方を考えるのはちょっとおかしい。
>FPU命令とSSE命令って組み合わせるとどうなるのかなぁ。
それは面白いのでレスをしたいところだが、
どんな処理かわからんことには・・・。
>>327 >恐らく2回分ずつアンロールしたコードを書くと速そうですが、コンパイラも同じ程度のコードを出しそうです。
単純に、自前で書いてもコンパイラに任せても同じ程度のコードだと言っているだけだな。
アンロールしないと速度でないのは承知しているみたいだし。
>えーと、最終的なコードはもそっと複雑になるので
多少複雑になっても本筋は変わらんだろ。要はダメ出ししたいだけみたいだから。
>326はとっとと諦めてダメレポート書けばいいんでね。
>>326 >iccに勝てるコードを書けるとは思いません。
結果は出てるんじゃんw
アセンブラで速度を問題にする場合はある程度センスが要求されますので、あきらめた方が良いかとおもわれ
Technical Assemblerの掲示板、もはや機能してないねぇ‥‥ 大量のスパムURLでログが流されまくり。
331 :
デフォルトの名無しさん :2006/07/29(土) 20:09:22
一週間ぶりにあげ
332 :
デフォルトの名無しさん :2006/07/29(土) 21:02:14
差を割った数をサマリーするのにサマリーの差を割ってる馬鹿ども
クイックソートの仕方は知ってるの?
>334 それは、Cでは書けるんですが、 アセンブラになるとちょっとお手上げ状態です。 あとレジスタが8個しか使えない制限つきだったりします・・・。
レジスタが使えないのなら、メモリを使えば良いじゃない! 文句があるならベルサイユへいらっしゃい!
あとメモリなんですが、0xFFFFまで使用可能なんですが、 データが1026個はソートできる仕様との事なので あんまり深いスタックは惚れません・・・
最適化OFFにしてCで書いたのを逆アセンブラしたのを参考にするとかは?
Cでソース書いて スタックの使い方決めて レジスタを割り付けて 手動で1行ずつ変換
NASMで絶対間接far callを書きたいんだけどどう書いたらいいの?
masmで32bitだと call qword ptr mem だったかな? よく覚えてないけど。
>>340 call far [edx]
call far [0xdeadbeaf]
>>341 call fword ptr MEM
>>342 のプログラムをコンパイルして実行したら不正な処理をしたとOSに怒られました!
みなさんも気をつけてください!
0xdeadbeef なら怒られないかも?
C言語の x[n]=c1*delx という式をアセンブラに書き換えたらどうなるか必死に考えて mov eax,c1 mov ebx,delx mul ebx mov x[n],eax となるのではなかろうかと思うのですが、正しいですか。 これをVC++6.0でインラインアセンブラにしようとしたら、同じサイズのオペランドのが 必要とかでエラーでした。早くアセンブラを理解できるようになりたい。
ebxをそんな用途に使う奴を始めてみた
>346 非常に基本的なことなんだが、まず x, n, c1, delx 全ての変数の型が不明。 仮に全てunsigned longだったとして、 mov eax,c1 mul delx で十分。 最後に x[n] という表記はナイ。
すっごい低レベルですが質問させてください。 「アセンブリの教科書」で勉強はじめたんだけど いきなりつまづいたの。P54のフラグレジスタの説明で mov al,7F inc al mov bl,0 sub bl,80 AX=0080 BX=0080 OV UP EI NG NZ NA PO CY ~~ ~~ 符号付き演算でAX=0080になるのはよく分かる。 (1000 0000)の1は符号ビットで 127+(-128)=-1にするため (1000 0000)は-128、(1111 1111)は-1と決められてる。 inc alで符号付き演算の桁上がりが生じたから オーバーフローフラグはOVとなる。 一方、符号無しの場合のsub bl,80では (0000 0000)-(1000 0000)=(1000 0000) つまり0-128=128の0は256扱いになってるから、 これってつまり(0000 0000)ではなしに桁上がりで (1 0000 0000)として扱われたってこと? 演算結果の桁上がりが生じてCYってのはそーいうこと? 一方が符号付きで他方が符号無しと判断されるのはなぜ?
CYの下線~~ずれた…
>>350 一般的に減算のあとのキャリーフラグは、ボローフラグの意味となる。
つまり、繰り上がりが生じたのではなく繰り下がりが生じたと言う意味。
>>351 あっ、なるほど。そのほうが意味的に納得です。
mov al,7F
inc al
が符号付きとして処理され
mov bl,0
sub bl,80
が符号なしと処理された
扱いの違いの理由は何故でしょう?
もしかしてalを使うと符号付きの演算扱いになるとか、でしょうか?
レジスタalとbを変えて試しても符号付、符号なしの結果の違いはないから これはincとsubの違いと見当をつけて先へ進むことにします。
あー、フォローするの忘れてた。 フラグリファレンスによると、x86系CPUではinc/decではCFは操作されない。 これは、8bitCPU時代からの伝統でキャリーをレジスタ(orメモリ)間で伝播させる用途で便利。 #最下位バイト同士をaddして、インデックスに使用するレジスタをインクリメントして2番目をadcして…… 尚、例えば68000の場合は対象がデータレジスタならフラグが影響を受けてアドレスレジスタでは影響を受けない。 この様に、フラグの振る舞いはCPUによって違うので、 実験から推測するのではなくリファレンスで調べておくことをお勧めする。
>リファレンスで調べておくことをお勧めする。 了解です。ありがとう御座いました。
356 :
デフォルトの名無しさん :2006/08/14(月) 23:13:45
Ollydbgってなんで公式サイトのファイルぶっこわれてるの?
360 :
デフォルトの名無しさん :2006/08/17(木) 12:41:45
初歩的な質問なんですが mov WORD [100] 1 ってかくと ---------- 00000001 100番地 ---------- 00000000 101番地 ---------- ってメモリに書かれると思うのですが mov DWORD [100] 1 ってかくと ---------- 00000001 100番地 ---------- 00000000 101番地 ---------- 00000000 102番地 ---------- 00000000 103番地 ---------- の認識でいいでしょうか?
CPUによって違う。 リトルエンディアンのCPU(インテルx86等)ならその認識でいいと思う。 あとアセンブラによって記法が異なるので、今度質問するときはCPUと 使用アセンブラを書いた方がいいかも。(その記法は初めて見た。)
mov DWORD PTR [100],. 1 か
つーかレジスタ経由しないで転送できるん?
たしかにx86じゃ無理だな。。。
何このレベルの低いコテ
あれ、x86でmov mem,immて出来なかったっけ?
メモリ同士は不可だが、即値はできるだろ…
どのみちレジスタファイル上に展開してからストアするので団子もある意味正解。
純CISC時代しか知らないのでそんな話されても理解できません。
ハードワイヤードロジック・・・ (;´Д`)ハァハァ
エロいな。。。
372 :
デフォルトの名無しさん :2006/08/19(土) 09:30:16
LINUXでMS-DOSのdebugみたいに 凡用レジスタ(ax,bx,cx...等)が表示するような ソフトってありますか?
>>372 「ぼんよう」って何?
レジスタが何を表示するの?
デバッグツールならgdbがあるけど。
#勿論汎用(はんよう)レジスタの値を表示することもできる。
凡用レジスタ … 浮動小数点やSIMD演算など特別な機能はないが特に使い勝手が悪い訳でもない凡庸なレジスタ
忘れられがちなreg15はeax/ax/alと姿を変える汎用レジスタより確かに凡庸かも知れん。
376 :
デフォルトの名無しさん :2006/08/19(土) 12:49:54
>>373 おまえは誤字に反応しすぎだ。この変態や労が
(←なぜか変換できない)系の遊びにもいちいち突っ込んで回ってるんだろうな
378 :
373 :2006/08/19(土) 13:33:39
>>377 いや、それらは99%放置。
いいじゃん、ちゃんと回答もしているんだから。
379 :
デフォルトの名無しさん :2006/08/19(土) 14:24:16
リトルエンディアン しばしばビッグエンディアンより優れているとされる ビッグエンディアン しばしばリトルエンディアンより優れているとされる
380 :
デフォルトの名無しさん :2006/08/19(土) 14:27:54
小手先でなく真の実力が身につく本を紹介したまえ。 今時じゃない奴な。
つ『創るJava』
>>380 つ「IA-32 Intel(R) Architecture Optimization Reference Manual」
画像処理屋的には「アセンブラ画像処理プログラミング」あたりですかい あとは、先輩にとられて未だに返ってこないCQ出版社の2000円くらいの奴とか。 アレはイイ本だと思った。
アレ(x86アセンブラ入門)はいいよな。内容的には広く浅くだけど 自分でそれなりに調べたことのある人ならベストチョイス。安いし。
>>376 >>373 じゃないが,「凡用」は「はんよう」を変換しても絶対に出てこないので,
誤字以前の問題だと思うが.
>373 gdb使いにくいんですが 他に無いですか? OllyDbgきぼんぬ
OllyDbgで汎用レジスタからマルチメディアレジスタまで見れるんじゃなかったっけ? ただ、SSE2以降の対応がされてなかったような。 Visual Studioのデバッガは結構強力だよ。
使ったことはないが、idbだっけ? インテルのデバッガはどうなんだろう。
389 :
デフォルトの名無しさん :2006/08/20(日) 11:44:44
団子ってアセンブリ言語はどれくらいできるの?
基本的にMM/XMMレジスタ周り。 SSE4がマイブームなのだがまだCore2Duoマシンが手元にないから困る。
>>390 Intel XeonのWoodcrestはどうよ?
30万円台からマシンが手に入るぜ
今の預金じゃ確実にローン計画だな
IntelのチューニングコンテストでWoodcrestを使わせてくれるよ。 #って、今言っても無意味か。
395 :
デフォルトの名無しさん :2006/08/20(日) 14:51:32
画像系
397 :
デフォルトの名無しさん :2006/08/20(日) 15:40:09
コテと遊ぶのはマ板でやってくれよ うざい
399 :
デフォルトの名無しさん :2006/08/20(日) 16:30:07
主にBrainF*ck
woodcrestで簡単な速度調査くらいできるけどなんかリクある?
90 eb fd の速度調査求む
整数演算でpand/pandn/por/pxorをandps/andnps/orps/xorpsに置き換えた場合のペナルティ って具体的に何クロックくらいなのか、とか。
速度調査用Cソース求む。つーか、90 eb fdだけインラインアセンブラで並べて動かすの? #一体何のニモニックなんだろう。
たぶん LABEL: nop jmp LABEL
406 :
デフォルトの名無しさん :2006/08/24(木) 07:04:12
MessageBoxA出すもので1500バイトより小さいEXE作る方法あるかい?
あるお( ^ω^)
408 :
デフォルトの名無しさん :2006/08/24(木) 07:45:56
MASMでできるかな( ^ω^)
>>406 セクション一個にすれば1024バイトにできると思うよ。
.textや.data兼ねるインポートセクション作ればいい。
それより小さいのは無理ぽ。
410 :
デフォルトの名無しさん :2006/08/24(木) 08:12:09
1024とかならバイナリエディタでないと無理かな? PEが分かれば簡単かな? MZの次のバイトは何なんですか?
で、答えたら、次のバイトは何ですかとなるわけだな!
00400000 4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 MZP......��.. 00400010 B8 00 00 00 00 00 00 00 40 00 1A 00 00 00 00 00 ク.......@...... 00400020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00400030 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 ............P... 00400040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 2E 24 コ.エ.ヘ!クLヘ!.$ 超適当
とりあえずVC++でもリンカオプションいじれば1024バイトまでは達成できることを確認。
/NODEFAULTLIBと/ENTRYと/MERGEと/OPT:WIN98で512バイトは可能
ファイルのアラインメントサイズって512以下にできるんだっけ?
416 :
デフォルトの名無しさん :2006/08/24(木) 13:56:04
_____ _ / \ | |/ _ノ ヽ、_ \ ・・・もしもしお母さん、僕だお、僕・・・そう、ヨシオだお・・・ | | o゚⌒ ⌒゚o \ ・・・事故起こしちゃって・・・相手を怪我させちゃったお・・・ | | (__人__) | | |/ _ノ ヽ、_ \ ・・・お金がいっぱい必要だけどお金持ってないお・・・ | | o゚⌒ ⌒゚o \ ・・・うん・・・うん・・・今から言う口座にすぐ振り込んで欲しいお・・・ | | (__人__) | | |/ _ノ ヽ、_ \ ・・・お母さん・・・迷惑かけてばかりでごめんなさい・・・ | | o゚⌒ ⌒゚o \ ・・・うん・・・ありがとう・・・がんばるお・・・じゃあね・・・ | | (__人__) | プチッ… _ / \ ツーツー…| |/ _ノ ヽ、_ \ ・・・ | | o゚⌒ ⌒゚o \ | | (__人__) | |_| ` ⌒´ / § ∂ __ _ /⌒ ⌒\ | |/( ●) (●)\ | |::::::⌒(__人__)⌒::::: \ | | |r┬-| | |_| `ー'´ / § ∂ ∽
バイナリエディタで作れる最小のPEは256バイトより若干小さくできるけど 不正なexeで認識する環境もある
418 :
デフォルトの名無しさん :2006/08/24(木) 17:00:20
256バイトより若干小さいそのEXEはPEフォーマットに従ったものですか?
普通のWindowsのEXE(Notepad.exeなど)はOEではなくOMFですか?
>>412 00400000 4D 5A 50 ←これ何ですか( ^ω^)
ちなみに、4096byteより小さくしても、通常は意味がない。 というのは、ページサイズが4Kな上、 FAT32もNTFSも、普通はクラスタサイズが4K以上だから。 FAT16(FDDとか)を使うとか、ネット上での転送量を気にするとかなら わずかに意味があるかもしれないが それ以外は、ただの自己満足。
>>418 PEヘッダへのオフセットの最下位バイト。
>419 >ネット上での転送量 普通圧縮かけるから結局無意味。 てか、サイズを小さくする目的でアセンブラ使ってる人はもう居ないでしょ。 組み込み系ですら見かけない。
FDDはFAT12だった。 と、突っ込みが入る前に訂正しておこう。
288バイトでアッー! TVpQuzAAQABTU1BLU+sDAAAA/yUcAEAAHAAAAPAAAAAAAAAA4AAAABwAAAAAAADDg0GDYoFbgUkA AAAAQAAAAFBFAABMAQEAAAAAAAAAAAAAAAAA4AAPAQsBBQyAAAAAAAAAAAAAAAACAAAAAAAAAOAB AAAAAEAAEAAAABAAAAAEAAAAAAAAAAQAAAAAAAAA4AEAAGABAAAAAAAAAgAAAAAAEAAAEAAAAAAQ AAAQAAAAAAAAEAAAAAAAAAAAAAAAGAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c2Vy MzIuZGxsAAAAAAAAnQFNZXNzYWdlQm94QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAE AAAA
424 :
デフォルトの名無しさん :2006/08/25(金) 09:17:03
>>420 その素敵な日本語は飽きるほど見ました。
もーそこは分かりました( ^ω^)
>>412 それは実行可能ですか?
DOS STUBとPEヘッダの間にリンカが埋めるデータの意味が未だにわからん クリアしても動作に支障はないし
必ずRichって書いてあるよな
>>423 アッー!
前に1000バイトのテトリス(Win32アプリ)を見たな‥‥
>>427 これか?
昔は動いたけどXPSP2だと動かないっぽい・・・
TVpHZGkzMi5kbGwAQWRqdXN0V2luZG93UmVjdABDcmVhdGVXaW5kb3dFeEEAU2V0V2luZG93TG9u
Z0EAQAAAAFBFAABMAQEAuzQRQACJ2DHJ6xmQaAAPAQsBU3RyZXRjaERJQml0cwBIAAAAsWyNPAuQ
6wwAAEAAABAAAAACAACxF6uDxyjrEAQAAAAAAAAAABAAAYQDAACrkOsCAgDrEAAAEAAAEAAAAAAQ
AAAQAADi0OskAgAAAAAAAAAAAAAAXBEAADwAAAAAAAABABAAAIQBAAAAAgAAagBoAADIEI1zUOsE
4AAA4LEM86vGRgh4xkYM5Fb/UwhqAGgAAEAAagBqAItGDCtGBFCLRggrBlBqIGogaAAAyBBqAGgU
A0AAagD/Uwxo1wFAAGr8UFD/UxiJQ1T/UxCNs+wEAABqAGoAagBW/1MchcB0Blb/UyDr7MONkywB
AAAxwLDYMe2xC40sCIssqoXtdALi9IXJdROJxY08qo130LEM86WD7Qx98evZg+gMfdSNU2CLAkCD
+AZ+AjHAiQLHQ2Tt////iwqLRIvkiUNoU1ZXg8NQjXMYMcAxybEEi1MUD74+RgH6jZST3AAAAAsC
i3sQi3y7lDE64uNfXlvDYLs0EUAAi3QkKIP+AnUFagD/UyQx/4P+D3QVgf4AAQAAdQaLfCQs6wdh
/yVIEUAAaKcBQAD/c2iNc2SLLv9UJASNU1yLi/wEAACJyCsCg+h/fgaJCjH/6z2D/yZ1JWCLS2CF
yXQcjXtosQQPvgdQmTHbswn3+2vYkVhrwAwp2Kri6WGD/yV1Av8Og/8ndQL/BoP/KHUDgwYM/1Qk
BIXAdBr/VCQEiWtkiwQkiUNo/1QkBIX/dQXowP7//4PECGggAMwAagBoAANAAI2DLAEAAFBqE2oK
agFqAWjkAAAAanhqAGoA/3NU/xNhwhAARGVmV2luZG93UHJvY0EAR2V0TWVzc2FnZUEARGlzcGF0
Y2hNZXNzYWdlQQBQb3N0UXVpdE1lc3NhZ2UAKAAAAAwAAADs////AQAgAAMAAABFRElUAAEMDQAB
Cwz/AAEN/wAMDf8AAf4A/wELAAH/DFgAAAAAAAAACgAAABsAAAArAAAAwgIAAF4DAADRAgAA3QIA
AO4CAAAAAAAAR2V0REMAAAACAAAANBEAAFVzZXIzMi5kbGwAAHADAAA8EQAA
429 :
デフォルトの名無しさん :2006/08/25(金) 17:07:20
>>409 セクションとはassumeのことですか?
csとdsを同じにしたらEXEではなくなるんじゃないですか( ^ω^)
やっとできたー たぶんPEの最小サイズ? TVoAAFBFAABMAQEATWVzc2FnZUJveEEAqAAPAQsBdXNlcjMyLmRsbAAxwLkpAAAAUGjEAEAA6yYA AEAABAAAAAQAAAAKAAAAAAAAAAQAAAAAAAAA6QAAAMQAAADMzOtcAgAAAAAAEAAAAAEAAAAQAAAA AQAAAAAAAgAAAAAAAAAAAAAAqAAAABQAAACBQIFpgUCDqV+DqQqBvIHcgsLfgVvfKYLCgfQARAAA AAAAAAAAAAAAHgAAAEQAAABojABAAFDrHDIzM2J5dGUA6QAAAAAAAADpAAAAAAAAAAAAAAD/FUQA QADDzCA=
233が最小だと思ってたけどもう少し小さくできそうだ・・・
>>429 Win32のEXEはCS=DSが普通だし、
DOSのEXEもスモールモデルはCS=DS。
COMでもCS≠DSにすることは不可能ではないけどちと話がずれるな。
スモールモデルはCS≠DSだったと記憶してるが・・・
CS=DSはCOMだろ。
CS=DSはタイニーだな。
MASMでスタックサイズを指定するにはどうしたらよいですか? _MessageBoxA@16だけだからスタックは16バイトでよいですか?
nasmとmasm32 があるけど使い方がわかりません。 hello worldと表示させる.asmはあるのですが このあとnasmやmasm32 を使って helloworld を表示する方法をおしえていただけませんか?
>>434 Win32だとCS=0x1b、DS=0x23だったような。ollydbgで確認。
でも象さんの方がもっと好きです
にら
れば
かゆ…
うまい、うますぎる。
風が語りかけます。
アッー!
十万行アセンブラ
おえーおえー
452 :
デフォルトの名無しさん :2006/08/31(木) 19:25:35
eax:edx の内容を mm0 に転送するにはどう書いたらいいんでしょうか?
movd mm0, eax movd mm1, edx punpckldq mm0, mm1
454 :
デフォルトの名無しさん :2006/09/01(金) 08:32:02
VC6 で アセンブラの pmovmskb 命令を使用するにはどうしたらいいんでしょうか?
455 :
デフォルトの名無しさん :2006/09/01(金) 08:47:59
つ[VC2005 Express]
2500バイト未満のMessageBoxのMZってどうやって作るんですか?
>>456 アセンブラでMessageBox呼び出しだけでどうやったら2499バイトを超える事ができるのかが逆に疑問だ
表示するメッセージが2500バイト以上なんだろw
それだ!
460 :
デフォルトの名無しさん :2006/09/08(金) 11:39:40
gas/i386で pushl %ds こういう命令が書かれてたとき、 スタックポインタに加算される値は2?それとも4?
4に決まってるだあ
さんくすこ
『独習アセンブラ』で、今日からやりだした超初心者なんですけど、 x86系Linuxのnasmで ”1”の文字 一文字表示しようと思うのですが、 $ nasm -f elf hajime.asm $ ld -s -o hajime hajime.o でアセンブルもリンクも問題なくできるのですけど、 $ ./hajime [Enter] $ セグメンテーション違反です って表示され叱られてしまいました! どなたかご教示願いないでしょうか。 ソースは以下のようになってます。nasmは、 nasm-0.98.39を使ってます。 global _start _start: mov eax, 31h ; 文字 "1" push eax ; スタックにバッファを設定 mov eax, 4 ; 出力(sys_wrigte) mov ebx, 1 ; ファイルハンドル(1=標準出力) mov edx, 1 ; 1文字出力することを指定 mov ecx, esp ; 書き込むバッファ int 0x80 ; 出力する pop eax
プログラムの終端でのエラーではないでしょうか。 最後にプログラム終了の命令を追加してみてください。 mov eax, 1 ; sys_exit mov ebx, 0 ; 終了ステータスコード int 0x80
465 :
デフォルトの名無しさん :2006/09/20(水) 21:10:58
>>464 早速のご教示、ありがとうございます。
書かれている命令を追加してみましたが、結果は変わりませんでした。
『独習アセンブラ』に書かれている、次のサンプル「Hallo assembler」の方はキチンと表示
されるのに一番最初のサンプルコードがトラブってしまって、まいってます!
466 :
( ^ω^)飛来ブーン :2006/09/20(水) 21:23:16
あげ
linux nasm>Google で最初に出るサイトのasm05.htmlに似たようなのがある push eaxの前にpusha、pop eaxの後にpopaを入れてみてはどう?
>>467 pusha、pop を入れてみましたが、結果は、まったく変わりません。
コードを書き足しているのにまったく変わらないというのも
何か、おもしろいですね。
pusha、popa は不要。 global _start _start: mov eax, 31h ; 文字 "1" push eax ; スタックにバッファを設定 mov eax, 4 ; 出力(sys_wrigte) mov ebx, 1 ; ファイルハンドル(1=標準出力) mov edx, 1 ; 1文字出力することを指定 mov ecx, esp ; 書き込むバッファ int 0x80 ; 出力する pop eax mov eax, 1 ; sys_exit mov ebx, 0 ; 終了ステータスコード int 0x80 で動作したよ。nasm-0.98 と nasm-0.98.38 で確認。
470 :
463 :2006/09/20(水) 22:30:17
>>469 家では、やはり「 セグメンテーション違反です」が出てしまいます orz
先ほども書きましたが、次のサンプルコードの「Hello assembler」は順調に
アセンブルもリンクも 実行もウマクいくんですけど …
nasm-0.98.38 をgetして、コンパイルし直してみます。
みなさん、Thanks
int 0x80 を int 0x08 とタイプミスしてました、な〜んてことはないよね? いや、恥ずかしながら俺がそうだった。 見つけたときは全身脱力したよ。俺の1週間は何だったんだってね。
> 全身脱力 全身脱毛に見えた
473 :
463 :2006/09/20(水) 23:28:07
>>471 私もint 0x08をサンプルの「Hello assembler」の方でやってしまいました。
これやると、「 セグメンテーション違反です」がモロ出るんですよね。
今、 nasm-0.98.38 をgetしてきましたが、今度は、nasmのコンパイルが通らない!
泥沼に嵌まりこんでしまいました。 orz
$ apt-get install nasm
>>473 nasmのコンパイルが通らないとは
nasm自体のソースコードがコンパイルできないということですか?
でしたら
>>474 ,475などで解決できると思うのですが。
それともnasmのインストールは完了していて、サンプルコードがアセンブルできない
ということですか?
477 :
463 :2006/09/21(木) 06:40:38
>>476 おはようございます。
私の場合は、nasmをソースからコンパイルしてinstallしています。
nasm-0.98.39.tar.bz2を展開してコンパイルして使いだしていたのですが、
nasm-0.98.38を使ってる人
>>469 でのアセンブリのソースコードが問題なく
アセンブルが通るということなのでnasm-0.98.38.tar.bz2をゲットしてコンパイル
したという訳なんです。
478 :
463 :2006/09/21(木) 12:37:21
お騒がせいたしました。自己解決しました。 ソース↓ section .data ; セグメンテーション違反回避 global _start _start: mov eax, 31h ; 文字 "1" push eax ; スタックにバッファを設定 mov eax, 4 ; 出力(sys_wrigte) mov ebx, 1 ; ファイルハンドル(1=標準出力) mov edx, 1 ; 1文字出力することを指定 mov ecx, esp ; 書き込むバッフ int 0x80 ; システムコール,出力する mov eax, 0ah ; 0ah push eax ; mov eax, 4 ; は mov ebx, 1 ; 改 mov edx, 1 ; 行 mov ecx, esp ; 用 int 0x80 ; システムコール,改行する pop eax ; eaxの回収 mov eax, 1 ; sys_exit mov ebx, 0 ; 終了ステータスコード int 0x80 ; システムコール,終了する
それは駄目。 .dataセクションにはグローバル変数等を配置することになっているので、 そこにコードを記述することはできない。 コードを配置するのは.textセクション。 スタックにバッファを置くために2回pushしているが、1回しかpopしていない。 それから改行を出力するために苦労した痕が見受けられるが、次のように すればプログラムを短縮できる。 mov eax, 0x0a31 push eax mov eax, 4 mov ebx, 1 mov edx, 2 mov ecx, esp int 0x80 pop eax
480 :
デフォルトの名無しさん :2006/09/22(金) 02:03:54
フロッピーからデータの読みだしについてです。 シリンダ0番、セクタ2番のプログラムを0x8000に読みだして実行 したいのです。 最後のJMPで*を付けると実行出来ないのですが、理由を教えて下さい。 MOVW $0x800, %AX MOVW %AX, %ES MOVB $0x00, %CH MOVB $0x02, %CL MOVB $0x00, %DH MOVB $0x00, %DL MOVB $0x02, %AH MOVB $0x01, %AL INT $0x13 JMP *0x8000
環境や前提条件をまず示してくれ。話はそれから。 おそらくブート時のロード処理だと見当はつくが。 或いは逆アセしてみて意図したコード(0x8000への絶対ジャンプ)に きちんと変換されたかを確認するとか。
*0x8000だと、0x8000番地にある16ビットの値をアドレスとして処理する。 0x8000番地に飛ばすならjmp $0x8000が正解だと思う‥‥
483 :
482 :2006/09/22(金) 07:52:23
>>480 のコードをちょっと修正。文法からGASを使っていると仮定。
バッファのアドレスを指定するときはBXレジスタも設定しないと駄目かと。
セグメント指定しているなら、セグメント間ジャンプで飛ばした方が確実。
MOVW $0x800, %AX
MOVW %AX, %ES
MOVW $0, %BX ; ES:BX = 0x800:0x0
MOVB $0x00, %CH
MOVB $0x02, %CL
MOVB $0x00, %DH
MOVB $0x00, %DL
MOVB $0x02, %AH
MOVB $0x01, %AL
INT $0x13
LJMP $0x800,$0
>>482 「*」を付けた際の動作は、御指摘の通りでした。
解決できました。
ありがとうございました。
>>479 ご教示、ありがとうございます。とても助かりました。
今度は、こんな問題で引っかかっています。
eHllo, World としたいのですけど Helelo, Worldとなってしまいます!
section .data; データセクションの定義
messagedb'Hello, World', 0Ah
lengthequ$ -message; 文字の長さ
section .text
global _start
_start:
movedx, length; 文字列の長
movecx, [message] ; 以下の3行でmsgとmsg+1の内容を入れ換える
xchgecx, [message+1];
mov[message], ecx;
movecx, message; 出力する文字の指定
movebx, 1; ファイルハンドル(1=標準出力)
moveax, 4; 出力(sys_wrigte)
int0x80; システムコール,出力する
moveax, 1; sys_exit
movebx, 0; 終了ステータスコード
int0x80; システムコール,終了する
487 :
デフォルトの名無しさん :2006/09/22(金) 21:03:09
GNU asについて質問です。 lss 20+4(%esp), %esp と、ESPとSSに1命令で値をつめてるコードがあったのですが、 この20+4()ってのはどういう意味なんでしょうか?
488 :
デフォルトの名無しさん :2006/09/22(金) 21:11:12
MMX の質問です pand mm0, mm1 を実行し結果がゼロになっても、ゼロフラグが立たないようです。 ゼロかどうかをチェックするにはどうしたらいいんでしょうか?
スペースが無視されたみたいなので、もう一回送ります。 section .data ; データセクションの定義 message db ' Hello, World ', 0Ah length equ $ -message ; 文字の長さ section .text global _start _start: mov edx, length ; 文字列の長 mov ecx, [message] ; 以下の3行でmsgとmsg+1の内容を入れ換える xchg ecx, [message+1] ; mov [message], ecx ; mov ecx, message ; 出力する文字の指定 mov ebx, 1 ; ファイルハンドル(1=標準出力) mov eax, 4 ; 出力(sys_wrigte) int 0x80 ; システムコール,出力する mov eax, 1 ; sys_exit mov ebx, 0 ; 終了ステータスコード int 0x80 ; システムコール,終了する eHllo, World としたいのですけど Helelo, World と表示されます!
490 :
487 :2006/09/22(金) 22:01:16
コンパイルされたものをobjdumpでのぞいたら、 lss 0x18(%esp),%esp こういう風に変換されてました。 よく調べもせずに質問してすみませんでした。
>>489 mov cl, [message+2]
xchg cl, [message+3]
mov [message+2], cl
なんか 春だな・・・
>>491 ありがとうございます。
eHllo, Worldとなりました。アセンブリって意外とレジスタの動きが分かりやすいん
ですね。
本や、ネットで検索しながらやってるんですけど、Linuxのnasmで
初心者に分かりやすい解説は、殆んどないんで困ってました。
どっかにnasm本家のマニュアルの日本語訳があったはずだが。 あれで十分よ
ってかmasmはMS公認で無料になったか。 イイジダイダナー
>>488 MMX演算はフラグレジスタを更新しない。
いちど汎用レジスタに転送してから比較する必要がある。
0かどうかだけを判定するだけなら、たとえば
packssdw mm0, mm0
movd eax mm0
test eax, eax
Z80ですけど DAAってハーフキャリーは0になるの?それとも変化するの?どっち?
変化する
Hello, Worldを10回表示して改行したいんですけど、 下記のソースを弄ってみましたが、よく分からないので教えて頂けないでしょうか。 section .data msg db 'Hello, World', 0ah len equ $ -msg section .text global _start _start: mov eax, 4 ; 出力 mov ebx, 1 ;(1=標準出力) mov ecx, msg ; mov edx, len ; 文字列出力 int 0x80 ; 出力 doit: dec ecx ; ecxをデクリメントする jecxz endquit ; ecxがゼロならジャンプ jmp doit ; doitへジャンプ endquit: mov eax, 1 ;(sys_exit) mov ebx, 0 ; 終了ステータスコード int 0x80 ; 終了
>>499 それじゃ一回だけ表示された後、しらばく後かすぐに終了するだろ。
int 0x80 ; 出力
doit:
dec ecx ; ecxをデクリメントする
jecxz endquit ; ecxがゼロならジャンプ
jmp doit ; doitへジャンプ
このdoit以下何もやっていないと同じだぜ?
なぜecxをデクリメントして0になったら終了になるん?何目的だ?
たぶんint0x80は文字列表示機能だと仮定するなら、
ediにでも0xaを入れておいて、
dec edi
jnz _start ← ゼロじゃなけりゃジャンプっての
にすればええ。
501 :
499 :2006/09/26(火) 23:28:28
>>500 > それじゃ一回だけ表示された後、しらばく後かすぐに終了するだろ。
その通りなんです。弄っているうちに わけわからなくなってしまい、
1回だけ表示するプログラムに戻したものを書き込みました。
>499 の投稿は下記のDOSのプログラムをLinux上で jecxz を使って同じような動作を
再現できないか試行錯誤の最中だったんです。
; DOS プログラム
bits 16
org 0x100
mov ah, 9 ; 文字列出力指定
mov dx, msg ;出力する文字列
mov cx, 10 ; cxレジスタの値を10にする
doit: int 21h
dec cx ; cxを1だけ減らす
jcxz endquit ; cxがゼロならendquitへ
jmp doit ; doitへジャンプ
endquit:
mov ah, 4ch
mov al,0
int 21h
msg db "Hello, World", 0dh, 0ah,"$"
システムコール呼ぶときecxレジスタ使ってるだろ? そんくらい気ずかん?(´・ω・`)
>>501 答えは分かるがあえて書かない。自分で考える事が上達には大事だしな。
先ほど書いたようにdiあるいはsiをcxの代わりにカウンタとし、
dec di
jnz また文字列出力する場所
ってな感じにするのが良い。
あとint21hの後のレジスタの値は保障できないと考えた方が一応はいいと思うから、
doitの位置を変えた方が確実だと思う。
504 :
デフォルトの名無しさん :2006/09/27(水) 09:36:16
x86CPUで、32ビットの値を3倍するとき、 x = x * 3; と、 x = (x<<1) + x; はどちらが高速なんですか?
>>504 スループットは上の方がいいが、
レイテンシは下の方がいい。
CPUによるけど。
どちらが速いかは周りの処理にもよる。
でも、x86ならこれが一番速いよ。
lea x,[x*2+x]
ていうか、いまどきのコンパイラは 3倍するのはleaに最適化してくれますよ。
Pen4だとこれでも速かったりwww mov edx, eax add eax, eax add eax, edx
>>507 シフトが add の 8 倍遅い変態 CPU を持ち出すのは反則だと思いまつ。
ペン4のALUは糞すぎるなw
依存関係を高いクロックによって解決するという手法は全てが間違いだった訳じゃないけど クロックを重視したデータキャッシュが小さすぎたりパイプラインが長すぎたり 熱すぎたりで、全体としてマイナス要素が大きかったのが敗因ですな。
511 :
デフォルトの名無しさん :2006/09/30(土) 18:11:57
スタックを使って A B と表示させようと思うのですけど、ウマクいきません!? ご教示 お願いできないでしょうか。 section .text global _start _start: movdl, 0x41 ; "A" push dx call putchar pop dx mov dl, 0x42 ; "B" push dx call putchar pop dx mov eax, 1 ; sys_exit mov ebx, 0 ; 終了ステータスコード int 0x80 ; システムコール,終了する putchar: ; スタックの文字を出力する サブルーチン push esp mov ebp, esp sub esp, 0x40 ; ローカルスタックスベース mov ebx, [ebp+4] ; 最初のパラメータ mov dl, bl mov eax, 4 ; sys_write mov ebx, 1 ; ファイルハンドル(1=標準出力) mov ecx, esp ; 書き込むバッファ mov edx, 2 ; 文字出力することを指定 int 0x80 ; システムコール,出力する mov esp, ebp ; sub esp,0x40を取り消す pop esp ret
32bitモードでdxレジスタなんか使うなよ・・・ あと最初のパラメタは[ebp+4]じゃなくて[ebp+8]だボケ
513 :
ボケ :2006/09/30(土) 19:15:48
>>512 早速のご教示ありがとうございます。
ご指摘のdxをedxとし[ebp+4]を[ebp+8]に直してやってみたのですけど、
結果は変わらず、何も表示されなくて ただ改行されただけでした。
Cの参考ソースはけっこうありますけど、アセンブルってほとんどないですね!
>mov ecx, esp ; 書き込むバッファ ここ間違っているのでは 既に40引いてしまっているのに・・・
lea ecx,[ebp+8]とかじゃね?
これはひでえ。釣り…なのか…?まあいいや。 putcharの先頭部分は push ebp ; espじゃねーぞ mov ebp, esp の間違い。それに伴ってretの前も pop ebp に修正。 sub esp, 0x40 では 0x40 も引く必要ない。0x4で十分。 「最初のパラメータ」コメントの次の mov dl, bl は何やってんのか意味不明。 ここは mov [ebp-4], ebx に変更。 putcharというからには出力文字数は1文字だろ。mov edx, 1 に修正。
> Cの参考ソースはけっこうありますけど、アセンブルってほとんどないですね! だったらC言語で書いてみるべし。 /* putchar2.c */ #include <unistd.h> void putchar2(int ch) { write(1,&ch,1); } int main(void) { putchar2('A'); putchar2('B'); } そしてこいつを -S スイッチつけてコンパイルしる。 $ gcc -S putchar2.c コンパイラがどんなコードを吐くか、自分のものと見比べるべし。 最適化オプションも併せて指定するといいかもな。
gccの最適化は最初は知らないほうがいいんじゃないかw
どうして?ちょっとだけでいいから教えて・・
そしてICCとか最近のVC++で最適化コンパイルしてしまって余計混乱すると。
こんなガリガリのコードじゃたいして最適化できねぇw
putchar2はwriteをコールするだけだから関数の存在が消えてしまう可能性はあるが。
>>520 高度な最適化コンパイラは凡人の考えの及ばぬような超変形型ロジックを組むことがあるから。
523 :
ボケ :2006/09/30(土) 22:59:17
>>517 釣できるほどのウデがあればいいんですけど…
貴方の仰る通り、>511の投稿には誤りがたくさんありました。
言われた通りにやったら AB と表示されました! 改行はしないみたいですけど、
改行は組めますので、後は簡単です。
Thanks
>>522 コンパイラ程度の最適化が超変形?
じゃあ人が書いたコードは読めねぇなw
いや、人間様がそれ以上にド汚い変形かますことができるのも確かだが、 きょうびのコンパイラが超変形かますのは事実だろ。 何を噛み付いてるんだ。 カルシウム足りないのか。
i *= 32; を add eax, eax; add eax, eax; add eax, eax; add eax, eax; add eax, eax; に展開するコンパイラとかな。
528 :
デフォルトの名無しさん :2006/10/01(日) 02:30:21
そんな大した事無いレベルの最適化でグダグダ言うなよ
VC++やICCの定数除算の最適化はなかなかエグかった気がするが
漏れはVC2005のたらい回し関数でたまげた。
>>527 GCCでは無数にある最適化オプション組み合わせていくら頑張ってもシフトだった。
-O0ですらシフトだったw
VC++のリリースコンパイルでもシフトだから、それが最善じゃないのか?
mov eax,dword 051eb851fh imul ecx sar edx,byte 005h mov eax,edx shr eax,byte 01fh add edx,eax; / 100 これとか実行してみるまで何やってるかわからなかった(VC6)。
>>527 いや、それ普通。
VCのそれは、シフトが異常に遅い某CPUに配慮したものと思われ。
多分だけど。
P○n4は*32でもシフトより加算の方が早いのか?w
>>534 ちょっと上くらい読めや>507-509
Pen4ではshlのレイテンシは4クロック、addは0.5クロック
依存関係チェインが深い場合は加算を繰り返した方ほうが早い
VCじゃなくて、ICCの-QxWとか-QxNとかのPen4専用オプションだったような
>>532 除算はクロック数やたらかかるから定数積算とシフトに置き換えるのは常套手段
常套手段て…そういう裏技があるのなら標準でALUにそのロジックを積んで もらった方がどれだけわかりやすいことか。 あるいは除算命令でこのシーケンスと同じμop生成するとか。 書きたいことはまだあるけどこれ以上はちょっとスレ違いになるので遠慮しよう。
いや、除算を他の演算に置き換えるロジックってすげー大変なんだが。 何で割るかによって全く違うロジックになるから。 そんなもんにトランジスタ突っ込む余裕なんかない
>>532 は
>>529 と繋がっていたのか、気づかなかった。
定数除算限定で、しかも最適化のタイミングはコンパイル時じゃないといけない
程度に複雑なアルゴリズムなのか。
随分と頓珍漢なことカキコんじまったな(恥
テキストエディッタで.asmファイルを作成してコマンドプロンプトでアセンブルしようと思ったのですがうまくいきません。 ml〜コマンドは合ってるはずなのですが。 知恵をください。 XPSP2です
>>540 それだけの情報で何かわかると思ってんのか。
せめてエラーメッセージくらい貼れよ。
'ml' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ってなります。
先生できませnorz
アセンブラはちゃんとインストールされてるのか? 質問から察するに、それすら出来ていなさそうな気がする。 WinXPのDOS窓からの操作なら、DOS窓開いたらまずこのコマンドを打ち込む。 > set Path=%Path%;(ml.exeのあるディレクトリのパス) 開くたびにこれを入力するのが面倒くさいならバッチファイルに書くなり GUIから環境変数に登録するなり何なりと。
先生無事できますた。ありがとん
割り算が理解できん。 なんであんなことになってんの?
その割り算は
>>532 のことか?
1ワードが無限のビット長だとすると、原理的には
x / 100 == (x / 100) << 32 >> 32
という当たり前の恒等式を巧みに利用する。
ここでは 2のx乗 を 2^x と表現するので、そのつもりで。
x回の左シフトは、算術的には *(2^x) を意味する。
その性質を利用すると、右辺は
=> x / 100 * (2^32) >> 32
=> x * ((2^32) / 100) >> 32
と変形できる。最適化のとき予め (2^32) / 100 を計算しておく。
この定数をnとおくと、除算の商は (x * n) >> 32 で求めることができる。
つまり定数の除算は乗算とシフトに変換できるというわけ。
実際はビット長が無限大ということはないし符号も考慮しないといけないので
これよりも少し複雑な処理になる。
精度が落ちていいなら inc ecx mov eax, dword 028f5c28h imul ecx でedxに解が得られないかな。
無符号整数除算ならね。
ん?無符号型ならimulじゃなくてmulじゃね?
このスレが適当かどうかわからないんですが。 VC++の最適化OFFで生成した以下の絶対値を求めるコード cdq xor eax,edx sub eax,edx これに対応するC/C++のコードがわかるかたいませんか?
>>552 インラインアセンブラでも使ってない限りも最適化 Off ではそのコードは
出てこないと思うんだが・・・。
abs() を呼んでれば最適化 On の時そのコードになるよ。
>>553 /Oiオプションでabsが上記の命令に展開されたのを確認しました。
最適化はOFFだと思ってたのですが、一部だけ有効になってるのかもしれません。
(バイナリとPDBファイルしかないので詳細不明)
ありがとうございました。
>>554 /Oiって思いっきり最適化オプションの一部だろ。
OiOi
RS-232C?
どっちかっつーと丸井
丸井って、クレジット詐欺って意味でしょ?
562 :
デフォルトの名無しさん :2006/10/12(木) 22:34:02
訴訟あげ!?
16ビットしか知らんが、みんな何に使ってるの? やっぱインラインかな
564 :
デフォルトの名無しさん :2006/10/13(金) 15:49:03
C言語からアセンブラ語に変換するにはどうすればいいですか?? 分かりやすくお願いします.
コンパイラにアセンブラ語で出力するようにオプションを付ける。
GCCなら-Sとか
567 :
デフォルトの名無しさん :2006/10/13(金) 15:58:20
それはMPLAB IDE上でできますか??
アセンブラ語て…新語捏造するなやorz 本当はアセンブリ言語ってんだ。俗的にアセンブラでも通用するが。
お前タン、実はマルチでつか?そんなことしたら駄目だお(AAry
まじで?!
572 :
デフォルトの名無しさん :2006/10/14(土) 16:55:38
今学校の授業中です… キーボードから3個の整数a、b、cを入力してスタックにセットし、これらの整数のうち最大整数をディスプレイに出力せよ。ただし、最大整数をセットするための変数maxもスタック上に作ること。 これが出来ないと帰らせともらえませんが、全くわかりません。どなたか出来る方いましたらよろしくお願いします。
よし!19時ぐらいまで粘れ!! その時間位になれば、わかる人がここに来るぞ、たぶん。
>>572 開発環境、動作環境を書け。
話はそれからだ。
576 :
デフォルトの名無しさん :2006/10/14(土) 19:18:17
19時を過ぎたのですがそろそろ教えてくれません?どうかお願いします。
>>576 いやだから教えようにも
・・まぁなんだ、頑張れ
しかし、キーのスキャンやら画面表示やらはHWがわからんことにはどうしようもないだろ。 まあわかったところでこんなところに書き込めるようなコード量に収まるとも思えんがw
週末なのに学校に泊まりかw
585 :
デフォルトの名無しさん :2006/10/15(日) 00:17:32
なんで教えてもらおうとしてるやつがそんなに偉そうなんだ
kawaisosu
579はまだ帰れない
>>572 void main(){
int a, b, c, max;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
if(a < b){
}
}
うわーん、要はC言語で作って、 gcc -S で、アセンブリ出力したら、 勝手にやってくれるよ。 だって、ローカル変数はスタックなんだからさ。
>>590 ローカル変数が必ずスタックに確保されるという保証はない
volatileでおk
スレ違いの話だが、 「C言語のローカル変数がスタック上に生成される」というのは そういう実装になっている処理系が多い、というだけで C言語の規格上、ローカル変数(自動記憶域期間をもつオブジェクト)は 「スタック上に確保されなければならない」とは一言も書いてない。
ほれ、糞団子、gccのソースに言及しつつ
>>593 について熱く語れよ。
「&をつけないとレジスタに置かれる可能性があるが、&をつければ必ずメモリ上に置かれる」というのもただの伝説だね。
家がなi(ry
>>594 そんなしょぼいポンコツコンパイラなんざ使わないからしらねー。
>>598 gcc-4.1.1で最適化を-O3なんかにしたら最適化が変態すぎてまともにうごかないんだぜ。
>>598 お前半年くらい前にあーだこーだいってた気がしたが。
ありゃ可変引数リストに関してだったっけ?
>>598 しょぼいポンコツとは失礼な。
某大学の実習で使用されるシステムはH/Wスタックを装備していないから
メモリ空間ぜ〜んぶヒープな環境だ。レジスタはアキュムレータ1つだけ。
で、課題でこのシステム向けに最適化されたANSI Cのサブセットコンパイラを
つくれというのがあったが、どんなに凝ったコンパイラを作れど、この場合
スタックを「使わない」のではなく「使えない」んだよ。
団子はそんな環境で四苦八苦したことがないだろうが。
おっつ失礼。「汎用」レジスタはアキュムレータ1つだけ。 レジスタは他にもあったよ。PCとか間接メモリアドレッシングで使うやつとか。
>>600 んーでもそういう環境わざわざ選ぶ理由無いよね♪
どんなマイナーCPUですか?
ちなみにJava仮想マシンなら汎用レジスタ1本のスタックマシンだよね。
それ以前の問題として、マシン語がどんなのかよくわからんわけで。
それこそ情報処理技術者でよく使われるCOMET2/CASL2かもわからんし。
Cでコンパイルしてアセンブリコード吐かせれば出せるって前提自体が
おかしいと思うわけで。
演習で使う端末ってx86とかPowerPC(ようはMac)のほうが多いと思うんだけど
>>603 ゴメ。自慢するつもりはなかった。ただこういう環境もあるということを言いたかっただけ。
>>604 あるよ。この流れの上流をよく見てみ。
>>572 で今学校の授業中ですとある。
どんな反則/時代遅れシステムを使わされるかもわからない。高機能から超低次元まで
様々な環境を考慮しなければ質問に答えることは出来ない。
そうでなくてもこの分野はどんな質問がくるか予測しづらい面もある。
肝心の質問者は何も言わず逃げやがったなw
まあ、かくいう俺も128本のレジスタと256KBのメモリ空間しかない 某プロセッサコアのシミュレータと格闘してた。 アレは気が狂いそうだ。
128本も、一体何に使うんだよorz 人智では管理できんな、この数じゃ。CellとかItaniumとか!
Sparcも結構変態チックなレジスタ管理していた気がするが。
やはりデータレジスタ8本アドレスレジスタ8本が最も美しい。
>>609 レジスタの長さは、それぞれ 1Mバイトぐらいでよろしーですか?w
奇数アドレスにアクセスすると転けるCPUなんて嫌いです。
612 :
デフォルトの名無しさん :2006/10/16(月) 00:21:15
中途半端に遅くなって動かれるくらいなら落ちてくれた方がいいけど。
614 :
デフォルトの名無しさん :2006/10/16(月) 01:29:07
すみませんがわからないので教えてください・・・ お願いします 次の命令群を実行した結果を説明せよ CLR R0 ADD #1 R0 ADD #2 R0 ADD #3 R0 ADD #4 R0 次の命令群を実行した結果を説明せよ MOV #100,R1 CLR -(R1) CLR -(R1) CLR -(R1) CLR -(R1) 次の命令群を実行した結果を説明せよ CLR @#100 解答は○○○○番地を××に、R0を△△△△にする という形でできるだけ詳しくお願いします 本当にお願いします ・・・
実行すればわかる
616 :
デフォルトの名無しさん :2006/10/16(月) 02:30:42
お願いします。。。課題なのですが明日までなんです・・・
明後日になったら答えてやる と念を押しておいても誰かが先に答えちまうんだろうな 偽善もほどほどにしとけよ?
宿題スレじゃ無いしな。
619 :
デフォルトの名無しさん :2006/10/16(月) 02:48:32
すみません・・宿題スレがないので・・・ 本当にお願いします・・教えてください
そもそもどのCPUを使っているのかなどの最低限の情報が与えられていないのではなぁ。
621 :
デフォルトの名無しさん :2006/10/16(月) 03:36:39
すみませんわかりません・・ それしか書いてないので・・・ PDP11ってやつですかね・・? オペランドとか・・ 自分も授業で少ししただけで全然わからないんです・・・ 教えてもらえないでしょうか。。。
おぉ、こんなものをこんなところで入手できるとは
いいものを手に入れた。マジサンクス
>>622
624 :
デフォルトの名無しさん :2006/10/16(月) 04:32:48
>>622 わかりました
勉強はします
そのマニュアルは全部英語でよくわかりませんが・・
でも締切りが今日なんです・・・
とりあえず答えを教えてもらえないでしょうか・・・
もう時間が・・・
お願いします
>>624 そうやって2chに張り付いてうだうだ書いている暇に、英和辞典片手にマニュアル読めよ。
課題のほうも煮詰まっているようだから
>>614 のサンプルに関連するページだけ抽出して
>>622 から抜粋してみた。この辺を重点的に読んで、あとは自分で解決してね。
(問1)
2オペランドアドレッシング(double operand addressing) … 3-2 (30)
クリア(clr)命令 … 4-6 (52)
加算(add)命令 … 4-25 (71)
(問2)
直接アドレッシング(direct addressing)と自動デクリメント(autodecrement) … 3-4 (32)
転送(mov)命令 … 4-23 (69)
(問3)
差分(間接)アドレッシング(differed (indirect) addressing) … 3-10 (38)
今君が手元で使っているであろう某系のCPUよりも随分素直で理解しやすいよ。
Cで書くならこうかな? register short int r0 = 0; r0 += 1; r0 += 2; r0 += 3; r0 += 4; register short int r1 = 100; *--r1 = 0; *--r1 = 0; *--r1 = 0; *--r1 = 0; *(short int *)100 = 0;
おまいら優しすぎ。
629 :
デフォルトの名無しさん :2006/10/16(月) 04:57:31
まってください
>>626 わざわざありがとうございます
ですがその資料ホントに読めません・・・
あと習い始めたばかりでまだ実行とかは全く習ってないししたこともないんです
書いてある問題の意味すらわからなくて、今答えの見当もつかない状態なんです・・
本当にお願いします・・
630 :
626 :2006/10/16(月) 04:58:52
おわwww間違えてるしw
問3は差分アドレッシングの問題じゃないわ。何に気をとられていたのやらorz
問3はたぶん絶対アドレッシング(absolute addressing)の問題。
関連ページは 3-12 (40)
>>627 それほぼ答えじゃんorz
ま、俺は別にいいけどね。
確か @ やら # はウニッ糞のシェルにとって特別な意味があるので
UNIックソのPDP11アセンブラは
>>622 とは違う文字使っていたような希ガス
632 :
630 :2006/10/16(月) 05:02:18
関連ページは3-12・・・じゃなくて本当は 3-13 (41) また間違えましたよ。 すぐ隣のページだけどね:-p
>>627 × register short int r1 = 100;
○ register short int *r1 = 100;
634 :
デフォルトの名無しさん :2006/10/16(月) 05:07:04
>>627 ありがとうございます
でもCは全く習ってなくて、何が書いてあるのか理解できません・・・
本当にすみません
できれば
>>614 の形式で教えていただけないでしょうか・・
手書きで説明を書いて提出するので・・・
>>630 わざわざ報告ありがとうございます
おまい、貴重なPDP11のマニュアルを拾ってきてもらって、その212頁もある
マニュアルの中から僅かな量のエッセンスを抽出してもらって、あまつさえ
重要語句に日本語を付加されてまでまだ「読めません」かよ。
読めないのではなくて 読 ん で い な い だろ。
今から
>>622 読んで理解しろ。実際ここにいる連中も1時間程度で読んで理解しているんだ。
おまいら優しすぎ
解説者が一人多役の自演でなければ、の話だが。
639 :
デフォルトの名無しさん :2006/10/16(月) 05:51:08
30分ほど読みましたがやはりわかりませんでした・・・
教科書読んでも全然わからなくて・・・
>>627 はどういうことなんですか・・?
実行結果・・?
もういやだ・・もうこんな時間・・どうにもできない・・・だれか・・
>639 残念でした。 2chに聞いたのが間違いなんだよ 何でもサポートセンターじゃない 先生のところへ行って直接手取り足取り教えて貰いな 親切に教えて、しかも学ぶ事そのものまで教えてまでいるスレ住人を 裏切り続けてるのは外ならぬお前なんだと言う事を覚えておけよ?
ネタかも知れないレスにマジレスしちまった。 そろそろ寝るか。 30分ぐらい。
642 :
デフォルトの名無しさん :2006/10/16(月) 06:18:11
提出物なので先生には教えてもらえません・・・ 裏切り続けてると言われても・・言われたことはしました・・ その上でなら仕方ありません・・ 時間があるのならゆっくり勉強すればいいかもしれませんが、もう時間がなくて一から勉強することができません・・・ だからもう・・・
ここまでヒント貰って分からないんなら、もう単位は諦めるしかないんじゃない。 人の答え丸写しして本人は理解してないのに単位取るなんて不正だし。
課題出されてから提出期限まで幾らか時間があったんだろ? くだらん言い訳はするな。 それに提出物だから教えて貰えないというのもおかしな話だ。 質問を受け付けてくれない先生か。さぞお気の毒だこと。 そうやって言い訳し続けて、裏切り続けるがいいさ。 と、漏れもマジレス
645 :
デフォルトの名無しさん :2006/10/16(月) 07:06:33
お願いします・・・ 何を言われてももうこれしかありません・・・
もういい加減愛想が尽きたよ。 答えを教えたって豚に真珠だろうさ。
647 :
デフォルトの名無しさん :2006/10/16(月) 07:21:02
それでもお願いします・・・
おまえら優しいな。 2chでこんなに優しくしてもらえるなんてそうないぞ。 問1ぐらいは分かるだろ。 ま、残りは空欄でも仕方ないな。
問1すらわからないなら単位はあきらめた方がいいな
なんじゃここ、昼夜逆転したニート君どもがが学生君を嬲ってやがるw やっぱりヒキニト君ってイライラが溜まってるんだね。 そんなの俺なら「宿題は自分でやれよ」の一言で済ますけど。
r0が
失敗 r0がゼロレジスタか否かで結果が変わるな PDP11が確実でなければ
時間が無いなんて何を言ってるんだ? 学生なら幾らでも時間はあるだろ 4年で卒業できる実力が無いならおとなしく留年しろ それが世のためだ
654 :
デフォルトの名無しさん :2006/10/16(月) 12:26:48
あと30分でその授業が始まります‥ 本当にお願いします…
>>655 そういう意味はないぜ。
伝統的に「Part*」でなく顔文字でスレ名つけてるだけで。
そのスレタイだったら、アセンブラにハァハァしてると
解釈するのが自然で、汗とかけてるわけじゃない
汗まみれのブラジャー着けたままセックスして感じてる女がハァハァいってる ところを想像した やばい、想像しただけで勃起する
658 :
デフォルトの名無しさん :2006/10/16(月) 14:14:38
あぁ、、PDP-11とは懐かしいな。何でPDP-11なのか分からんけど。実機で動いた方が絶対に面白いし、分かり易いのに。MIPSとかでいいのにな。いや、漏れも大学の時のアセンブラ講義はPDP-11のシミュレータだったけどさ。
全く知らない漏れでも
>>622 のマニュアル流し読みしたら理解できた。
わからないとか言ってる奴は絶対に問題を自力で解こうと思ってないし、
マニュアルも英語だからという理由で読もうともしてない。
以下、アドレスや数値は8進数表記
問1
R0を000000にする
R0に1を加算する→R0は000001
R0に2を加算する→R0は000003
R0に3を加算する→R0は000006
R0に4を加算する→R0は000012
問2
R1を000100にする
000100番地を000000にする、R1を000076にする
000076番地を000000にする、R1を000074にする
000074番地を000000にする、R1を000072にする
000072番地を000000にする、R1を000070にする
問3
000100番地を000000にする
8進数か、手強いな。16進数に慣れきってしまった今となっては。
英語がどうとか逝っても肝心の所は図とか記号あるから英語あんま読めなくてもだいたいわかるし
アセンブラの宿題スレもそこそこ需要があるみたいだね。
このスレを見る限り。(
>>36-55 ,
>>88-98 ,
>>191-207 ,
>>244-254 ,
>>572-605 ,
>>614-659 )
こちらに質問された方はお気の毒でした。結局間に合ってないよね。
でも、資料提供から問題箇所の切り出し、C言語による整理とここでこんなに
丁寧に指導してもらえることってそうはないから、努力して理解に努める
姿勢を見せれば良い方向に転んだかもしれないあたり、少し残念。
それはさておき。
ここの姉妹スレとしてアセンブラの宿題スレを立てようと思うが、どうだろうか。
意見がなかったら近いうちに立てるよ。住人さんが定着するかどうかはわからないけど。
>>36 って5月だよな。月1回程度って少なくない?
宿題スレ、立ててみるのは面白いと思うよ。 スレタイに「宿題」「質問」「アセンブラ」などの単語が入ってれば ある程度人は集まると思う。 過疎化や実質非宿題スレ化などが懸念されるが、 ネタが増えそうな気もするし、俺は立てるのに賛成。
月一回程度、これを多いと思う香具師はいないものとして。 少なすぎるか、適量かで意見が分かれそうだな。 このペースだと複数問題のパラレル同時進行てな事態はそうは起きないだろうから 漏れは丁度いいと思う。もうちょい増えても構わんが。
いらねーだろ。 本音としては、ここに集う宿題君を肴にしてお前らと暇つぶしするのがいい。 宿題は自分でやれ。2chはお前らの代返君じゃねーんだぞと。
宿題スレを肴にすればいい。 それに、質問して来た人を直接ここで肴にするのは ちょっと気が引けるし。
近頃のアッセン使いは意地が悪いですね
実はただのニートだからなw
>>659 > 問2
おしい。32ページ。
> -(Rn) Register is decrimented and then used as a pointer.
つまり、まず減算してからポインターとして使う。
問題: STC SBB EAX,EAX ADD EAX,13 DEC EAX XOR EAX,9 NOT AX SHL EAX,8 上の命令を実行した後、EAXに入っている値を10進法で求めよ。
「〜を求めよ」ってテスト問題の答えに 「じぶんでやれかす」って一度書いてみたいなw
675 :
673 :2006/10/16(月) 22:01:51
暇つぶしで回ってただけだからおれもわかんねーよwww
えーと13たして9かけて8でわるのかな?
汗まみれのブラジャー↑アッー!↓
16770816
680 :
デフォルトの名無しさん :2006/10/16(月) 23:27:11
16777216だよ
アセンブラ面白い問題教えてスレとか面白そうじゃないか? 誰か建てろ。
仮にアセンブリ宿題スレ作るにしても、テンプレどうするよ? 質問者は、質問の際に以下の項目を記入する事。 【機種】 【CPU】 【アセンブラ】 ※判らない人は判る範囲で埋めて下さい。 アセンブリは環境によってコードが異なるります。 3つとも空欄や不明の場合、回答者が趣味で使っている環境で答えますが それがあなたの環境で実行出来るか否かの保障は出来ません。
s/答えますが/気が向いたら答えるかも知れませんが/
最低限CPU名だけは書いてもらうことを優先すべきでないかな。 もちろんわかる人には環境を詳しく書いてもらうとして。
> コードが異なるります。
アセンブラ アセンブリ アセンブル
アセンブリ言語をアセンブルするのがアセンブラだが、 アセンブリ言語を指してアセンブラと言うことも多い。
アセンブラ アセンブリ アセンブル アセンブレ アセンブロ つっこみいれてやれよ。
アセンブロとはきどんなお風呂ですか?
690 :
689 :2006/10/17(火) 23:01:30
余計な「き」が入った 吊ってくる
1.[8091h][8090h]←[8080h]*2+[8081h] 和を16ビットで求める 2.[8085h]←[8051h]+[8052h] を計算し、符号付2進数加算としてのオーバーフローを判定する この二つを8085プログラムで書けという問題なのですがまったく分かりません。 どなたか分かる方教えてください。よろしくお願いします。
宿題スレに逝け
結局立てたんかい。 次からテンプレに追加せんとな。
Z80ならよく覚えているんだがなぁ〜。i8085は知らんわ。残念。
3 名前: デフォルトの名無しさん [sage] 投稿日: 2006/10/18(水) 00:06:56 ファミコンアセンブラはまじで楽しい。 それ以外のアセンブラなんて人間にすすめるもんじゃない。
あんな変態アーキテクチャ、人に勧められるものかよ。 まあ、x86系の石よりはマシだが。 68000の優るものは何もない。
68kは遅いのが致命的だな。 JAVAチップだって結局(ry
ナーシャ・ジベリを越える天才現るか?
彼は今何をしているのだろう?
アセンブリをアセンブラでアセンブルすんだよ アセンブラをアセンブラでアセンブルする厨は(・∀・)カエレ!
アセンブラってやっぱ C で書かれてるのかな?
>>703 そういうのもそうでないのもある。
awkで書かれてるのとかもあるよ
>>703 普通の言語のコンパイラならともかく、
アセンブラは何も考えずにアセンブルできるから
言語は何でもいいんじゃないの。
漏れは8085アセンブラをbasicで書いたぞ。
シナプスで書かれたアセンブラもあるな 勝手に最適化してくれるらしいぞ
紙とエンピツで入出力
こういうのって許されるやり方ですか? もしかして相当する命令あるのかなぁ 初心者ですいません・・・ 0100 mov AX,0300 0103 push AX ; Arg1 0104 call 200 0200 mov AX,SP 0202 add AX,2 0205 mov SP,AX 0207 ret 0300 int 20 ; おわり
710 :
709 :2006/10/20(金) 07:38:30
板汚しすいません。解決しました
mov ax, 0x300 push ax call TEST TEST: push bp mov bp, sp mov ax, [bp + 4] pop bp ret 普通はこんな風に使う。 アセンブリ言語プログラムをCから呼ぶのと同じ感じ。 上のはnasm16bitプログラムで書いてある。 そのためbp+4なのだ。 +4な理由は、戻りアドレス16bitとbpをプッシュした16bitで合計4バイトってこと。
>>711 引数で渡された値に帰り先を変更したいようだから
それではやってる事が全く違うんじゃないか?
うははwwwちゃんと読んでいなかったwwwww 吊って来るorz
715 :
デフォルトの名無しさん :2006/10/21(土) 02:50:55
mov ax,[si+1]はOKで mov ax,[di+1]はNGですか?
>>709 retの戻りアドレスをArg1に変更したいだけならこうじゃないか?
0100 mov AX,0300
0103 push AX ; Arg1
0104 call 200
0200 pop AX ; 本来のret先をスタックから取り除く
0201 ret ; 103でpushした値がスタックトップなのでそこにretする
0300 int 20 ; おわり
すいません。 入る大学間違えたんですが。
720 :
717 :2006/10/23(月) 17:44:40
すいません。 誤爆です。 (なぜか向こうにレスがつかなかった。)
retって何?
iret
irete
アッー!
726 :
デフォルトの名無しさん :2006/10/24(火) 10:05:42
MASM Ver8はどこで手に入りますか?
727 :
726 :2006/10/24(火) 10:10:23
728 :
デフォルトの名無しさん :2006/10/24(火) 13:36:18
dwordってなんですか?
どうbぇをrd
4バイト?
DWORDはDOUBLE WORDなのでWORD2つ分。 ただし、WORDが何バイトか、あるいは何ビットかは知ったこっちゃない。
2CHとはアセンブラでどんな意味ですか?
jmp @-1
734 :
デフォルトの名無しさん :2006/10/24(火) 18:15:29
?
735 :
デフォルトの名無しさん :2006/10/24(火) 18:26:32
2ちゃんのことじゃないですよ2CHの意味することを教えてください
2CHは16進法としか解釈できないよね。 10進法なら44だ。 これが表す命令はCPUによって違うが、 1byteの2CH命令を持つCPUって何だろ。
737 :
デフォルトの名無しさん :2006/10/24(火) 18:33:28
ありがとうございます
なーんだ。そういう事か。 マジレスすると、炭素と水素が結合した物が2個。
そりゃ無理だ。
741 :
736 :2006/10/24(火) 23:59:54
>>740 ザイログフォーマットではxxxhという表現は無いな
2chだとインテルフォーマットだと思うぞ
だから INC L だな
俺が思うに、やっぱりね、良い音楽もあるけど悪い音楽もある!
iret
inc l
アニオタ帰れ
そういやアニメ界には 搭乗してるユニットのOSを書き換えながら 戦闘するパイロットが居るんだっけか
>>748 実は別OSがその下で動いていたらどうだろう?止めることなく書き換えも可能になるな。
無停止システムなんかだと実行中のOSにパッチ当てるぐらいはできて当然。
無停止システムってなんだよ? てか、なんちゃら機関と同じで実現できないだろ。
スーパーバイザモードで動いてるOSの下に ユーザーモードで動いてるOSがいくつも走ってて そっちを書き換えてた可能性は十分ある。 それほど不自然ではない気もするぞ。 別に0から全てのコード書き上げたってんじゃないんだろう?
迂闊に特権コード書き換えられるようではそれ自体がセキュリティホールになりかねないが、 OSのカーネルだろうがメモリ上の単なるデータに過ぎないんだから、適切な権限さえあれば いくらでも書き換えることができる。アーキテクチャにもよるけどな。
アセンブリは無敵ってこった。C言語すらもただのゴミに見える…
無敵かもしれんが、おいらには難解過ぎるよ。 全然勉強が進まん…orz
種の話ならRTOS上のアプリが糞だったのでスケジューラと制御ライブラリの呼び出しパラメータに機体の癖を考慮した誤差を加えただけみたいに見えた
よくわからんが、俺もコーディネーターになりてえよw
ようするに篠原の技術は世界一って事だ
ネルガルだよ
>761 オモイカネがOSだったんだw
>>759 希望はよくわかった。
今日から君はコーダーだ。
今日から僕はリコーダーだ。
きょうから俺はあの娘のリコーダーだと申したか
僕のバズーカ凄いんだぞ(涙目)
>>765 おっさんの喘ぎ声がでるようなリコーダーはいりません!
すいません。質問です。 486CPUでCR0レジスタの30と29ビット目を1にすると キャッシュ機能を無効にすることが出来るのでしょうか?
キャッシュの破棄もしなきゃいけないんじゃない?
1次キャッシュを無効にしてWindowsを立ち上げるとすごく遅いね。
初期のNetwareはHDD引っこ抜いても動いてたとかとか。
773 :
デフォルトの名無しさん :2006/10/30(月) 15:02:59
私の頭は利口だ
あなたの頭には利く口があるのか
775 :
デフォルトの名無しさん :2006/10/30(月) 16:02:32
ログ読んだけどアセンブラ書くのに一番簡単な言語って Rubyとかじゃないの?
>>775 よく分からないがTTLですらアセンブラは存在していたのになぜRubyなんか持ち出す?
awkで十分だよ
それpl(ry
TTLでアセンブラ? ビットスライス組み合わせてニーモニックからバイナリへの変換でもしてたん?
nasmが開発停止したと思ったら、flat assemblerなんてのが出てるんだな。 互換性はあるともないとも書いてないのが…使ってる香具師いる?
無いだろ。ただ構文わかりやすいな。 nasm派はYASMでおk
お前の自宅特定したw
お前の性癖特定した
ばれた!ずらかれ!
おまえも好きだろ?ハイヒール
ブルマ復活きぼんぬ
天然のブルマってもう絶滅したの?
>785 「Romanticが止まらない」なら好きだな
ブールーマー(・∀・)イイ! ブールーマー(・∀・)イイ! あんぱーんあんぱーんあんぱんあんぱん あん!ぱん!
>>785 ハイヒール大好きだけどバンプスとミュールも大好き
カノジョできたら無理矢理はかせてやりたい
バレーボールのブルマじゃね?
>>790 夏の薄着にはピンヒールのサンダルがちょっとイイ
組み込み技術者足りねえってよ。 みんな、がんがれ
今どきは組み込みもほとんどCで出来ちゃうんじゃなかろうか。
汗ブルマで掻くのはスタートアップルーチンと割り込みハンドラくらいだな
コンパイラが使って欲しくない命令使うんで、インライン使わざるを得なかった そもそもいらん信号出すような命令残しておくなよ。バグだろ?>某社
そんな優しさなんて要らない
>>797 おまえの優しさが人を傷つけていることになぜ気づかない?
「愚か者は己が愚かなことに気づかない」
「ぬるぽはぬるぽ」
愚か者は愚か者であると見抜ける人でないと (アセンブラを使うのは)ぬるぽ
アセンブラ、アメリカ専用ブラウザなんでしょ。
小林亜星専用ブラジャーです
それはあなたを幸せにしますか?
亜星が人々を幸せにすることはありません
パッとさいでりあ〜♪
ちょっと質問。 nasmで作ったobjファイルをリンクして、ベタファイルとして出力できるようなフリーのリンカーってある? 例えば、 db 0,1,2,3 ってだけのa.asmと、 db 4,5,6,7 ってだけのb.asmをアセンブルしてそれぞれa.obj、b.objを作り、それをリンクして 0,1,2,3,4,5,6,7 というバイナリファイルを作れるようなの。 alinkでは無理だったんだが・・・
>>810 コードに明示されない順番依存ってリロケートとしておかしくないの?
>>811 ごめん、サンプルは適当に書いた。
要は、exeとして必要な部分を一切省いた、純粋にアセンブラで記述した部分だけを出せるリンカーって事で。
nasmで-f BINを指定したときと同じようなイメージ。
昔はexe2binを使ったり自分で切り出したりしていたな objと言われてもOMFかcoff(win32)かわからない OMFならobj2binがgoogleでヒットするな
nasm -fbin a.asm nasm -fbin b.asm copy /b a+b hoge.bin じゃ駄目なの?
816 :
810 :2006/11/26(日) 23:38:21
レスd
>>813 一応どちらでも出せるんで、ツールに合わせます。
>>814 a.asmからb.asmにあるラベルを参照したりすることがあるので、単純にくっつけるのはまずいです。
>>815 MASMのマニュアル?を探してみましたが、どのオプションでそれができるか不明でした。
どれか使えばできますか?
純粋なアセンブラの話題からは弱冠ずれるんですが、BIOSファンクションコールの一覧が載ってるサイトありませんか? できれば日本語がいいんですが・・・
何のBIOS?
PCのですね。 MS-DOSとかが利用するような。
AT? 98?
PC-9801でお願いします。 できればATも参考に知りたいですが・・・
古本屋なりで「PC-9800シリーズ テクニカルデータブック」のシリーズでも探せ。 多分それが一番手っ取り早い。
俺のアセンブリ言語入門っていう1992年発刊の本の巻末に一覧表があるYO
そうですね・・・ できるだけ早く欲しかったんですが。 明日、市の図書館とBOOKOFFあたってみます。
osdevに書いてある予感
そんなに古い情報はないだろう。 AT BIOSは"InterruptList"があるけど。
入手できるかわからんが PC-9801 プログラマーズBible,東京理科大学EIC編,技術評論社,ISBN4-87408-615-2 UNDOCUMENTED 9801/9821 Vol1,小高輝真,河野健,インプレス,ISBN4-8443-4642-3 に一通り載ってる
全部アセンブリで書けばあらゆるソフトは超快速になるのか?
じゃあアセンブラで2chブラウザつくってくれ インタフェースもおしゃれにしてくれよな!
CPUが複雑になってて、コンパイラも頭よくなってるので、一概にそうとも言えん。 つーか、CPUがどういう動作をするか完全に理解してて、各命令の動作速度、スレッドまで考慮できれば アセンブラの方が早くできるだろうなw マンドクセ('A`)
>>832 それって総当りでいつかは暗号解けるだろ、
と似たようなアルゴリズムだよね
Core2Duoなど最近のCPUの情報公開が不十分なのが問題なのであって 本来は総当りする必要はない
猿にキーボード持たせて待ってればできるよ
\ お そ .い ヽ か の や | し り ` ,. -──- 、 い .く / /⌒ i'⌒iヽ、 つ / ,.-'ゝ__,.・・_ノ-、ヽ は i ‐'''ナ''ー-- ● =''''''リ _,....:-‐‐‐-.、 l -‐i''''~ニ-‐,....!....、ー`ナ `r'=、-、、:::::::ヽr_  ̄ \ヽー' !. t´ r''"´、_,::、::::} ノ` ,.i'・ ,!_`,!::::::::::::ヽ ヾ、 ゝゝ、,,ニ=====ニ/r'⌒; rー`ー' ,! リ::::::::::::ノ i`''''y--- (,iテ‐,'i~´,ゝ'´  ̄ ̄ヽ` :::::::::::ノ .| !、,............, i }'´ _ 、ー_',,...`::::ィ' ●、_!,ヽ-r⌒i-、ノ-''‐、 ゝ`ーt---''ヽ'''''''|`ーt-'つ ( `ーイ ゙i 丿 ;'-,' ,ノー''''{`' !゙ヽノ ,ヽ, `ー--' --'` ̄ `ー't,´`ヽ;;;、,,,,,,___,) ヽ'-゙'" (`ー':;;;;;;;;;;;;;;;ノ ``''''''``'''''´
アセンブラっていまどこでインストールすればいいんだ? IDE使わずに100%フリーな環境でそろえたいんだけど
Linuxでも使え
会社がWindowsなんだよ
仕事しろよ
mingw入れればgasが使えるしC/C++/C99/Fortran/Javaまで1000%FREEEEな環境がそろう しかもIDE無しでだ なおこのレスには一部誇張が含まれる
>815のリンク先みたら >このパッケージをインストールするために、お使いのコンピュータ上に Visual C++ 2005 Express Edition がインストールされている必要があります。 これフリーなのか?
ふりーだ。
無料だがfreeではない
でもIDEじゃねーか
リンカーのためだけにインストールしてんだろ? それだけ取り出して IDE本体は削除すればいいんじゃね?
>>844 インストール中にTempディレクトリを見ると、VS2005EEなしでも取り出せるな。
CodeZineでx86のアセンブラの連載やってる筆者、リア中らしいよw そういわれてみるとちょっと文章変だったり、ところどころ勘違いっぽい記述があるけど それを差し引いてもすごいよな。
リアル中毒者
それって赤坂玲音のこと?俺の1つ年上じゃんwww
いやそっちじゃないよ。 っていうか、その人はそこそこ有名じゃんw 厨房なんて思うわけないよ
「団子」でなんか投稿してみるかな。。。
死ねばいいのに
masmの日本語のドキュメントって どっかでダウンロード出来ないんですか?
昔は録音するみたいにテープに記録してたけど、 今はだいぶ便利になったみたいだね。 おっさんはマジで市ねよ。
テープは今でも普通に使われているだろ DDSとか
なんだこのスレは・・・たまげたなぁ・・・
PowerPCでラベルのアドレスをレジスタに入れるにはどうしたらいいのですか?
上位と下位を別々に入れる
>>865 addis命令というのがあるみたいなのでそれを使ってみます。
CELLでつか? Macでつか・・・? はたまた組み込み?
gasでnasmの-f binにあたるものはないのだろうか。 それともld scriptで対処するべきか。
>>870 やっぱりか。とりあえず__textセクションだけ抜き出す奴を作った。
これで何とかなると思う。ありがとう。
ゴルフでもやるの?
>>872 そう。Mach-Oでやってるの。
いま494bytesのHello, world!が出来たとこ。
普通にCで作ったら8192bytesでしたよ。
ここまでくるのに苦労しましたわ。
メイン部分がこんな感じのcomならもうちょい縮まる。 mov ax,09h mov dx,offset msg int 21h msg db 'Hello world!',0dh,0ah,'$'
ax=0009なので何もせずに終了
879 :
874 :2006/12/20(水) 20:01:58
ミスとか訂正。 mov ah,09h mov dx,offset msg int 21h mov ah,4ch int 21h msg db 'Hello world!',0dh,0ah,'$'
>>879 縮めるんなら、
mov ah,4ch
int 21h
を
ret
にする
881 :
デフォルトの名無しさん :2007/01/03(水) 01:05:53
って優香、MASM6以上ならエンディングコードは自動生成だろ?
アセンブラを殆ど覚えましたが、死にたいです。
なら僕も死にたい!
884 :
デフォルトの名無しさん :2007/01/12(金) 17:11:00
私も!
俺は全然覚えてないけど、俺も死にたい!!
‖ ___ ‖ / `ヽ‖ ,:' 、ゑ ,' ; i 八、 |,! 、 ,! | ,' ,〃ヽ!;、 |!| l川 l リへ'==二二ト、 リ川 !| i′ ゙、 ', ', lルl ||,レ′ ヽ ,ノ ,〉 |川'、 ,,.,.r'" ,,ン゙ `T" ! ,/ '.ノ,/| / ,!´ !゙ヾ{ | / ,' i ゙ ! ,l゙ ,r‐'ヽ-、! ', l| { `ヽ ! 「゙フ ,>┬―/ ; i,`{ / /リ川' ', ゙、 / ,/ ゙、 ゙、 ノ / ', `、 \_/ ; ゙、ヽ、 l__ ! ___〕 ,、l  ̄`‐┬―r┬‐r'´ `'‐'′ | .! | | | | .| |
887 :
デフォルトの名無しさん :2007/01/12(金) 23:03:06
今からアセンブラ殺す
祭りの予感!!!!!!!!! 記念パピコ
890 :
デフォルトの名無しさん :2007/01/14(日) 01:13:38
すみません、ELFフォーマットの仕様についてですが 日本語で解説してあるサイトをご存知の方いらしたら教えてください。 色々検索しても英語の情報ばかりで理解できず困っています。 宜しくお願いします
elf フォーマット でぐぐれ
日本語の情報が欲しいときは日本語を検索ワードに入れたらいいよ。
おとこわりだ!
港で噂の「BINARY HACKS」(ISBN:978-4873112886)でも買いなさい。 港で話題の「GNU開発ツール」(ISBN:4-903708-01-2)もいいと思うぞ。
港(みなと)で噂や話題だったりするのか。 漏れは陸(おか)の人間だから巷(ちまた)で話題の本を探すよ。
897 :
895 :2007/01/14(日) 18:21:49
ウソじゃないもん!! アワビをくわえた尼さんが話してたんだもん!! ほら、こんなに仲間が。↓ 港で噂 の検索結果 約 134 件
俺はすまたでも全然オッケーですよ
900 :
デフォルトの名無しさん :2007/01/19(金) 02:17:36
SALで最上位ビットを特別視しなくていいのはどうして? たとえば10000001をシフトすると、CFが1になり、値は2となります。 左シフトでは、符号付きの数値には対応してないという事でしょうか。 いや、まさかそんなわけないだろし。
オーバーフローですが
>>900 もしかして
00000011
ってなると思ってる
>>902 CFが1で、00000010になるのではないかと。
>>901 あーそっか。-63か-64かは知らないが、絶対値がこれ以下なら
上から2番目のビットも1だから負のままだし、
絶対値がそれ以上の場合にはオーバーフローになるわけね。
tnx.
「アセンブリ言語の教科書」読んでてよく分かんないのだけど、 MOV AH, 4CH INT 21H とシステムコールを利用した時、スタックに値があれば、 終了するのではなく、その値のアドレスに飛ぶのでしょうかね? Cで例えるなら、exit()でなくreturn相当なのかな。
exitであってる exit(AL)になる returnはret
>>904 前提が書いてないから勝手にMS-DOSと仮定するが、
そのシステムコールではスタックは関係ない。
>>905 >>906 どうもです。&& 環境書いてなくてすまんかったです。
しかし、exitであるならば、あの本のコードは少し変なのかな。
……と思ったら、web上の正誤表見たら訂正されてたorz
#define EMULATE_WINDOWS while(1) { __asm__("cli hlt"); } ちょwwww
何ですかそれは
あてずっぽで言うと、 EMULATE_WINDOWSを展開すると、haltするコード だが、笑い所がいまいち分からない だってコードの使い所が分からない
Windowsのエミュレート=ハングアップっていいたいんだろう。 面白くもなんともないが。
アセンブラ覚えたての消防がやってる。
特定の並びの特権命令をトラップしてエミュレーターに移行するんだろ よくある実装だ
「初めて読む8086」読んでるんだけど、 linuxなんでdebugコマンドが無くて試せず辛い。 同じようなコマンドにはどのようなものがあるでしょうか。
>>914 たぶん期待する物はない。
gdbはそういう用途では使いものにならんからのう。
adbとかたまに欲しくなりますな。
言われて初めてadbが無いことを知った。 昔のunixには標準で入ってたんだがなぁ。ccが消えた頃から無くなったんかねぇ。
>>915 うーん、そうなのですかぁ。
なんとも残念無念。
フリーのDOSはいろいろあるけど、その中には1つくらいDEBUGを持ったものもないか?
つーかDOS上で動くdebug互換(?)デバッガなら結構ある。
こんばんはこんばんは! 初級Javaプログラマだけど アセンブラを勉強するための環境って最近はなにが多いの? アセンブラってCPUによって違うんだよね? x86系がほとんどなの? 64bitのはまた書き方違ってくる? ? ? ?
俺はアセンブリの勉強はCASLだったな 初心者向けの書籍がこれほど多いアセンブリ言語も無かろう
>情報処理技術者試験の教材用のアセンブリ言語。 >正式名称は,CASL II(きゃすうるつー)。 へぇー でも実用的じゃないアセンブリよりも、Intel系のアセンブリをやったほうが いい気がするんだけど、どっちでも勉強になるからかわんねって感じなのかな
CASL II は午後のテストの点稼ぎになるからある意味実用的。 x86のアセンブラは今や一部の人を除いて利用される頻度は少ないのである意味あまり実用的でない。
どっちも大した役に立たないという点では似たようなもんだな。
んじゃあ、いま一番人気のアセンブラはなに?
CELL。 つーか、誰かやってくれ。今なら給料出すから。
フィックスター社員乙 x86アセンブラだろ常識的に考えて。
あぁPS3にものってるやつか でも、初心者には敷居がたかそうだなぁ
まあでもx86あたりもMMXやSSE使いたい程度ならemmintrin.hで済むしなぁ。
x86は人気つーより手近なPCで出来るから数が多いだけだろ。
これからゲームプログラマになるならCELL?
>>932 普通はコンパイラでやるだろ。
PowerPC系のアセンブラも覚えておいて損はないだろうけど、
これから未来永劫CELLが使われ続ける訳でもなし。
まあ最初はCOMET2/CASL2でいいですね
まあ、バイナリエディタで機械語直書きからアセンブラ、コンパイラ組み込み関数までいろいろ書き方はあるけど、 自分が使うCPUにどういう命令があって、その実行にどれだけのコストがかかるかという知識がいらなくなる時代はまだ当分こないだろうな。 重要なのはそういう知識であって、アセンブラの文法とか機能はわりとどうでもいい。
そういう時代がきちゃったら、プログラマは廃れちゃうな 実力が
CASL2のバイブル的な本ってどれですか。 入門書とかじゃなくて。 詳しく買いてるやつ。
最近やたらめったらいろんなアーキテクチャの仕事があるんで インストラクションセットを覚える暇すらない みんな8bitとか16bitとかだけど 命令表を斜め読みして 「げ、左シフトねーじゃんこのCPU」とか 「符号反転ねーよ」とか 「乗算命令じゅーよー」だの 「わは。レジスタ4つ、こっちは32個ー」とか言いつつテンパってる
>>938 でも一つもアセンブリ齧ってないとそれも判らないんだよね
>>938 たぶんそう思ったヤツが高級言語作ろうと思ったんだろうな
>>938 4つのせりふのうち3つは何だかわかった。
orz
しかもハーバード型、ノイマン型も満遍なく取り揃えられておりますorz
そだ |------、`⌒ー--、 れが |ハ{{ }} )))ヽ、l l ハ が |、{ ハリノノノノノノ)、 l l い |ヽヽー、彡彡ノノノ} に い |ヾヾヾヾヾヽ彡彡} や !! /:.:.:.ヾヾヾヾヽ彡彡} l っ \__/{ l ii | l|} ハ、ヾ} ミ彡ト 彡シ ,ェ、、、ヾ{{ヽ} l|l ィェ=リ、シ} |l lミ{ ゙イシモ'テ、ミヽ}シィ=ラ'ァ、 }ミ}} l ヾミ  ̄~'ィ''': |゙:ー. ̄ lノ/l | | ヾヾ " : : !、 ` lイノ l| | >l゙、 ー、,'ソ /.|}、 l| | :.lヽ ヽ ー_ ‐-‐ァ' /::ノl ト、 :.:.:.:\ヽ 二" /::// /:.:.l:.:. :.:.:.:.:.::ヽ:\ /::://:.:,':.:..:l:.:. ;.;.;.;.;;.:.:.:.\`ー-- '" //:.:.:;l:.:.:.:l:.: 難しい問題ほど、解けると達成感あるのよね。
944 :
デフォルトの名無しさん :2007/02/17(土) 21:49:42
extern unsigned int crcTable[]; unsigned int updateCRC32( unsigned char *src, unsigned int size, unsigned int crc ) { while ( size-- ) crc = ( crc << 8 ) ^ crcTable[ ( crc >> 24 ) ^ *src++ ]; return crc; } 誰かこれを高速化して下され。 Cの範囲じゃやはりこれが限度っぽい。 後はアセンブラしかなさそうなのです。
移植性のないポインタ変換とエンディアンの決め打ちがあるから どちらかというとアセンブラで書くべきアルゴリズムだけどな
>>937 CASLなんて通過した後は一切触らないから
毎年IPAが配ってる案内書に付属してる仕様書だけで十分。
命令が読めりゃ後は何も困ることないでしょ。
>>944 のコードのままでも、do whileにしただけで1命令は速くなるね。
mov eax, crc mov ecx, size mov esi, src rep crc32
>>948 処がだ、最近のコンパイラはforに特化した最適化をすることが多いから一概には言えない。
最近のコンパイラは賢いからなぁ ていうかCPUの内部が複雑杉
コンパイラ何よ?
ファミ通にアセンブラ経験者の求人が乗っててひいた
アセンブラですか・・・漫画は読んだんだけどOKですかね? とか? Z80でいいなら・・・(・∀・)
いまさらZ80みたいな変態CPUは無いだろう。
どうみてもCell一択です Wiiでもやるんかな、性能稼ぐために
Wiiは既に死に体だからアセンブラ駆使してまでゲーム作んないぞ。
>Wiiは既に死に体だから それはひょっとしてギャグで言ってるのか?
>>956 川崎の石は現役ですよ。日立の64180はさすがに作ってないみたいだけど。
>川崎の石
あの変態なZ80に、更に変態なメモリ管理命令増やした奴だっけ?
#いや、割りと好きですがw
>>957 この前は漏れがそう書いたら社員乙とか書かれた気がするが……
>>957 今時アセで組む必要があるなんて
余程余裕のない組み込みか
Cellみたいな変な石使う時だろうしそうかもね
質問です。ml.exeのインラインアセンブラを使って汎用レジスタと セグメントレジスタの値を表示したいのですが、次のようなコードで おkですか? int eaxv, ebxv, ecxv, edxv, esiv, ediv, ebpv, espv; wchar_t csv, dsv, ssv, esv, fsv, gsv; eaxv = ebxv = ecxv = edxv = esiv = ediv = ebpv = espv = 0; csv = dsv = ssv = esv = fsv = gsv = 0; __asm { mov eaxv, eax; mov ebxv, ebx; mov ecxv, ecx; mov edxv, edx; mov esiv, esi; mov ediv, edi; mov ebpv, ebp; mov espv, esp; mov csv, cs; mov dsv, ds; mov ssv, ss; mov esv, es; mov fsv, fs; mov gsv, gs; } printf( "EAX=%08X EBX=%08X ECX=%08X EDX=%08X\n", eaxv, ebxv, ecxv, edxv ); printf( "ESI=%08X EDI=%08X EBP=%08X ESP=%08X\n", esiv, ediv, ebpv, espv ); printf( "CS=%04X DS=%04X SS=%04X ES=%04X FS=%04X GS=%04X\n", csv, dsv, ssv, esv, fsv, gsv );
片っ端から変数に代入しようとすると、結局レジスタを消費してしまって正しく表示できないと思われ。 全部纏めてでなく、一個ずつやらないとダメなんでない? #つーか、デバッガで見ることはできないのか?
>944 速いかどうかは、解らないが、とりあえず国産CISCCPU(32bit?)の場合 #pragma PARAMETER update32(A0,R3R1,R2R0) ---- _updateCRC32: $updateCRC32: PUSHM A1 __loop: MOV.W R2,A1 SHL.W #-8,A1 XOR.B [A0],A1 SHL.L #2,A1 ; Long Index SHL.L #8,R2R0 XOR.L _crcTable[A1],R2R0 ADDX #1,A0 SUBX #1,R3R1 JNZ __loop POPM A1 RTS
>>964 スタックに突っ込めばいいんじゃないかな。
でもってespを適当な構造体のポインタに格納したりして。
>>963 ml.exeのインラインアセンブラってなんだよ。 等の細かいツッコミは置いといて。
表示するだけならそれで良い。
アセンブリ出力(VC++なら/FAs)を出して確認すれ。
インラインasm使う必要すらないじゃん
>>964 ,
>>966 ,
>>967 ,
>>968 みなさん、貴重なアドバイスをありがとうございます。
.asmファイルを見てみると、インラインアセンブラに対応するコードは
下のようになっていました。
余分な処理はないようなので、一応問題なくレジスタの内容を
ストア(?)できているようです。
mov DWORD PTR _eaxv$[ebp], eax
mov DWORD PTR _ebxv$[ebp], ebx
mov DWORD PTR _ecxv$[ebp], ecx
mov DWORD PTR _edxv$[ebp], edx
mov DWORD PTR _esiv$[ebp], esi
mov DWORD PTR _ediv$[ebp], edi
mov DWORD PTR _ebpv$[ebp], ebp
mov DWORD PTR _espv$[ebp], esp
mov WORD PTR _csv$[ebp], cs
mov WORD PTR _dsv$[ebp], ds
mov WORD PTR _ssv$[ebp], ss
mov WORD PTR _esv$[ebp], es
mov WORD PTR _fsv$[ebp], fs
mov WORD PTR _gsv$[ebp], gs
WindowsだったらGetThreadContextで一発というオチ。
GetThreadContextを自スレッドに呼び出すと呼び出しは成功するけど中身の保証は無し
最近勉強中でちょっと悩みがあります。 メモリのアドレスを特定のルーチンだけで利用するんですが、 スタックに入れてpush,popするべきなのか、 メモリから読んでまた書き戻すべきなのか、 どっちがいいんでしょう? 値を更新するので所謂Cのポインタなのですが。 やはりスタックの方が若干速そうなのですがその内バグりそうです。 慣れるまではメモリを使うべきでしょうか?
65816アセンブラの勉強中で詰まってしまいました。 例えば AD E0 11 LDA で11E0の値が260以上ならXにジャンプ 260以下ならYにジャンプという命令はどのようにしたらいいですか? AD E0 11 CD 60 02 F0 04 5C XX XX XX 5c YY YY YY とやりましたがゼロフラグを使っての分岐なので 260だったときでした。 「260以上はXにジャンプ、260以下はYにジャンプ」の分岐の方法を 何方かご教授下さい。
>>974 65816は知らんが、ニモニック表をよく見てみ。
条件分岐命令にゼロフラグチェック以外にもキャリーフラグチェックのがあるはずだから。
>>974 おまい、OKWaveでも同じこときいてたな。
>>975 の説明でも
理解できなさそうだ。
なあ、206以下と260以上で分けるていってるけどさ、「260」のときは
どっちに分岐させんだいw
>>975 65816ではこうやって覚えとけばいい。
同じ(A = CMP xxxx):BEQ F0
以外(A ≠ CMP xxxx):BNE D0
未満(A < CMP xxxx):BCC(BLT) 90
以上(A ≧ CMP xxxx):BCS(BGE) B0
あと、CD 60 02だとCMP $260、つまり$260番地の内容との比較になる。
即値と比較がしたかったらC9 60 02とやるべき。
>>975 フラグの意味がわかってませんでした。
>>976 260以下と260未満でした。
すみません。
>>977 ありがとうございます!
無事260以上の命令が出来ました。
皆様お忙しい中有難うございました。
> 260以下と260未満
980 :
デフォルトの名無しさん :2007/03/17(土) 23:56:27
あげ
981 :
デフォルトの名無しさん :2007/03/21(水) 00:07:46
age
982 :
デフォルトの名無しさん :2007/03/21(水) 17:34:48
NASMでSSE3やそれ以上は使えるのですか。
マクロアセンブラならどんなニモニックだろうと(自分で追加すれば)使える。
まず勉強