アセンブラ初心者スレッド
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/08/28(日) 12:36:52.66基本情報の勉強中の人、PICやH8を勉強中の学生などなど…
0002デフォルトの名無しさん
2011/08/28(日) 13:59:51.60言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0003デフォルトの名無しさん
2011/08/28(日) 14:07:20.38C言語なんか最初からいらんかったんや!
0004デフォルトの名無しさん
2011/08/28(日) 14:18:11.54アセンブラなんて最初からいらんかったんや!
0005デフォルトの名無しさん
2011/08/28(日) 14:20:20.980006デフォルトの名無しさん
2011/08/28(日) 15:25:38.65次スレを立てましたので、以後そちらで。
http://hibari.2ch.net/test/read.cgi/tech/1314512680/l50
0007デフォルトの名無しさん
2011/08/28(日) 19:26:11.59初心者用らしいしここでいいんじゃね
0008デフォルトの名無しさん
2011/08/28(日) 19:53:10.57石、アセンブラが何か分からんと答えられんケースあるし
【CPU】 アセンブラではCPU(通称「石」)によって回答が全く違ってくることも多いので必須です。
まったく分からなくても「Windowsが動くCPUです」など、分かるだけのことを書いてください。
【アセンブラ】 これも分かれば。コマンド名とかでもいいです。
あとは何をテンプレにすべき?
0009デフォルトの名無しさん
2011/08/28(日) 21:36:27.480010デフォルトの名無しさん
2011/08/31(水) 12:03:39.49『独習アセンブラ』という本を買って来て、文字を出力するプログラム(p.5)をつくってみたのですが、うまく動きません
nasm -f bin dispchar.asm -o dispchar.com
こう入力してから dispchar.com を動作させると、つぎのように表示されました
このバージョンの \dispchar.com は、実行中の Windows のバージョンと互換性がありません。コンピューターのシステム情報を確認して、
プログラムの x86 (32 ビット) のバージョンと x64 (64 ビット) のバージョンのどちらが必要か確認してから、ソフトウェアの発行元に問い合わせてください。
windows 7 64 bit でとりあえず動作させたいのですが、どうすればよいのでしょうか?
【CPU】 intel core i5-2400
【アセンブラ】 NASM version 2.09.10 compiled on Jul 15 2011
001110
2011/08/31(水) 12:05:03.29>cat dispchar.asm
; dispchar.asm
mov ah, 02
mov dl, 31h
int 21h
mov ah, 4Ch
mov al, 0
int 21h
0012デフォルトの名無しさん
2011/08/31(水) 13:17:22.23それに乗ってるのは16bitのコードだから、win7 64bitでは動かないよ
アセンブラも多分16bitだから動かないんじゃないかな?
0013デフォルトの名無しさん
2011/08/31(水) 22:09:56.92えっ、そうなのですか
残念です
では64bitの環境で学習できるよいサイトはあるでしょうか?
0014デフォルトの名無しさん
2011/08/31(水) 22:13:55.850015デフォルトの名無しさん
2011/09/01(木) 02:22:30.050016デフォルトの名無しさん
2011/09/01(木) 21:14:57.4232bitアセンブラコードは。。。
ほとんどwin32API呼び出しで、アセンブラの意味はないしねぇ。。。
>>15の言う通り、PICマイコンでアセンブラした方が遊べると思うけど、こっちのアセンブラが64bitOSで動くかも不安が在るな。。。
ためして見た人居る?
0017デフォルトの名無しさん
2011/09/01(木) 21:22:48.860018デフォルトの名無しさん
2011/09/01(木) 21:28:50.150019デフォルトの名無しさん
2011/09/01(木) 21:57:17.07また、イフ文のようにも書きたいんですけどどう書けばいいですか?
0020デフォルトの名無しさん
2011/09/01(木) 21:58:06.62PIC16F84Aです
0021デフォルトの名無しさん
2011/09/01(木) 23:27:06.89定番としてはテーブルジャンプだけど、その石でできるかどうかは知らない。
0022デフォルトの名無しさん
2011/10/02(日) 00:57:45.07E8 77 77 77 77 みたいになるけど
この77777777実際のアドレスと違うんだよね
どういう規則でこのアドレスは算出されてるの?
0023デフォルトの名無しさん
2011/10/02(日) 03:08:10.28E8の場合はIPからの相対アドレスへのnear call。
0024デフォルトの名無しさん
2011/10/02(日) 05:49:48.47その次の命令のアドレスからのオフセット(8086はどっちだっけ)。
002522
2011/10/02(日) 05:56:17.04逆算してみたら、次のコードの開始位置からの相対位置ですね
0026デフォルトの名無しさん
2011/10/16(日) 15:03:31.57長いならJSRですかね?
0027デフォルトの名無しさん
2011/12/14(水) 04:55:52.34BSR ラベル:8 と書ける石もあって、この命令は2バイト。
でも、一般的にBSRのほうがJSRよりもマシンサイクルが多い(=遅い)。
その差まで気にかけるほどシビアな条件にはならないようにハード選定時点で
考えられるはず。 ってもう見てないよな(w
0028デフォルトの名無しさん
2011/12/14(水) 18:44:46.56win32だとCでやるのと変わらんわ・・・
;ml hello.asm /link /subsystem:console
.386
.model flat, stdcall
GetStdHandle proto :DWORD
WriteConsoleA proto :DWORD,:DWORD,:DWORD,:PTR,:DWORD
ExitProcess proto :DWORD
includelib kernel32.lib
.data
STD_OUTPUT_HANDLE EQU -11
hello DB 'hello, world',0Dh,0Ah,0
.data?
OUTLEN DWORD ?
.code
mainCRTStartup proc
local STDOUT :DWORD
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov STDOUT,eax
invoke WriteConsoleA,STDOUT,offset hello,14,offset OUTLEN,0
invoke ExitProcess,OUTLEN
ret
mainCRTStartup endp
end
0029デフォルトの名無しさん
2012/03/21(水) 15:57:39.750030営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 17:38:06.65.386
.model flat
.code
_start:
call testsub
ret
testsub:
pushad
popad
ret
end _start
ml test.asm /link /subsystem:console
Vista 64bit で動かしたけど、なんも問題ないっぽいけど。
0031営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 01:39:15.920032営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:06:07.23それ64bitOS上の64bitコードじゃね?
0033営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:31:03.440034営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 16:38:17.560035営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:23:22.000036営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:41:07.82早く自己紹介して
0037デフォルトの名無しさん
2012/04/21(土) 13:51:03.490038デフォルトの名無しさん
2012/04/21(土) 13:58:08.540039デフォルトの名無しさん
2012/04/21(土) 14:00:48.850040デフォルトの名無しさん
2012/04/21(土) 14:17:23.300041デフォルトの名無しさん
2012/04/21(土) 14:18:27.72ありがとう!やってみる
0042デフォルトの名無しさん
2012/05/02(水) 19:06:18.83スタック操作命令のPOP,PUSHってどうやって書けばいいですか?
PUSHの場合これ出会ってますか?
SP←0+(GR1)
0043デフォルトの名無しさん
2012/05/02(水) 19:27:42.000045デフォルトの名無しさん
2012/05/03(木) 00:55:55.00例えばデータの直後に命令があったらそれを識別できるくらいのがありがたいのですが
0046デフォルトの名無しさん
2012/05/12(土) 20:56:41.58たとえば
EXE START
LOOP IN BUF,LEN
CALL DISP
RET
DISP LD GR1,LEN
LAD GR2,1
CPL GR1,GR2
JZE LOOP
RET
BUF DS 256
LEN DC 1
END
これの場合風呂チャートはどう書けばいいでしょうか?
0047デフォルトの名無しさん
2012/05/12(土) 22:13:45.870049デフォルトの名無しさん
2012/05/15(火) 15:50:00.32まず第一に、そのコード自体がまずい。
コール、リターンというのがどういう動作なのか理解してる?
コールは次の命令のあるアドレスをスタックに積み、ジャンプする。
逆にリターンはスタックから1つ取り出して、そのアドレスにジャンプする。
そのコードだとLOOPへジャンプする度にスタックを食いつぶしていくことになる。
本来ならループされた数だけ戻り先の処理が行なわれてしまい、戻った際の処理もおかしくなるところ。
(そのコードの場合は戻り先がたまたまRET…つまり、何もせずにリターンするために一応動くことには動くのだが)
0050デフォルトの名無しさん
2012/05/19(土) 14:27:41.30{
_asm
{
fld angle
fsincos
mov edx, [cos]
mov ecx, [sin]
fstp dword ptr [edx]
fstp dword ptr [ecx]
}
}
これ正しい値を返さないんだけど、何か間違ってますか?(VC++2010EESP1)
0051デフォルトの名無しさん
2012/05/19(土) 14:32:51.37自分でトレースすりゃすぐに分かりそうなもんだが、何故人に訊く?
0052デフォルトの名無しさん
2012/05/19(土) 14:42:32.19そのままだとtbyte ptrがデフォルトになっちゃうと思うんだけど
005350
2012/05/19(土) 14:52:50.88↓こうなる。何だよDENって。。
cos 1.0000000
sin 1.997e-039#DEN
↓正しくはこう
cos 0.70710677
sin 0.70710677
>>51
さっぱりわからんとです。ハード的なコアな問題じゃないかと思って聞いた。
>>52
fld dword ptr [angle]
こうしたが同じだった。
0054デフォルトの名無しさん
2012/05/19(土) 14:54:22.87悪い間違った
勝手にfldのサイズをインラインアセンブラが類推してdword ptrにしてくれた
正しくは
_asm {
fld dword ptr angle
fsincos
lea edx, cos
lea ecx, sin
fstp dword ptr [edx]
fstp dword ptr [ecx]
}
だね
movではアドレスではなく中身を取ってきてしまう
0055デフォルトの名無しさん
2012/05/19(土) 15:01:10.67&だから参照なんでアドレスが入っているんだね
だから最初のfldもアドレスを先にロードしてそこからさらに読み取ればうまくいった
_asm {
mov eax, angle
fld [eax]
fsincos
mov edx, cos
mov ecx, sin
fstp dword ptr [edx]
fstp dword ptr [ecx]
}
0056デフォルトの名無しさん
2012/05/19(土) 15:04:11.360057デフォルトの名無しさん
2012/05/19(土) 15:54:13.22>さっぱりわからんとです。ハード的なコアな問題じゃないかと思って聞いた。
ステップ実行すりゃ、一番最初の fld angle で失敗してることくらい一目瞭然だろ。
ひょっとしてデバッガの使い方分からんのか?
0059デフォルトの名無しさん
2012/05/19(土) 21:16:04.76>うちのVCたんはレジスタ表示出来ないの
ツール(T)→設定(S)→上級者用の設定
にチェック入れてる?
0060デフォルトの名無しさん
2012/05/21(月) 02:07:11.528087というコプロセッサを使うために作られたアーキテクチャとは言えそのまま引きずってるし
SSE2を使うと精度は64bitに落ちるが一応倍精度演算出来るもんな
x64も最初はFPUをコンテキストスイッチで保存しない計画だったんでしょ
全部SSE2に切り替えようとした
でもどっから圧力が掛かったのか社内の意見で反発されたのか、64bitOSはFPUを保存する事にした
0061デフォルトの名無しさん
2012/05/21(月) 02:11:57.46FPUより速い場合が今のCPUでは普通
0062デフォルトの名無しさん
2012/05/21(月) 03:09:57.58日本語でおk
0063デフォルトの名無しさん
2012/05/21(月) 04:45:01.70意味が分からないなら無理に読まなくてもいいよ
0064デフォルトの名無しさん
2012/05/21(月) 05:14:03.65> 8087というコプロセッサを使うために作られたアーキテクチャとは言えそのまま引きずってるし
「〜とは言え〜し」の使い方が異常。
> SSE2を使うと精度は64bitに落ちるが一応倍精度演算出来るもんな
IEEE754でいうところのDouble precisionなのに何が「一応」なのか意味分からん。
0065デフォルトの名無しさん
2012/05/21(月) 05:54:25.35Intelは互換性を重視したために今のような汚いアーキテクチャになった
これは意図的に選んだ道だ
いくらでも綺麗に設計しなおすチャンスはあったが敢えてそうしなかった
MSのVCのlong doubleが64bitであるようにFPUを切り捨てる計画は
かなり前からあったようだがIntelに押し切られるような格好でOSの設計
だけは譲られなかったのだろう
それからFPUの内部演算は全て80bitだ
だから64bitで計算するのと結果が異なる場合がある
0066デフォルトの名無しさん
2012/05/21(月) 06:11:06.67>Intelは互換性を重視したために今のような汚いアーキテクチャになった
8086の頃から汚かったゾ?
>これは意図的に選んだ道だ
「今のような汚いアーキテクチャになった」のは「結果」であって、「選んだ道」ではないが。
0067デフォルトの名無しさん
2012/05/21(月) 06:19:38.94>いくらでも綺麗に設計しなおすチャンスはあったが敢えてそうしなかった
432とか、80860とか、Itaniumとか、ハイエンド製品についてアーキテクチャを見直すチャレンジは何回かやってるよ。
0068デフォルトの名無しさん
2012/05/21(月) 12:43:10.1566 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
67 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0069デフォルトの名無しさん
2012/05/21(月) 14:13:12.690070デフォルトの名無しさん
2012/05/21(月) 14:47:18.990071デフォルトの名無しさん
2012/05/26(土) 23:12:40.96H8マイコンで、ボタンが押されるたびにLCDに表示されてるいる数を減らすのを作りたくて、ER4に MOV.W #D'5みたいに入れてそれをボタンが押されるたびに、一個づつ減らすように書いたのですが、そのER4の内容をLCDに表示させるのはどうすればいいんでしょうか?
0072デフォルトの名無しさん
2012/05/27(日) 02:45:41.91トレーニングキットなり講習なりの案内はもらえるとは思えますよ。
数十万〜数百万個とか使うのでなければ有償だとは思うけど。
0073デフォルトの名無しさん
2012/05/29(火) 04:40:40.39・ワークregにER0を使う。(ことにする)
HEX: DC '0123456789ABCDEF'
ER4をER0に移す
ER0を0000000FでAND
MOV.B (HEX,ER0),R1L で、16進の1桁をASCIIに変換できる
R1LをLCD表示用の変数にセット
ER4を右に4bitシフト
これを8回くり返せばER4の内容を表示用の文字列に変換できる。
0074デフォルトの名無しさん
2012/05/30(水) 01:13:11.99>>73
レスありがとうございます。>>73さんのやり方で表示できました。ありがとうございました!
007573
2012/05/30(水) 01:22:20.91007673
2012/05/30(水) 01:39:47.03だから、dmp(変数)(長さは4とか16とか固定)、dmp(変数,長さ) とかの使い回し
できる関数にしておくといいよ。レジスタはその変数に代入してからdmp( )を呼ぶ。
cで製品を開発するときこういうのを組み込んでおいてずいぶん役に立った。
表示先はLCDの他に、uartのコマンド/報告で組み込むのをよくやった。
H8だったら最低2CHぐらいはuartが搭載されてるでしょ。
dmp <ff010><ret> と入力したら、そのCHに
FF010 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 <CR><LF>
と表示させる。上のはFF010番地に DC '0123456789ABCDEF' がある所を
ダンプした例ね。
007773
2012/05/30(水) 02:16:37.21コンパイラによって違うけど、ルネのだと
dmp(変数)
MOV.L #変数,ER0
JSR dmp
dmp(変数,長さ)
MOV.L #変数,ER0
MOV.W #長さ,R1 (16bitで充分、8bitでも可)
JSR dmp
となります。
0078デフォルトの名無しさん
2012/06/01(金) 10:18:13.79有益な情報ありがとうございます
是非この先使ってみたいと思います!
0079デフォルトの名無しさん
2012/06/11(月) 22:37:17.91アーキテクチャはlinux 2.6 on EM64T(およびPIC30F4012です.)
(おそらく後者は不可能という結論は出ていますが,ついでなので質問です.)
前者は,call malloc等でC関数を呼べば実装できているんですが,
Cランタイム非依存のlinux環境下では,int 0x80のシステムコールのみで
ヒープ領域の確保,解放を行う必要性があると思っています.
(システムコールなく,CPU命令で直接ヒープ領域にメモリ確保できれば十分です)
わかる方いらっしゃるでしょうか
0080デフォルトの名無しさん
2012/06/12(火) 00:19:48.97>すみません,アセンブラ単体でヒープ領域のメモリ確保ってできますか?
できますよ。
>アーキテクチャはlinux 2.6 on EM64T(およびPIC30F4012です.)
どちらも当たり前にできますよ。
0082デフォルトの名無しさん
2012/06/13(水) 10:29:17.85騙してやるなよ可愛そうだろ.
それとも本気で無知乙か?w
>>79
PICのアーキテクチャ見てみろ.heap……ってか,
レジスタ以外にメモリあるか? 別途メモリとか実装すればそれっぽいことはできるかもな.
そもそもシングルタスクなのにメモリ空間を分ける意味がわからないが.
AMD64はわからんが,linuxならシステムコールのリファレンスとか,
libcの逆アセンブルを見ればいいんじゃないか?あとはggれ
0083デフォルトの名無しさん
2012/06/13(水) 11:52:54.05無知乙
0084デフォルトの名無しさん
2012/06/13(水) 16:32:20.110085デフォルトの名無しさん
2012/06/13(水) 16:57:26.71>PICのアーキテクチャ見てみろ.heap……ってか,
>レジスタ以外にメモリあるか? 別途メモリとか実装すればそれっぽいことはできるかもな.
「PIC heap malloc」とかでぐぐってみ?
>そもそもシングルタスクなのにメモリ空間を分ける意味がわからないが.
ハーバードアーキテクチャとタスクがどうこうは関係ない話だが? 本気で無知乙だな。
0086デフォルトの名無しさん
2012/06/17(日) 13:28:27.160087デフォルトの名無しさん
2012/06/17(日) 13:42:22.460088デフォルトの名無しさん
2012/06/17(日) 15:25:43.26「初心者を愚弄」って、>>82の
>それとも本気で無知乙か?w
みたいなこと?
0089デフォルトの名無しさん
2012/06/29(金) 16:22:44.16指定しなかった場合、実行時に使われるセレクタはDSで合ってますか?
0090デフォルトの名無しさん
2012/06/29(金) 17:26:44.55EIPによる命令フェッチはCSなのと、PUSHやPOPでのESPによるアクセスはSSだけど、
他に例外はあったかな。
0091デフォルトの名無しさん
2012/06/29(金) 17:32:00.51ストリング命令でのdiはesだと思う。
0092デフォルトの名無しさん
2012/06/29(金) 18:14:35.79CS==DS==SS==ESというキチガイモデル
LDTでプロセス毎のメモリ空間を確保
まあお陰で楽と言えば楽なんだが
0093デフォルトの名無しさん
2012/07/04(水) 01:17:53.26大変よくわかりました、ありがとうございます
0094デフォルトの名無しさん
2012/07/06(金) 01:32:49.84あとまったく知識ゼロの状態でCASL2を勉強して合格しようと思ったら
どれぐらいの期間かかりますか?(CASL以外の時間は含まず)
0095デフォルトの名無しさん
2012/07/06(金) 01:40:51.02何かひとつ実際のアセンブラが使えればCASLなんて屁でもないので
CASLの勉強なんて無駄なので止めなさい。
今使ってるPCのアセンブラでも勉強したほうがはるかに有意義だから。
0096デフォルトの名無しさん
2012/07/06(金) 08:45:26.33人による、としか。
CASL2自体を覚えるのはそんなに掛からないよ。
早い人ならそもそも試験会場で問題冊子に書かれた仕様と問題文から覚えちゃう。
苦手な人でも、一年やって仕様自体が頭に入ってない人は稀だろう。
問題となるのはそこからの応用力だから、そればかりは本当にその人次第だねえ。
応用できちゃう人は覚えた瞬間からほぼ全問解けるだろうが
応用の苦手な人は問題集で色んなパターンを覚えるしかない。
009794
2012/07/06(金) 22:01:30.66>>95
そうなんですか…CASLが勉強時間も短くて、試験にも通りやすいと聞いたので
選択しようと思ってたのですが、今後役に立たない知識ならば別のを選択したほうがいいですかね…
>>96
試験本番で仕様を読んで合格する人ってすごいですね…
0098デフォルトの名無しさん
2012/07/06(金) 23:20:43.78まあ、合格するまではやってみてもいいんじゃね
0099デフォルトの名無しさん
2012/07/09(月) 13:16:53.86MAIN START
OUT BUF,LEN
RET
BUF DC 'Hello, World!'
LEN DC 13
END
Hello,Worldって表示させるだけなんですが、
BUF DC 'Hello, World!'
LEN DC 13
この二つを
MAIN START と OUT BUF,LEN の間に記述したら駄目なんでしょうか?
流れ的にはラベルBUFにHello,World、LENに13と宣言してからOUTで出力させるような気がするのですが
C言語とはアルゴリズムが全然違うんでしょうか?
私が買った参考書にも特に説明もありませんでした。
出力の後に宣言があるので、なぜそうなるのかどなたか教えてください。お願いします
ちなみにこのプログラムは以下のサイトから抜粋しました
http://www.officedaytime.com/dcasl2/pguide/chapter1f.html
0100デフォルトの名無しさん
2012/07/09(月) 13:51:18.05その場所に置かれてしまうので、もしMAIN STARTの後に置いたら、
その文字コードを命令とみなして実行してしまうのでめちゃめちゃになる。
0101デフォルトの名無しさん
2012/07/09(月) 13:55:58.49>BUF DC 'Hello, World!'
>LEN DC 13
>この二つを
>MAIN START と OUT BUF,LEN の間に記述したら駄目なんでしょうか?
セグメントの記述をキッチリしてればおk
0103デフォルトの名無しさん
2012/07/09(月) 21:14:50.18なるほど、とか言ってるけど実際分かってないんだろ?
0104デフォルトの名無しさん
2012/07/09(月) 21:17:22.99うん
0105デフォルトの名無しさん
2012/07/09(月) 21:29:09.19私の勉強不足と理解力が無いだけなんで、理解できるよう努力します
0106デフォルトの名無しさん
2012/07/10(火) 00:15:24.710107デフォルトの名無しさん
2012/07/10(火) 00:21:33.240108_
2012/07/12(木) 22:43:47.480109デフォルトの名無しさん
2012/07/12(木) 22:57:27.69大津のいじめ自殺について、本当にたくさんのメール、ツイートいただきました。
【中略】
担任の先生の、前任地、滋賀大学付属中学における、ハングルの授業・・?の記事なども入手しました。
英語習得段階もまだまだ中途であるはずの中学校で、なぜハングルを教育する必要があるのか?
子ども達に選択の余地はあったのか?
いかなる方針で、誰のオーソライゼーションによってそのような教育が行われていたのか?
それだけでも、かなり変わっているな、と感じられましたし、
【中略】
教育の自主性とか教育現場不可侵、、などを超えてしまっている現実を、
手をこまねいて見ていた多くの関係者、、。
3年前に「日教組政権?」が成立してしまったことで、
そこに、ますます歯止めがきかない空気が、浸透してしまった、そんな可能性はないのでしょうか?
ソース
http://blogos.com/article/42932/
ハングルの授業の資料
http://blog-imgs-53.fc2.com/h/o/t/hotlog/1341623759_img6946.jpg
0110デフォルトの名無しさん
2012/07/12(木) 23:07:03.19大蔵省のおばちゃんいらね
0111デフォルトの名無しさん
2012/07/13(金) 01:18:34.37そんなにおかしいこと言ってないだろ?
大蔵省が気に入らないのか?
0113デフォルトの名無しさん
2012/07/13(金) 10:07:42.620114デフォルトの名無しさん
2012/07/14(土) 02:45:23.360115デフォルトの名無しさん
2012/07/14(土) 07:15:16.791000倍狂ってる。
0116デフォルトの名無しさん
2012/07/14(土) 14:37:00.650117デフォルトの名無しさん
2012/07/15(日) 02:21:18.10韓国の方でしたか
それは失礼しました
0118デフォルトの名無しさん
2012/07/15(日) 07:28:14.940119デフォルトの名無しさん
2012/07/16(月) 13:07:09.290120デフォルトの名無しさん
2012/07/18(水) 09:06:45.66http://engawa.2ch.net/test/read.cgi/poverty/1342528699/
麗水エキスポ:1000ウォンの深夜入場券発行へ
麗水エキスポの入場者数が目標を大幅に下回っていることを受け、
韓国政府は1000ウォン(約69円)の深夜入場券を発行することを決めた。
http://www.chosunonline.com/site/data/html_dir/2012/07/17/2012071701101.html
0121デフォルトの名無しさん
2012/07/19(木) 00:31:33.84戻り値が -1 である時に条件分岐したいのですが、
どうすればいいのでしょうか?
Linux x86_64でsyscallでopenを呼び出し、
ファイルオープンが出来なかったらエラーに飛びたいのです。
開きたいファイルが存在しない状態で実行ファイルを
実行したけれど、エラー処理に飛びませんでした。
# error check
cmp $-1,%rax
je _err
としても、
# error check
cmp $0xFFFFFFFFFFFFFFFF,%rax
je _err
としてもうまく行きませんでした。
0122デフォルトの名無しさん
2012/07/20(金) 01:41:07.820123デフォルトの名無しさん
2012/07/20(金) 23:06:25.48-2 が戻るんですね。
戻り値が負であればエラーと見做せばいいんですね。
0124デフォルトの名無しさん
2012/07/21(土) 09:43:17.25http://engawa.2ch.net/test/read.cgi/poverty/1342751788/
シャープ製太陽光パネル、「出力低下なし」お墨付き−欧最大の研究機関が評価
シャープは同社製の太陽光パネルに「PID」と呼ばれる産業用太陽電池特有の出力低下現象が起きないと欧州最大の研究機関に認められた。
フラウンホーファー研究機構(本部=独ミュンヘン)が欧州、北米、中国、韓国メーカーなどの太陽電池モジュール13製品を評価した。
欧州ではPID現象による太陽光パネルの出力低下が相次ぎ、品質問題として注目されている。PID現象が発生しなかったのは4製品だけ。
これまでに京セラ、ドイツの最大手Qセルズも現象が起きなかったと公表している。
詳細 2012/7/20
http://www.asahi.com/digital/nikkanko/NKK201207200019.html
0125uy
2012/07/23(月) 23:46:45.61流石にITに夢見る奴も絶滅してしまったせいだろうか
プログラミングというものが、リアルで中学生位でも出来る奴が増えてきてるんだろうな
VBとか、BASICじゃなくてC++、C#関係を
そうやって一般人でも空気を吸うかのごとく扱えるようなジャンルになってくると
プロってものはいらなくなってくる
あとに残された金儲けの手段は
煩雑で、未整理で、情報の収拾が難しい分野の技術
けど、そういったものも、いずれ徐々に俺みたいな奴がその得た情報で金儲けするわけでもなく
無償で情報ばら撒き始めれば市場も崩れる
後に残されるのは、工場勤務などとなんら変わらない
個人能力に左右されないお仕事
機械で自動化できる部分を、あえて人間にやらせるお仕事
それが大多数のプログラマの仕事になるんだろうよ
0126uy
2012/07/23(月) 23:53:39.98なんら変わらない、所詮は再利用するかしないかどころか、
不必要なシステム、不必要なプログラムを、人間の労働力が余っているから仕事を与えさせて動かしているだけであって
それなら、ゲーム系に「無駄」を使ったほうがマシだよ
コピペで済むものを、わざわざ再開発していく
コピペで済まされたら、暇になっちゃうから
遠回りして、仕事してるフリをしろと
本当に悲惨な職業だと思う
0127uy
2012/07/24(火) 00:05:23.79手段そのものでストレスを発散できるようになり、
目的度外視で手段を楽しいと思わなければ、その者は不幸だろう
ありえないリソースをサイト上にアップしているにも関わらず、
あまりにもアクセス数の少ない技術系情報サイト
そういうものも、手段を楽しんでいなければ構築できはしない
結局は気づくしかない
人間の素の演算能力が高くなれば、プログラミング言語がどれであろうと構わないって事
結局、世界全体の技術力を高めるには、人間の平均スペックを何世代にも渡って向上させていくしかないんよ
技術力のないバカに気づかせる事よりも、自分のことだけ考えて生きてた方がマシ
0128デフォルトの名無しさん
2012/07/24(火) 19:38:45.580129デフォルトの名無しさん
2012/07/27(金) 00:17:08.91この試験のために参考書いくつか買ってるけど金がかかってしょうがない
専門学校やPCスクールに通うよりは遥かにましだけど、1万以上は軽く飛んだぜ
0130デフォルトの名無しさん
2012/07/27(金) 00:17:55.070131デフォルトの名無しさん
2012/08/01(水) 09:09:30.11図書館で昔の書籍発掘しながら勉強してるよ
0132デフォルトの名無しさん
2012/08/03(金) 10:39:06.85内部的には2進数で管理してるんでしょ?
0133デフォルトの名無しさん
2012/08/03(金) 11:25:31.622進とか10進というのは表記法の違い。
表示する時に、たとえば7セグメントデコーダに 8 を表示するなら、
全てのLEDを点灯させるとか。
0134デフォルトの名無しさん
2012/08/03(金) 14:13:28.730135デフォルトの名無しさん
2012/08/03(金) 19:10:57.51そう言うのは混乱させる元だと思う。
0136デフォルトの名無しさん
2012/08/05(日) 21:30:51.99アセンブラって直接CPUいじるイメージだったからなんか違うなー
と思い、マイコンのアセンブラプログラム(ハンドアセンブラしてる時代)の本借りて勉強したら、構造が単純だからスイスイ頭に入ってわかりやすかったし、機械を操作してる感じもあって非常に勉強になった
こういうことをしたくてアセンブラを勉強したかったのに、最近のアセンブラ教本は他の高級プログラム言語の本となんらかわりがいないのがなんかかなしいな
昔の本を読むってのも勉強になると思った
0137デフォルトの名無しさん
2012/08/05(日) 21:39:03.590138デフォルトの名無しさん
2012/08/05(日) 21:58:43.57OS上で動作するんだったら普通の言語でいい
オレはコンピュータが動作する仕組みが知りたいからアセンブラの勉強はじめたんだけど、独習とかの教本はピンとこなかった
そういう意味で昔の本のほうがピンとくるんだ
アセンブラでコンパイラ作る本とかあって、コンパイラがどういう構造でできてるかとか勉強になるから面白いんだ
0139デフォルトの名無しさん
2012/08/05(日) 22:10:40.75したくて、自分のコードを書き換えながら実行するプログラムとか
アセンブラで作ってたなあ、なつかしい(遠い目
0140デフォルトの名無しさん
2012/08/06(月) 00:57:17.15自己書き換えプログラムか 今のでそれやったら命令キャッシュにうまく読み込まれなくて
ハングするんだったな
0141デフォルトの名無しさん
2012/08/06(月) 01:38:19.73これわかるわー
今のrichなユーザインタフェースのOSや機能満載の開発環境の上だと,初心者を
プログラミングの世界に導くのが逆に難しくなってきていると思う."hello world"
なんて画面に表示できたところで何がおもしろいの?ってな感じなんだろうな.
それよりも単純に画面をタップしてモンスターをやっつけたりするほうが子供たちには
楽しいんだろうよ.今の子供たちはかわいそうだと思ってしまう俺も年なのか.
0142デフォルトの名無しさん
2012/08/06(月) 07:39:54.12ドラクエやってゲーム作りたいって思って
じゃあ基礎のアセンブラやりましょうとかなったら
完成までの道のりが遠すぎて挫折する
今は仮想化が何重にもなっててCPUを意識したプログラムもわけがわからない。
Mac上にVirtualBoxでWindows入れてその中で動くQEMU用のコードを書いたときに
最終的に動くCPUやメモリ内容が想像しづらい
いまサーバ側で動くCのプログラム書いてるけどそれも動かすのVPSだしなー
テクニックとかは仮想でも生きるんだよね?
0143デフォルトの名無しさん
2012/08/06(月) 14:45:28.62大先輩ですねー
俺らんときはかろうじてポケコンが有りましたよ
あんまいいじってなかったけどw
本当にコンピュータのことを勉強するんだったらCPUを直接操作して、こうやって画面に出力して、こうやって入力してって基本的なことから学んだほうがいいような気もします
自分は、なんでPCてこんな動きするんだろ?OSってなんで必要なんだ?って疑問から入って、調べていくうちにどんどんわからないことが増えていって、最終的にはアセンブラだなって思ってアセンブラの勉強したけど結局他の言語と同じじゃんとなってしまいました
どちらかというとアセンブラより、ハンドアセンブラをしたほうが、勉強になる気がします
そっからはいって経験を積み上げていくほうが面白いと僕は感じました
0144デフォルトの名無しさん
2012/08/06(月) 19:54:32.61> ハングするんだったな
しないよ。ていうか、キャッシュはコヒーレンシを保たなきゃ困るんだから。
自己書き換えでトラブるのはキャッシュじゃなくて先読みバッファ。
Intelの場合Pentium以降はそのへんチェックしてて、書き換えた結果が即有効になる。
0145デフォルトの名無しさん
2012/08/06(月) 20:13:44.82先読みバッファって何? パイプラインではなくて?
「IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide」
http://download.intel.com/products/processor/manual/325462.pdf
の「8.1.3 Handling Self- and Cross-Modifying Code」てとこ見ても、ジャンプ命令かシリアライズ命令入れれって説明で、
> Intelの場合Pentium以降はそのへんチェックしてて、書き換えた結果が即有効になる。
て感じではないみたいだが。
0146デフォルトの名無しさん
2012/08/06(月) 21:28:15.26↓の中で Pentium って書いてあるところを検索して、その前後を見ればわかる。
ttp://service1.symantec.com/legal/publishedpatents.nsf/0/D10DB5F5D479457888256DF7005D6C1D/$FILE/United%20States%20Patent%205,765,030.htm
0147デフォルトの名無しさん
2012/08/07(火) 03:53:05.21作った訳ですね。
0148デフォルトの名無しさん
2012/08/07(火) 04:00:09.59情報古杉。お前馬鹿だろ。
0149デフォルトの名無しさん
2012/08/07(火) 07:30:37.860150デフォルトの名無しさん
2012/08/07(火) 07:37:01.51TK-80の頃でもクロスアセンブラとか珍しくなかったが。
0151デフォルトの名無しさん
2012/08/07(火) 13:28:35.36症状から当たりを付けてダンプリストながめて直接手直しなんてのはザラだった。
0152デフォルトの名無しさん
2012/08/07(火) 14:07:30.05そんなの時代関係ないが。
0153デフォルトの名無しさん
2012/08/07(火) 17:46:25.83ふつーはパイプラインにのってる書き換え前の命令がそのまま実行される
キャッシュもユニファイドでなければinvalidしない限り反映されん
x86は互換性命で無駄に努力しとるが
0154デフォルトの名無しさん
2012/08/07(火) 22:33:11.95ハンドアセンブルまでしてこそ
「プログラムもデータも同じようにメモリに乗る」
のが判るのは確かだな
前にCASL2教えてくれって言われて説明してたらそこが解ってもらえないから
CASL2の仕様引っ張りだしたがニーモニックだけでオペコード載ってないでやんの
それがあったならノイマン型コンピュータの解説にも便利だろうに…
Win32のDEBUGコマンドはそれを分かりやすく示してくれてたのに
64で削られたのは残念だった
0155デフォルトの名無しさん
2012/08/07(火) 23:12:25.64ほんとそうだよね
ハンドアセンブルしてからようやくアセンブラがどういうものかわかる
nasmとかmasmとか、勉強したとき、ラベルやら変数やらでわかりやすく記述できるのはいいんだけど、それがCPUのなかで順次どういう風に処理されてるかわかりづらかった
Z80で自分でラベルとかつけながらアセンブラでプログラム作って、実際にHEXに変換するって作業をするとCPUとメモリとのやりとりがわかる
この経験をしておけばCのポインタとかすっごい理解しやすいと思うんだが…
0156デフォルトの名無しさん
2012/08/08(水) 05:24:04.18理解できなかったりするわけねw
情報処理技術者試験の出題範囲が提示されてる、実施要綱だかの資料に、
附録で参考資料扱いだけど、オペコード表は載ってる。
0157デフォルトの名無しさん
2012/08/08(水) 05:29:40.35>理解できなかったりするわけねw
データサイズに応じてアドレスポインタ++ できるアーキテクチャってそんな多くないし、
あんまアセンブラと関係ないな。
0158デフォルトの名無しさん
2012/08/08(水) 07:06:28.800159デフォルトの名無しさん
2012/08/08(水) 18:10:41.920160デフォルトの名無しさん
2012/08/09(木) 08:43:37.95ビッグエンディアンですか?リトルエンディアンですか?
処理系定義だべ?
0161デフォルトの名無しさん
2012/08/09(木) 10:23:46.580162デフォルトの名無しさん
2012/08/11(土) 03:28:16.51メモリ上では2進データだけど
画面表示するときとか十進数で表示するけど
LEDとかで1桁の数字とか表示するとかなら固定パターンの出力でいいかもだけど
十進数で数桁あるのを表現するときってどうやってんの?(十進数の桁ごとに分割する方法?)
メモリ上のたとえば4バイトの符号ありの整数とか少数とか
0163デフォルトの名無しさん
2012/08/11(土) 04:44:30.97商がゼロになるまでくり返す。32bitなら最大8回。
16進の表示:0000000FhでANDすると下4bit分の値(0〜F)ができる。その値をオフセット
にして、"0123456789ABCDEF"の表引き(先頭からオフセットbyte先を読みとる)、
その値を1文字表示。元の値を4bit右にシフト。これを32bitなら最大8回くり返す。
0164デフォルトの名無しさん
2012/08/11(土) 13:11:08.51ありが�dクス
0165デフォルトの名無しさん
2012/08/11(土) 14:01:27.72いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)
に変換するのに普通はそんな間抜けな方法は取りませんw
0166デフォルトの名無しさん
2012/08/11(土) 14:04:56.71↑具体例も示せない口先だけの屑
0167デフォルトの名無しさん
2012/08/11(土) 15:42:56.50>>166
の二名がどうやらクズのようです
0168166
2012/08/11(土) 15:55:16.18void putN(int n)
{
if (n >= 10) {
putN(n / 10);
}
putchar('0' + n % 10);
}
0169デフォルトの名無しさん
2012/08/11(土) 16:49:39.60商と剰余でするなら再帰せずに12バイトの配列用意した方がよくないか?
で、165が言ってるのはそもそも商と剰余を使わずにBCDで論理演算だけでやるんだ(キリッ
って事だろ
誰もBCDで扱いたいとは言ってないけども
0170デフォルトの名無しさん
2012/08/11(土) 16:55:59.63>再帰せずに12バイトの配列用意した方がよくないか?
どういう点でよいと言ってるのか分からんがそう思うならお前がそういう例を示せばいいだけの話。
0171デフォルトの名無しさん
2012/08/11(土) 17:01:04.66>商と剰余でするなら再帰せずに12バイトの配列用意した方がよくないか?
なぜ12バイト?
0172デフォルトの名無しさん
2012/08/11(土) 17:03:02.19>で、165が言ってるのはそもそも商と剰余を使わずにBCDで論理演算だけでやるんだ(キリッ
>って事だろ
>>165が言ってるのは 整数→BCD の変換だろう
0173デフォルトの名無しさん
2012/08/11(土) 17:17:53.6832ビットだと11桁が最大だろ?
ttp://ideone.com/0fAwc
負数も入れて13になっちゃったけど
>>172
165は変換してそれを使うといいたいんだろ?
それがそもそも163とかからはお呼びじゃなさそうだったというのを書きたかったのだが
如何せん日本語が不自由だからな
0174デフォルトの名無しさん
2012/08/11(土) 17:20:32.04どう見ても最大は10桁だなw
0175デフォルトの名無しさん
2012/08/11(土) 17:34:32.46ttp://ideone.com/0fAwc
・0 与えたとき puts() が 2回呼ばれるとかロジックが汚すぎる。
・マイナスをサポートしてるのは偉いが、0x80000000 を与えると多分うまく表示されない。
他人に見せるサンプルとしてどうなのという気がする。
0176デフォルトの名無しさん
2012/08/11(土) 17:42:30.37>165は変換してそれを使うといいたいんだろ?
>それがそもそも163とかからはお呼びじゃなさそうだったというのを書きたかったのだが
中間形式は1文字/バイトで持とうがBCDで持とうが自由じゃね?
10桁くらいならメリットも小さいが桁がもっと多い場合にはメモリ使用量が少ないとか、デバッガでメモリダンプしたときに見易いとか、無理矢理考えれば BCD にも利点がないわけではない。
0177デフォルトの名無しさん
2012/08/11(土) 21:40:52.120178デフォルトの名無しさん
2012/08/11(土) 22:56:05.10最単純な符号なし整数の場合、まず除数と被除数のMSBが揃うまで除数を左シフトして...
後は分かるよね?
0179デフォルトの名無しさん
2012/08/11(土) 23:15:35.710180デフォルトの名無しさん
2012/08/12(日) 03:42:47.350181デフォルトの名無しさん
2012/08/12(日) 05:49:21.37仕方なく除算のコードを書いたことがある。7801にも移植できて、奇跡的にパツイチ。
0182デフォルトの名無しさん
2012/08/12(日) 06:27:02.2616bitの値を10で割るだけならこんなもん。8085で書いても30行くらいじゃないか?
unsigned div10(unsigned n, unsigned* mod)
{
unsigned ans = 0;
unsigned cmp = 10 << 12;
unsigned i;
for (i = (1 << 12); i > 0; i >>= 1) {
if (n >= cmp) {
n -= cmp;
ans |= i;
}
cmp >>= 1;
}
*mod = n;
return ans;
}
0183デフォルトの名無しさん
2012/08/12(日) 06:52:25.96cseg
div10: xra a
sta ans
sta ans+1
lxi d,10 shl 12
lxi b,1 shl 12
loop: mov a,l
sub e
mov a,h
sbb d
jcs skip
mov h,a
mov a,l
sub e
mov l,a
lda ans
ora c
sta ans
lda ans+1
ora b
sta ans+1
0184デフォルトの名無しさん
2012/08/12(日) 06:54:55.75skip: ora a
mov a,d
rar
mov d,a
mov a,e
rar
mov e,a
mov a,b
rar
mov b,a
mov a,c
rar
mov c,a
ora b
jnz loop
xchg
lhld ans
ret
dseg
ans: ds 2
0185デフォルトの名無しさん
2012/08/12(日) 13:29:06.94というか、だから少なくとも除算がネイティブな機能として実装されてないようなCPUなら
10で割るなんて方法は取らない。
0186デフォルトの名無しさん
2012/08/12(日) 13:42:08.27具体的におねがいします
0187デフォルトの名無しさん
2012/08/12(日) 15:16:08.79- BCD同士の加算
- BCDの2のべき乗倍
- byte(nibbleでもいいけど) ⇒ BCD変換
だから、
0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
...
あとは分かるよね
0188デフォルトの名無しさん
2012/08/12(日) 15:20:36.36ビデオゲームのスコア表示なんかだったら、数字一桁に1バイトやパックド10進数で数字2桁に
1バイトを複数バイト使って点数計算と表示してたりするけど、そういう特殊な話してんじゃないんだよね?
0189デフォルトの名無しさん
2012/08/12(日) 15:23:09.83で、例えば16ビットの整数の値を割り算使わないで10進数で表示するのってどうやるの?
C の printf() なんかで当たり前に実装されてる機能だと思うけど。
0190デフォルトの名無しさん
2012/08/12(日) 15:24:35.37>0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
>0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
>...
>
>あとは分かるよね
なんで16進数が出てくるんだかマジ分からん
0191デフォルトの名無しさん
2012/08/12(日) 15:25:07.60int⇒uint⇒BCD⇒Hex
0192デフォルトの名無しさん
2012/08/12(日) 15:25:24.86C や擬似コードでもいいんで具体的にご説明願います
0193デフォルトの名無しさん
2012/08/12(日) 15:26:20.07>uint⇒BCD
↑んとこ具体的にご説明下さい。
0194デフォルトの名無しさん
2012/08/12(日) 15:26:38.45流石にそこまで初歩から説明させるのは勘弁してw
っていうか、少しはそれを恥ずかしいことだという意識を持とうよ
0195デフォルトの名無しさん
2012/08/12(日) 15:27:15.48だから>>187に考え方が書いてあるじゃん
0196デフォルトの名無しさん
2012/08/12(日) 15:28:45.25>流石にそこまで初歩から説明させるのは勘弁してw
>っていうか、少しはそれを恥ずかしいことだという意識を持とうよ
お前、具体的な方法も例示できないバカって思われてるの理解してる?
0197デフォルトの名無しさん
2012/08/12(日) 15:30:50.83バカにバカと思われても何とも思わない。
馬鹿だろお前。
0198デフォルトの名無しさん
2012/08/12(日) 15:31:46.310199デフォルトの名無しさん
2012/08/12(日) 15:34:03.23ああ、確かに何とも思わないね。
0200デフォルトの名無しさん
2012/08/12(日) 15:37:13.46言ってる側からはひとつのコードも例示されない不思議
0201デフォルトの名無しさん
2012/08/12(日) 15:38:28.440202デフォルトの名無しさん
2012/08/12(日) 15:40:33.16これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
それを知ってる人間以外には伝わらない。
というか、>>187の説明で理解できない奴がコード見て理解できるとは尚更思えんね。
0203デフォルトの名無しさん
2012/08/12(日) 15:41:30.85つまりこの程度の常識を知らない奴が多いってことか....
0204デフォルトの名無しさん
2012/08/12(日) 15:42:39.46>これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
>それを知ってる人間以外には伝わらない。
お前の知ってるアセンブラでいいよ
0205デフォルトの名無しさん
2012/08/12(日) 15:50:54.83>次のものはどんなCPUでも比較的実装が簡単
> - BCDの2のべき乗倍
実装は簡単かもしれんが整数みたいにシフトすりゃいいもんじゃないし、演算のコスト考えれば
割り算なんかしないと言ってるロジックには採用し辛いんじゃないか?
0206デフォルトの名無しさん
2012/08/12(日) 15:55:08.03割り算みたいに1ビットずつシフトして比較して減算して....なんてやるわけじゃないから
コストはずっと低い。
例えば256倍はBCD加算を8回繰り返すだけ。
0207デフォルトの名無しさん
2012/08/12(日) 16:01:44.27>例えば256倍はBCD加算を8回繰り返すだけ。
8ビットの割り算も、引けるかどうか8回繰り返すだけだよ。
0208デフォルトの名無しさん
2012/08/12(日) 16:03:59.84>次のものはどんなCPUでも比較的実装が簡単
> - byte(nibbleでもいいけど) ⇒ BCD変換
それが 整数→十進数変換 だろうに何言ってんのコイツ?
0209デフォルトの名無しさん
2012/08/12(日) 16:11:05.280210デフォルトの名無しさん
2012/08/12(日) 16:14:06.800211デフォルトの名無しさん
2012/08/12(日) 16:21:02.34>これはアセンブラで書かないと意味がないが、特定のCPUのアセンブラで書いても
>それを知ってる人間以外には伝わらない。
「アセンブラで書かないと意味がない」ってのは理解に苦しむが、もし俺がそういう状況だったら知ってる人が多いであろう x86 か ARM で書くけどなあ?
それか、書けるアセンブラ(8080、Z80、6800、6809、6502、8086、386、x64、PIC、AVR、SH、mips、PowerPC、Alpha)の中から選んでもらってそれで書くわ。
それぐらいの対応お前できねーの?
0212デフォルトの名無しさん
2012/08/12(日) 16:22:19.820213デフォルトの名無しさん
2012/08/12(日) 16:23:02.040214デフォルトの名無しさん
2012/08/12(日) 16:32:11.53a最下位のuint要素を10進表現の文字列へ変換して返す。(余った桁には0が入る。)
こんな感じに1〜2クロックで変換できるSIMD演算器の命令、追加されないかな。
需要無いか。
0215デフォルトの名無しさん
2012/08/12(日) 16:33:13.83死刑。
0216デフォルトの名無しさん
2012/08/12(日) 16:34:09.510217デフォルトの名無しさん
2012/08/12(日) 17:12:11.04完全に逃げの態勢
0218デフォルトの名無しさん
2012/08/12(日) 17:18:45.55そこは敢えてCASLでだな…
0219デフォルトの名無しさん
2012/08/12(日) 17:19:58.49>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換
どんなCPUでもBCD演算をサポートしてるとか思ってる?
0220デフォルトの名無しさん
2012/08/12(日) 17:21:00.65そう思うなら試しに君が書いたら?
まあアルゴリズムが理解できないから無理だよねw
自分の理解力不足を棚に上げてこれだからな。
アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。
0221デフォルトの名無しさん
2012/08/12(日) 17:25:38.50>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換
>
>だから、
>
>0xAABBCCDDのBCD変換値は0x00AABBCCのBCD変換値と0xDDのBCD変換値から求められる。
>0x00AABBCCのBCD変換値は0x0000AABBのBCD変換値と0xCCのBCD変換値から求められる。
>...
>
>あとは分かるよね
なんも説明してない典型
0222デフォルトの名無しさん
2012/08/12(日) 17:28:07.46>アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
>相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。
ん?>>183-184とかこのスレにコード投稿してる人もいるのに何言ってんの?
0223デフォルトの名無しさん
2012/08/12(日) 17:29:18.93>アセンブラのそれなりに実用的なコードなんて暗号的な上に冗長で、
>相当慣れてても読解に苦労するものなのにそのサンプルを書けとか馬鹿の戯言意外に聞こえん。
だから擬似コードでもいいって言われてんのにねー?
0224デフォルトの名無しさん
2012/08/12(日) 17:34:09.85>これはアセンブラで書かないと意味がないが、
C言語とかにはないBCD加算とかの命令は中身ブラックボックスの関数とかで代替できますよ。
a = bcdadd(b, c);
「アセンブラで書かないと意味がない」ってどゆこと?
0225デフォルトの名無しさん
2012/08/12(日) 17:48:35.38>>これはアセンブラで書かないと意味がないが、
「演算によるフラグへの影響を再現できない」とか言うのかな?
グローバル変数でCとかZとかのフラグ用意してaddやsubとかの演算は関数用意するとか、
C++で演算子のオーバーロードするとか、方法は幾らも考えられるよね。
0226デフォルトの名無しさん
2012/08/12(日) 18:20:29.11こんなこと一々説明されないと理解できないことは恥だと思うべきだと俺は思うが、
今問題にしているのは実行効率だから。
なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
コードに現れない。
0227デフォルトの名無しさん
2012/08/12(日) 18:21:51.19だったらこういうの相手にしても時間の無駄だな。
0228デフォルトの名無しさん
2012/08/12(日) 18:23:05.680229デフォルトの名無しさん
2012/08/12(日) 18:24:23.70>こんなこと一々説明されないと理解できないことは恥だと思うべきだと俺は思うが、
>今問題にしているのは実行効率だから。
>
>なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
>コードに現れない。
説明求められてんのはロジックなのに変な言い訳w
0230デフォルトの名無しさん
2012/08/12(日) 18:26:43.370231デフォルトの名無しさん
2012/08/12(日) 18:27:39.23馬鹿って本当鳥頭だよな。
>>226は>>225に対する回答だ。
0232デフォルトの名無しさん
2012/08/12(日) 18:29:21.92>今問題にしているのは実行効率だから。
>
>なぜ10で割った商と剰余を利用するより>>187の方法の方が効率的かはCで書いても
>コードに現れない。
どういう処理を機械語に落としたらどの程度の効率になるかなんてのは、自分で触ってる
プロセッサなら当たり前に想像付くようなモンじゃね?
お前、自分はそういう見積もりが出来ませんと言ってるワケ?
0233デフォルトの名無しさん
2012/08/12(日) 18:31:25.73求められてるのはロジックだと言ってるよ。お前が実行効率を理由にコードを提示しない理屈は通らんよ。
0234デフォルトの名無しさん
2012/08/12(日) 18:34:38.690235デフォルトの名無しさん
2012/08/12(日) 18:38:55.58>っていうか、こんだけ絡んでくる馬鹿が多いってことは、
>つまりこの程度の常識を知らない奴が多いってことか....
常識って言うなら、どっかの他人が書いるコードとかロジックの説明のページ、ゴマンとあんじゃね?
お前に具体的なコード書いたりすんのが無理ならそのURL書くだけでもいんじゃね?
0236デフォルトの名無しさん
2012/08/12(日) 18:41:40.33×どっかの他人が書いる
○どっかの他人が書いてる
0237デフォルトの名無しさん
2012/08/12(日) 18:45:14.11>に変換するのに普通はそんな間抜けな方法は取りませんw
まあ、BCD(=二進化十進数)の言葉の意味も理解してない馬鹿みたいだし。
0238デフォルトの名無しさん
2012/08/12(日) 18:54:43.27>いろいろ突っ込みどころがありすぎて困るが、uintをBCD(10進数って何だよw)
Man page of PRINTF
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/printf.3.html
> o, u, x, X
> unsigned int 引き数を、 符号なし8進数 (o), 符号なし10進数 (u), 符号なし16進数 (x と X) に変換する。
「10進数」なんて↑に限らず良く使われる用語では? 何がおかしいのだろう?
0239デフォルトの名無しさん
2012/08/12(日) 19:17:06.120240デフォルトの名無しさん
2012/08/12(日) 19:23:59.340241デフォルトの名無しさん
2012/08/12(日) 19:24:21.05違いますね。ここは知識豊富な上級者様(=>>203)に、「この程度の常識を知らない奴」等が教えを請うスレです。
0242デフォルトの名無しさん
2012/08/12(日) 19:52:24.06ひょっとしてお前こういうこと↓言いたいわけ?
typedef unsigned char bcd_t[5];
void put10(unsigned n)
{
bcd_t ans;
bcd_t t;
int i;
memset(ans, 0, sizeof(ans));
for (i = 0; i < 32; i += 8) {
byte2bcd(&t, n & 0xff);
bcdMultPowerOf2(&t, i);
bcdAdd(&ans, &t);
n >>= 8;
}
bcdPut(ans);
}
byte2bcd() の中身、割り算なしでどういう実装になるか教えてくれん? まさかテーブルじゃねぇよな?
0243デフォルトの名無しさん
2012/08/12(日) 19:53:06.34たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw
「整数値を、8進法 (o), 符号なし10進法 (u), 符号なし16進法で数字(列)に変換する」が正しい。
0244デフォルトの名無しさん
2012/08/12(日) 19:53:54.990245デフォルトの名無しさん
2012/08/12(日) 19:59:20.39>たいして専門知識もない奴が大昔に訳したまんま所が多いJMを出典にすんなw
日本人が書いたと思われる Ruby のマニュアルにも「2進数」なんて語が出てくるが、これも間違い?
sprintfフォーマット
http://www.ruby-lang.org/ja/old-man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html
> Ruby の sprintf フォーマットは基本的に C 言語の sprintf(3) のものと同じです。ただし、
> short や long などの C 特有の型に対する修飾子が ないこと、2進数の指示子(%b)が存在すること、
0246デフォルトの名無しさん
2012/08/12(日) 20:07:11.64byte⇒BCDはuintの上位バイトから実行した方が効率がいい。
byte⇒BCDの部分は除算命令でもテーブル参照でも何でも構わない。
そこで除算を使うななんて言ってない。
0247デフォルトの名無しさん
2012/08/12(日) 20:10:25.840248デフォルトの名無しさん
2012/08/12(日) 20:11:41.24>そこで除算を使うななんて言ってない。
「というか、だから少なくとも除算がネイティブな機能として実装されてないようなCPUなら
10で割るなんて方法は取らない。」
0249デフォルトの名無しさん
2012/08/12(日) 20:13:50.08ホント馬鹿の頭脳は8ビットだな。
0250デフォルトの名無しさん
2012/08/12(日) 20:14:53.620251デフォルトの名無しさん
2012/08/12(日) 20:17:21.460252デフォルトの名無しさん
2012/08/12(日) 20:18:03.42恥を知らないって幸せだね。
0253デフォルトの名無しさん
2012/08/12(日) 20:21:00.70>次のものはどんなCPUでも比較的実装が簡単
>
> - BCD同士の加算
> - BCDの2のべき乗倍
> - byte(nibbleでもいいけど) ⇒ BCD変換
「どんなCPUでも」って、BCD演算サポートしてないCPUにはしんどいんじゃないの?
0254デフォルトの名無しさん
2012/08/12(日) 20:23:30.920255デフォルトの名無しさん
2012/08/12(日) 21:28:13.40ニモニックで書けば一応アセンブラか?
もっともPLCのCPUはSHとかのどこにでもあるCPUの上の仮想CPUだけどね
0256デフォルトの名無しさん
2012/08/12(日) 21:50:48.10>次のものはどんなCPUでも比較的実装が簡単
> - BCDの2のべき乗倍
試しにZ80で2**24倍するコード書いてみたが処理重すぎだろ。
ld c,24
loop1:push hl
ld b,5
loop2:ld a,(hl)
add a,(hl)
daa
ld (hl),a
inc hl
djnz loop2
pop hl
dec c
jp nz,loop1
ret
これだけでざっと見て5000サイクル位掛かるじゃねーか。10で割ったほう速いだろ。
0257デフォルトの名無しさん
2012/08/12(日) 21:53:56.86>PLC(いわゆるシーケンサ)のCPUならBCD演算今でもサポートしてるよ
だから何? 8080だって6502だってBCD演算今でもサポートしてるけど?
0258デフォルトの名無しさん
2012/08/12(日) 22:13:24.540259デフォルトの名無しさん
2012/08/13(月) 04:46:30.850260デフォルトの名無しさん
2012/08/13(月) 04:53:24.870261デフォルトの名無しさん
2012/08/13(月) 04:57:06.070262デフォルトの名無しさん
2012/08/13(月) 05:14:19.270263デフォルトの名無しさん
2012/08/13(月) 09:44:15.100264デフォルトの名無しさん
2012/08/13(月) 14:16:19.570265デフォルトの名無しさん
2012/08/13(月) 14:28:12.28CASL II 入門講座 第5章 数値を10進数の文字列に変換する
http://www.officedaytime.com/dcasl2/pguide/chapter5f.html
0266デフォルトの名無しさん
2012/08/13(月) 14:33:07.30IN命令とOUT命令 - 3. 応用:符号なし10進数を文字列に変換して表示する
http://www-cg.cis.iwate-u.ac.jp/~fujimoto/prog3/printud.html
0267デフォルトの名無しさん
2012/08/13(月) 17:39:33.83学習用とはいえ、いちいち命令をすべて日本語に読み下すなと。
0268デフォルトの名無しさん
2012/08/13(月) 17:53:25.73どれのこと言ってんの?
0269デフォルトの名無しさん
2012/08/13(月) 17:57:42.24割と最近の製品の例
http://www.brielcomputers.com/wordpress/?cat=24
動作しているところ
http://nicoviewer.net/sm4158739
0270デフォルトの名無しさん
2012/08/13(月) 18:23:18.16どんだけ特殊な製品なんだw
こいうお遊び以外では需要なんてないだろ。
0271デフォルトの名無しさん
2012/08/13(月) 18:47:55.08http://www.westerndesigncenter.com/wdc/w65c02s-chip.cfm
6年前のトラ技の記事
http://toragi.cqpub.co.jp/Portals/0/backnumber/2006/06/p245-246.pdf
0272デフォルトの名無しさん
2012/08/13(月) 18:56:26.10俺らの知らんところで6502が使われてても不思議はない。
0273デフォルトの名無しさん
2012/08/13(月) 19:10:17.02そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の
CPUに需要はない。
0274デフォルトの名無しさん
2012/08/13(月) 19:14:50.89>そもそも8bitなんて組み込み用途しか需要がないんだから組み込み「マイコン」以外の
>CPUに需要はない。
新規開発に限ればまあだいたい合ってるが世の中それだけではない。
0275デフォルトの名無しさん
2012/08/13(月) 19:25:35.33外国から見れば、日本のパチンコやパチスロの事情なんてわけの分からん話だろうし、一般に情報も伝わらないだろう。
どこかの国に「日本のパチンコやパチンコ」に該当するものがあったとして、我々はそれを知りうることができるだろうか?
「組み込み「マイコン」以外のCPUに需要はない」と断言する奴は視野が狭いと思う。
0276デフォルトの名無しさん
2012/08/13(月) 19:29:54.80×「日本のパチンコやパチンコ」
○「日本のパチンコやパチスロ」
0277デフォルトの名無しさん
2012/08/13(月) 19:41:07.16パチンコ業界のことは知らんが、恐らく派製品ですらなくIPでしょ。
あれをZ80と呼んでよいかは微妙だね。
そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。
都市伝説の類じゃないのか?
0278デフォルトの名無しさん
2012/08/13(月) 19:43:34.370279デフォルトの名無しさん
2012/08/13(月) 19:46:42.79それは政治/行政上の理由という特殊事情で選択されているに過ぎず、技術的あるいは経済的理由で
選択されているわけではない。
0280デフォルトの名無しさん
2012/08/13(月) 19:47:17.91>そもそも今時本当にZ80相当を使ってるかどうか疑わしい気もする。
>都市伝説の類じゃないのか?
パチンコ関係じゃ、いまだにZ80の求人あるの知らんの?
http://www.careerjet.jp/search/jobs?s=Z80&l=%E4%B8%AD%E9%83%A8%E5%9C%B0%E6%96%B9
0281デフォルトの名無しさん
2012/08/13(月) 19:48:37.06そういう事情が日本以外には存在しないと考えるおバカさんですか?
0282デフォルトの名無しさん
2012/08/13(月) 19:50:04.350283デフォルトの名無しさん
2012/08/13(月) 19:51:42.19それに、求人があるからって現行製品かどうか分からんでしょ。
ある種の保守用人員かもしれない。
例えば古い台をゲーセン用に改造するためとか
0284デフォルトの名無しさん
2012/08/13(月) 19:54:43.540285デフォルトの名無しさん
2012/08/13(月) 19:57:00.93>それに、求人があるからって現行製品かどうか分からんでしょ。
>ある種の保守用人員かもしれない。
>例えば古い台をゲーセン用に改造するためとか
求人内容見て言ってる? 必死すぎw
0286デフォルトの名無しさん
2012/08/13(月) 19:58:51.32プロが語り合うスレになっちまってるな
0287デフォルトの名無しさん
2012/08/13(月) 19:59:12.10>だから知らねえって言ってるだろ。
知らないくせに断言とか良くできるなー。感心するわ。
0288デフォルトの名無しさん
2012/08/13(月) 20:01:35.650289デフォルトの名無しさん
2012/08/13(月) 20:36:32.240290デフォルトの名無しさん
2012/08/14(火) 14:45:16.63どうしよう
0291デフォルトの名無しさん
2012/08/14(火) 14:49:25.74インラインアセンブラか何かを勘違いしてる?
0292デフォルトの名無しさん
2012/08/14(火) 19:13:53.50最悪、ハンドアセンブルで!
0293デフォルトの名無しさん
2012/08/14(火) 21:08:36.30パソコンが中で何やってるか知りたくなって、アセンブラに興味が湧いたんだけど
スレの上のほうで64bit環境じゃうまく動かないって報告があったから…
アセンブラで何か作りたいってわけではないのですが、いい参考書あったら教えて下さい
因みにラ・リ・ルって
「アセンブラでアセンブリをアセンブルする」
でいいんですよね?
0294デフォルトの名無しさん
2012/08/14(火) 21:16:26.09> いい参考書あったら教えて下さい
はじめて読む486―32ビットコンピュータをやさしく語る
http://www.amazon.co.jp/gp/product/4756102131/
インテルのマニュアル水で薄めたような内容だけど、まあやさしく書いてる。
0295デフォルトの名無しさん
2012/08/14(火) 23:32:15.670296デフォルトの名無しさん
2012/08/14(火) 23:56:43.22それと、はじめて読むアセンブラ―ソフトウェアツールの原点を探る
を買ってみます
>>295
触って動かしてみたいけど64bit環境しか無いので…
0297デフォルトの名無しさん
2012/08/15(水) 02:04:23.84パソコンで64bit環境(x86系)なら、32bitなアプリも作れるでしょうに
何を読んで?そう思ったのかしらんけどね
アセンブラっていっても、どのCPU?でやりたいのかな?
0298デフォルトの名無しさん
2012/08/15(水) 02:44:39.11CPUの中身を知りたいのならオレが今読んで学んでる、Z80マイクロプログラミング実習って本がわかりやすい
いきなりx86系とか学ぶと頭ついていかなかった頭の悪いオレからの助言
0299デフォルトの名無しさん
2012/08/15(水) 16:03:00.55Z80も一応調べてみたけど「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」
って感じだった
x86の方が明らかに組みやすい
0300デフォルトの名無しさん
2012/08/15(水) 16:03:50.850301デフォルトの名無しさん
2012/08/15(水) 16:20:15.82>「あれ?乗算除算浮動小数点演算命令ないよ?何それ?」
>x86の方が明らかに組みやすい
そういうレベルで分かった気になってると、自前で乗除算組まなければいけなくなったときに泣きを見るゾw
0302デフォルトの名無しさん
2012/08/15(水) 16:27:54.03それって、かっこいいの?
0303デフォルトの名無しさん
2012/08/15(水) 16:29:52.700304デフォルトの名無しさん
2012/08/15(水) 16:38:21.04アセンブラよりは低レベルな考え方を身につける方がいいんじゃね
今は、CPUに依存した命令が読めればいい方
0305デフォルトの名無しさん
2012/08/15(水) 17:00:29.29>それって、かっこいいの?
むしろ知らないとCのデバッグにも苦労すると思う。
性能出したいところでコンパイラの出力したコードを参照してソースの書き方変えるとか、当たり前のことだし。
0306デフォルトの名無しさん
2012/08/15(水) 17:02:43.52レベルの高いことまでやろうとは思ってないんじゃないの?
0307デフォルトの名無しさん
2012/08/15(水) 21:43:58.20回転/シフト命令だけで結構楽に組めるんだな
超越関数に至ってはSSE2で書いた方がFPUよりも速いという
0308デフォルトの名無しさん
2012/08/15(水) 22:18:00.98Intel Core i7 860です
>>10-14
を見て64bitだとうまくいかないのかと思いました
0309デフォルトの名無しさん
2012/08/15(水) 22:25:14.65>を見て64bitだとうまくいかないのかと思いました
Windowsの64bit版だと16bitのコードが動かないのはその通り。
64bitか32bitのコードを動かすか、エミュレータ上で16bitのコードを動かせばよいだけ。
0310デフォルトの名無しさん
2012/08/15(水) 23:46:39.85調べてみたら
win7のxpモードで16bitが動くようなので
それでやってみます!
0311デフォルトの名無しさん
2012/09/26(水) 23:10:27.88この第一オペランドの:の意味がわからんのです
これはCSとw_sp両方にSPを入れるってことなの?
0312デフォルトの名無しさん
2012/09/26(水) 23:13:02.28本かインテルのマニュアルかなんか見れ。
0313デフォルトの名無しさん
2012/09/26(水) 23:33:38.29記述自体が古いのかな…
なんせPC9801のアセンブラだから…
0314デフォルトの名無しさん
2012/09/26(水) 23:43:22.21超基本的なことだから、書いてないなら本が悪い。ぐぐってわからんのならお前の頭が悪いわ。
0315デフォルトの名無しさん
2012/09/26(水) 23:46:33.52すまん…もうちょっと頑張ってぐぐってみる
ありがとう
0316デフォルトの名無しさん
2012/09/26(水) 23:53:13.25CSってのはコードレジスタだから、そこを基準に[w_sp]分オフセットがかかってるってことなんだな!!
わかったぞ!
>>313さんありがとう
ちゃんと考えなかったオレが悪い
考えるキッカケを作ってくれてありがとう
0317デフォルトの名無しさん
2012/09/26(水) 23:54:19.260318デフォルトの名無しさん
2012/09/27(木) 09:47:06.61inc dword ptr [count]
というのはアトミックですか?
++cnt;
をVC10でReleaseコンパイルしたら上記のようになったのですが、
デバッグコンパイルしたら下記のように分解されてしまいました。
�A
mov eax,dword ptr [count]
add eax,1
mov dword ptr [count],eax
�Aは明らかにアトミックではないと思いますが、
コードの途中で、他のスレッドが同じコードを通ったときに
カウントがおかしくなってしまうのは構いません。
2つ以上のスレッドが同時に�@か�Aを通ったときに
動作が異なる可能性があるのかを知りたいです。
(動作が異なるならインラインアセンブラで書くか、
カウントがおかしくなるのが困るようになったときは
クリティカルセクションでも使います)
0319デフォルトの名無しさん
2012/09/27(木) 10:04:35.720320デフォルトの名無しさん
2012/09/27(木) 10:06:38.40普通はinc等ではなく、lock+xadd
0321318
2012/09/27(木) 11:59:10.28知りたいのは、マルチスレッドで同じコードを同時に通った場合に、
�@と�Aで動作が異なる可能性があるかどうかなのです。
カウントがおかしくならないようにするための方法を
示していただいたということは、�@もアトミックではないと
解釈して良いのでしょうか?
0322デフォルトの名無しさん
2012/09/27(木) 21:16:39.570323デフォルトの名無しさん
2012/09/27(木) 23:58:41.440324デフォルトの名無しさん
2012/09/28(金) 00:47:19.87変更するときに割禁かまさなくて済むから意識的に使った。
だからx86でも�@はアトミックだと類推する。
0325デフォルトの名無しさん
2012/09/28(金) 01:14:48.26add eax,1
*
mov dword ptr [count],eax
*印のところでスレッド切り替えが起きたらどうなると思う?
0326318
2012/09/28(金) 12:23:50.67>>323
クリティカルセクションを実装するのに使える命令なのでしょうか?
排他が必用になったときに、試してみます。
>>324
�@がアトミックだとなると、
デバッグ版の�Aとは違う動作になってしまいます。
あまりに挙動が変わってしまう場合は、
インラインアセンブラで�@に書き換えてみます。
>>325
他のスレッドで、カウントが巻き戻ってしまうかも
しれないというのは分かります。
他に致命的な問題があるのなら、
インラインアセンブラで�@に書き換えてみます。
0327デフォルトの名無しさん
2012/09/29(土) 17:44:46.97BIOSファンクションがあるのか、はたまたデバイスとやり取りしてやるのか
出来るなら、どいつが扱ってるのか理解したいから、BIOSファンクションを使わなくてもいいなら、そちらの方法が知りたい
0328デフォルトの名無しさん
2012/09/29(土) 18:02:25.95どうやってACPIを使うかは知らん。
探せば仕様書くらい出てくるかも。
0329デフォルトの名無しさん
2012/09/29(土) 22:08:07.87cmpxchgはCAS命令と呼ばれる物だよ
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9A%E3%82%A2%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97
Lock-freeとWait-freeアルゴリズムが実装出来る
あとx86に
http://ja.wikipedia.org/wiki/Load-Link/Store-Conditional
これが欲しかった
まあいらんのかも知れんれど
0330デフォルトの名無しさん
2012/09/29(土) 22:08:24.52○>>326
0331デフォルトの名無しさん
2012/09/29(土) 22:44:36.32APMファンクション呼べばよろし
ACPIでもできるけどAMLインタプリタ用意せにゃいかんので
面倒くさい
0332デフォルトの名無しさん
2012/09/30(日) 18:55:20.60APMという単語で調べて、一応なんとかなった、ありがとう。
調べれば調べるほど、アセンブラでもかなり高級なプログラミングなんだなと思えて、嫌になってくるが。
in、out命令でなんとかならないかのう
0333デフォルトの名無しさん
2012/10/01(月) 16:29:22.52Embedded Controler叩けばいいはずだが、標準仕様がないしそのへんの情報は
ほとんど公開されとらんので自力で調べんといかん
のでBIOSにお願いするのが一番簡単
0334デフォルトの名無しさん
2012/10/02(火) 16:49:46.89ACPI使わないとデバイス割り当て出来なかったりもするし、どこに向かっていくんだか…
0335デフォルトの名無しさん
2012/10/06(土) 20:25:08.1216bitモードが消え去ってUEFIに移行すりゃなくなるだろう
0336デフォルトの名無しさん
2013/03/07(木) 11:26:55.04compiler コンパイラ、「コンパイルを行う翻訳プログラム」
linker リンカ、「…ロードモジュールを作成するために用いられる計算機プログラム」
assembler アセンブラ、「アセンブルを行う翻訳プログラム」
assemble アセンブルする、「アセンブラ言語で書かれたプログラムを目的プログラムに翻訳する」
assembler language program アセンブラ言語プログラム
assembly language アセンブラ言語(JIS用語らしい)、アセンブリ言語、「機械命令に対応した記号形式を備えたプログラム言語」
source code ソースコード、原始コード
コンピュータ用語辞典第3版(日外アソシエーツ)
0337デフォルトの名無しさん
2013/04/24(水) 11:21:55.75はじめてプログラミングを勉強するにあたり、
CASL2とZ80だとどちらがお勧めでしょうか?
CASL2は基本情報参考書の付録CD-ROMのエミュ、Z80は講談社ブルーバックス付録CD-ROMのエミュを持っていて、このどちらかで勉強を始めたいと考えているのですが…
どなたかアドバイスをよろしくお願いします。
0338デフォルトの名無しさん
2013/04/24(水) 11:25:29.76それでもやるというならどちらでも好きにしなさい。
0339デフォルトの名無しさん
2013/04/24(水) 11:35:30.91エミュレータを使っての学習はつまらんので続かないと思う。
実機を使うのが良いよ。
0340デフォルトの名無しさん
2013/04/24(水) 17:28:28.540341デフォルトの名無しさん
2013/04/24(水) 17:29:37.130342デフォルトの名無しさん
2013/04/24(水) 17:58:17.10要するに機種はなんでもいいからアセンブラを始めてみたいということだと思うが、それなら
今ならArduino辺りでいいと思う。LEDチカチカさせるだけでも楽しいよ。
0343337
2013/04/24(水) 20:27:47.68アドバイスをぐぐって調べてみます
コンピュータを理解したくて、勉強をしたいと思ったんです。
0344デフォルトの名無しさん
2013/04/24(水) 20:37:11.570345デフォルトの名無しさん
2013/04/24(水) 21:30:29.33お前みたいなやつがいるからどんどんレベルが下がってんだよ
0346デフォルトの名無しさん
2013/04/25(木) 03:37:35.34>今のPCの理解が深まることはないと思うけどな
それがアセンブラ弄る唯一の目的と思ってるならお前バカ丸出しだよw
0347デフォルトの名無しさん
2013/04/25(木) 04:13:28.59キャッシュと分岐予測あたりが必須になりそうな
0348デフォルトの名無しさん
2013/04/25(木) 07:11:13.38ない環境も普通にある。
>分岐予測
ない環境も普通にあるし、あってもプログラマとってはさほど負担になるものではない。
0349デフォルトの名無しさん
2013/04/25(木) 10:05:32.550350デフォルトの名無しさん
2013/04/25(木) 10:40:59.840351デフォルトの名無しさん
2013/04/25(木) 11:51:09.090352デフォルトの名無しさん
2013/04/30(火) 17:23:17.570353デフォルトの名無しさん
2013/04/30(火) 17:29:52.450354デフォルトの名無しさん
2013/04/30(火) 18:55:26.87みたらインテル表記でした
ネトゲ(とりあえずどんなネトゲでも、npro,ゲームガードつきとか)のチートツールを作ってみたいんですがどうすればいいんでしょうか?
Windows7です
串作成、ラッパー、デコードルーチン実装とかなに?
教えてください
串作成っていうの接続のときプロキシを使うってこと?
ラッパーは?デコードルーチン実装って?
よくわかりません アンパックとかはなんとなくわかりますが
どうやって学んでいけばいいのか教えてください
0355デフォルトの名無しさん
2013/04/30(火) 18:57:22.940356デフォルトの名無しさん
2013/05/01(水) 18:40:23.850357デフォルトの名無しさん
2013/05/21(火) 00:02:08.270358デフォルトの名無しさん
2013/05/21(火) 02:13:58.500359デフォルトの名無しさん
2013/05/21(火) 07:28:29.060360デフォルトの名無しさん
2013/05/21(火) 10:34:32.84完成したのか挫折したのか知らんけど
0361デフォルトの名無しさん
2013/05/21(火) 10:35:38.08新しく作ったらバグが完全に無くなるまでしばらくかかるし。
0362デフォルトの名無しさん
2013/05/21(火) 11:31:17.83http://gmplib.org/ とかで何か不満でもあるのか?
0363デフォルトの名無しさん
2013/05/21(火) 15:07:33.510364デフォルトの名無しさん
2013/05/21(火) 19:43:51.040365デフォルトの名無しさん
2013/05/21(火) 20:46:51.41ありがとう 調べてみる
0366片山博文MZパンク ◆0lBZNi.Q7evd
2013/05/21(火) 21:39:53.83インテルの技術文書を読みました。
PE形式の情報がダンプできるようになりました。
何かアドバイスをお願いします。
0367デフォルトの名無しさん
2013/05/21(火) 22:59:43.97勇士Qに弟子入りする
0368デフォルトの名無しさん
2013/05/21(火) 23:16:17.84強いて言うならアドレスを生の数値だけじゃなく
何らかのラベルをつけるといいかもね
0369デフォルトの名無しさん
2013/05/22(水) 05:52:53.30・Cコードを吐き出すようにする
0370デフォルトの名無しさん
2013/05/22(水) 08:41:40.61つまりジャンプ先にラベルを付ける
あとある程度コードとデータの分離を可能にし、コードは16進ダンプと
文字列を付ける、など
0371片山博文MZパンク ◆0lBZNi.Q7evd
2013/05/29(水) 22:43:35.13関数の呼び出し規約が難しい
0372デフォルトの名無しさん
2013/05/29(水) 22:47:35.130373デフォルトの名無しさん
2013/05/29(水) 22:49:01.25スタックを16バイト境界に揃えるとか結構ややこしい
0374デフォルトの名無しさん
2013/05/30(木) 04:11:04.040375片山博文MZパンク ◆0lBZNi.Q7evd
2013/06/02(日) 21:38:39.39ところでa16って何?
0376デフォルトの名無しさん
2013/06/03(月) 00:02:51.99mov %esp,%ebp
sub $0x28,%esp
これgdbで出た結果なんだけど、どういう風に動いてるのかよくわからなくて、図で説明してくださると助かりますorz
0377デフォルトの名無しさん
2013/06/03(月) 00:07:23.820378デフォルトの名無しさん
2013/06/03(月) 00:17:28.670379デフォルトの名無しさん
2013/06/03(月) 00:21:37.15スカID satito39
0380デフォルトの名無しさん
2013/06/03(月) 00:24:53.960381デフォルトの名無しさん
2013/06/03(月) 00:28:42.090382デフォルトの名無しさん
2013/06/03(月) 01:26:18.00mov %esp,%ebp フレームポインタを更新
sub $0x28,%esp 28バイト分のローカル変数領域をスタックに確保
0383デフォルトの名無しさん
2013/06/03(月) 03:11:30.78> sub $0x28,%esp 28バイト分のローカル変数領域をスタックに確保
40バイト
0384デフォルトの名無しさん
2013/06/03(月) 07:18:49.71movl $0xb6b2a6ba,-0xf(%ebp)
movw $0xc4,-0xb(%ebp)
movb $0x0,-0x9(%ebp)
続きでこういうものがあればどう動くのですか?
0385デフォルトの名無しさん
2013/06/03(月) 07:23:58.95http://www.intel.co.jp/content/www/jp/ja/developer/download.html#ia32
http://www.google.co.jp/search?q=at%26t%E8%A8%98%E6%B3%95
0386デフォルトの名無しさん
2013/06/03(月) 09:35:43.09mov %esp,%ebp ;ローカル変数参照時にBPを使ってる?
sub $0x28,%esp ;ローカル変数領域の確保
何がやりたくて質問してんのやら
0387デフォルトの名無しさん
2013/06/03(月) 15:42:11.79{
uint32_t a,b;
uint16_t c;
uint8_t d;
a = 0xaea4a4af;
b = 0xb6b2a6ba;
c = 0xc4;
d = 0;
:
:
:
0388デフォルトの名無しさん
2013/06/03(月) 16:48:02.810389デフォルトの名無しさん
2013/06/03(月) 16:54:22.970x0804840c <+0>: push %ebp
0x0804840d <+1>: mov %esp,%ebp
0x0804840f <+3>: sub $0x28,%esp
0x08048412 <+6>: movl $0xaea4a4af,-0x13(%ebp)
0x08048419 <+13>: movl $0xb6b2a6ba,-0xf(%ebp)
0x08048420 <+20>: movw $0xc4,-0xb(%ebp)
0x08048426 <+26>: movb $0x0,-0x9(%ebp)
0x0804842a <+30>: jmp 0x804844b <foo+63>
0x0804842c <+32>: movzbl -0x9(%ebp),%eax
0x08048430 <+36>: movzbl -0x9(%ebp),%edx
0x08048434 <+40>: movzbl -0x13(%ebp,%edx,1),%ecx
0x08048439 <+45>: mov $0xffffffcc,%edx
0x0804843e <+50>: sub -0x9(%ebp),%dl
0x08048441 <+53>: xor %ecx,%edx
0x08048443 <+55>: mov %dl,-0x13(%ebp,%eax,1)
0x08048447 <+59>: addb $0x1,-0x9(%ebp)
0x0804844b <+63>: cmpb $0x9,-0x9(%ebp)
0x0804844f <+67>: jbe 0x804842c <foo+32>
0x08048451 <+69>: lea -0x13(%ebp),%eax
0x08048454 <+72>: mov %eax,(%esp)
0x08048457 <+75>: call 0x80482f0 <puts@plt>
0x0804845c <+80>: leave
0x0804845d <+81>: ret
0390デフォルトの名無しさん
2013/06/03(月) 17:04:43.500391デフォルトの名無しさん
2013/06/03(月) 17:26:14.85こりゃ荒らしだな
0392デフォルトの名無しさん
2013/06/03(月) 21:00:12.430393デフォルトの名無しさん
2013/06/03(月) 21:20:33.05せめて金額交渉くらいしてやれよ
0394デフォルトの名無しさん
2013/06/07(金) 12:03:20.18同じCPUなのに命令記述が違いそんなレジスタないみたいな。
データの流れが右から左へと左から右へと逆だったり。
酷いのは命令語のニーモニックが特殊な略なのにその説明がどこにもない。
インラインアセンブラとかも個性ありすぎるのにインライン部分の仕様は
解説が一切ないみたいな。
0395デフォルトの名無しさん
2013/06/07(金) 12:12:03.69そのためにC言語とかあるんだから
アセンブラ無しでハンドアセンブルなんて事もしょっちゅうだぞ
0396デフォルトの名無しさん
2013/06/08(土) 12:28:44.950397片山博文MZパンク ◆0lBZNi.Q7evd
2013/06/08(土) 18:53:19.31F2 0F D6 ...
が正しくMOVDQ2Qに変換されない。
0398片山博文MZパンク ◆0lBZNi.Q7evd
2013/06/12(水) 12:07:16.180399デフォルトの名無しさん
2013/06/17(月) 00:48:25.48たんにサポートしていないだけだろ。正式対応まで待て。
0400デフォルトの名無しさん
2013/06/22(土) 07:16:16.14void main(void)
{
unsigned buf[4];
_asm {
cld
mov esi, offset buf
mov eax, 22222
mov ecx, 4
rep stosd
};
for (int i=0; i<4; i++)
printf("%d\n", buf[i]);
}
このコードを実行すると意図した結果(buf[0]〜buf[3]まで全部22222になる)にならずハングアップするのですが、
どうすればよろしいでしょうか?
0401デフォルトの名無しさん
2013/06/22(土) 08:30:41.12これ
lea esi, buf
じゃないの?動かしてないけど
0402デフォルトの名無しさん
2013/06/22(土) 08:40:28.48あと、esiじゃなくてediな
int main(void)
{
unsigned buf[4];
_asm {
cld
lea edi, buf
mov eax, 22222
mov ecx, 4
rep stosd
};
for (int i = 0; i < 4; i++)
printf("%d\n", buf[i]);
}
22222
22222
22222
22222
0403デフォルトの名無しさん
2013/06/22(土) 10:22:52.800405デフォルトの名無しさん
2013/06/22(土) 13:15:07.29環境依存だからなあ・・・気に掛かるならインラインアセンブラで使うレジスタは
全部退避すると安心かもね
でもpushすると例えば lea edi, buf は俺の所では lea edi, [esp] と展開されたので
狂ってくるような気もする
実際やってみないとどうなるか分からないけど
0406片山博文MZパンク ◆0lBZNi.Q7evd
2013/08/05(月) NY:AN:NY.ANやるならx86以外のCPUについても、CPUの違いを吸収して統合させたい。
各CPUのアーキテクチャの表現はどのようにすればいいか?
0407デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0408デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0409デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0410デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0411デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANhttp://toro.2ch.net/test/read.cgi/tech/1377053129/
0412デフォルトの名無しさん
2013/09/06(金) 15:30:02.86エラー履くようになりました・・・
どうすればいい?
Cannot creat file "C:¥Program Files¥HxD.ini".アクセスが拒否されました。
0413デフォルトの名無しさん
2013/09/06(金) 15:33:52.85いまどき Program Files の下に ini ファイル作ってるソフトなんか捨てれ
0414デフォルトの名無しさん
2013/09/06(金) 16:31:02.810415デフォルトの名無しさん
2013/09/06(金) 17:06:30.70C:\Program Files (x86)\
0416デフォルトの名無しさん
2013/09/06(金) 17:20:48.51レジストリかね。
もしくはAppDataとか、マイドキュか。
ユーザーディレクトリの直下にドット付のフォルダを作ってそこに入れてるアプリもあるね。
Program Filesはunix系のOSで言ったら、/usr/bin とか/local/usr/binにあたるから
データを保存するのは、ちょっとないね。
0417デフォルトの名無しさん
2013/09/06(金) 17:21:55.130418デフォルトの名無しさん
2013/09/06(金) 17:34:33.050419デフォルトの名無しさん
2013/09/06(金) 18:00:55.59http://itpro.nikkeibp.co.jp/article/NEWS/20130906/502868/
http://news.mynavi.jp/news/2013/09/06/057/
http://internet.watch.impress.co.jp/docs/news/20130906_614308.html
0420デフォルトの名無しさん
2013/09/06(金) 18:06:17.020421デフォルトの名無しさん
2013/09/06(金) 22:28:35.950422デフォルトの名無しさん
2013/09/07(土) 07:46:35.57百年早えわ
0423デフォルトの名無しさん
2013/09/07(土) 08:50:06.65そんなところにexeなんて置いたことありませんが
0424デフォルトの名無しさん
2013/09/07(土) 10:30:32.070425デフォルトの名無しさん
2013/09/10(火) 02:28:35.44n % 10 が糞遅いだろ
これだから高級言語に被れたあほは
0426デフォルトの名無しさん
2013/09/10(火) 04:09:22.32適切にコード化されてるなら、前段の /10 で %10 も計算できてるな。まあ、そんなコンパイラ存在しないとは思うが。
0427デフォルトの名無しさん
2013/09/10(火) 04:18:51.190428デフォルトの名無しさん
2013/09/10(火) 09:21:50.210429デフォルトの名無しさん
2013/09/10(火) 10:06:55.780430デフォルトの名無しさん
2013/09/10(火) 10:08:58.86実際にやってみろ。自分がどれだけドあほか、わかるから。
0431デフォルトの名無しさん
2013/09/10(火) 13:18:25.220432デフォルトの名無しさん
2013/09/10(火) 13:51:02.980433デフォルトの名無しさん
2013/09/10(火) 14:06:41.23早くも問題をすり替えて逃げ態勢に入りました
0434デフォルトの名無しさん
2013/09/10(火) 14:12:04.54_putN:
subl $28, %esp
movl %ebx, 16(%esp)
movl 32(%esp), %ebx
movl %esi, 20(%esp)
movl %edi, 24(%esp)
cmpl $9, %ebx
jg L7
L2:
movl %ebx, %eax
movl $1717986919, %edx
movl 20(%esp), %esi
imull %edx
movl %ebx, %eax
movl 24(%esp), %edi
sarl $31, %eax
sarl $2, %edx
subl %eax, %edx
leal (%edx,%edx,4), %eax
addl %eax, %eax
subl %eax, %ebx
addl $48, %ebx
movl %ebx, 32(%esp)
movl 16(%esp), %ebx
addl $28, %esp
jmp _putchar
0435434
2013/09/10(火) 14:12:54.83L7:
movl %ebx, %eax
movl $1717986919, %ecx
imull %ecx
movl %ebx, %eax
sarl $31, %eax
movl %edx, %esi
sarl $2, %esi
subl %eax, %esi
cmpl $9, %esi
jg L8
L3:
movl %esi, %eax
movl $1717986919, %edx
imull %edx
movl %esi, %eax
sarl $31, %eax
sarl $2, %edx
subl %eax, %edx
leal (%edx,%edx,4), %eax
addl %eax, %eax
subl %eax, %esi
addl $48, %esi
movl %esi, (%esp)
call _putchar
jmp L2
0436434
2013/09/10(火) 14:13:59.16L8:
movl %esi, %eax
imull %ecx
movl %esi, %eax
sarl $31, %eax
movl %edx, %edi
sarl $2, %edi
subl %eax, %edi
cmpl $9, %edi
jle L4
movl %edi, %eax
imull %ecx
movl %edi, %eax
sarl $31, %eax
sarl $2, %edx
subl %eax, %edx
movl %edx, (%esp)
call _putN
0437434
2013/09/10(火) 14:14:44.55movl %edi, %eax
movl $1717986919, %edx
imull %edx
movl %edi, %eax
sarl $31, %eax
sarl $2, %edx
subl %eax, %edx
leal (%edx,%edx,4), %eax
addl %eax, %eax
subl %eax, %edi
addl $48, %edi
movl %edi, (%esp)
call _putchar
jmp L3
0438デフォルトの名無しさん
2013/09/10(火) 14:45:39.42void putN(int n)
{
if (n >= 10) {
putN(n / 10);
n %= 10;
}
putchar('0' + n);
}
こう↓書いて gcc -O3 しても div() 呼び出してる部分が展開されなかったのは意外だった。
#include <stdlib.h>
void putN(int n)
{
if (n >= 10) {
div_t d = div(n, 10);
putN(d.quot);
n = d.rem;
}
putchar('0' + n);
}
0439デフォルトの名無しさん
2013/09/10(火) 15:33:12.83誰も使わないから対応しないんじゃなかろうか
0440片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/01(火) 09:39:59.60__asm__("movl $0xFFFFFFFF,%%eax\nadd $4,%%eax\nseto %0\n" :: "m"(b) : "%eax");
printf("%d\n", b); //0
0441デフォルトの名無しさん
2013/10/01(火) 10:30:38.610442デフォルトの名無しさん
2013/10/01(火) 11:15:46.410443片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/14(月) 14:01:30.87int a,b;
ADD a,b;
がオーバーフローする条件をC言語で表すとどうなりますか?
0444片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/14(月) 14:25:40.35(a<-b) != (a+b<0)
0445デフォルトの名無しさん
2013/10/14(月) 16:26:07.41(a<-b) != (a+b<0)
= (0x80000000<-0x80000000) != (0x80000000+0x80000000<0)
= (0x80000000<0x80000000) != (0<0)
= (0) != (0)
= 0
で全然オーバーフローの検出なんてできてないと思うんだが。
0446片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/14(月) 16:44:55.65見落としてました。
どうすればよいのでしょうか?
0447片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/14(月) 16:55:19.670448片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/14(月) 17:36:03.61これより簡単にできないみたい。有り難う。
0449デフォルトの名無しさん
2013/10/21(月) 19:44:36.410450デフォルトの名無しさん
2013/10/21(月) 20:12:25.090451片山博文MZコスモ ◆T6xkBnTXz7B0
2013/10/22(火) 19:22:12.38(ii) x64のepilogで認められている命令とは何か?
0452デフォルトの名無しさん
2013/11/10(日) 15:31:19.25(ii) スタックから積み下ろす命令とスタックポインタを補正する命令
でいいんだっけ?
0453デフォルトの名無しさん
2013/11/15(金) 16:30:27.6464bitのCPUに32bitのOS入れて解析ってできますか?
CPUも32bitのほうがいろいろ捗りますかね
0454デフォルトの名無しさん
2013/11/15(金) 16:47:32.070455デフォルトの名無しさん
2013/11/15(金) 21:49:14.28あとOSの解析なんて言ってないんで^^;
偉そうにしてるとこ悪いけど日本語読んでね
0456デフォルトの名無しさん
2013/11/15(金) 21:53:29.210457デフォルトの名無しさん
2013/11/15(金) 23:07:19.829000円分の満足感があったかと言われると、まあ貧乏人なので牛丼と比べてNoと言ってしまうのだけど
9000円分の仕事をきっちり味わえたな、という実感はありました
0458デフォルトの名無しさん
2013/11/16(土) 03:45:41.630459デフォルトの名無しさん
2013/11/19(火) 22:00:41.96×解析料理
0460デフォルトの名無しさん
2013/11/19(火) 23:58:42.94読みは同じでも別の料理だった
チラ裏
0461デフォルトの名無しさん
2013/11/20(水) 00:09:28.370462デフォルトの名無しさん
2013/11/20(水) 17:38:55.81http://www.amazon.co.jp/dp/4844334794
中古(これはひどい)
原価の9割の価格付けて
2013年9月発売の本なのに「経年劣化」とか
「多少のキズ」とか()
http://www.amazon.co.jp/gp/offer-listing/4844334794
裁断済の書籍になります。書籍本体の表紙・背表紙・本の背中が裁断されています
(書籍本体の表紙・背表紙・本の背中はありません)。
その他、カバー・帯を裁断している場合があります。
ページ抜けはチェックした限りではありませんが、見落としがある可能性があります。
経年劣化により多少のキズ・ヨゴレ・ヤブレがあります。
ご了承の上、お買い求め下さい。発送は防水包装の上、メール便またはゆうメールを使用する予定です。
0463デフォルトの名無しさん
2013/11/20(水) 17:41:14.680464デフォルトの名無しさん
2013/11/20(水) 18:06:14.99本屋で見かけたけどどうでもいい内容の本だったわ
0465デフォルトの名無しさん
2013/11/20(水) 18:46:31.55いいのかインプレス
0466デフォルトの名無しさん
2013/11/20(水) 20:26:04.41だったら差別したいの?
0467デフォルトの名無しさん
2013/11/20(水) 20:39:39.28詳しい出品者情報
正式名称: パウロ屋
ストア代表者名:
電話番号: 080
住所: 世田谷区野毛
その他・備考: Amazonマーケットプレイスにおける商品の返品と返金条件に準拠します
最近の評価:
1(5が最高):「到着予定を過ぎても何日待っても商品の届く気配すらありません。
キャンセルした所応じてくれましたがクレカ払いにした為返金も遅れるし返金確認するまで不安で仕方ありません。
最低な出品者です。」minos..., 2013年11月11日
1(5が最高):「本じゃ有りません。紙束です。こんなものを本屋のサイトで「中古品・可」で出品していました。
トランプみたいに1枚1枚手にとってよむのですか。解体したゴミを売りつける悪質業者です。金返せ。」
スタティック初老人, 2013年11月10日
1(5が最高):「10日以上たっても商品が届かず,連絡しても返答さえありません。正直詐欺かと疑っています。」
かむい, 2013年11月7日
0468デフォルトの名無しさん
2013/12/15(日) 01:33:08.29invokeなどがどんなコードを生成してるのか調べる方法はありますか?
リストに出そうとしているのですが、.XALLなどでも表示されません。
0469デフォルトの名無しさん
2013/12/16(月) 08:37:41.69デバッガで実行して逆アセンブル表示見れば?
0470デフォルトの名無しさん
2013/12/31(火) 19:12:15.66たとえばAXレジスタっていってるところもあればEAXレジスタっていってるところもああります。同じものと考えていいんでしょうか?
0471デフォルトの名無しさん
2013/12/31(火) 19:17:09.98AXとEAXとALとAHとRAXの違いなんてぐぐればすぐわかるだろ
0472デフォルトの名無しさん
2013/12/31(火) 20:57:53.320473デフォルトの名無しさん
2013/12/31(火) 21:02:34.090474デフォルトの名無しさん
2013/12/31(火) 23:10:57.04今となってはわざわざ特別扱いしてアキュームレータとか言う理由はないな。
0475デフォルトの名無しさん
2014/01/01(水) 02:11:33.12んでcxがカウンタでdxがデータだっけ?
axが特別っつーか、全部に役割持たせてたんだと思う、当初は
0476デフォルトの名無しさん
2014/01/02(木) 00:24:45.35昔(Z80とか8086)はA系レジスタ向けの演算命令が他のB〜系レジスタよりも
多くてA系はアキュムレータだと説得力があった記憶があるけど、
今はどのレジスタも演算命令数は同じというか、差別されていないの?
0477デフォルトの名無しさん
2014/01/02(木) 00:31:24.410478デフォルトの名無しさん
2014/01/02(木) 02:54:44.280479デフォルトの名無しさん
2014/01/02(木) 03:02:14.430480デフォルトの名無しさん
2014/01/02(木) 09:59:16.2232bitアドレッシングからは[eax+ecx+12]とか使えるしなぁ
0481デフォルトの名無しさん
2014/01/03(金) 00:00:03.75MC68000なんか今触っても整然としてて美しいし。
x64で大幅に改善されたというか、やっと68000に追いつけたんだなぁ。
0482デフォルトの名無しさん
2014/01/03(金) 00:35:29.000483デフォルトの名無しさん
2014/01/03(金) 01:06:13.220484デフォルトの名無しさん
2014/01/03(金) 02:09:13.49アキュームレータとベースレジスタが各一つしかないとか、個数の制限があればそうだね。
でも、十分な数が用意されてるから、実際には困るケースなんて皆無なんだ。
C言語との組み合わせを考えたら、データとアドレスがハードウェアレベルで区別されてるのは好ましいことだしね。
>>483
デコボコしたメモリモデルなんてものがあって8bit時代を引きずり続けたx86にはとてもかなわないよ。
0485デフォルトの名無しさん
2014/01/03(金) 02:11:58.78データレジスタは8つでは足りないしアドレスレジスタは8つ(7つ)も要らん。要はバランスが悪い。
0486デフォルトの名無しさん
2014/01/03(金) 02:15:29.84>C言語との組み合わせを考えたら、データとアドレスがハードウェアレベルで区別されてるのは好ましいことだしね。
具体的にメリットをご説明下さい。
0487デフォルトの名無しさん
2014/01/03(金) 02:18:20.25>デコボコしたメモリモデルなんてものがあって8bit時代を引きずり続けたx86にはとてもかなわないよ。
8bit時代からのしがらみなんてなかった筈なのにセグメントでメモリ管理してた68kMacもそう変わらんよ。
0488デフォルトの名無しさん
2014/01/03(金) 02:19:39.55>アキュームレータとベースレジスタが各一つしかないとか、個数の制限があればそうだね。
6800乙w
0489デフォルトの名無しさん
2014/01/03(金) 02:24:52.53当時としてはマシな部類だったが、今こんなこと言ってる奴はアフォ
0490デフォルトの名無しさん
2014/01/03(金) 09:05:56.660491デフォルトの名無しさん
2014/01/03(金) 10:37:25.990492デフォルトの名無しさん
2014/01/03(金) 11:18:59.860493デフォルトの名無しさん
2014/01/03(金) 15:15:03.31すぐ消える
0494デフォルトの名無しさん
2014/01/03(金) 15:54:06.910495デフォルトの名無しさん
2014/01/03(金) 15:54:47.930496デフォルトの名無しさん
2014/01/03(金) 15:57:57.54メーカー提供や他社製品のサンプルプログラムやライブラリ、RTOSとか、組み込み用途でも
あれば便利なソフト資産と呼べるものは存在するよ。
0497デフォルトの名無しさん
2014/01/03(金) 18:15:52.10開発するためのソフトの話か?
そりゃある方が良いのは当たり前なことだが、そんなのわざわざ書くことじゃないだろ。
0498デフォルトの名無しさん
2014/01/03(金) 18:26:49.96なぜ??
0499デフォルトの名無しさん
2014/01/03(金) 18:58:28.29ここでいうソフト資産とは、そのアーキテクチャ向けに
作られたソフトのことだろ。
開発のためのソフトじゃなく。
0500デフォルトの名無しさん
2014/01/03(金) 19:06:21.98>ここでいうソフト資産とは、そのアーキテクチャ向けに
>作られたソフトのことだろ。
「メーカー提供や他社製品のサンプルプログラムやライブラリ、RTOSとか」ってのは
それから外れてないだろ。
0501デフォルトの名無しさん
2014/01/03(金) 19:11:12.14> 開発するためのソフトの話か?
良く分かってないみたいだけどツールかなんかと勘違いしてね?
0502デフォルトの名無しさん
2014/01/03(金) 20:19:58.678個で足りないんだ?x86(IA-32)だと汎用レジスタは何個だったかな?
こたえ:0個
アキュームレータ、ベース、カウンタ、データ、スタックポインタ、スタックベース、ソースインデックス、デスティネーションインデックス、
8つの各用途に分かれていて「汎用」レジスタは存在しない。(命令によって割り当てられないレジスタが多く存在する)
x64は便利になったね。AMDはえらい。Intelは救いようのないアホ。
>>486
ポインタの理解が捗る。あれはアドレスレジスタそのものなんだ、ってね。
>>487
Macはクソそのものだよ。68000の特性を理解してないシステム構成だかんね。
>>488
8bit CPUと比較しなけりゃならないx86が恥ずかしいって、わかんないのかな。
0503デフォルトの名無しさん
2014/01/03(金) 21:12:09.54> 8個で足りないんだ?x86(IA-32)だと汎用レジスタは何個だったかな?
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf
> 3.4.1 General-Purpose Registers
> The 32-bit general-purpose registers EAX, EBX, ECX, EDX, ESI, EDI, EBP, and ESP are provided for holding the
> following items:
> • Operands for logical and arithmetic operations
> • Operands for address calculations
> • Memory pointers
MC68000に、論理/算術演算、アドレス計算、メモリポインタとして使える汎用レジスタはいくつあるの?
こたえ:0個
データレジスタとアドレスレジスタの区別のあるMC68000に汎用レジスタはありませんw
0504デフォルトの名無しさん
2014/01/03(金) 21:21:49.84>8bit CPUと比較しなけりゃならないx86が恥ずかしいって、わかんないのかな。
汎用レジスタがないのはMC68000もMC6800も同じじゃないの? x86? 汎用レジスタあるけど?
0505デフォルトの名無しさん
2014/01/03(金) 22:34:07.51制限がなく数も十分ありデータとアドレスの区別をしてなお整然とした68000のデータレジスタのありかたを罵倒する
滑稽だねえ
おたくら今からAMDがもたらしてくれた汎用レジスタたっぷりなx86からIntelがいつまでも放置して汚らしかったx86に戻れんの?
0506デフォルトの名無しさん
2014/01/03(金) 22:39:20.79MC6800は8bit CPUだから別にいいの。8bit CPUは可能な限りシンプルであるべきだから。
x86が汚らしいのは32bitアーキテクチャに不合理なもんを持込みすぎてるからであって
あれが8bitないしその建てましの16bitから出てこないのであれば全然なんも問題ないの
0507デフォルトの名無しさん
2014/01/03(金) 22:39:56.020508デフォルトの名無しさん
2014/01/03(金) 23:06:26.22アドレス線に専念出来るアドレスレジスタとデータ(計算)に専念出来る
データレジスタを分けるのは回路設計的には理にかなっているんじゃないの?
0509デフォルトの名無しさん
2014/01/03(金) 23:43:37.21>AMDがもたらしてくれた汎用レジスタたっぷりなx86
AMD64でR8-R15使うときの命令コードってどんなんか知ってる?
0510デフォルトの名無しさん
2014/01/04(土) 01:32:44.1248/ 33 D2 xor rdx, rdx
4D/ 33 C0 xor r8, r8
4D/ 33 FF xor r15, r15
33 C0 xor eax, eax
33 D2 xor edx, edx
45/ 33 C0 xor r8d, r8d
45/ 33 FF xor r15d, r15d
66| 33 C0 xor ax, ax
66| 33 D2 xor dx, dx
66| 45/ 33 C0 xor r8w, r8w
66| 45/ 33 FF xor r15w, r15w
32 C0 xor al, al
32 D2 xor dl, dl
45/ 32 C0 xor r8b, r8b
45/ 32 FF xor r15b, r15b
0511デフォルトの名無しさん
2014/01/04(土) 03:02:46.890512デフォルトの名無しさん
2014/01/04(土) 03:27:26.480513デフォルトの名無しさん
2014/01/04(土) 03:29:29.10ふむふむ
0514デフォルトの名無しさん
2014/01/07(火) 11:16:45.98compiler intrinsicsがあるからデバドラでも作らない限りあまり用途はないのか?
0515デフォルトの名無しさん
2014/01/07(火) 14:47:47.760516デフォルトの名無しさん
2014/01/08(水) 16:05:02.11MotorolaをIntelが潰してくれたからだろ
0517デフォルトの名無しさん
2014/01/09(木) 11:49:16.95実際鯖はXeonで十分だしソフト資産も多いもんなあ
0518デフォルトの名無しさん
2014/01/09(木) 17:57:38.76prefixがVEXになっただけで動作は一緒、YMM系の命令体系に合わせた。
F2/ 0F 10 05 00000020 R movsd xmm0, data_1
C5 FB 10 05 00000020 R vmovsd xmm0, data_1
0519デフォルトの名無しさん
2014/01/11(土) 09:25:44.97ANDPSやORPSというのは何のためにあるのでしょう?
整数用のPANDやPORはわかるのですが
浮動小数点の論理演算というのがピンとこない
0520デフォルトの名無しさん
2014/01/11(土) 09:33:07.89それかfrexp()とかldexp()みたいな関数を作るためとか
0521デフォルトの名無しさん
2014/01/11(土) 15:52:02.89そのせいじゃないの?
0522デフォルトの名無しさん
2014/01/12(日) 19:53:20.99符号ビットいじって絶対値や符号反転とか
整数、少数命令の混在はペナルティが入るから、頻度は少なくても無いと困る
0523デフォルトの名無しさん
2014/01/13(月) 10:05:08.34確かに符号や比較命令のマスクに使えますね。
整数、浮動小数点の混在にペナルティが入るのは知りませんでした。
0524デフォルトの名無しさん
2014/01/14(火) 03:58:16.98昔は命令長節約のために整数用にもandpsとかを使うなんてのも往々にして行われていたけれど
今のIntel CPUでは逆に遅くなるという寸法
0525デフォルトの名無しさん
2014/01/28(火) 14:52:09.84セグメントレジスターを使うとINVOKEが変なコードをはくのですが仕様ですか?
; ml /c xxx.asm
; dumpbin /disasm xxx.obj
.686
.model flat, stdcall
foo proto x:word, y:dword, z:byte
.code
foo proc uses ebx esi edi, x:word, y:dword, z:byte
ret
foo endp
start: invoke foo, fs, gs, al
ret
end
0526デフォルトの名無しさん
2014/02/05(水) 02:45:14.99おまえ大丈夫か?w
0527デフォルトの名無しさん
2014/02/05(水) 13:35:13.400000000D: 50 push eax
0000000E: 66 6A 00 push 0
00000011: 0F A8 push gs
00000013: 83 EC 02 sub esp,2
00000016: 0F A0 push fs
00000018: E8 E3 FF FF FF call _foo@12
0528デフォルトの名無しさん
2014/02/09(日) 20:32:36.55テストプログラムの環境ってWin3.1を想定してるのか?
それともDOS?
実行環境が作れない時点で挫折しそう。。。
0529デフォルトの名無しさん
2014/02/09(日) 21:22:13.69VMware か何かを使って、FreeDOS が動く....かなぁ。
0530デフォルトの名無しさん
2014/02/09(日) 21:22:19.620531デフォルトの名無しさん
2014/02/09(日) 21:28:01.20>>530
情報ありがとう。
DOSはVMWareでなんとかなりそうだけど、
appendixを読むと
borland c++3.1 & turbo assembler 3.2 か
vc++1.0 & masm6.0
で動作するみたいだけど、そんなの手にはいらんぞ。。。
0532デフォルトの名無しさん
2014/02/09(日) 22:00:38.070533デフォルトの名無しさん
2014/02/09(日) 22:17:26.760534デフォルトの名無しさん
2014/02/09(日) 22:26:41.38DOS用にアセンブルする場合は ml /omf を忘れずに
CはOpenWatcomで間に合うな
0535デフォルトの名無しさん
2014/02/09(日) 22:32:20.56ありがとう。
火曜に試してみるよ
0536デフォルトの名無しさん
2014/02/09(日) 22:37:02.43LSIC86試食版はMASMとは書式が違うがアセンブラも入ってるし使い方次第では便利に使えるだろう。
0537デフォルトの名無しさん
2014/02/09(日) 23:33:16.06あれは、たとえばORG擬似命令が無くて、RS擬似命令で、(目的アドレス - 現在アドレス) の
サイズのメモリを確保してやることでアドレスを調整するとか、あれこれ、知ってる人に
聞かないとわかんないテクが要るのが大変。
ValLinkとArrowAsmってのが2000年頃の定番だったが、今どうなってることやら。
NASMもNASMでMASMと違うからねぇ。
0538デフォルトの名無しさん
2014/02/10(月) 04:57:21.710539デフォルトの名無しさん
2014/02/24(月) 19:05:52.560540デフォルトの名無しさん
2014/02/24(月) 19:07:46.950541,,・´∀`・,,)っ-○○○
2014/02/26(水) 00:38:53.88これは情報処理技術者のテキスト読んでるだけでたいていクリアできる
資格もとれて一石二鳥。
x86ならこれ1冊で。あとは個々の命令の仕様はIntelのサイトからPDF落とす。
・はじめて読むPentium マシン語入門編
0542デフォルトの名無しさん
2014/02/26(水) 00:46:38.24対象はなんでもいいのか、で答えが違うな。
0543デフォルトの名無しさん
2014/02/27(木) 02:16:08.54聖書がおすすめ
0544デフォルトの名無しさん
2014/02/27(木) 06:04:53.440545デフォルトの名無しさん
2014/02/27(木) 06:10:52.320546デフォルトの名無しさん
2014/03/12(水) 04:04:41.92ID:4B5tOSzi0547デフォルトの名無しさん
2014/03/12(水) 04:57:51.84ID:/EKU/g4K0548デフォルトの名無しさん
2014/03/12(水) 17:09:14.41ID:Rs2gHvwsリング0の特権命令だけど
0549デフォルトの名無しさん
2014/05/16(金) 01:20:05.03ID:YZ6eU1pI書かれたサイトを教えて下さい。
0550デフォルトの名無しさん
2014/05/16(金) 01:36:30.34ID:750USUyV煽りでなく、むしろその手の基礎から始めてググり続けると良いのでは
0551デフォルトの名無しさん
2014/05/16(金) 02:06:29.00ID:6rXJBimEAL に入っている数値を [DI] に16進数2ケタで出力せよ。
※ [DI+00] に上位桁、[DI+01] に下位桁
0552デフォルトの名無しさん
2014/05/16(金) 03:00:26.63ID:ZWSdCtrz0553デフォルトの名無しさん
2014/05/16(金) 08:30:06.10ID:hJC//Tt9まるち
0554デフォルトの名無しさん
2014/05/16(金) 08:33:06.36ID:hJC//Tt9mov [DI], al
and [DI], 0x0F
shr al, 4
and al, 0x0F
mov [DI+01], al
0555デフォルトの名無しさん
2014/05/16(金) 10:03:09.08ID:PLhTA3a9久しぶりに触ったけど debug.exe って 64bit Windows だと用意されてないんだな
-a 0100
mov ax, cs
mov es, ax
mov di, 0080
mov al, 5a
inc di
mov [di], al
mov cl, 4
shr al, cl
dec di
mov [di], al
mov al, 0f
and [di], al
inc di
and [di], al
0556デフォルトの名無しさん
2014/05/20(火) 19:52:17.51ID:EAxy/lYF0557デフォルトの名無しさん
2014/05/25(日) 20:19:23.16ID:t1V1lNcrcがちょっとできるレベルなんだけど
0558デフォルトの名無しさん
2014/05/25(日) 22:19:07.25ID:z/SkfJN90559デフォルトの名無しさん
2014/05/26(月) 08:56:21.98ID:lvFZnHPnただポケコンがオワコンを通り越して生産終了w
0560デフォルトの名無しさん
2014/05/26(月) 12:04:51.49ID:ptXAqcmgだから話が通じない上に一人で逆上してる。
だから放置されてるのに...
0561デフォルトの名無しさん
2014/05/26(月) 14:27:02.60ID:y9c5KjIu0562デフォルトの名無しさん
2014/05/28(水) 10:59:15.94ID:4srfku2Xビッグエンディアンは好かん。
0563デフォルトの名無しさん
2014/06/03(火) 17:53:17.36ID:xWuYqldzこのページを見ながら分岐命令を勉強しているんですがJL・JLE・JNG・JNGE命令などにあるフラグで
SF<>OFなどの<>は何を意味するんですか?
0564デフォルトの名無しさん
2014/06/03(火) 18:08:44.18ID:pVBw+Lsjnot equal
0565デフォルトの名無しさん
2014/06/03(火) 22:44:28.88ID:xWuYqldz返答ありがとうごじます。危うく詰みそうになりました
0566デフォルトの名無しさん
2014/06/05(木) 17:54:50.58ID:/tv+CkMyMOV AL,BYTE PTR DS:[ECX+EDI]
この意味がよくわかりません
BYTE PTRがバイト宣言?なのはわかりますが、後ろ側のDS:[ECX+EDI]ってのがいまいちぱっとわかりません
0567デフォルトの名無しさん
2014/06/05(木) 18:57:10.25ID:M285qaIral = *(byte *)(ecx+edi);
0568デフォルトの名無しさん
2014/06/05(木) 20:58:42.27ID:55VBH6H60569デフォルトの名無しさん
2014/06/05(木) 21:37:09.24ID:o52VmkJp0570566
2014/06/05(木) 22:18:58.64ID:/tv+CkMy後ろのDS:[]ってどういう意味があるんでしょうか?
0571デフォルトの名無しさん
2014/06/05(木) 22:43:49.27ID:bOGqmnDAということだろうけど、普通のメモリアクセスのセグメントはDSなので冗長(必要ない)。
ECX+EDI の結果をアドレスとして、そのアドレスに(バイト単位で)メモリアクセスしてALに
コピー、という意味だけど、そもそも正しい場所を解析しようとしているのか怪しいな。
0572デフォルトの名無しさん
2014/06/05(木) 22:49:00.65ID:dSg5bErh0573デフォルトの名無しさん
2014/06/06(金) 06:48:37.37ID:NiHdmLTJ初心者の範疇ではないな
0574デフォルトの名無しさん
2014/06/07(土) 00:39:40.37ID:42HLXVNlWindows的にはNTからだろ?
0575デフォルトの名無しさん
2014/06/07(土) 04:28:15.67ID:HlN+9CGy初歩的かもしれないけどぐぐるときに困ってるから教えてほしい。
0576デフォルトの名無しさん
2014/06/07(土) 04:58:06.00ID:ftf2LwSc>オペランドを1つしか取らないアセンブリってどの種類に分けられる?
プロセッサに拠る
0577デフォルトの名無しさん
2014/06/07(土) 04:59:38.74ID:HlN+9CGy0578デフォルトの名無しさん
2014/06/07(土) 05:08:45.69ID:ftf2LwSchttp://bitsavers.informatik.uni-stuttgart.de/pdf/ti/TMS9900/TMS9995.pdf
http://datasheets.chipdb.org/Western%20Design/w65c816s.pdf
http://www.freescale.com/files/32bit/doc/ref_manual/MC68000UM.pdf
http://documentation.renesas.com/doc/products/mpumcu/doc/rl78/r01us0015jj0210_rl78.pdf
0579デフォルトの名無しさん
2014/06/07(土) 11:26:24.62ID:u3dUy4Sv0580デフォルトの名無しさん
2014/06/07(土) 15:04:36.72ID:bare2SL/という用語をどういう意味で使ってるかによるかな。
個々のアセンブリ命令自体には特に分類はない。
そういう命令を主に使うCPUのアーキテクチャといえば、
1オペランド方式とかアキュムレータマシンとかそんな感じか?
0581デフォルトの名無しさん
2014/06/07(土) 17:07:24.15ID:uqMqHKO40582デフォルトの名無しさん
2014/06/07(土) 21:17:21.71ID:VEYGFS+gMASM64はラベルとかはrip相対になってるな
NASMはDEFAULT REL使ってる
0583デフォルトの名無しさん
2014/06/08(日) 11:30:26.96ID:U9hBzx6Trip相対と混在できるかってことだけど
0584デフォルトの名無しさん
2014/06/08(日) 12:15:57.26ID:0lLCwyof自分はrip相対のモードでしか使ったことないけど、使い勝手は32bitと変わらないよ
そもそもx64はオフセットが32bitに制限されてるから、NASMがrip相対を
デフォルトにしてない理由がよく分からん
NASMはabsとかrelを使えば混在できるみたいだね
ttps://www.tortall.net/projects/yasm/manual/html/nasm-effaddr.html
0585,,・´∀`・,,)っ-○○○
2014/06/08(日) 12:25:05.93ID:qgapksJlSIBなしのdisp32が相対、SIBありが絶対
0586デフォルトの名無しさん
2014/06/08(日) 13:03:19.30ID:0lLCwyof64bitのメモリオフセットはmovでもraxだけだね(0xA1, 0xA3)
即値なら他のレジスタも使えるけど
0587デフォルトの名無しさん
2014/06/08(日) 15:18:04.41ID:gOfGwFVRLEA RAX, LABELxx
MOV RAX, OFFSET LABELxx
LEA使うとrup相対で下だと絶対になってるような。
64bitだとLEA使ったほうが良いの?
0588,,・´∀`・,,)っ-○○○
2014/06/08(日) 17:38:33.43ID:qgapksJlHaswellではmovは1サイクルあたり2命令のスループット。
leaは1命令。
Atomとかがターゲットなら割と命令長は気にしたほうがいいけど
(命令フェッチが8byte/clkしかないから)
0589デフォルトの名無しさん
2014/06/09(月) 01:56:46.89ID:r1q53MGMよほどでかいDLLを2つ以上作るときくらい
0590デフォルトの名無しさん
2014/07/20(日) 04:01:19.48ID:jA7npZ7N0591デフォルトの名無しさん
2014/07/20(日) 04:59:50.88ID:glgeKy6r0592デフォルトの名無しさん
2014/07/20(日) 05:05:02.94ID:RQRWxhz5> アセンブリ言語で書かれたプログラムを機械語プログラムに変換する事をアセンブル (assemble) すると言い、
> それを行うプログラムの事をアセンブラ (assembler) と言う。なお、アセンブリ言語の意味で「アセンブラ」
> または「アセンブラ言語」(Assembler Language)と呼ぶ場合も多い[注 1]。
> 脚注
> 1. IBMはSystem/360から2011年現在まで一貫してアセンブラ言語(Assembler Language)と呼んでいる。
> 例:IBM High Level Assembler
0593デフォルトの名無しさん
2014/07/20(日) 05:24:42.88ID:W4duPEEGC言語で
char c = 'H';
if ('A' <= c) {
if (c <= 'Z') {
c += ('a' - 'A');
}
}
をコンパイルして出てくるアセンブリコードを参考にしてみるとか
0594デフォルトの名無しさん
2014/07/20(日) 05:48:11.47ID:RnwVM2ZHAssembler languageでググるとAssembly languageが大量に出てくるけど、
このスレはIBMかぶれなの?
てか組立言語(Assembly lavigne)を
組立機(Assembler)って言うの気持ち悪くね。
0595デフォルトの名無しさん
2014/07/20(日) 08:34:23.52ID:1VhfX4Ek0596デフォルトの名無しさん
2014/07/20(日) 09:11:23.94ID:Hpo7L/hK単にアセンブラって言うことはよくある。「アセンブラで書く」とか
コンテキストで、プログラムのアセンブラとは区別が付く
用語のバラバラ感は、英語でも同様みたいだね
http://en.wikipedia.org/wiki/Assembly_language#Related_terminology
0597デフォルトの名無しさん
2014/07/22(火) 13:16:19.12ID:P1jRYX3s(1) 大文字→小文字 、他の文字はそのまま。
cmp al,'A'
jb @f
cmp al,'Z'
ja @f
or al,('A' xor 'a') ; 他の文字が不定でいいならこの行だけでOK。
@@:
(2) 小文字→大文字 、他の文字はそのまま。
cmp al,'a'
jb @f
cmp al,'z'
ja @f
and al,not('A' xor 'a') ; 他の文字が不定でいいならこの行だけでOK。
@@:
0598590
2014/07/24(木) 01:43:01.19ID:hv8nubjyありがとうございます
それは、CASL�Uの文法ですか?CASL�Uの文法でお願いしますm(_ _)m
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12132311387
上に2つの問題があるので、日が出る前に誰が教えて下さい・・・
ウェブマネーでもアップルカードでも現金でもどんな形でも1000円分あげます
先着でお願いします。その際にメアド明記を必ずお願いします。
大学の単位掛かってるのでお願いします・・
0599デフォルトの名無しさん
2014/07/24(木) 02:40:58.69ID:weGa5ogB# つか、大学でCASLII? 底辺だな…。
0600デフォルトの名無しさん
2014/07/24(木) 02:48:29.48ID:MYJWPOnCいやCASLを題材としてCPUの内部までやるところもあるよ、教科書もあったけれどもどっかにいってしまった‥もう一度手元に呼び戻したいものだ
0601デフォルトの名無しさん
2014/07/24(木) 02:57:56.22ID:weGa5ogBCASL題材に内部までやったところで底辺には変わらん
せめてOS動く程度のアーキテクチャでFPGAで実装くらいやってのもんだろw
0602デフォルトの名無しさん
2014/07/24(木) 06:16:57.15ID:MYJWPOnC0603デフォルトの名無しさん
2014/07/24(木) 14:20:58.97ID:2qFeAMu1赤点取った後の、お情け課題提出に見える。
0604デフォルトの名無しさん
2014/07/25(金) 03:38:44.05ID:5HeCUYeTCASLなら初めからCASLと書いて欲しいかな
0605,,・´∀`・,,)っ-○○○
2014/07/25(金) 08:54:19.70ID:8TTeu6gKc |= 0x20;
だけでいいけどな
0606デフォルトの名無しさん
2014/07/25(金) 09:39:55.89ID:cQJQccdW0607デフォルトの名無しさん
2014/07/28(月) 18:45:13.44ID:klE3KiB9リバーシングに興味あってアセンブラいじりだしたんですがわかる人いますか?
; 6 : (i % 3 == 0) ? ((i % 5 == 0) ? printf("%3d hoge\n",i) : printf("%3d hige\n",i)) : printf("%3d hoge\n",i);
mov eax, -1431655765 ; aaaaaaabH
mov ecx, esi
mul esi
push esi
shr edx, 1
lea eax, DWORD PTR [edx+edx*2]
sub ecx, eax
jne SHORT $LN8@main
mov eax, -858993459 ; cccccccdH
mov ecx, esi
mul esi
shr edx, 2
lea eax, DWORD PTR [edx+edx*4]
sub ecx, eax
je SHORT $LN8@main
push OFFSET ??_C@_09FLCGICCH@?$CF3d?5hige?6?$AA@
jmp SHORT $LN14@main
0608デフォルトの名無しさん
2014/07/28(月) 19:29:51.50ID:74FTDS++esi に i の値が入ってるとして、
mov eax, -1431655765 ; aaaaaaabH
mul esi
shr edx, 1
lea eax, DWORD PTR [edx+edx*2]
sub esi, eax
jne SHORT $LN8@main
で何やってるか考えてみれ。
0609デフォルトの名無しさん
2014/07/28(月) 23:02:52.60ID:pFFfm4RG0610デフォルトの名無しさん
2014/07/29(火) 11:55:06.03ID:M1sSUXRJ0611,,・´∀`・,,)っ-○○○
2014/08/07(木) 20:45:20.65ID:mDZmRo1A0612,,・´∀`・,,)っ-○○○
2014/08/07(木) 22:11:11.87ID:mDZmRo1A全部の桁の数字を、最後の1桁になるまで足して9になればそれが9の倍数。
9にならなければそれが剰余。
3の場合も、整数値を4進数とみなして同じことをやれば
掛け算すら使わずに3の剰余を求めることができる。
ビット演算+シフト+足し算だけ。
収束にやや時間はかかるけどいろいろ応用は利く。
(CASL/COMETって掛け算命令すらなかったよね)
0613デフォルトの名無しさん
2014/08/07(木) 22:20:07.93ID:bcHrnzcz>ちなみに10進数で9の倍数の求め方ってどうやるか知ってる?
>全部の桁の数字を、最後の1桁になるまで足して9になればそれが9の倍数。
BCDでもない限りは「10進数で」「全部の桁の数字」って言ってる時点で除算が発生してるってことだから
素直に9で割って余りがあるか判定したほうが良い。
0614デフォルトの名無しさん
2014/08/08(金) 05:17:13.57ID:1UU7vf/D小学校で習う
0615デフォルトの名無しさん
2014/08/08(金) 10:20:34.18ID:3pQsoEzr0616デフォルトの名無しさん
2014/08/08(金) 10:25:22.80ID:gW33htdT全部の桁の数字を、最後の1桁になるまで足して1になればそれが1の倍数。
1にならなければそれが剰余。
0617,,・´∀`・,,)っ-○○○
2014/08/08(金) 23:48:43.27ID:QdNtltyv別に9の倍数を求める必要はないよ。あくまで例として出しただけで。
3と5の剰余を求めたいんでしょ。3なら分割統治法で2ビット値を足し続ければいい。
整数除算はモダンなCPUでも何十サイクルもかかるからビット演算+加減算に
展開したほうが速い場合は多々ある。
> 素直に9で割って余りがあるか判定したほうが良い。
除算・剰余命令が使えないCPUで同じこといえるの?
9の倍数の判定は、7かけてから6ビットに縮約することでできる。
0618デフォルトの名無しさん
2014/08/09(土) 00:07:52.61ID:L0D9xiK5>3と5の剰余を求めたいんでしょ。3なら分割統治法で2ビット値を足し続ければいい。
>整数除算はモダンなCPUでも何十サイクルもかかるからビット演算+加減算に
>展開したほうが速い場合は多々ある。
ねぇよ馬鹿か
0619,,・´∀`・,,)っ-○○○
2014/08/09(土) 00:20:22.24ID:nh0jgYrR0620,,・´∀`・,,)っ-○○○
2014/08/09(土) 00:21:55.81ID:nh0jgYrR0621デフォルトの名無しさん
2014/08/09(土) 03:51:34.63ID:pLOg/Mid13の倍数、7の倍数をどうぞ
0622,,・´∀`・,,)っ-○○○
2014/08/09(土) 09:01:38.99ID:nh0jgYrR1. メルセンヌ数2^n - 1を素因数分解してNを約数として持つ任意のnを決める。
2. Nの倍数判定をしたい数に、 (2^n - 1)/Nを掛ける。
3. n(またはその倍数)ビット単位で切り出し、加算する。
また、最後のnビットに収束するまでこれを繰り返す。
4. nビットに収束時、2^n - 1になっていればその数はNの倍数
(応用例として更に1足して2^n(あるいは1)への収束判定でもおk)
ちなみに5は端折ったけど3倍して4ビットに縮約
7はそのまま3ビット、13の場合は315倍して12ビット
RSAとか自前で実装したことあるなら思いつくだろこんなん
0623デフォルトの名無しさん
2014/08/09(土) 10:36:35.37ID:7qP+m4C10624,,・´∀`・,,)っ-○○○
2014/08/09(土) 11:00:39.66ID:nh0jgYrRhttp://ja.wikipedia.org/wiki/%E5%89%B0%E4%BD%99%E9%A1%9E%E7%92%B0
コンピュータで2のべき乗-1の倍数判定をやるのは
人間が10進数でやる9の倍数判定なみには簡単であるということ。
自分基準で考えなくていいからコンピュータ基準で考えなよ
固定長整数の範疇なら収束にかかる回数上限がわかるから
条件分岐は最終判定までは不要。
となれば少なくともdiv命令よりは速いだろうね。
https://gmplib.org/~tege/x86-timing.pdf
まあ、コンパイラがやってるみたいに a - [a / b] * b で判定してもいいんだけど
多倍長を扱いたい場合とか、乗算が遅い場合にはシフト+加算やるでしょ。
0625デフォルトの名無しさん
2014/08/09(土) 12:09:51.44ID:mIy/oKca>RSAとか自前で実装したことあるなら思いつくだろこんなん
思い付かなかった。
何倍まで判定していた?
0626デフォルトの名無しさん
2014/08/09(土) 13:02:24.85ID:cMAC0zr613とか19とかはどうなのかな
0627,,・´∀`・,,)っ-○○○
2014/08/09(土) 13:42:24.91ID:nh0jgYrRワークメモリ消費量は計算が進むほど減っていくので非常に経済的。
しかしメルセンヌ数じゃない数までこの方法を使うのは必ずしも最適ではないと思う。
複数の方法を複合的に使うのがベストなのでは。
0628デフォルトの名無しさん
2014/08/10(日) 04:44:06.43ID:wq8KfUB90629デフォルトの名無しさん
2014/08/11(月) 05:50:32.13ID:fF79KhY2つうか、具体性って>622で十分すぎるような……
0630デフォルトの名無しさん
2014/08/11(月) 09:30:41.11ID:k0jUGvDo0631デフォルトの名無しさん
2014/08/12(火) 22:31:03.64ID:WypK+3ii>除算・剰余命令が使えないCPUで同じこといえるの?
何言ってんのこのバカ
0632,,・´∀`・,,)っ-○○○
2014/08/14(木) 09:00:17.90ID:/1YXqPS/クロック数計測してみればいい。
コンパイラの吐いたコードと比べてみ?
別に書いてもいいけどつまらんぞ?
たとえば128bit整数のmod 3を求めるコード
pxor xmm0, xmm0
movdqa xmm1, [src]
psadbw xmm1, xmm0 ;; 11bit * 2
movdqa xmm2, xmm1
psrlq xmm2, xmm1, 8
paddd xmm1, xmm2 ;; 12bit
movd eax, xmm1
mov edx, eax
shr eax, 6
and edx, 63
add eax, edx ;; 7bit
mov eax, [table+eax] ;; 計算済みLUTから引っ張ってくる
0633デフォルトの名無しさん
2014/08/14(木) 10:36:27.82ID:KxZWNeXrアセンブラの構文を齧っただけの人間に説明するのは難しい。
使い方だけなら教えれば中学生でも使いこなせるレベルのテクニックだが。
0634デフォルトの名無しさん
2014/08/14(木) 12:01:41.69ID:jDhN7lgE教養課程の選択講座、くらいならわかるが
0635デフォルトの名無しさん
2014/08/14(木) 12:17:59.46ID:KxZWNeXrm=16*a+bとおくと
m mod 15 == (a+b) mod 15
難しい数式ほっといても簡単な理屈さえわかれば演算のショートカットは可能。
0636デフォルトの名無しさん
2014/08/14(木) 12:18:18.13ID:p8QfSufV0637デフォルトの名無しさん
2014/08/14(木) 14:35:21.60ID:31aNAkg3m mod 15 == (a+b) mod 15
中学生でも理解可能
0638デフォルトの名無しさん
2014/08/14(木) 15:21:45.62ID:jDhN7lgEうんうん、それ九去法の16進バージョンだね
m = 16*a + b
=(15 + 1)a + b
=15a + (a + b)
∴
m ≡ a + b (mod. 15)
ふつうこういう表記なんだけれどもね
0639,,・´∀`・,,)っ-○○○
2014/08/14(木) 19:42:23.76ID:YggMfJMPMMX/SSE使えば1命令だけでできるね
0640デフォルトの名無しさん
2014/08/30(土) 20:23:40.25ID:xeSHuuAgZ80と8086や
LDにmovやで
どや!すごいやろ
nopまであるさかいな
0641デフォルトの名無しさん
2014/08/30(土) 20:24:52.35ID:xeSHuuAgどや!羨ましいか
よし、おまえ等もチンポ鍛えなや
0642デフォルトの名無しさん
2014/08/30(土) 20:39:53.08ID:2qescp2g0643デフォルトの名無しさん
2014/09/15(月) 15:23:11.41ID:pkVJB2ulわらた
0644デフォルトの名無しさん
2014/09/15(月) 19:24:50.07ID:ZrKt/3Ec0645デフォルトの名無しさん
2014/09/29(月) 00:56:30.26ID:RKEDgsOw熱血! アセンブラ入門
http://www.shuwasystem.co.jp/products/7980html/4180.html
0646デフォルトの名無しさん
2014/09/29(月) 02:16:32.88ID:NJr46rSn実行環境が身近にないPowerPCとかその他アーキテクチャとか数がたくさんあっても無意味。
いまどきだったら VC++ Express のインラインアセンブラとか使うのがお手軽かつ効果も身近に感じれて
いい気がするが。
0647デフォルトの名無しさん
2014/09/29(月) 02:29:34.31ID:NJr46rSnhttps://twitter.com/search?f=realtime&q=http%3A%2F%2Fwww.shuwasystem.co.jp%2Fproducts%2F7980html%2F4180.html
0648デフォルトの名無しさん
2014/09/29(月) 08:16:03.37ID:wd4qvqdb0649デフォルトの名無しさん
2014/09/29(月) 08:26:09.14ID:xSX/Gj/Z0650デフォルトの名無しさん
2014/09/29(月) 08:31:28.14ID:NJr46rSn目次しか見てないで推薦もないと思うが。
https://twitter.com/tkmc/status/516132413710163969
> 『熱血! アセンブラ入門』http://www.shuwasystem.co.jp/products/7980html/4180.html …
> この目次を見たら買わないわけにいかない。
https://twitter.com/tkmc/status/516148086553321472
> 3日前に注文して昨日が発売日らしいのにまだ来ないなぁ。と思ったらAmazonは発売日が9/30って
> 書いてある。
0651デフォルトの名無しさん
2014/09/29(月) 09:36:48.07ID:NL6Qfls112ステップで作る組込みOS自作入門
http://www.amazon.co.jp/dp/4877832394/
対象マシンがH8/3069F
開発ツールを使って学ぶ! C言語プログラミング
http://www.amazon.co.jp/dp/4839951497/
初心者の方でも気軽に学習可能なように、必要開発ツールが
インストールされたLinux(CentOS)の仮想マシン(VM:Virtual Machine)
イメージをサポートサイトで無償配布します。「Oracle VM VirtualBox」
や「VMware Player」上に読み込めばすぐ学習をスタートできます。
- amazon紹介より -
0652デフォルトの名無しさん
2014/10/01(水) 03:50:57.56ID:PMHBFBS+コンパイラの出力見てコードの評価するのなんて業務でコンパイラ言語使ってりゃ日常の行為だろうに。
0653デフォルトの名無しさん
2014/10/01(水) 21:40:35.62ID:RRxwqEFU2chも同じだということを自分で証明しているw
0654デフォルトの名無しさん
2014/10/01(水) 23:25:07.36ID:XzaO0iHc0655デフォルトの名無しさん
2014/10/02(木) 08:07:44.77ID:vok4PHmT以前は-g cv8でできた気がしたけど、2012でもだめで、2008だったからかな
0656655
2014/10/10(金) 00:03:18.91ID:EfaI1XmCちゃんとブレークポイントも設定できた
2013でもローカルシンボルのアドレスは読み込んでるんだけどなぁ
0657デフォルトの名無しさん
2014/10/10(金) 12:27:08.25ID:553xVF6m0658デフォルトの名無しさん
2014/10/10(金) 12:43:13.70ID:aGA3C1dn0659デフォルトの名無しさん
2014/10/11(土) 00:20:30.24ID:JSe/b624無効になっちゃうんだよ
これは使いにくい
masmなら大丈夫なんだけどね
0660デフォルトの名無しさん
2014/11/04(火) 17:11:16.93ID:8a1BiHkJ80486になるとload effective addressという命令が加わっています。
今までmove命令で書けていたものに、load effective address命令を加える必要はあるのでしょうか。
moveとload effective addressは別物でしょうか
0661デフォルトの名無しさん
2014/11/04(火) 17:43:18.58ID:4tbMiHmM8086の頃からLEA命令あったでしょ。
http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf
0662デフォルトの名無しさん
2014/11/04(火) 17:56:50.54ID:99dxtSJ/・普通のアドレッシング表現から、そのアドレスにアクセスするのでなく
そのアドレスそのものが得られるので便利
・P5以降とかだと、可能な限りどんな命令でも1クロックで実行できるよう
頑張ってるので、アドレス計算用にたくさん乗ってる加算器を有用に
使って、数個の数の足し算と4倍、みたいな計算が高速にできる
とか。
0663デフォルトの名無しさん
2014/11/04(火) 17:59:26.43ID:obX3t5pP0664デフォルトの名無しさん
2014/11/04(火) 18:34:18.92ID:8a1BiHkJ0665デフォルトの名無しさん
2014/11/09(日) 14:24:01.21ID:bui++2v4サブルーチン呼び出しでレジスタの値を退避し、その処理から抜けるときに復帰するのはわかるのですが、
メインルーチンが呼ばれてプログラムが始まるときにレジスタの値をスタックに退避し、抜けるときに復帰するのはスタートアップルーチンと何か関係があるのでしょうか
0666デフォルトの名無しさん
2014/11/09(日) 14:41:08.70ID:6OcI07Hk退避/復帰する理由は他のサブルーチンと同じ。
0667デフォルトの名無しさん
2014/11/14(金) 21:44:40.20ID:Q09MuRKV0668デフォルトの名無しさん
2014/11/14(金) 21:45:49.11ID:Q09MuRKV0669デフォルトの名無しさん
2014/11/14(金) 21:57:13.86ID:ssh0hRKqhttp://www.intel.co.jp/content/www/jp/ja/processors/architectures-software-developer-manuals.html
0670デフォルトの名無しさん
2014/11/14(金) 22:31:57.52ID:Q09MuRKVやはり最終的にはintelのサイトに行き着くんですね、ありがとうございます
0671デフォルトの名無しさん
2014/11/15(土) 09:37:48.59ID:nFEuZMwr<main+1> mov rbp,rsp
<main+4> mov eax,0x0
<main+9> mov DWORD PTR [rbp-0x4],0x0
<main+16> pop rbp
<main+17> ret
もとのプログラムはint main(){return 0;}をディスアセンブルしたものなのですが、
eaxにはリターン値0がロードされるのはわかるのですが、
mov DWORD PTR[rbp-0x4],0x0が何の処理なのかわかりません
0672デフォルトの名無しさん
2014/11/15(土) 14:21:10.02ID:yIj5KxcO0673デフォルトの名無しさん
2014/11/15(土) 14:52:03.23ID:nFEuZMwrコンパイルオプションは-gのみです
0674デフォルトの名無しさん
2014/11/15(土) 15:53:32.81ID:yIj5KxcOhoge.c:
int main()
{
return 0;
}
を
$ clang -S hoge.c
したら
main:
pushq %rbp
movq %rsp, %rbp
pushq %rax
callq __main
movl $0, -4(%rbp)
xorl %eax, %eax
addq $8, %rsp
popq %rbp
ret
になったから結果が違うな。movl $0,-4(%rbp) はされるが。
0675デフォルトの名無しさん
2014/11/15(土) 15:56:22.72ID:yIj5KxcO最適化ありでコンパイルすると
main:
pushq %rbp
movq %rsp, %rbp
callq __main
xorl %eax, %eax
popq %rbp
ret
になったから movl $0,-4(%rbp) が意味ないことは確か。
0676デフォルトの名無しさん
2014/11/15(土) 16:01:50.53ID:yIj5KxcOint hoge()
{
return 0;
}
$ clang -S hoge.c
hoge:
pushq %rbp
movq %rsp, %rbp
xorl %eax, %eax
popq %rbp
ret
$ clang -O2 -S hoge.c
hoge:
pushq %rbp
movq %rsp, %rbp
xorl %eax, %eax
popq %rbp
ret
$ clang -O2 -fomit-frame-pointer -S hoge.c
hoge:
xorl %eax, %eax
ret
0677デフォルトの名無しさん
2014/11/15(土) 19:20:54.59ID:nFEuZMwrありがとうございます
意味がないということがわかりました
0678片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 22:21:21.82ID:gEw73of10679デフォルトの名無しさん
2014/12/25(木) 22:33:47.28ID:gEw73of10680デフォルトの名無しさん
2014/12/25(木) 22:35:18.35ID:P9hgzX+u0681デフォルトの名無しさん
2014/12/25(木) 22:37:17.19ID:P9hgzX+uhttps://www.google.co.jp/search?q=%E7%89%87%E5%B1%B1%E5%8D%9A%E6%96%87MZ&ie=UTF-8
0682デフォルトの名無しさん
2014/12/27(土) 22:56:25.54ID:u+dBZrZs和差は、指数部の大きい方へ合わせる
1111
00001101 → 0
指数の差が4桁以上あると、下は0と同じになる
仮に指数を、A50,B20とすると、
積は両指数の和 → 50 + 20 = 70
除は両指数の差 → 50 - 20 = 30
0683682
2014/12/28(日) 10:12:28.37ID:/YZxn3dBCで書いて、アセンブラで出力すれば?
でも、ちゃんとステータスレジスタのフラグが立つかな?
調べてもよくわからん(多分それだけ使われないんだろうが)
0686デフォルトの名無しさん
2015/02/01(日) 19:01:49.03ID:rGGapq8Aお前がBCD演算を理解してないだけ
0687デフォルトの名無しさん
2015/02/01(日) 19:33:48.31ID:+Sv3xZC2Z80のフローティングライッブラリをx86に移植して
三角関数もテーブルを使って近似値を求める方法で実装したことあるけど
今の時代、知的好奇心を満たす以外になにか意味ある?
三角関数の精度はFPUの付いたPCで計算した結果と摺り合わせて確認した
0688デフォルトの名無しさん
2015/02/01(日) 20:06:24.91ID:s/hXDQXD0689デフォルトの名無しさん
2015/02/01(日) 20:53:10.36ID:+Sv3xZC2当時のN88BASIC(86)との比較ではインタープリタ対マシン語(アセンブラ)なので
オーバーヘッドが少ない分自分で移植したライブラリの方が早かった(FPU無しの倍精度)
内部は80ビットフローティングの精度に対応する為に化数部を128ビット指数部を16ビットで計算後
80ビットフォーマットに丸めた
x64って天国だよなx86と比較すると
紙に印刷したプログラム探せば出てくると思うw
0690デフォルトの名無しさん
2015/02/01(日) 22:17:09.61ID:e1RPi5xm0度〜45度をテーブル実装するの?それとももっと狭くていいの?
0691デフォルトの名無しさん
2015/02/02(月) 04:57:44.05ID:j5MISSAc忘れたけどたぶんそれくらい
もしかすると90度分かもしれなけど
テーブルの形式は計算精度が必要だったので
近似値に収束する形だったと思う(もう覚えていない)
三角関数の比率が必要な場面は今はFPUに依存できる
あらかじめ化数128指数16ビットの浮動小数点ライブラリで精度の高めな
近似値導出用テーブルを作ってそれを使ってtan-1(うろ覚え)を求めた後で三角関数を計算してた
利用目的で必要な計算精度も異なるので工夫しようぜ
三角関数の粗い比率だけなら64ビット整数で簡単に導出可能
0692デフォルトの名無しさん
2015/03/08(日) 10:52:34.09ID:/s2hhMUc0693デフォルトの名無しさん
2015/03/10(火) 01:21:00.65ID:HHYC72Cwhttp://codepad.org/STGr8jeE
http://codepad.org/p74NS78p
プログラムの内容は8つのLEDのうち一つが光っており、
RB0のスイッチを押すたびに光る場所がひとつずつシフトしていくというものです
そして、このプログラム内でチャタリング対策を行っています。
Cの方は上手く動いてくれましたが、アセンブラの方は56行目でどうしてもスキップが有効になりCount_Loopから抜け出せない状況に陥ってしまいます
ステップオーバーで調べてみたところWregや物理スイッチの反応には問題なさそうだったので
Switch_Countが怪しいと睨んでいます(原因は分かりませんが)
どなたか原因の究明をお願いします
0694デフォルトの名無しさん
2015/03/11(水) 10:42:49.84ID:3uN2N73Ihttp://wc2014.2ch.net/test/read.cgi/denki/1422683846/
0695デフォルトの名無しさん
2015/03/12(木) 15:48:05.20ID:5fkTWTroありがとう
0696デフォルトの名無しさん
2015/03/17(火) 21:14:19.50ID:aVnPeaqIにするだけで直ったら笑うしかない
0697デフォルトの名無しさん
2015/04/30(木) 22:48:02.55ID:0+PJlfooサンプルのプログラムを入力したのですが、エラーの原因が分かりません
サンプルコード
.set EXIT, 1
.set READ, 3
.set WRITE, 4
.data
PROMPT: .string "input string >> "
.bss
var: .skip 16, 0x00
.text
.global main
main:
pushl $PROMPT
call print
call scan
pushl $var
call print
call exit
print:
movl 4(%esp) ,%ecx
movl $1, %ebx # 標準出力へ
movl $1, %edx # 1文字出力
続く
0698デフォルトの名無しさん
2015/04/30(木) 22:50:24.85ID:0+PJlfoowrite:
cmpb $0x00, (%ecx) # null文字かどうか
je write_end
movl $WRITE, %eax # write
int $0x80
incl %ecx # 次の文字
jmp write
write_end:
ret
scan:
movl $READ, %eax # readシステムコール
xorl %ebx, %ebx # 標準入力から
movl $var, %ecx # バッファを指定
movl $16, %edx # 16バイト読み込み
int $0x80
ret
exit:
movl $EXIT, %eax # exit
movl $0, %ebx # 終了コード0
int $0x80
0699デフォルトの名無しさん
2015/04/30(木) 22:50:58.40ID:0+PJlfooすると、
invalid instruction suffix for `push'
という、アセンブラのエラーが出ます。
これはアセンブラ側に問題があるのでしょうか?
プログラムの問題?ハード側?
解らないヽ(´o`;
色々試してみましたが、pushlの「l」のことを指しているのかとも思いましたが、解決策が見つかりません。
<スペック>
PC:レグザPC Windows7(64bit)
USBHDD:ubuntu14.10
CPU:インテル Core i7 2670QM
メモリ:8GB
どうかよろしくお願いします。
0700デフォルトの名無しさん
2015/05/01(金) 00:16:48.19ID:WNUsFIxqCRLFとか
0701デフォルトの名無しさん
2015/05/01(金) 03:46:47.42ID:TPwiwWUOなんかそのものズバリの質問してる外人がいる。
"Invalid instruction suffix for push when assembling with gas"
http://stackoverflow.com/questions/6268745/invalid-instruction-suffix-for-push-when-assembling-with-gas
ざっとしか読んでないけど
32bitアセンブラ用のコードを64bitアセンブラで動かそうとすると、レジスタが増えた分、それに対応させる
プリフィクス命令REPを追加しないといけないらしい。
64bitアセンブラの場合、push命令にREPプリフィクスを付けないとエラーになるみたい。
もっと言うと、64bitアセンブラではpush/popは事実上使われなくなるので違う書き方に変えろということもあるらしい。
http://codezine.jp/article/detail/457?p=2
自分で試してないのでほんとかどうかは知らん。
0702デフォルトの名無しさん
2015/05/01(金) 08:29:12.81ID:wFPW/Xoyそういや64bitになったら使った試しがない
128bit以上の所をShiftするならSSE3か何かにそういう命令あったような
0703デフォルトの名無しさん
2015/05/01(金) 13:44:13.88ID:ZRNg35S/>64bitアセンブラではpush/popは事実上使われなくなるので違う書き方に変えろということもあるらしい。
リンク先読みました、目からウロコだった。ww
0704デフォルトの名無しさん
2015/05/01(金) 16:05:20.76ID:tFZiwDeL入れると普通に使えるから問題感じた事ないな
0705デフォルトの名無しさん
2015/05/01(金) 21:18:43.53ID:Efwc/Emnリンク貼って頂いてありがとうございます!
世界には同じように悩んでた人がいたんですね^^;
単純にHello,Woldを表示するCコードを逆アセンブルしてみると、
pushはpushqで出てました。
.cfi_startproc〜.endprocで囲まれており、pushqの前後に
.cfi_def_cfa_offset 16
.cfi_offset 6 , -16 と、あります。
クワッドを使用する上で必要なのでしょうか?
ただ、>>697の質問のコードで同じような書き方をすると
Segmentation fault (コアダンプ)となりました (--;
むちゃくちゃだと思いますが、ホントに解りません(>_<)
ただ、64bitでは入門しょっぱなから記述が変わってくるという
ことはなんとなく分かりました(T.T)
64bitでのpushの問題をなんとか解決したいです。
ハードル高いんでしょうか?
因みにパソコンすら初心者です。下手な質問、ご容赦下さい。
頑張ります(-o-)b
0706Office & Gamers ◆G144Hzgh2.0e
2015/05/02(土) 01:21:24.36ID:BIc+ZG3hアセンブラをやりたかったら、MenuetOSと付属のFASM(flat assembler)を使うといいよw
システムコールがレジスタ渡しで簡単w
0707デフォルトの名無しさん
2015/05/02(土) 23:53:25.09ID:N2i4dBWjやってみたら動きました。Windows7-64で、たった2.5kバイトでHelloが出ます。ml64.exeが必要です。
http://dabun.kmycode.net/1_winmachine/index.html
0708デフォルトの名無しさん
2015/05/07(木) 09:48:07.36ID:uz86ZVQLLINK A6, #-56
MOVEM.L D2-D7/A0-A5,-48(A6)
MOVE.L D0,-52(A6)
MOVE.L D1,-56(A6)
〜処理〜
MOVEM.L -48(A6),D2-D7/A0-A5
UNLK A6
0709デフォルトの名無しさん
2015/05/07(木) 12:35:44.27ID:bwdzUvDw0710デフォルトの名無しさん
2015/05/19(火) 19:25:09.28ID:zxHYER8T64bitでは基本push ,pop系統の命令は使わない
>>701のリンク先にもあるけど
あらかじめpush popで利用する分の格納領域を手続きの初めにスタックフレーム上に確保する
で、mov命令でspの値+オフセット、こんな感じに扱う
mov qword ptr[rsp+offset],rax
mov rax,qword ptr[rsp+offset]
昔流のpush popでお手軽手抜きは難しいんだろうね
いや、出来るかも知れないけど
アセンブラ+スタックフレームの確保を自動で計算、命令も出力してくれる
cみたいに拡張したアセンブラが必要になるね
0711名無しさん
2015/06/14(日) 09:50:14.92ID:bOUig4Hv作成したんですが。うまく動きません。どうしてですか?
実際のデータは1+2=3にしたいんです。
DATA1 DC #0080,#0000;1
DATA2 DC #0081,#0000;2
おそらく、データの値が間違っていると思うんですが・・・
0712名無しさん
2015/06/14(日) 14:50:42.91ID:bOUig4Hvお騒がせしました。
0713デフォルトの名無しさん
2015/06/28(日) 11:43:30.99ID:C8acUGCgmov.lでレジスタに送るときに付けてないとアドレスの内容が送られるのに、
データ定義するときはつけないみたいなんだ。
有り無しの違い教えてください!
0714デフォルトの名無しさん
2015/06/28(日) 23:40:08.78ID:u+WDKBAdマニュアルに書いてないっけ?
0715デフォルトの名無しさん
2015/06/29(月) 18:27:44.03ID:U/nUfeSW初心者すぎてマニュアルの見方すら分かってませんでした。
定数と考えればいいんですね。
スッキリしました。
ありがとう。
0716デフォルトの名無しさん
2015/06/30(火) 08:05:57.40ID:d0PzGiLf0717デフォルトの名無しさん
2015/06/30(火) 21:12:30.13ID:XopmavOU覚えておきます!!
0718デフォルトの名無しさん
2015/07/07(火) 06:23:33.54ID:B+1kKjNvそうするとCALLを使わず自分で好きなレジスタを使ってスタックを管理しても有意差は無いと考えていいんでしょうか?
それともCALLやPUSH等の専用の命令を使うと1Hzに収まるとかそういう違いがあるのでしょうか?
0719デフォルトの名無しさん
2015/07/07(火) 12:07:19.12ID:DcDmvdDlアセンブラで他命令にマッピングされるもののことならば有意差はないでいい
マイクロコードのことならば、そもそも出来ない
0720デフォルトの名無しさん
2015/07/07(火) 14:58:03.97ID:ldC6ltUqCALLは1命令で済むから割り込みのことを考える必要はないけど、複数命令の組み合わせにした場合、
途中で割り込みが入っても大丈夫かどうか検討してみたほうがいいですよ。
それと、両方の場合でトータルのクロック数を比較して、少ない方を使うのがいいですよ。
0721,,・´∀`・,,)っ-○○○
2015/07/07(火) 15:34:31.62ID:U1BWXrcA少なくとも32ビットまでのx86命令セットにはEIPレジスタを読み出す命令は存在しない
0722デフォルトの名無しさん
2015/07/07(火) 16:38:53.47ID:6QdGJYSyおじいちゃん頭が固いね。
アセンブラがアドレスを計算して入れればいいじゃん。
分岐先やデータ参照のアドレスはそうやってるんだし戻り番地が計算できないとかない。
0723デフォルトの名無しさん
2015/07/07(火) 18:58:46.93ID:Wm4YwPIIcall以外じゃ不可能なのよ
だからPICでPC相対アドレス計算する時に次の命令の番地にcallしてpopしてとか面倒なことやってるわけでしょ?
x86-64ならleaでRIP相対アドレッシングできるからまあcallは必須ではないか
0724デフォルトの名無しさん
2015/07/07(火) 19:56:39.94ID:B+1kKjNvありがとうございます。書き忘れてましたが64bit用のオペコード使って色々書こうと思っていた所で、
一部の命令を覚えないで済むと慣れるまでは楽出来るかなと思ってたのですが、やはり最初から全ての命令を含めて組み立てるべきなんですね。
あと追加で申し訳ないんですが、ES,SS,CS,DS等へのPUSH、POPが64bit modeだと無効となっているんですが、
これはリアルモードの時は使用できて、64bit modeの時に無効になるという解釈でいいんでしょうか?
それとも64bitCPUには、それらのセグメントレジスタ自体が乗ってないんでしょうか?
0725デフォルトの名無しさん
2015/07/07(火) 20:50:44.79ID:B3f4PYYu__asm {
push target
jmp proc1
target:
}
で出来るな。
引数は普通にスタックに積んで返り値はeaxだしな。
0726デフォルトの名無しさん
2015/07/07(火) 21:04:09.84ID:B3f4PYYuセグメントについては
http://hp.vector.co.jp/authors/VA003988/asm2.htm
の2.1にあるテーブルのセグメントなんたらの項目を参照してね。
0727デフォルトの名無しさん
2015/07/07(火) 21:27:05.58ID:Xbklf+Ixcallやretはリターンアドレスの予測機構があってサブルーチンコールのペナルティが少なくなってるはず。
だから他のレジスタを使って間接ジャンプした時の方が遅くなると思うよ。
フレームポインタを省略してスタックポインタの相対アクセスでローカル変数を
管理するというのはよくあるが、無理してスタックを使わないというのはまずない。
0728デフォルトの名無しさん
2015/07/07(火) 22:24:16.63ID:B+1kKjNvありがとうございます。
なんとなく「乗ってないという事はなさそうだな」という程度にしかまだ理解できませんが、
これから勉強してはっきりと理解できるように頑張ります。
>>727
jmp命令だとパイプラインの中身がflushされるそうですが、callだとそれを防げるという理解でよろしいでしょうか。
早くテスト出来る環境を整えて色々な方法で比べてみたいと思います。
0729,,・´∀`・,,)っ-○○○
2015/07/07(火) 22:49:15.22ID:Jp2Iokv0それじゃリロケータブルなコードは書けないぞ
0730デフォルトの名無しさん
2015/07/07(火) 23:17:56.50ID:Xbklf+Ix>jmp命令だとパイプラインの中身がflushされるそうですが、callだとそれを防げるという理解でよろしいでしょうか。
callというよりretね。パイプラインのフラッシュというのは一個所から複数のアドレスに分岐するようなケースで発生しやすい。
条件分岐や間接ジャンプ、リターン命令など。
だからレジスタの内容で間接的にジャンプ先が指定される疑似retはペナルティが発生しやすい。
そのためスタックポインタには特別な監視機構がついてる。
0731デフォルトの名無しさん
2015/07/08(水) 02:16:34.27ID:u/EIUunr0732デフォルトの名無しさん
2015/07/08(水) 02:20:24.53ID:u/EIUunrそれじゃx86ではリロケータブルなコードは書けないぞw
exeをロードした後セグメントの値をゴリゴリ書き直したり
MMUでロードする論理アドレスを固定したりと
いくらでもリロケータブルにする方法はあるのに無知って怖いな
0733,,・´∀`・,,)っ-○○○
2015/07/08(水) 03:10:34.57ID:88H8yWBhそんなん知ってるが?てかJITのコード書いてましたが?
ユーザーモードでコードセグメントの書き換えを行うには特別なAPIを呼び出す必要がある上
キャッシュのinvalidationを都度やる必要があるからペナルティを伴う
その時点のEIP値をとった方が遥かに柔軟だしそもそもそんなコードの書き換えしてまで
call命令をわざわざ回避する理由がねーぢゃん
0734,,・´∀`・,,)っ-○○○w
2015/07/08(水) 03:25:16.20ID:88H8yWBh特に32ビットではCALL命令を使う必要がある、と。
本末転倒だな
0735デフォルトの名無しさん
2015/07/08(水) 03:54:52.00ID:u/EIUunr使わなくてもリロケータブルなコードは書けるってだけ。
68Kとかだとリロケータブルにするためにそういうテクニックを使うが
86はセグメントと内蔵MMUがあるからそこまでしなくてもリロケータブルになる。別に1バイト単位でリロケータブルにしても意味ないからね。
ところでおじいちゃん明日から大丈夫なの。
0736デフォルトの名無しさん
2015/07/08(水) 05:15:05.60ID:Y+kE74C90737,,・´∀`・,,)っ-○○○w
2015/07/08(水) 06:24:13.84ID:88H8yWBh> 別に1バイト単位でリロケータブルにしても意味ないからね。
うわークソ老害が姿を表したぞ
おま絶対50歳超えてるだろ
> 86はセグメントと内蔵MMUがあるからそこまでしなくてもリロケータブルになる。
> 別に1バイト単位でリロケータブルにしても意味ないからね。
このおじいちゃん再配置可能の意味をものすごい古い意味でしか知らないようだけどVista以降のOSは触ったことがなさそうだな 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0738,,・´∀`・,,)っ-○○○w
2015/07/08(水) 06:30:07.39ID:88H8yWBh0739,,・´∀`・,,)っ-○○○w
2015/07/08(水) 07:54:58.71ID:88H8yWBhそれでなくとも*NIXでforkとかやるのにEIP/RIPの取得は必須なんだが
(子プロセスで完全なコピーをとるからね)
結果的にスレッドが割り当てられるアドレスをバイナリ生成時に決め打ちすることができないんだよ
おじいちゃんは所詮DOSとかの時代のシングルタスク知識止まり
0740デフォルトの名無しさん
2015/07/08(水) 09:01:04.05ID:u/EIUunrこいつリエントラントとリロケータブル混同してるよ
0741デフォルトの名無しさん
2015/07/08(水) 09:47:32.45ID:7ROcSmAH命令デコード後に複数μOPに展開されて処理される命令と単純な命令を並べた場合の比較なら
新しいCPUほどデコーダーの制限の影響が小さくなってるから、どちらでも速度的なメリットはほぼ関係なくなった。
ただしサブルーチンコールは専用の命令を使うべき。
core以前のPentium 3とかだとメモリオペランドが複数μOPに分解されるため
デコーダーの制約に引っかかりやすかったが、今のCPUでは1μOPに変換されるから関係なくなってるし。
日本語版の最適化マニュアルは古すぎて今の最適化マニュアルでは非推奨のコーディング法になってるのも多いから注意してね。
0742デフォルトの名無しさん
2015/07/08(水) 10:16:23.88ID:8utIjUevhttps://ja.m.wikipedia.org/wiki/リエントラント
0743デフォルトの名無しさん
2015/07/08(水) 10:31:10.51ID:8utIjUev0744デフォルトの名無しさん
2015/07/08(水) 10:41:45.36ID:u/EIUunrsetjmp/longjmpはスタックポインタを保存してることも知らないゴミか
0745デフォルトの名無しさん
2015/07/08(水) 22:01:58.21ID:7ROcSmAHデスティネーションオペランドは最新coreでも2μOPになるので、昔のCPUと変わってないよ。
0746デフォルトの名無しさん
2015/07/08(水) 22:03:18.41ID:Y+kE74C9判ります
0747デフォルトの名無しさん
2015/07/16(木) 06:27:13.33ID:l6l+0TT5DOSの時代なら30代後半にさしかかったばかりの若造でも余裕で使ってる気がするんだが……
0748デフォルトの名無しさん
2015/07/16(木) 09:52:43.32ID:qia5kD2Oプログラムを構成するコード、リテラル、データ、これらを任意の物理アドレスに配置できるのがリロケータブル。
マルチプロセス、マルチスレッド、
リエントラントで同一バイナリが同時に複数の箇所からコールされても動くかどうかは別問題。
データはコンテキスト毎に別物を用意しなければならないから、通常はコンテキスト毎に別のメモリを割り当ててそのポインタを渡すかスタックで利用できる範囲内で使う。
コードはPC相対分岐が可能なのでロードされたアドレスとは関係なく動かすことができる。
問題はリテラルでリテラルはデータと違って原則として一つだけあれば良いがそのアドレス指定をどうするか。さらにリテラルに分岐先アドレスを書いてのテーブル参照分岐をどうするか。
x86の場合はセグメント/LDTを使った論理/物理アドレス変換機能があるためそれを使えば簡単に解決する。しかしx86以外のCPUにはその機能が無い。RISCを含めた多様なCPUに対応したOSを実現しようとした時それはまずい。
またLDTを使うとセグメントの切り替えが頻繁に発生して性能が上がりにくい。それはCPUのマイクロアーキテクチャの改良で何とでもなるがそこまでして使わなければならないものでもない。
x86を含む多くのCPUにはPC相対アドレッシングモードの利用条件に制限があるが全てのCPUでcall命令を実行すればそのリターンアドレス=call命令の次の命令のアドレスが取得可能なのでそこを基準にした疑似PC相対アドレッシングモードが実現可能である。
リテラルの参照や分岐先アドレステーブルにこれを使うとCPUに依存しないOS、コンパイラが実現できて具合が良い。
なおリテラルの参照にPC相対アドレッシングモードが利用可能な場合はそれを使うと命令数を節約できるのでx64ではその機能が追加されている。
0749デフォルトの名無しさん
2015/07/16(木) 11:05:05.35ID:+XrxSP+30750,,・´∀`・,,)っ-○○○w
2015/07/16(木) 20:02:18.69ID:zs3wJnLw関数がどこのアドレスにマッピングされるか実行時まで不定なんてのはJITではよくあることですし
EIPを取るためにCALLは事実上必須の技術要素
化石には理解できんでしょうよ
0751デフォルトの名無しさん
2015/07/16(木) 22:33:05.29ID:qia5kD2Oおまいさんがx86を理解していないことはよく分かったよ
0752デフォルトの名無しさん
2015/07/17(金) 06:17:34.00ID:LRu5x31aJITだってコードジェネレータが確保したメモリに命令を埋めてくんだから
callでEIP取らんでもコードジェネレータが把握してるものだよな
0753,,・´∀`・,,)っ-○○○
2015/07/17(金) 11:57:49.98ID:jB6b4zL7そうやってJIT開発経験ないこと暴露しなくていいよ
それじゃ例外処理を実装できない
0754デフォルトの名無しさん
2015/07/17(金) 13:16:26.01ID:KpkroeLG整数主体の簡単なJITなら別に例外なんて必須じゃないけどな
例外処理まで含んだJIT環境を実装したと言うのなら
具体的にどんな環境でどんな手順でコードを生成するのか具体例を示してもらえません?
0755デフォルトの名無しさん
2015/07/17(金) 13:21:27.49ID:KpkroeLG○具体的にどんな環境でどんな手順で例外部分コードを生成するのか具体例を示してもらえません?
0756デフォルトの名無しさん
2015/07/17(金) 18:02:27.98ID:rsdGdSBA例外処理で必要なのはスタック上のコンテキストであってEIPじゃないよね
EIPは例外発生したことによってその位置が渡されるんだから
カーネルとユーザプログラムの処理がごっちゃになってないか
setjump/longjmpも例外処理自体には直接関係してないし
0757デフォルトの名無しさん
2015/07/17(金) 18:07:59.31ID:z7xtLFhW例外が発生したらスタックフレームにeipを含む例外内容が積まれるから
それを処理するというのなら普通だが。
0758,,・´∀`・,,)っ-○○○
2015/07/17(金) 18:51:13.61ID:jB6b4zL7x86の例外だけはな
~~~~~
0759デフォルトの名無しさん
2015/07/17(金) 19:48:00.37ID:XnN0+6K+0760デフォルトの名無しさん
2015/07/17(金) 19:56:00.34ID:XnN0+6K+>CALL命令使わずに戻り先の命令ポインタをどうやってスタックにセットするつもりだ?
>>722
>アセンブラがアドレスを計算して入れればいいじゃん。
>分岐先やデータ参照のアドレスはそうやってるんだし戻り番地が計算できないとかない。
>>729,,・´∀`・,,)っ-○○○
>それじゃリロケータブルなコードは書けないぞ
>>739,,・´∀`・,,)っ-○○○
>結果的にスレッドが割り当てられるアドレスをバイナリ生成時に決め打ちすることができないんだよ
>>740
>うわー
>こいつリエントラントとリロケータブル混同してるよ
0761デフォルトの名無しさん
2015/07/17(金) 19:59:37.86ID:XnN0+6K+>関数がどこのアドレスにマッピングされるか実行時まで不定なんてのはJITではよくあることですし
>EIPを取るためにCALLは事実上必須の技術要素
>>752
JITだってコードジェネレータが確保したメモリに命令を埋めてくんだから
callでEIP取らんでもコードジェネレータが把握してるものだよな
>>753 :,,・´∀`・,,)っ-○○○
>そうやってJIT開発経験ないこと暴露しなくていいよ
>それじゃ例外処理を実装できない
>>756
>例外処理で必要なのはスタック上のコンテキストであってEIPじゃないよね
>EIPは例外発生したことによってその位置が渡されるんだから
>カーネルとユーザプログラムの処理がごっちゃになってないか
>>757
>例外処理にcall/popでeipを取得する必要があるとは初耳だな。
0762,,・´∀`・,,)っ-○○○
2015/07/17(金) 20:26:33.34ID:NuSdomfxhttps://github.com/v8/v8/tree/master/src/ia32
0763,,・´∀`・,,)っ-○○○
2015/07/17(金) 20:39:02.64ID:NuSdomfx0764デフォルトの名無しさん
2015/07/18(土) 01:24:55.86ID:eOz3ARns0765デフォルトの名無しさん
2015/07/18(土) 01:44:15.75ID:Tl20d9v90766,,・´∀`・,,)っ-○○○
2015/07/18(土) 02:17:36.36ID:x5VfUT5S0767デフォルトの名無しさん
2015/07/19(日) 10:45:12.87ID:7NCgP6LA0768デフォルトの名無しさん
2015/07/19(日) 20:39:31.05ID:RGrGlHayで、これのどこが「CALLは事実上必須の技術要素」と関係してんの?
>関数がどこのアドレスにマッピングされるか実行時まで不定なんてのはJITではよくあることですし
>EIPを取るためにCALLは事実上必須の技術要素
これの説明になってないと思うけど
例外のカーネルに対する割り込みまで混同してるのか?
それこそDOSの処理との違いを理解してないじゃないか
0769デフォルトの名無しさん
2015/07/19(日) 20:49:10.66ID:RGrGlHayそれでなくとも*NIXでforkとかやるのにEIP/RIPの取得は必須なんだが
(子プロセスで完全なコピーをとるからね)
結果的にスレッドが割り当てられるアドレスをバイナリ生成時に決め打ちすることができないんだよ
forkでコピーとかいつの時代の話してるのかというのに加えて
単一のポインタで「メモリ空間」をどうやって表現するのかねぇ
なんか色々と支離滅裂なんだよな
0770デフォルトの名無しさん
2015/07/19(日) 21:28:40.28ID:pmXYRPLP0771デフォルトの名無しさん
2015/07/19(日) 22:48:15.71ID:RGrGlHayforkで実行中の命令ポインタが必要になるのは実装がそうなってるんだから当然としても
子プロセスで親プロセスのメモリ空間を再現するのにはipだけじゃ不足だし、ipがなくてもできることし
次で突然リロケータブルの話題に戻ったうえに、普通はスレッドの開始アドレス指定するようになってるのに決め打ちできないとか言ってる
スケジューラのことを指すとしても、こっちはバイナリの生成アドレスは関係してこないよね
以上のことを合わせると、プロセスとスレッドの解釈までなんかおかしい
>>762はhttps://github.com/v8/v8-git-mirror/blob/master/src/sampler.ccの339行の関数だとすると
単にコンテキストから各ポインタを取り出してるだけだよね
「CPUが例外を実装するのにCALLは事実上必須の技術要素」というのなら理解できるけど
0772,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:13:23.48ID:wJb+2lr3アセンブラのスレでなんだが、C++コードの読解力から身に着けようか
0773デフォルトの名無しさん
2015/07/20(月) 00:20:33.85ID:AMStoo45それは置いといて、理解してないっていうなら聞くけど、この関数のどこに「EIPを取るためにCALLは事実上必須の技術要素」
のcallがあんの?
0774,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:26:45.44ID:wJb+2lr3アカデミックな論文とか読まないでしょ君、学がないから。そもそも大学を出ているかも怪しい。
http://ir.c.chuo-u.ac.jp/repository/search/binary/p/3402/s/1100/
EIP/ESPの保存にcallを使わなくてもいいってしつこく主張したくて駄々をこねてるみたいだけど
そんな方法めんどくさいだけだろ?
0775,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:35:43.31ID:wJb+2lr3JITでそんなのいちいち計算してたら演算コストかかって仕方ねーから関数やループの先頭アドレスだけ把握して
あとはcallで取れるEIP値で把握するのが当たり前なんだよ
コードの最適化で書き換わったりするから全命令のアドレスなんて覚えてらんねーっての
てか全命令のアドレスなんてランタイムが記憶してたらメモリ消費半端ないことになりますよ
DOS時代の知識しかない老害にはそのあたりの感覚が理解できてないのね
0776デフォルトの名無しさん
2015/07/20(月) 00:38:26.64ID:AMStoo45>>739ではやらかしたと思ったんでしょw
0777,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:39:34.57ID:wJb+2lr30778デフォルトの名無しさん
2015/07/20(月) 00:43:13.27ID:gdO7FQR/0779,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:44:41.10ID:wJb+2lr30780,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:49:32.24ID:wJb+2lr3http://pf-j.さくら.ne.jp/program/tips/winfork.htm
0781デフォルトの名無しさん
2015/07/20(月) 00:54:38.35ID:AMStoo45>Cライブラリ呼び出しの前にsetjumpを行わなければならない。
これはRubyからCのライブラリの関数を呼び出せるようにしたための制限だろ
Cとリンクして動かさなければ関係ないはずだし、そう書いてあると思うのだが
これが「事実上」なの?
0782デフォルトの名無しさん
2015/07/20(月) 00:57:47.98ID:SiY3idyo0783,,・´∀`・,,)っ-○○○
2015/07/20(月) 00:59:44.11ID:wJb+2lr30784デフォルトの名無しさん
2015/07/20(月) 01:00:27.57ID:AMStoo45ネイティブでないforkを持ち出しても意味ないの
Cygwin使ったことある?
forkのエミュレーションが遅くて昔から問題視されてるよ
レベルが低すぎるってんなら>>771のプロセス/スレッドのとこ個別に反論してみてよ
0785デフォルトの名無しさん
2015/07/20(月) 01:01:29.77ID:AMStoo450786デフォルトの名無しさん
2015/07/20(月) 01:05:50.67ID:AMStoo45JIT開発経験が無いとか噛みついてきたからさ
そして、団子は「それじゃ例外処理を実装できない」と言ったんだよ
0787デフォルトの名無しさん
2015/07/20(月) 01:05:56.20ID:AMStoo45JIT開発経験が無いとか噛みついてきたからさ
そして、団子は「それじゃ例外処理を実装できない」と言ったんだよ
0788,,・´∀`・,,)っ-○○○
2015/07/20(月) 01:07:55.61ID:wJb+2lr3愚痴りたいならブログでもツイッターでもどうぞ
0789デフォルトの名無しさん
2015/07/20(月) 01:11:00.75ID:AMStoo450790デフォルトの名無しさん
2015/07/20(月) 01:20:37.50ID:FJ8eMmMt0791,,・´∀`・,,)っ-○○○
2015/07/20(月) 01:25:16.35ID:wJb+2lr3まず手前のレベルの低さをなんとかしろよ
ツッコミにすらなってない
0792,,・´∀`・,,)っ-○○○
2015/07/20(月) 01:28:10.38ID:wJb+2lr30793デフォルトの名無しさん
2015/07/20(月) 01:46:20.78ID:8dMvvLjx初心者にもわかるように解説してください
ここ、初心者スレであって達人スレじゃないんで
0794,,・´∀`・,,)っ-○○○
2015/07/20(月) 01:55:13.34ID:wJb+2lr3「call命令使わないとEIPとれないだろ?」って言ったら
最近の処理系の知識皆無なジジイが発狂
動的なコードでEIP値が必要なケースってのを理解してないようだ
0795デフォルトの名無しさん
2015/07/20(月) 02:12:40.06ID:AMStoo45団子がつまらない自尊心の為に関係ないプロセス/スレッドの話まで持ち出してきて
それが相手を罵倒できるようなレベルの内容じゃなかったでしょ
その後も誰かが何か書くたびに「化石には理解できんでしょうよ」とか絡みついて見苦しいことしてるくせにな
JITはアセンブラも含むんだから、そこで例外を実現するにはOSの例外処理機構に
マッチしてればいいだけなのに「それじゃ例外処理を実装できない」と絡んできたんだろうが
こっちもrubyのような環境を想定してなかったのは確かだが、例外処理はハンドラによって変わるの理解してる?
C++でCライブラリを呼び出したらsetjumpなんてしてると思ってんの?
0796,,・´∀`・,,)っ-○○○
2015/07/20(月) 02:18:44.28ID:wJb+2lr3スレ違いの話題から率先して身を引くことで優位性を示されてもよいかな
0797デフォルトの名無しさん
2015/07/20(月) 04:04:40.80ID:ojcfcDra0798デフォルトの名無しさん
2015/07/20(月) 07:22:17.85ID:25wPVHZj0799デフォルトの名無しさん
2015/07/20(月) 12:17:45.00ID:AMStoo45>例外の受け渡しを前提に設計されたものではなく、CRubyインタプリタに合わせた単純な実装では、
>効率的な処理を行う実装することが難しい。
CRubyのライブラリがsignal使って例外処理を実装してるのがいけないってことだろ
こいつのせいでJITの例外処理では完結できなくなったのが原因じゃないか
JITのランタイム環境はフローの基本ブロックのアドレス程度は管理してるはずなので
Rubyのような問題のある特定環境じゃなきゃsetjump(のコール)を使用しなくても動作させるのは可能なはずだよな
>どのみちEIPとESPの保存はJITでの例外処理の実装に最低限必要なんだけどね
「例外が発生したアドレス」やレジスタの内容はOSがお膳立てして保存してあるだろ
callは「呼び出した命令の次の命令のアドレス」を保存するんだぞ
例外ハンドラに処理が移った時点でJIT環境の管理するアドレス情報で処理するのは可能だろ
回復に必要な経路の情報は既にスタックフレームに入ってんの
だから「CPUが例外を実装するのにCALLは事実上必須の技術要素」というのなら理解できると書いたんだけど
団子は例外処理に関する知識も微妙だな
本当に本人?
知識自慢ってよりね、>>718のcall/retは内部で別の命令で処理されてるの?って疑問に対して
限定的に似た動作をさせることは不可能じゃないってことだったのに
団子が火病ってリロケータブルはまあいいとしても、JITだのDLLやスレッド/プロセスのことを持ち出して
スレタイとは異なる話を展開をさせたんだよ
その知識が変じゃないかってこと
そして自分が言い負かされそうになるとスレタイのことを言い出したw
0800デフォルトの名無しさん
2015/07/20(月) 12:39:11.58ID:UCOKR5Nt0801デフォルトの名無しさん
2015/07/20(月) 12:39:54.23ID:UCOKR5Nt0802デフォルトの名無しさん
2015/07/20(月) 14:20:45.53ID:4/vs8FvF0803デフォルトの名無しさん
2015/07/21(火) 02:10:18.33ID:KMhPcj8X0804デフォルトの名無しさん
2015/07/21(火) 06:40:00.03ID:lN6RffsE0805デフォルトの名無しさん
2015/07/21(火) 07:26:37.78ID:O1iotFPu逃げ道を塞ぐようにしないと後出しで特殊な例を持ち出して勝手に勝利宣言するし
こっちの言ってることを「レベルが低い」と一蹴してごまかそうとするから
だからRuby JITの論文は渡りに船だった
VMの生成したコードだけなら表引きで例外を処理できるとはっきり書いてあるからね
そして本当に例外の知識を持ってたのなら、この表にはVMの生成したすべてブロックの情報が入っていることは理解していたはず
団子がしきにり「JITの例外処理ではEIPの保存が必要」と言ってたから、てっきりネイティブの例外のことかと思ってたら、ESPの保存も必要だといった
これでsetjump法のことを意味してるのが確定した
setjumpが必要になるのは例外をいじるCライブラリのせいだというのは論文にも書いてあるし、自分も指摘した
自分の引っ張り出した論文の内容を正しく理解していなかったのはJITを含む例外処理を理解していないことになるからね
結局団子は自分の持ちだした論文で華麗に自爆したわけだが
こういうのって、将棋だと上級者は勝ち目がなくなったら投了して終わるのに
詰まされないと負けを認めない奴だからいたずらに手数が長くなってしまったと表現したらいいのか
団子がここまで駄々っ子だとは思わなかったよ
0806デフォルトの名無しさん
2015/07/21(火) 07:36:55.01ID:3jrxFxE10807デフォルトの名無しさん
2015/07/21(火) 07:42:32.41ID:O1iotFPu今まで長文を何度も書いて申し訳ない
でも、これで余程のことが無ければこの話はここで終わりになると思うよ
0808デフォルトの名無しさん
2015/07/21(火) 17:27:19.91ID:lN6RffsE0809デフォルトの名無しさん
2015/07/21(火) 21:25:52.91ID:MZjkxTxw2chで勝利して何になるの?
将棋がしたいのならオンライン将棋すれば?
0810デフォルトの名無しさん
2015/07/21(火) 22:21:28.63ID:m5rpz/Rt学が無いとまで言った相手より理解が浅かったら恥ずかしいだろ
0811デフォルトの名無しさん
2015/07/22(水) 00:08:23.68ID:F++zketJID:O1iotFPuがここまで駄々っ子だとは思わなかったよ
0812デフォルトの名無しさん
2015/07/22(水) 07:01:44.05ID:ALVAbODL外部からは見えないことを指摘すればすむ話だった
JITのような話が飛び出してくるのは自分中心でしか考えていないからだよ
だから雑談なら雑談として適当なところで切り上げることもできない
0813,,・´∀`・,,)っ-○○○
2015/07/22(水) 10:09:23.01ID:bur23WMXWindowsみたいにメインルーチンのアドレス固定じゃないからね
LinuxはオプションでPIC対応コード生成可能。
【参考】
http://7shi.hateblo.jp/entry/2012/04/09/235938
http://0xcc.net/blog/archives/000109.html
これがJITに限らず静的コンパイルでも実行時の命令ポインタが要求される例だ。
これで約一名おとなしくなるかな?
0814,,・´∀`・,,)っ-○○○
2015/07/22(水) 10:27:24.37ID:bur23WMXじつはここに答え書いてあるのにスルーされてるのがすっげー違和感あったんだよね。
本当に知らなかったのかな
0815デフォルトの名無しさん
2015/07/22(水) 11:23:38.39ID:PLCb4FbBx86はセグメントを使う前提で設計してあるから物理アドレスの如何に関わらずEIPは変わらないように想定されている。
同一EIPであってもセグメントが違うので複数のプログラムモジュールが共存できる。セグメントの値はOSが管理する。
そもそもEIPはコードセグメントの領域を指し示すものでありセキュリティーの観点からここをデータとしてアクセスさせないという設計思想だ。データは別のセグメントに配置する。
これは8080の絶対アドレスでコーディングされたプログラムを8086でセグメントを使ってリロケータブルにして動かすことに成功したことの延長線上で286の時点でそのように作られた。
386は286上位互換性を確保するためセグメントを継続して採用している。セグメントレジスタも増やされた。
x64はセグメントを使わないから物理アドレスによってRIPが変わる。だからデータアクセスに対するRIP相対アドレッシングモードを追加した。
この基本が分からないとお話にならない。
RISCでも動くOSはセグメントが使えないからトリッキーなことをしているがそれはたまたまそうやると複数CPUアーキテクチャで共通の処理が実現できるからであって本質的には不要な処理である。
0816,,・´∀`・,,)っ-○○○
2015/07/22(水) 12:19:54.31ID:bur23WMX広く使われていても自分の知識の範疇にないことを「実装依存」で片付けてるから
新しいことが覚えられないのだよ
更に言うとJITの場合は分岐のコンディションごとに関数の実体を複数生成することもあるから
1つの関数の実体が複数あるなんてこともざらにある。
MacOSのプログラムすら書いたことのない(そもそも仕事がもらえない)
残念な老害という現実だ。
まあ俺に攻撃することだけ執着してご自分の無様さをさらけ出すのは
何のマゾプレイなんですかね
0817,,・´∀`・,,)っ-○○○
2015/07/22(水) 12:21:51.19ID:bur23WMX向上心のある人はgccで-mPICオプション使ってみるといいよ。Cygwinで使えたかは知らん
0818,,・´∀`・,,)っ-○○○
2015/07/22(水) 12:30:05.00ID:bur23WMX攻撃手段を一つ減らすだけでも運用上のメリットはあるから既にサーバサイドでもかなり使われてる
「実装依存」という言葉は自分の知らない概念を認められない負け犬のための言葉と認識した
0819デフォルトの名無しさん
2015/07/22(水) 13:13:02.17ID:NclmcGF9label:
mov eax, label
...
みたいなやりかたでPCとってきてかつASLRするのだって不可能ではないのでは?
現代のローダは.textは書きかえないのが主流だからこういう実装は多分存在しないけど、
call,ret 使わない縛りでもできなくはないと思う。(メリットが無いのはわかってる)
> ...本質的には不要な処理である。
x86セグメント方式だと、CSの指す領域を一方向にしか増やせなくてASLR難しそうなので
現代ではセグメントによるリロケーションはもう使えない気がす。
0820,,・´∀`・,,)っ-○○○
2015/07/22(水) 13:14:18.63ID:bur23WMXLESとかLDS潰してAVX命令作ったからね
0821,,・´∀`・,,)っ-○○○
2015/07/22(水) 13:20:15.23ID:bur23WMXスタートアップルーチンにリテラルを都度書き換えさせるとかアホくさすぎる
そもそも起点となる命令ポインタの算出が必要だから結局startupルーチン自身は
動的な命令ポインタの動的な値を知ってないといけない。
それを本末転倒と言ってるのだが。
0822デフォルトの名無しさん
2015/07/22(水) 13:29:06.96ID:NclmcGF90823デフォルトの名無しさん
2015/07/22(水) 13:41:35.80ID:T6YRRrU30824デフォルトの名無しさん
2015/07/22(水) 15:16:13.59ID:rLOE8FZ/プログラム側から呼び出されるCランタイム側で解決するんだから結局自身で自分のアドレスを知らないとダメだぞ
ローダはプログラムのエントリポイントに飛ばすものだがエントリポイントにプログラム自身の展開されたアドレスを渡してくれるわけではない
0825デフォルトの名無しさん
2015/07/22(水) 15:31:05.41ID:PLCb4FbB0826デフォルトの名無しさん
2015/07/22(水) 15:36:13.44ID:rLOE8FZ/0827デフォルトの名無しさん
2015/07/22(水) 16:56:34.49ID:k7Ula1IS結論としては不可能
DLLがマップされるアドレスは不定だしDLLから別のDLLを呼び出す、更に遅延ロードが絡むとローダでリテラルを絶対アドレスに書き換えて解決なんてことは出来ない
0828822
2015/07/22(水) 17:01:28.28ID:+xtThSAHELFロードするだけなら普通にCで書けるでしょ?そのあとジャンプするのだって、自分で決めたロードした位置にジャンプするだけでは?
0829822
2015/07/22(水) 17:06:17.78ID:+xtThSAH0830デフォルトの名無しさん
2015/07/22(水) 17:07:03.34ID:k7Ula1IScall/retは絶対アドレスをスタックに積んでjmpで完全に代替できて、できないものは実装依存(キリッ)だよ
おそらくDLLも存在しないワールド
0831デフォルトの名無しさん
2015/07/22(水) 17:14:23.14ID:k7Ula1IS0832デフォルトの名無しさん
2015/07/22(水) 18:34:32.58ID:ALVAbODLスタックはアドレスを取れるんだから、スタックに領域を確保して
>>725みたいにしてモジュールのアドレスを問い合わせて、その後ろに
処理継続先のオフセットとモジュールのアドレスを足してjmpするコードを生成する
ジャンプ先でスタックを戻す
モジュール名のリテラルはmovの連続で構成する
DEPは後から搭載された機能だからDEPが使えるというのは環境依存だよな
PICという制約を加えてもよければ、ローダによる再配置を禁止しても構わなくなるぞ
先に環境を指定して議論しなければだめだろ
0833,,・´∀`・,,)っ-○○○
2015/07/22(水) 19:11:08.69ID:bur23WMX>>725はエントリポイントが固定アドレスじゃねーと使えないよ
-mPICオプションつけてコンパイルしてみ?callでEIPとってからオフセット差分を
callを回避するために結局callを使うって本末転倒じゃねーか
バカ杉
0834,,・´∀`・,,)っ-○○○
2015/07/22(水) 19:13:29.16ID:bur23WMX固定されてたら競合しちゃうからねー
複数のプログラムから呼び出されることを想定してプロセスローカルでないアドレスに動的にマッピングされます
0835デフォルトの名無しさん
2015/07/22(水) 19:18:08.19ID:ALVAbODLJITはアプリ側でゴリゴリやる方式だし
0836,,・´∀`・,,)っ-○○○
2015/07/22(水) 19:26:58.09ID:2paHa4MRちなみにXbyakはcallがeip/rip相対にすらならないからいろいろ他のJITとは勝手が違う
0837デフォルトの名無しさん
2015/07/22(水) 20:01:00.11ID:iGjKi/Thソースコードの機械語と命令単位で切り分けた機械語とニーモニックにしたものを並べて見比べたいんですが、
逆アセンブルツールというと自動的に解析してくれる様なものしかないみたいなので、メモ帳を複数起動して解析してる状況です。
一つのツールで操作できて整った画面で見られたらいいなぁと思ってるんですが、そういうニッチなツールはないですか。
0838,,・´∀`・,,)っ-○○○
2015/07/22(水) 20:03:31.70ID:2paHa4MR0839デフォルトの名無しさん
2015/07/22(水) 20:34:53.88ID:qru6k61f実際に経験がないからわからないけど、アセンブラの命令と対応する16進を覚えておくか、メモ帳で逐次検索するか、
ルビふりとか英-和の翻訳で英語と日本語を文区切りで併記するように機械語とアセンブラでの似たものを自作するとか。
0840デフォルトの名無しさん
2015/07/22(水) 21:34:40.92ID:iGjKi/Thやっぱり自作しかないですかね。
x86-x64のオペコードはニーモニックと一対というわけではないので内部処理を確認する為に残しておきたいんですよね。
さすがに256命令+SSE命令 &MOD R/Mの組み合わせを暗記するというのは人間業ではないので今あるもので地道に頑張りたいと思います。
0841デフォルトの名無しさん
2015/07/22(水) 22:22:05.85ID:ALVAbODL>>832のモジュールアドレスを
register void *dop=dlopen;
register void *dsym=dlsym
h=(*dop)(NULL);
cont=(*dsym)(h,"label_cont");
jmp(cont);
こんな感じに変更すればいいんじゃないのか
スタートアップルーチンでサンクを呼び出す部分までをこのやり方で置き換えるんだよ
>>834
後から勝手に制約を追加できるんなら、自分だったら動的再配置を禁止するぞ
そんなこと許したらcomファイル大勝利になるだろ
だから先に環境を示さないとダメなんだよ
本末転倒なんていったらCRISCの話でこんなことやってる方がどうかしてるだろ
団子がどうしてもcall使ってEIP取らないとできないことがあるって言うから
あえてcall封印してたんじゃなかったのかよ
0842,,・´∀`・,,)っ-○○○
2015/07/22(水) 22:30:16.31ID:6QdmLHPN前提からして間違ってるよ?
0843,,・´∀`・,,)っ-○○○
2015/07/22(水) 22:36:05.03ID:6QdmLHPN>>841のコードは外部DLL(*NIXでいうところのSO)から別のDLLを呼び出すときには通用しない
0844,,・´∀`・,,)っ-○○○
2015/07/22(水) 22:46:58.82ID:6QdmLHPNcallを使わなくてもいいようにABIやスタートアップルーチンを書き換えればいいなんてのはもっとありえない解決策だよ
現実みろよ
てかCRISC(笑)なんて既に死語だと思うけどね。
既にIntelプロセッサの内部命令はPentium ProからPentium 4までのアーキテクチャの
「Load/Storeアーキテクチャ」ではなくなってるしAtomはOoOを実装したCISCだし
0845デフォルトの名無しさん
2015/07/22(水) 23:06:10.53ID:oW3pCj8R0846デフォルトの名無しさん
2015/07/22(水) 23:12:09.13ID:ITYxsc4F0847デフォルトの名無しさん
2015/07/22(水) 23:21:04.52ID:oW3pCj8R馬鹿野郎!
今は21世紀だぞ!
0848,,・´∀`・,,)っ-○○○
2015/07/22(水) 23:22:46.86ID:6QdmLHPN20年も前の言葉でPentiumで用いた高速化のアプローチのことを指してそういっただけで
そういうアーキテクチャがあるわけではない。
「CISCをRISCライクな単純命令に分解して高速化しました」の方向を突き詰めたのがPentium4で
とっくにそっちは死に筋だよ
今はどっちかというとCISC命令を内部で融合して命令数を減らして高速化するアプローチが高速化の中心なので
「CRISC」は実態を表していない。
どっちかというと今の方向性は2006年の「Wide Dynamic Execution」でしょう
0849デフォルトの名無しさん
2015/07/23(木) 05:59:11.25ID:fN1C2EA/それは分解というより変換と言った方が正しい。
uOPはハードワイヤで実行可能な実行単位を基本としており、最初はRISC的なものであったが世代を追って高機能化して今は可変長のCISCになっている。
x64をそのまま使わないのはuOPが一部x64よりも高機能になったこともあるがベースはやはりx64の素性が悪いからでわざわざワンクッションおいてもuOPに変換した方が性能が出るからである。
一度変換した命令はキャッシュされ再利用されるので複雑なx64命令をデコードするのは最初の一回だけで良い。
命令がキャッシュにある間はデコーダは止まっていて電力を食わないようになっており、消費電力を気にすることなく大規模なx64デコーダを実装して性能を高めることができている。
0850,,・´∀`・,,)っ-○○○
2015/07/23(木) 08:12:10.12ID:tlVBnSRn0851,,・´∀`・,,)っ-○○○
2015/07/23(木) 08:32:09.52ID:tlVBnSRnいやたとえ可変だったところでμOPs cacheの1エントリに2〜3μOPs書き込めるわけではないがな
1μOpsあたり何バイトだと思ってるの?
まあ40バイト程度だがな。
4μOPsフェッチするだけで160バイト/clk。4命令をデコードするより電力効率が多少ましなだけで
別に省エネでもなんでもねーわ。格納効率は最悪。
Cortex-A57には同じ目的に近いloop buffer(SNB以降のそれよりNehalemのそれに近い)があるが
都度デコードしたほうがマシなくらいなのでA72では削除された。
0852デフォルトの名無しさん
2015/07/28(火) 12:23:24.90ID:ss5oXPlAここで完全初心者の俺が質問すると微妙だが
アセンブラというかlinuxカーネルの質問なんだけど
システムコールするとスタックとかプロセス空間が切り替わっちゃうらしいんだけど
そこでレジスタに乗り切らない文字列とかってどうやって渡してるんでしょうか
0853,,・´∀`・,,)っ-○○○
2015/07/29(水) 00:57:18.39ID:PIgMeuM30854デフォルトの名無しさん
2015/07/29(水) 10:18:54.90ID:7dNzVewMhttp://lxr.free-electrons.com/source/lib/strncpy_from_user.c#L23
プロセス空間変わるといってもユーザー空間はシステムコールを呼んだプロセスと同じアドレスが見えるようになってる。
カーネル空間全プロセス共有、ユーザー空間対象プロセスと共有みたいな配置になる。
(なのでカーネル空間用のアドレス必要で32bit OSだとユーザー空間は2GBとか3GBしか持てないとかになる)
0855デフォルトの名無しさん
2015/07/29(水) 23:57:28.65ID:zpCxDSCd>>853-854
>システムコールを呼んだプロセスと同じアドレスが見えるようになってる。
分かってない事が多すぎる・・・
0856デフォルトの名無しさん
2015/07/30(木) 00:27:18.11ID:1ZSGrKWzLinuxだと、
- 0-3GB プロセスごとのユーザ空間のメモリがマップしてある。Ring3 でもアクセスできる
- 3GB-4GB 全プロセスで共有のカーネル空間メモリがマップしてある。Ringからしかアクセスできない。
みたいになってたはず。
システムコールを呼ぶと、アドレス空間は変わらないけど、Ring0になるので、0-4GB全部アクセスできるようになる。
(Ring1,2の扱いはよく知らない)
0857デフォルトの名無しさん
2015/07/30(木) 01:05:18.46ID:UjoOxrCo聞いた話だけどほとんどのプロセッサがユーザーモードとシステムモードの2種類しか持たなくて、
x86/64のように4種類も持っている方が珍しいんだと
そしてほとんど真ん中の2個は使われてないんだってさ
0858デフォルトの名無しさん
2015/07/30(木) 01:14:35.07ID:HdXuYlDO0859デフォルトの名無しさん
2015/07/30(木) 01:23:21.48ID:unLWCujK0860デフォルトの名無しさん
2015/07/30(木) 01:27:27.60ID:HdXuYlDOそれなら、自分のコードは特権になれなくて、カーネルのコードは特権になれるのは何故ですか?
0861デフォルトの名無しさん
2015/07/30(木) 01:31:28.62ID:unLWCujK0862デフォルトの名無しさん
2015/07/30(木) 01:36:35.97ID:HdXuYlDO0863デフォルトの名無しさん
2015/07/30(木) 02:09:02.32ID:1ZSGrKWzhttp://www.marbacka.net/asm64/arkiv/int2e_sysenter_syscall.html
自分で書いたプログラムでもカーネルモードに切り替えられるが事前に決められたアドレスにしかジャンプできない。
0864デフォルトの名無しさん
2015/08/01(土) 18:40:05.13ID:+UL3i04M0865デフォルトの名無しさん
2015/09/03(木) 17:35:32.18ID:6eoHy3Qxlnk563.exe ってwin8じゃ使えないの?
0866デフォルトの名無しさん
2015/09/03(木) 18:57:14.49ID:NJB3TdQy方法2.どうしてもMASMでなきゃ嫌なら実行環境でリンカを使う
0867デフォルトの名無しさん
2015/09/03(木) 19:49:38.34ID:ACT9XNdqhttp://www.agner.org/optimize
0868デフォルトの名無しさん
2015/09/03(木) 21:31:27.84ID:6eoHy3Qxありがとう NASMを使ってみるよ
0869デフォルトの名無しさん
2015/10/25(日) 08:21:51.96ID:gC05hgZmでもその多階層のおかげでハードウェア仮想化がやり易かったのも事実で
Ring0でハイパーバイザを動かしてRing1でゲストOSのような使い方ができる
0870デフォルトの名無しさん
2015/11/03(火) 09:18:31.95ID:XRdoJJRyどうすればいいですか?
fib.sはそのコンパイラで作成
gcc -g -O2 -Wall fib.s -lm
エラーを1つ抜き出すと
fib.s :30: Error: invalid instruction suffix for push
30行目にはpushl %eax → pushq %raxと直すとエラーは消える
0871デフォルトの名無しさん
2015/11/03(火) 11:44:49.57ID:Fliardzwgccのオプションに-m32を追加してやって
0872デフォルトの名無しさん
2015/11/03(火) 14:30:53.52ID:C0Kah9v/ありがとう
0873デフォルトの名無しさん
2016/01/05(火) 12:01:39.79ID:uJ085argCOM形式で書かれたHelloworld とASM形式の違いって何?
0874デフォルトの名無しさん
2016/01/05(火) 15:07:27.87ID:udrFqHkE0875デフォルトの名無しさん
2016/01/06(水) 19:37:15.05ID:yluT1kPN0876デフォルトの名無しさん
2016/01/08(金) 19:57:01.78ID:9w8rhkkq0877デフォルトの名無しさん
2016/01/12(火) 19:49:30.00ID:2tQBU5BA0878デフォルトの名無しさん
2016/01/13(水) 18:34:18.73ID:IMboGSkT0879デフォルトの名無しさん
2016/01/14(木) 03:26:52.36ID:byr4bFjT0880デフォルトの名無しさん
2016/01/14(木) 15:01:07.24ID:YerkhKe+0881デフォルトの名無しさん
2016/02/07(日) 15:53:45.03ID:zSKdEvcq0882デフォルトの名無しさん
2016/02/07(日) 18:06:15.79ID:2wykn2ry0883デフォルトの名無しさん
2016/03/26(土) 03:07:39.25ID:djw8qeqA0884デフォルトの名無しさん
2016/04/26(火) 21:52:15.84ID:SbprxlsuCASLについて調べたんですけどもCASLとアセンブラって全くの別物ですよね。
CASLを理解出来ればアセンブラ習得に役に立つとかそういうものはあるんですか?
PC周りについても全く詳しくないのでそういうのも兼ねて学習できる言語ならいいのですが
0885デフォルトの名無しさん
2016/04/27(水) 01:00:54.66ID:vpv25bM3一般的なアセンブラの記法である、CASL2, LLVM などの仮想アセンブラで、勉強する
実行時、
仮想アセンブラ → 各CPU個別の命令
へと、変換される
0886デフォルトの名無しさん
2016/04/27(水) 02:57:44.07ID:/k94gDMlまずは取っつきやすい32bit用でどうぞ
http://www.masm32.com/
0887デフォルトの名無しさん
2016/04/27(水) 09:53:26.31ID:EoTK5XPo回答ありがとうございます。
自分はollydbgでcrackmeを解くことが出来るスキルを付けることを目標にしてるのですが
でもプログラミング経験がほぼ無いのでまずとっかかりにCASLやって...その後アセンブラを学ぼうと思ってるんですが
学習方法は間違えてないでしょうか?
0888デフォルトの名無しさん
2016/04/27(水) 13:29:56.10ID:mkzH47IgPIC,マイコン、Z80など色々種類があるみたいですが、どれが自分の目的にあってるか教えてほしいです
自分の環境はwin7,64bitです。この環境でも学習できるものを学びたいです
0889デフォルトの名無しさん
2016/04/27(水) 15:09:51.70ID:+os+Vu+gCASLやっても実践ではあまり役に立たないので、やりたいことが決まっているのであれば、
何もわからなくてもとにかく以下の例の通りにそのままいじってみる。
http://grayhat-3dmovie-programming.com/it/programming/77/
最初はわからないことだらけでも、基本はIntel 386 CPUの命令の羅列なので、
ollydbgの画面で1ステップずつ実行しながら理解するのが一番早い。
0890デフォルトの名無しさん
2016/04/27(水) 23:45:35.49ID:i86kqw6x命令も何も理解してないまま、実戦に移って知識が付いていくものですか?
アセンブラはかなり難しいイメージがあるので基本を押さえてないとデバッグは無理と
勝手に自分の中で思っていたのですが…
時間はたっぷりあるので確実に覚えたいです
0891デフォルトの名無しさん
2016/04/28(木) 01:03:20.60ID:D/2kUBT7ビット演算とかその辺の動きは理解が必要かもしれないが、その程度
特権命令とかセグメントうんたらが必要になるなら、それはまたその時
ただ、x86のDOSでbios呼んで何かやる以外、初心者がアセンブラだけで簡単に出来ることなんて、なにもないけどな
それなら、C/C++の一部をアセンブラコードを出させてそれを読むとか、一部をアセンブラで書いてみるとかの
主体がC/C++にある方がずっとやりやすい
0892デフォルトの名無しさん
2016/04/28(木) 01:04:41.95ID:D/2kUBT70893デフォルトの名無しさん
2016/04/28(木) 02:42:09.05ID:atZPORcr基本から勉強しようとする気持ちはわかるけど、いいデバッガ・アセンブラがあるんだから
実行しながら覚えたほうが早い。CPUのマニュアルを横に置いて、1ステップ実行したら
状態フラグとレジスタの値がどう変わるか見れば動作はわかる。
ollydbgはアセンブルもできるらしいから、1〜数行のコードを書いて実行させることもできる。
とにかく毎日デバッガとアセンブラに触ること。動かして失敗しながら覚えること。
わからないことはその都度調べれば間に合う。
0894デフォルトの名無しさん
2016/04/29(金) 21:22:05.78ID:sUt0Q0jrCとかVBをアセンブラに変換するソフトを作れば、
なんかアレな感じじゃないですか。
0895デフォルトの名無しさん
2016/04/29(金) 21:53:31.21ID:zOCFIMbnほぼ全てのCコンパイラが、Cで書かれたコードをアセンブラに変換して出力する機能を持ってるよ
それしかなく、実際に機械語に変換するのはアセンブラプログラムにまかせてしまっているコンパイラもある
0896デフォルトの名無しさん
2016/05/01(日) 15:51:33.79ID:tKi6j9CTBitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
。
0897デフォルトの名無しさん
2016/05/03(火) 21:31:55.58ID:rzpxdG1Aその8割は「Windowsで動くゲームを作りたい」「Windowsで動くゲームを改造してチートしたい」といったものであり
勉強すべきはWindows環境についてであってアセンブリ言語についてではなかったりする
0898デフォルトの名無しさん
2016/05/04(水) 18:17:05.69ID:cRuVDbfJ0899デフォルトの名無しさん
2016/05/06(金) 21:38:41.15ID:OWOfsawE0900デフォルトの名無しさん
2016/05/07(土) 10:45:20.57ID:Kik6brAm0901デフォルトの名無しさん
2016/05/07(土) 13:09:41.32ID:U+Yqq8Egメモリの値を変えても、サーバーと通信したときに、
パリティなどをチェックして、改造されていないかどうかを確かめるから、ばれる
ルーターの中には、伝送誤りが起こっても、パリティを変えて、正常と扱うものがあるので、
ドラクエXでは、そもそも通信されたデータを信用していない
だから、常に独自にチェックしている
0902デフォルトの名無しさん
2016/05/07(土) 15:50:50.22ID:4GJcXDs90903デフォルトの名無しさん
2016/05/07(土) 16:22:32.96ID:3mhGs5Tpオンラインゲーム前提で話してて草生える
0904デフォルトの名無しさん
2016/05/08(日) 11:24:47.08ID:NDoMe0zHwww漁るとCばっか
0905デフォルトの名無しさん
2016/05/08(日) 11:45:33.85ID:pwQcqOb7やりなおし
0906デフォルトの名無しさん
2016/05/09(月) 11:36:13.64ID:noyNIse2分かりやすく書いてあるのみつけて、解決しました。
0907デフォルトの名無しさん
2016/05/10(火) 00:50:37.74ID:1N2kVLqm0908デフォルトの名無しさん
2016/05/31(火) 19:54:30.30ID:AfHNbOje0909デフォルトの名無しさん
2016/06/12(日) 14:47:28.03ID:nRDxQz3o結合? andと同じ?
0910デフォルトの名無しさん
2016/06/12(日) 18:20:14.59ID:fuUaUmmT0911デフォルトの名無しさん
2016/06/12(日) 18:58:05.37ID:nRDxQz3oARM・・でいいのかな?
そこもよくわからない・・・
0912デフォルトの名無しさん
2016/06/12(日) 21:02:59.04ID:XGvNNTcYARMだとどうなんだろ
gasだとまた違ったりするだろうし
意外にbytecode用の中間出力だったりする可能性もあるし
(見たこと無いのでよく知らない)
0913デフォルトの名無しさん
2016/06/12(日) 21:07:59.02ID:MHUKBP3O0914デフォルトの名無しさん
2016/06/12(日) 21:53:24.12ID:nqTn+/vXintel記法、AT&T記法でも使ってないよね
独自のマクロとかだとソース無いと詰むな
0915デフォルトの名無しさん
2016/06/15(水) 19:49:26.85ID:RQgSJKk0どういう分野のプログラマーなんだろ。
少し前に、非公式のファミコンソフトが出たけど、
そんなのしか思いつかん。
0916デフォルトの名無しさん
2016/06/15(水) 22:25:44.33ID:yIJ2BCTZブートローダからバトンもらってCに渡すような部分はアセンブラじゃないかな。
0917デフォルトの名無しさん
2016/06/16(木) 23:23:22.10ID:VLfFMudlファームウェア、OS、チップ周りのコードは全部アセンブラ。
アプリの人がくだまいてるのは知識を自慢したいだけ。あとはレトロ趣味。
0918デフォルトの名無しさん
2016/06/17(金) 00:47:33.75ID:g/0le+GFいつの時代からタイムスリップしてきたんだ?
0919デフォルトの名無しさん
2016/06/17(金) 03:17:01.37ID:PNM3xCxJ俺がアセンブラで書いたことあるのは、ブートローダ、カーネルプリミティブとかスケジューラ、MMU周り、ファームウェアとかコントローラ周りくらい。アプリでアセンブラ書いたことは一度もない。逆アセとか解析とかはまあするけど。
ついこないだだと思ってるけどな。
ようはCが動く状態になったらアセンブラなんかで書く必要ないってことだけど、違うって言いたいの?
0920デフォルトの名無しさん
2016/06/17(金) 08:09:43.93ID:ecrIc0AuCで書く。
アセンブラが必要なのはCでかけないような処理か、Cコンパイラがないような環境かのどちらか。
ここで延々と話してる内容がそのどちらでもないような話が多いみたいなんで、詳しい人達が互いに、知識を競ってるようにしか見えないのが残念。
0921デフォルトの名無しさん
2016/06/17(金) 12:03:29.49ID:WSjlHFjC0922デフォルトの名無しさん
2016/06/17(金) 23:36:40.98ID:5J9spy9Lこんな本もある
12ステップで作る 組込みOS自作入門
http://kozos.jp/books/makeos/
0923デフォルトの名無しさん
2016/06/18(土) 18:13:15.88ID:d8nab9Byx86_64でgrubからバトン渡されてRustのコードにバトン渡すまでのアセンブラが説明してあって興味を持ちました
アセンブラの命令自体は簡単だけどそれ以外の知識が沢山要るので大変なのだなあと感じています
今まで特に気にしてなかったリンカの意味とかnmで見える.textの意味とかが分かってきて楽しい
0924デフォルトの名無しさん
2016/06/20(月) 22:36:43.19ID:/Loo3J/M0925デフォルトの名無しさん
2016/06/24(金) 13:21:30.40ID:/3QNO0r0おまいさんが書いたと言ってるosはどこからダウンロードできるの?
0926デフォルトの名無しさん
2016/06/25(土) 09:35:23.63ID:+uLhlbXC公開はしてない。Linuxならソース探せば上げれると出来ると思うよ。プロプライエタリな奴は上げれない
0927デフォルトの名無しさん
2016/06/27(月) 18:39:49.55ID:gm7Fhm/d人のもの見る暇があるなら自分で書いてみればいいのに。
0928デフォルトの名無しさん
2016/06/28(火) 02:56:54.16ID:P6ezUFsSこれかなりいいよね
0929デフォルトの名無しさん
2016/06/28(火) 15:47:26.63ID:Xfds6bLpLDR R1, =(aLimitfpsToD - 0x18C0FF8)
ってのがあるんですがこのときR1レジスタに入るのは0x18C0FF8のメモリ番地が
入るだけでしょうか?数値は入らないですよね?
変な質問ですいません
0930デフォルトの名無しさん
2016/06/28(火) 16:02:52.63ID:5ckL0Bmlしかも全然違う
0931デフォルトの名無しさん
2016/06/28(火) 18:21:05.37ID:Xfds6bLp回答ありがとうございます。
差し支えなければどんな数値が入るか教えてもらえませんか?
0932デフォルトの名無しさん
2016/06/28(火) 18:45:43.76ID:nfEKCddO(と=は知らんw
0933デフォルトの名無しさん
2016/06/29(水) 14:40:17.96ID:15yOy0V10934デフォルトの名無しさん
2016/06/29(水) 15:03:39.28ID:A93JdvJw混同されても実害はない
0935デフォルトの名無しさん
2016/06/29(水) 16:06:32.52ID:+NpkjfxL0936デフォルトの名無しさん
2016/06/29(水) 16:21:03.35ID:I/2QdAFu0937デフォルトの名無しさん
2016/06/29(水) 17:32:10.33ID:V1IZrtk2assemble 〜を組み立てる
assembly 組み立て
assembly language 組み立て用言語、アセンブリ言語
0938デフォルトの名無しさん
2016/06/29(水) 17:50:54.09ID:C8/RLHPNhttps://en.wikipedia.org/wiki/Assembly_language
An assembly (or assembler) language,[1] often abbreviated asm, is a ...
References
1. Assembler language, IBM Knowledge center
http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/asmr102112.htm
0939デフォルトの名無しさん
2016/06/29(水) 19:18:46.15ID:QKmYa11Massemble+er、義務教育レベルの英語も理解できていないという事。
mayonnaiseは、フランス語だから、英語の規則は当てはまらないけれど、それでもmayoreには、ならない。
無理矢理ならば、mayonnaiserか、mayonnaiseist。
そんな事も解らない人達なんだよ。
0940デフォルトの名無しさん
2016/06/29(水) 19:20:04.12ID:QKmYa11Mそれは、アセンブラで使用する言語って意味ね。
0941デフォルトの名無しさん
2016/06/29(水) 21:49:22.20ID:u3VATEokアセンブリとアセンブラは慣例的にはあまり区別されてないように思うけどな。
0942デフォルトの名無しさん
2016/06/30(木) 15:33:47.45ID:VmcBuUmn区別しないと意図が伝わらない場合がどんだけあるかを考えると、さして深刻な問題じゃないような
0943デフォルトの名無しさん
2016/07/16(土) 23:38:52.13ID:MXamywZj0944デフォルトの名無しさん
2016/07/17(日) 02:26:22.26ID:u2dAluYM要は話者が寛容であるかどうかだ
0945デフォルトの名無しさん
2016/10/15(土) 10:48:09.91ID:eBSmAB5D0946デフォルトの名無しさん
2016/10/15(土) 12:49:07.08ID:Z8SQUEFb0948デフォルトの名無しさん
2016/10/16(日) 14:48:03.15ID:eOEStkDD来月捨てよう
0949デフォルトの名無しさん
2016/10/18(火) 19:22:34.09ID:Pul0IDVM0950デフォルトの名無しさん
2016/11/16(水) 23:15:55.17ID:d7D9Ori40951デフォルトの名無しさん
2016/11/17(木) 00:05:52.27ID:d/bxtnYG75X?
0952デフォルトの名無しさん
2016/12/16(金) 22:59:32.63ID:sTWK9lm6縦積み命令がわからない
MOV A,#0
MOV A,#2
MOV A,#4
こういう書き方ってなんなの?
0953デフォルトの名無しさん
2017/01/05(木) 19:44:04.66ID:VylnptJy仕事で使わなきゃいけないのですが職歴コンビニバイトのみの新人で何から何まで一切分かりません
h8なんとかっていうpdfだけ渡されて、これで頑張ってと言われました
0954デフォルトの名無しさん
2017/01/05(木) 20:15:49.65ID:4pCGEQz70955デフォルトの名無しさん
2017/01/05(木) 20:54:33.92ID:NEvicUSZたぶんMOVじゃないんじゃないかと。
縦積みが必要なのは、条件分岐が無いから。
ある条件が成立すると、次の命令がスキップ(実行されない)。
よって、この組み合わせ、すなわち、縦積みで条件分岐ができるようになるんだ。
0956デフォルトの名無しさん
2017/01/05(木) 23:15:42.12ID:xlHoBTkZ年明けからジョークですか
0957デフォルトの名無しさん
2017/01/06(金) 06:59:42.56ID:KJDRn8ud今まではそれの図みたいなやつを直すのをやらされてました
とにかくでてくる命令ひとつひとつが分からないのですがやさしく解説してるサイトとかありませんか
0958デフォルトの名無しさん
2017/01/06(金) 09:33:41.11ID:aKJxE5Q6でくぐれ
0959デフォルトの名無しさん
2017/01/06(金) 15:26:03.02ID:XtKi9eaGh8ならこっちの板の方がやさしいお兄さんが大勢いる
http://rio2016.2ch.net/denki/
0960デフォルトの名無しさん
2017/01/06(金) 21:51:45.02ID:oEH4w/58コンピュータの基礎からやらなきゃわかるわけないのに、何から何までわからない人ができる仕事じゃない。
医学書渡されて、これ見ながら手術してと言われるようなもん。基礎知識と経験なしにできるわけがない。
他の仕事をお勧めします。
0961デフォルトの名無しさん
2017/01/16(月) 12:53:22.13ID:YsJi63qBなにもわからん人にいきなりそんなことやらせる会社は早く辞めた方がいい
後でどんな難癖つけられるか分かったもんじゃない
0962デフォルトの名無しさん
2017/01/25(水) 06:53:06.66ID:UsTZ20bbメーカ配布のやつでフラグ変化から消費クロックまでしっかり書いてあるやつ
0963デフォルトの名無しさん
2017/01/29(日) 04:01:17.79ID:ha1UN0gnDOSと同じような感覚でアセンブラプログラミングができるから
こんな感じ
Linux でアセンブリプログラミング
http://www.mztn.org/lxasm/asm00.html
Linux で64bitアセンブリプログラミング
http://www.mztn.org/lxasm64/amd00.html
Linuxでのアセンブル方法はこんな感じ
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
ld -o hogehoge hogehoge.s
0964デフォルトの名無しさん
2017/01/29(日) 04:03:45.58ID:ha1UN0gnライブラリへのリンクを貼るだけで他のCPUのバイナリをそのまま実行できるようになる
UbuntuだとARM、MIPS、PowerPCができる
64bitARMならこんな感じ
sudo apt-get install qemu
sudo apt-get install g++-aarch64-linux-gnu
sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib
sudo ln -s /usr/aarch64-linux-gnu/lib /lib/aarch64-linux-gnu
32bitARMならこんな感じ
sudo apt-get install qemu
sudo apt-get install g++-arm-linux-gnueabihf
sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib
sudo ln -s /usr/arm-linux-gnueabihf/lib /lib/arm-linux-gnueabihf
Cのコンパイル方法はこんな感じ
aarch64-linux-gnu-gcc -O2 -o hogehoge hogehoge.c
gcc-arm-linux-gnueabihf-gcc -O2 -o hogehoge hogehoge.c
アセンブル方法はこんな感じ
aarch64-linux-gnu-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
aarch64-linux-gnu-ld -o hogehoge hogehoge.s
gcc-arm-linux-gnueabihf-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc-arm-linux-gnueabihf-ld -o hogehoge hogehoge.s
できたバイナリは普通に実行できる
./hogehoge
バイナリがどのアーキテクチャかはfileコマンドで確認できる
file hogehoge
0965デフォルトの名無しさん
2017/01/29(日) 04:33:05.28ID:ha1UN0gnLinuxでのアセンブル方法はこんな感じ
as -a=hogehoge.lst -o hogehoge.o hogehoge.s
ld -o hogehoge hogehoge.o
アセンブル方法はこんな感じ
aarch64-linux-gnu-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
aarch64-linux-gnu-ld -o hogehoge hogehoge.o
gcc-arm-linux-gnueabihf-as -a=hogehoge.lst -o hogehoge.o hogehoge.s
gcc-arm-linux-gnueabihf-ld -o hogehoge hogehoge.o
0966デフォルトの名無しさん
2017/01/29(日) 05:30:13.84ID:ha1UN0gnx86_64のLinuxでのCの32bitのx86バイナリのコンパイル
gcc -m32 -O2 -o hogehoge hogehoge.c
x86_64のLinuxでの32bitのx86アセンブル
as --32 -a=hogehoge.lst -o hogehoge.o hogehoge.s
ld -melf_i386 -o hogehoge hogehoge.o
0967デフォルトの名無しさん
2017/01/29(日) 06:40:56.41ID:ha1UN0gnnasm -f elf hogehoge.s
ld -melf_i386 -o hogehoge hogehoge.o
nasmでのx86_64のLinuxでの64bitアセンブル
nasm -f elf64 $1.s
ld -o $1 $1.o
Ubuntuでのnasmのインストール方法
sudo apt-get install nasm
0968デフォルトの名無しさん
2017/01/29(日) 06:53:32.55ID:ha1UN0gn32bit
nasm -f elf -l hogehoge.lst hogehoge.s
64bit
nasm -f elf64 -l hogehoge.lst hogehoge.s
0969デフォルトの名無しさん
2017/02/08(水) 20:50:02.86ID:Mk3WVo/H0970デフォルトの名無しさん
2017/02/09(木) 06:59:54.86ID:z8fk+TnA0971デフォルトの名無しさん
2017/02/22(水) 00:33:42.60ID:+9W7kpIJまた
gasでのそれらに相当するものは?
0972デフォルトの名無しさん
2017/02/23(木) 01:10:33.00ID:OEoJPS/IRES*シリーズ 指定単位×サイズのメモリ領域を確保する
%DEFINE 一行マクロ、関数みたいに引数取れる
gasは手書きに使うような代物じゃないから忘れていい
0973デフォルトの名無しさん
2017/02/23(木) 19:30:51.76ID:yLUryXxs色んな事が色々ごっちゃになって分けわからんくなってました
すいません基本gasでやってるんです
nasmの情報のが多いのでそっから変換したりしてやってます
まぁ確かに無駄が多いですが趣味の範囲なんです
なので無駄なんだけど無駄じゃないんです
それにやってないけど多分エディタによっては設定すれば自動挿入は普通に出来るんじゃないかと思ってます
0974デフォルトの名無しさん
2017/02/23(木) 19:33:38.38ID:eG9NqkD/やってはいけないなんてことはまったくない
0975デフォルトの名無しさん
2017/02/24(金) 18:12:05.71ID:3gLAKAVZttp://www.ibm.com/developerworks/jp/linux/library/l-gas-nasm.html
IT界の巨神IBMさんが書いてくれたgasとnasmの比較記事だ
0976デフォルトの名無しさん
2017/02/24(金) 19:12:19.30ID:f3uHJh0R0977デフォルトの名無しさん
2017/02/24(金) 20:40:37.72ID:1tN3aNfb0978デフォルトの名無しさん
2017/02/28(火) 07:00:33.75ID:4RyJuYrhだがニモニック自体の変更は許せん……
0979デフォルトの名無しさん
2017/02/28(火) 14:52:11.20ID:OcBIGmL70980デフォルトの名無しさん
2017/03/02(木) 18:57:27.30ID:ZV5SMkF20981デフォルトの名無しさん
2017/03/03(金) 13:31:26.32ID:nBceVUOhloadならop1←op2
っつー感覚
0982デフォルトの名無しさん
2017/03/03(金) 14:06:44.03ID:IUFykjWp0983デフォルトの名無しさん
2017/03/06(月) 16:43:49.83ID:7tw9lmnR0984デフォルトの名無しさん
2017/03/08(水) 21:11:56.27ID:w2yLRFMNjmp 980
以下無限ループ
0985デフォルトの名無しさん
2017/03/09(木) 00:44:05.09ID:9+K5Dr1Kjr FC
0986デフォルトの名無しさん
2017/03/10(金) 23:15:09.01ID:fJKFVkkFFC?
何それ?
やった事ない人かな?
弾かれない?
0987デフォルトの名無しさん
2017/03/11(土) 10:32:39.89ID:JsoExgwjどうせ $FC だったり #FC だったり 0xFC だったり FCh だったりするんだから
どうでもいい
>986 こそアスペなんだろ
0988デフォルトの名無しさん
2017/03/11(土) 10:57:57.87ID:wNy7VRXSJRでの相対ジャンプの計算では、基準となるPCは命令実行後のアドレスから
つまり、>>984においてJRを実行する時は985からの基準してカウントする必要があり
>>984と同じく>>980にジャンプするためには、JR 0FBhと計算しなければいけないとわかっていないこと
0989デフォルトの名無しさん
2017/03/11(土) 11:25:17.84ID:JsoExgwjそもそも 1レス 1byte って誰が決めたん
0990デフォルトの名無しさん
2017/03/17(金) 11:34:43.20ID:pwo5j4El0991デフォルトの名無しさん
2017/03/17(金) 18:39:54.13ID:lkugX1fn0992デフォルトの名無しさん
2017/03/21(火) 15:42:23.11ID:94U0uFA60993デフォルトの名無しさん
2017/03/24(金) 03:52:31.48ID:6tZXs6+Yx86の場合、外部仕様は可変長命令だけどマイクロコードはRISCっぽい処理なので
奇数アラインされると効率が悪くなる(場合がある)から
0994デフォルトの名無しさん
2017/03/30(木) 19:44:57.04ID:/2QbeuLQPCIはxxx1、xxx2、xxx3番地から32ビットバースト転送してもオーバーヘッドは1サイクルだけだけど
変態だわ
0995デフォルトの名無しさん
2017/04/13(木) 00:30:13.60ID:qkqMClc4これからアセンブラを勉強したいと思っています。
とりあえずまずは手始めにcの標準関数、
例えばprintfとかputsとかを呼び出して「hello,world」でも...
と思っているんですが、
一体どのファイルを「includelib」して「call printf」等すれば良いのか
わかりません。
今のところ「user32.lib」とか「kernel32.lib」とか「msvcrt.lib」とか
読み込んでいますが、「unresolved external symbol printf....」と
エラーがでてしまいうまくいきません。
ml64の環境でcの標準関数を呼び出すには、
一体どのlibファイルをincludeすれば良いのでしょうか?
0996デフォルトの名無しさん
2017/04/13(木) 02:32:35.73ID:8XBnDqPS0997デフォルトの名無しさん
2017/04/13(木) 14:59:16.50ID:6bOxPLAt0998デフォルトの名無しさん
2017/04/13(木) 15:09:29.21ID:m/ZfxtWH結局Cの関数なWin32API呼び出しまくるんでCでええやん。。。ってなる。
アセンブラならDOSかPICとかのマイコンのがアセンブラ使ってる感があって面白いよ。
0999デフォルトの名無しさん
2017/04/13(木) 17:04:04.99ID:lsSSpfTO1000デフォルトの名無しさん
2017/04/13(木) 17:36:16.85ID:1WMn3pSzhttp://echo.2ch.net/test/read.cgi/tech/1492072555/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 2055日 4時間 59分 25秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。