トップページ⇒tech
1001コメント318KB

アセンブラを勉強しよう

■ このスレッドは過去ログ倉庫に格納されています
00011 ◆LrnSVKDHBg 2007/03/03(土) 19:00:32
俺が一からアセンブラを勉強してやる!!!!!!
0153デフォルトの名無しさん2007/10/22(月) 20:09:06
>>140
ここで回答されてるよ
http://m.oshiete1.goo.ne.jp/search/eturan3.php3?qid=3431805&cid=709&keyword=&start=9
0154デフォルトの名無しさん2007/10/22(月) 20:54:38
>>152
同じ大学なんじゃね
アセンブラ… (゜□゜) ↑アッー!↓
http://pc11.2ch.net/test/read.cgi/tech/1148402614/614
0155デフォルトの名無しさん2007/10/22(月) 21:57:36
そこら中にマルチしてるのか、それとも受講した学生が軒並み馬鹿ばっかだったのか・・・
0156デフォルトの名無しさん2007/10/23(火) 11:17:19
後者。
0157デフォルトの名無しさん2007/10/23(火) 20:00:11
結局、ROレジスタの謎だけが残ったのか・・・・
0158デフォルトの名無しさん2007/10/27(土) 00:44:25
>>146
お前、ベジータか?
0159デフォルトの名無しさん2007/11/22(木) 16:00:27
よ、よくわかったな・・・
0160デフォルトの名無しさん2007/11/24(土) 04:23:05
mov ebx,eax
と
lea ebx,[eax]
って、ebxにロードされる値は同一ですか?
0161デフォルトの名無しさん2007/11/24(土) 09:32:57
セグメントディスクリプタ(古いCPUだとセグメントレジスタ)の値によって変わる
もちろん同じになることもある
0162デフォルトの名無しさん2007/11/24(土) 09:48:06
lea ebx, [eax * 2 + eax] で eax の3倍の値を入れたり。
0163デフォルトの名無しさん2007/11/24(土) 10:03:25
猫娘のおフェラ〜♪ww

ttp://userdisk.webry.biglobe.ne.jp/002/078/73/N000/000/000/117897859702816119025.jpg
0164デフォルトの名無しさん2007/11/24(土) 12:04:16
通報しました
0165デフォルトの名無しさん2007/11/30(金) 17:37:23
Windowsソフトの逆アセの中に

LEA EBX,DWORD PTR [EBX+00000000]

というのを見かけるんだけど、イマイチようわからん・・・なんじゃこりゃ?
0166デフォルトの名無しさん2007/11/30(金) 17:55:17
入れろ EBX に 、32ビット値で 後述の番地から (EBXの中身 足す 00000000)
0167デフォルトの名無しさん2007/11/30(金) 18:04:18
ひとつの命令でアラインメントするためだと思う
0168デフォルトの名無しさん2007/11/30(金) 18:18:20
>>166
おい
0169デフォルトの名無しさん2007/11/30(金) 18:20:53
>>166
それじゃMOV文じゃね?

>>167
う〜ん、
AND EBX,-04
で良い様な気もしたんでね・・・。
ひょっとしてフラグかフラグなのか?
0170デフォルトの名無しさん2007/11/30(金) 18:29:30
ANDだとフラグ変わっちゃう
0171デフォルトの名無しさん2007/11/30(金) 18:31:29
フラグを変えたくなかったんだろという事で理解。
レスくれた人ありがとう。
先に進める事にします。
0172デフォルトの名無しさん2007/11/30(金) 22:04:53
ループの分岐先を16byte境界に整列するために
コンパイラがNOPを挿入することがある
0173デフォルトの名無しさん2007/12/01(土) 02:37:38
コンパイラ技術者のオナニー
0174デフォルトの名無しさん2007/12/02(日) 16:50:59
ウチが見たのは整列するのに
INT 03
で埋まってたな。

テキストだと フ になるんだけど、並んでとなんかこう気持ち悪い。
0175デフォルトの名無しさん2007/12/02(日) 17:03:44
プ
0176デフォルトの名無しさん2007/12/02(日) 17:08:31
フフフフフフフフフフフフフフフ
0177デフォルトの名無しさん2007/12/02(日) 17:53:42
VisualStudio2008って64bitのアセンブラ使えますか?
0178デフォルトの名無しさん2007/12/02(日) 19:36:35
>>176
ガリでもくってろフフフ(ry

って、やめんかw
0179デフォルトの名無しさん2007/12/07(金) 12:56:58
コォォォォォォォォ
0180デフォルトの名無しさん2007/12/07(金) 22:14:24
ゴゴゴゴゴゴ
0181デフォルトの名無しさん2007/12/10(月) 12:29:50
FLD DWORD PTR [00B8AFB7]
で
ロ-キック
0182デフォルトの名無しさん2007/12/12(水) 15:04:33
C++なんかのクラス構造の逆アセ解析マンドクセ
0183デフォルトの名無しさん2007/12/12(水) 15:33:42
「メモリのX番地以降にN個の符号付整数が格納 されている.これらの整数の絶対値を求めて, Y番地以降に順に格納するプログラムを作成せよ. データの個数NはN番地に格納されているものとする.」
という課題が出されているんだがサッパリ解らない
誰か助けてくれ
0184デフォルトの名無しさん2007/12/12(水) 15:39:00
個数(N)を得るのに必要な情報である、格納アドレス(N)が必要だとなると、循環参照になるから絶対得られないのだが。
つーか、何のアセンブラの話なんだか。
0185デフォルトの名無しさん2007/12/12(水) 15:41:46
>>183
>データの個数NはN番地に格納されている
これおかしいだろw

1. データの個数の取得
2. X番地からn個目のデータを読み出す
3. 絶対値を求める
4. そのままY番地からn個目に書き出す
5. N個終わるまで2,3,4を繰り返す

ここまで分解すればあとは1つ1つやっつけるだけだ。
0186デフォルトの名無しさん2007/12/12(水) 15:41:28
すまんかった
COMETII/CASLIIだ
0187デフォルトの名無しさん2007/12/12(水) 15:43:41
>>186
なんで>184の2行目しか読まないかねぇ……
0188デフォルトの名無しさん2007/12/12(水) 15:44:04
すまんかった
COMETII/CASLIIだ
0189デフォルトの名無しさん2007/12/12(水) 15:45:31
二重書き込みしてしまった・・・
>>185
とりあえず試行錯誤してみる
>>187
すまん、何を言っているのかすら解らなかったんだ
0190デフォルトの名無しさん2007/12/12(水) 15:47:10
TEST START
LAD GR1,0
LOOP LD GR2,X,GR1
ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC 5
DC 8
DC 9
DC 7
END

ここまで書いたが、絶対値の求め方ってなんだっけ?
0191デフォルトの名無しさん2007/12/12(水) 15:50:26
>>189
> 個数NはN番地に格納されている
って、私の住所は私の住んでいる所ですって言ってるようなものだ
0192デフォルトの名無しさん2007/12/12(水) 15:58:24
>>191
なるほど、でも問題文そのままなんだよなぁ・・
0193デフォルトの名無しさん2007/12/12(水) 16:06:48
>3. 絶対値を求める
これのやり方がわからない
0194デフォルトの名無しさん2007/12/12(水) 16:12:37
まあ個数NのNは個数への名前付けであって個数がN個あるわけではないってのは常識的には分かるけどねw
「データの個数はN番地に格納されている」とかなら文句はたぶん出ない
0195デフォルトの名無しさん2007/12/12(水) 16:15:26
>絶対値
負の数だったら0から引けばOK。アセンブラによっては符号反転のニモニックがあるかも知らん。
CASL知らんからCで書いておく。

signed foo;
if (foo < 0) foo = 0 - foo;
or
if (foo < 0) foo = -foo;
0196デフォルトの名無しさん2007/12/12(水) 16:20:48
なるほど、つまり
>190に正だったらそのまま格納
負だったら0からその数を引けばいいんだな
0197デフォルトの名無しさん2007/12/12(水) 16:23:18
>>193
CASLには符号反転命令はないから正負を判断して負なら0からその値を引く
1.正なら3へジャンプ
2.0から値を引く
3.
みたいな感じでいいんじゃまいか?
0198デフォルトの名無しさん2007/12/12(水) 16:29:25
>>197

TEST START
LAD GR1,0
LOOP LAD GR3,0
LD GR2,X,GR1
CPA GR3,GR2
JMI MAINA
JPL HUTU
MAINA SUBA GR3,GR2
LAD GR2,GR3
HUTU ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC -5
DC 8
DC -9
DC 7
END

としてみたんだがエラーが発生してしまう・・・
0199デフォルトの名無しさん2007/12/12(水) 16:43:20
>>198
LAD GR2,GR3
じゃなくて
LD GR2,GR3
じゃないかな?

あと、零の場合は0から引いても0なので
CPA GR3,GR2
JMI MAINA
JPL HUTU
MAINA SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
は
CPA GR3,GR2
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
でもいいかも
アセンブルとか動作チェックとかして確かめていないが
02001992007/12/12(水) 16:58:06
見直すと比較が逆っぽい
CPA GR3,GR2
でなく
CPA GR2,GR3
かな
0201デフォルトの名無しさん2007/12/12(水) 17:10:20
TEST START
LAD GR1,0
LOOP LAD GR3,0
LD GR2,X,GR1
CPA GR2,GR3
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC -5
DC 8
DC -9
DC 7
END


アセンブルではうまく言ったんだけど
無限ループしてしまった
0202デフォルトの名無しさん2007/12/12(水) 17:17:05
TEST START
LAD GR1,0
LOOP LAD GR3,0
LD GR2,X,GR1
CPA GR2,GR3
JPL HUTU
SUBA GR3,GR2
LD GR2,GR3
HUTU ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
RET
N DC 5
Y DS 5
X DC 3
DC -5
DC 8
DC -9
DC 7
END

これで提出してみました
合格してるといいなぁ
0203デフォルトの名無しさん2007/12/12(水) 17:19:54
>>201
HUTUの次の行の
LAD GR1,1,GR1
が抜けてる気がする
0204デフォルトの名無しさん2007/12/12(水) 17:27:11
>>202
正負の判断で分岐させたくなければ
LAD GR1,0
LOOP LD GR2,X,GR1
LD GR3,GR2
SRA GR3,BWM1
ADDA GR2,GR3
XOR GR2,GR3
ST GR2,Y,GR1
LAD GR1,1,GR1
CPA GR1,N
JMI LOOP
...
BWM1 DC 15
みたいなのも
CASLIIのGR*って16ビット幅だったよね?
0205デフォルトの名無しさん2007/12/12(水) 17:32:02
やったー、合格できた!
お前らのおかげだ!ありがとう!
>>202
あ、うん直前で気づいていれておいた
>>203
すまないが見たことの無い単語が出てきて解らない
16ビットなのは合ってるよ


さて、最後の課題だ
「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」
もう早速意味の解らない
data番地とか指標レジスタって日本語?
0206デフォルトの名無しさん2007/12/12(水) 17:46:15
「メモリのDATA番地以降にn個の符号付整数が格納されている。
指標レジスタを用いて、これらの中の正の整数の合計を求め、結果 をSUM番地に格納するプログラムを作成せよ。
データの個数nはN番地 に格納されているものとする。」
とすると
こんな感じのメモリマップがあるって事か

SUM番地 [ ... ]
N番地 [ n ]
DATA+0番地 [ ... ]
DATA+1番地 [ ... ]
DATA+2番地 [ ... ]
...
DATA+(n-1)番地 [ ... ]


指標レジスタってのは while ループをレジスタで再現しるってだけジャマイカ?
x86とSHしか知らないから違うかもしれないけど。
0207デフォルトの名無しさん2007/12/12(水) 17:46:42
xの絶対値はxが負なら(x+(-1))と(-1)の排他的論理和をとればいい
xが正なら(x+(0))と(0)の排他的論理和をとる
0と-1はxを右に15ビット算術シフトすれば出てくる

DATA番地も指標レジスタも日本語だw
DATA番地はN個の符号付整数が格納されているブロックの先頭の番地のラベルじゃないかな
指標レジスタはCASLIIの仕様書にちゃんと載ってるぞ
0208デフォルトの名無しさん2007/12/12(水) 17:53:46
え、えーと つまり?
排他的論理和ってのを使えばいいのかな?
0209デフォルトの名無しさん2007/12/12(水) 17:55:10
排他的論理和は先週の講義でやったなぁ
XORだよな?
っというかもうやっぱり問題文の日本語がわからない
なにをさせたいのかさっぱり
0210デフォルトの名無しさん2007/12/12(水) 17:58:31
指標レジスタってのはインデッテクスレジスタのことか!
0211デフォルトの名無しさん2007/12/12(水) 18:01:12
>>208
いや、素直に正か負で分岐して負の場合だけ0から引くとかにしておいた方がいいと思う
自分で書いててアレだが素直で見やすくて何をやっているかすぐに分かるコードの方が好きだ
ちなみに
LD GR3,GR2
SRA GR3,BWM1
で15ビット右にシフトした値をGR3に入れて
ADDA GR2,GR3
で元の値GR2に0か-1を足して
XOR GR2,GR3
で排他的論理和をとってGR2に入れている
0212デフォルトの名無しさん2007/12/12(水) 18:04:31
あ、つまり
「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」
ではなくその前の課題についてだったのか
0213デフォルトの名無しさん2007/12/12(水) 18:12:32
LD GR2,X,GR1
とかで既に指標レジスタとしてのGRレジスタの使い方をしているんじゃないか?
指標レジスタを用いてっていうのは、DATA番地以降にある整数に上のような方法でアクセスするってことじゃないか?
あとは
LDA GR3,0
LOOP GR2にデータを一つ入れる
CPA GR2,GR3 ; GR2と0を比較
JMI MAINA ; 負ならジャンプする
SUM番地にGR2を加算
MAINA ...
...
JMI LOOP
みたく正の場合だけ加算処理をする

>>212
すまん、混乱させてしまった
0214デフォルトの名無しさん2007/12/12(水) 18:12:30
たったいま講義が終わった
最後の問題はクリアしてなくても帰れるみたいだ
今日はお前ら本当にありがとう
0215デフォルトの名無しさん2007/12/12(水) 18:16:11
> SUM番地にGR2を加算
CASLはメモリをディスティネーションにする加算命令はなかったかも
途中の和を入れるためのレジスタを用意してループ中ではそれに加算して
最後にSUMにSTする形をとったほうがいいか
0216デフォルトの名無しさん2007/12/12(水) 22:46:44
ところで、64-bitアセンブラのいい本ありませんか?
0217デフォルトの名無しさん2007/12/12(水) 22:58:04
>>216
何を(どういうことを)勉強したいの?
0218デフォルトの名無しさん2007/12/12(水) 23:34:20
x64のやさしい解説書が欲しいんですが。
0219デフォルトの名無しさん2007/12/12(水) 23:43:07
x86-64 ? ...x64 とも言うのか。
まだなさげ?
0220デフォルトの名無しさん2007/12/13(木) 00:59:12
>>218
ビットサイズだけじゃアセンブラが特定できん。
0221デフォルトの名無しさん2007/12/13(木) 01:04:57
MASM8.0のまともな解説書とかありませんか?
0222デフォルトの名無しさん2007/12/13(木) 01:07:45
>>221
5から大してかわってない。
0223デフォルトの名無しさん2007/12/13(木) 01:31:01
ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/lang/asm/x86/
前何かで参考になった
0224デフォルトの名無しさん2007/12/13(木) 05:36:47
MASM8.0のまともなマクロライブラリとかありませんか?
0225デフォルトの名無しさん2007/12/13(木) 15:03:35
MASM って自分でカスタマイズするための言語だべ?
既存のライブラリでやるなら何もASMでやる必要は無いんじゃね?
0226デフォルトの名無しさん2007/12/13(木) 16:44:57
MASMのマクロキットつったら、
アセンブラMACROSしか知らないなぁ。公開されたものは。
使ったことないけど。

これね。
ttp://www.vector.co.jp/soft/dos/prog/se001158.html
0227デフォルトの名無しさん2007/12/13(木) 23:14:23
>>224
もし、一連の質問の同一人物なら、
質問に答えてもらったら・・・後はわかるな?
02282262007/12/14(金) 10:43:12
ん
別にいいんじゃないか2チャソだし

ひろゆこ曰
ttp://www.asks.jp/users/hiro/20193.html

A :20xx/mm/dd hh:mm:ss
HDDの残り容量の調べ方を教えれ

>A B :20xx/mm/dd hh:mm:ss
df

こういう空間を良しと考えていたみたいだし
(個人的にはこのひろゆこのエントリにはいろいろツッコミたい点は覆いが)
0229デフォルトの名無しさん2007/12/19(水) 14:22:19
214だがまた実験が始まった
前にも増して日本語なのか理解できないので助けて欲しい


【問題4-4-1】以下のリストは,シフト演算命令を使った乗算プログラムであり,5×164を求めている.リストの [ ] 部分を埋めて完成せよ.(ヒント)164を2のべき数の和に直す.

ラベル欄 命令コード オペランド欄
PGM7 START
LD GR1,DATA
SLA GR1,2
ST GR1,KOTAE
LD GR1,DATA
[ ] ;(GR1)×32
ADDA GR1,KOTAE
[ ] ;(GR1) -> KOTAE
[ ] ;GR1 <- (DATA)
[ ] ;(GR1)×128
[ ] ;GR1<-(GR1)+(KOTAE)
ST GR1,KOTAE
RET
DATA DC 5
KOTAE DS 1
END


ご助力頼む!
0230デフォルトの名無しさん2007/12/19(水) 15:07:35
PGM7 START
LD GR1,DATA
SLA GR1,2
ST GR1,KOTAE
LD GR1,DATA
SLA GR1,5 ;(GR1)×32
ADDA GR1,KOTAE
ST GR1,KOTAE ;(GR1) -> KOTAE
LD GR1,DATA ;GR1 <- (DATA)
SLA GR1,7 ;(GR1)×128
ADDA GR1,KOTAE ;GR1<-(GR1)+(KOTAE)
ST GR1,KOTAE
RET
DATA DC 5
KOTAE DS 1
END

とりあえず自分でやってみた
どうだろうか
0231デフォルトの名無しさん2007/12/19(水) 15:11:17
よし、合格できた
だが次の課題がもっと意味不明すぎる
誰か助けてくれ


【問題4-4-2】
(a)アドレスDATAの第15ビットから第8ビットまでの8ビットを取出し,残りを0とした情報をアドレスOPに格納し,
同じく第7ビットから第4ビットまでの4ビットを取出し,残りを0とした情報をアドレスGRに格納し,
さらに第3ビットから最後までの4ビットを取出し,残りを0とした情報をアドレスXRに格納するプログラムを以下のリストの [ ]を埋めて完成せよ.

ラベル欄 命令コード欄 オペランド欄
MASK START
LD GR0,DATA
[ ]
ST GR0,OP
L1 LD GR1,DATA
[ ]
ST GR1,GR
LD GR2,DATA
[ ]
ST GR2,XR
RET
DATA DC #3012
MASK1 DC #FF00
MASK2 DC [ ]
MASK3 DC [ ]
OP DS 1
GR DS 1
XR DS 1
END

0232デフォルトの名無しさん2007/12/19(水) 15:21:17
MASK START
LD GR0,DATA
[ ]
ST GR0,OP
L1 LD GR1,DATA
[ ]
ST GR1,GR
LD GR2,DATA
[ ]
ST GR2,XR
RET
DATA DC #3012
MASK1 DC #FF00
MASK2 DC #00F0
MASK3 DC #000F
OP DS 1
GR DS 1
XR DS 1
END

ここまで自分で入れてみた
0233デフォルトの名無しさん2007/12/19(水) 17:19:13
・・・コメント部分に答えが丸ごと書いてあるのにこれ以上どうしろと。
0234デフォルトの名無しさん2007/12/20(木) 00:20:59
Intel Core2の1次、2次キャッシュって、何wayで、キャッシュブロックは何バイトでしょうか?
0235デフォルトの名無しさん2007/12/20(木) 00:34:28
>>234
スレ違い。寧ろ鼬害かも。
0236デフォルトの名無しさん2007/12/20(木) 00:52:16
>>235
日本語でおk
0237デフォルトの名無しさん2007/12/20(木) 01:00:31
ヒト以外の生物は巣にお帰りください。
0238デフォルトの名無しさん2007/12/20(木) 07:35:31
x86命令の所要クロック計測スレPart3
http://pc11.2ch.net/test/read.cgi/tech/1168399966/l50
0239デフォルトの名無しさん2007/12/20(木) 16:38:17
mpeg compass.jp
名古屋駅近辺でお話しましょう
0240デフォルトの名無しさん2007/12/23(日) 15:23:17
MMXで最大値を求めるには、どっちを使った方が良い?
pmaxubかpcmpgtb

後者の使い方がよくわからないorz
0241デフォルトの名無しさん2007/12/23(日) 15:48:23
簡単な使い方としては結果を使ってANDしたりAND NOTしたり
0242デフォルトの名無しさん2007/12/23(日) 22:42:50
初心者の質問です。
32bitレジスタにSSEレジスタの内容を書込む場合は、
どうしたら良いのでしょうか?
movapsを使って転送しようとしたところで落ちます。

movaps xmm0, [esi]
// 〜処理〜
movaps [ecx], xmm0 <-- ここで落ちる.
0243デフォルトの名無しさん2007/12/23(日) 22:50:12
>> 242
自己レス、ごめんなさいループ条件を間違えていただけでした。
0244デフォルトの名無しさん2007/12/27(木) 00:15:18
スクラッチレジスタってなんですか?
0245デフォルトの名無しさん2007/12/27(木) 00:20:22
答えはWebで
http://www.google.co.jp/
0246デフォルトの名無しさん2007/12/27(木) 03:29:12
レジスタで何を対決させるんだろう?
0247デフォルトの名無しさん2007/12/27(木) 09:47:32
jumpとbranchはどう違いますか?
0248デフォルトの名無しさん2007/12/27(木) 10:24:20
命令語と動作が違う。
具体的な違いは石に依存するので種類を明記しない質問にはこれ以上答えようがない。
0249デフォルトの名無しさん2007/12/27(木) 13:11:10
条件分岐がbra だったり 相対アドレッシングでの分岐がbra だったり
逆だったり
0250デフォルトの名無しさん2007/12/27(木) 14:28:29
Cで作成した、プログラムを逆アセンブルしてみると
and $0xfffffff0,%esp
って記述が必ずあるんだが、これはなんのためにやってるの?
0251デフォルトの名無しさん2007/12/27(木) 14:42:11
>>250
ローカル変数をメモリ上でアライメントするため、
だと思われる。
0252デフォルトの名無しさん2007/12/29(土) 14:50:54
>>251
アライメント?
wikiでみたら、データを特定のサイズに調節することって書いてあるんだが
意味がわからない
int型だと2バイトcharだと1バイト見たいなのが関係してんの?
■ このスレッドは過去ログ倉庫に格納されています