[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 11:52 / Filesize : 195 KB / Number-of Response : 910
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… Part 12



1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ]

アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… ( ゚д゚)ウッウー
pc11.2ch.net/test/read.cgi/tech/1174825173/



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

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

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

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


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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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




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

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

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



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

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

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


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

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

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

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

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

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

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



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

スイーツ(笑)

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

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

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

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

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

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

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


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

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



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

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

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

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

ていう話ではない?

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

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

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

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


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

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

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

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

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




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

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


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

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

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


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

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

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


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


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

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

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


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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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


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

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

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

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

あとIA64も同意する。

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


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

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

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

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



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

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<195KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef