1 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:00:32 ] 俺が一からアセンブラを勉強してやる!!!!!!
2 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:02:43 ] LDA 1
3 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:03:24 ] >>2 すいませんわかりませんwwwwwwwww
4 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:08:40 ] コテハン忘れたwwwwwwww とりあえずおさらいというかメモ C風に変換(俺がC使いなので) mov命令 mov eax, ebx eax = ebx; xchg命令 xchg eax, ebx eax = eax ^ ebx; ebx = eax ^ ebx; eax = eax ^ ebx; and命令 and eax, ebx eax = eax & ebx; or命令 or eax, ebx eax = eax | ebx; xor命令 xor eax, ebx eax = eax ^ ebx;
5 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:08:50 ] アセンブリ言語じゃないのか?
6 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:11:09 ] cpuは??
7 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:11:19 ] C 風ならこう書こうぜ and命令 and eax, ebx eax &= ebx; or命令 or eax, ebx eax |= ebx; xor命令 xor eax, ebx eax ^= ebx;
8 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:12:17 ] 500番地と501番地の内容を足して、502番地に書き込む。 lha $500 clc adc $501 sta $502
9 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:13:01 ] not命令 not ebx eax = eax ~ eax; neg命令 neg eax eax = eax * -1; test命令 test eax, ebx flag = eax & ebx; add命令 add eax, ebx eax = eax + ebx; sub命令 sub eax, ebx eax = eax = ebx; inc命令 inc eax eax = eax + 1;
10 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:16:00 ] 本当に C 使いなのか? not命令 not ebx ebx = ~ebx; neg命令 neg eax eax = -eax; test命令 test eax, ebx flag = eax & ebx; add命令 add eax, ebx eax += ebx; sub命令 sub eax, ebx eax -= ebx; inc命令 inc eax ++eax;
11 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:24:50 ] >>5 正確には逆アセンブリなんだollydbg使ってる mul命令(よくわからん上位ビットを代入?HIWORD, LOWORDとかそういう奴か) mul ebx ebx = eax & 0xF0; eax = eax >> 8; inuml命令 符号付演算のmul命令 div命令 div ebx わからんwwwwww idiv命令 符号付演算のdiv命令 cmp命令 cmp eax, ebx eax == ebxの場合ZF = 1 eax < ebxの場合SF = 1 eax > ebxの場合SF = 0 JMP命令 JMP START(アドレスとか) goto START;
12 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:30:15 ] >>10 C使いだが+=とか-=はある時期から使わなくなっただけだ。 その辺は好みの問題だからな。後アセンブリに関してはまったくの無知で一からの勉強w JA命令、JNBE命令 JA START(アドレスとか) if(CF == 0 && ZF == 0) { goto START; } JAE命令、 JNB命令、 JNC命令 JAE START(アドレスとか) if(CF == 0) { goto START; } JB命令、 JNAE命令、 JC命令 JB START(アドレスとか) if(CF == 1) { goto START; } JBE命令、 JNA命令 JBE START(アドレスとか) if(CF == 1 || ZF == 1)goto START(文字数制限がwwwwwww)
13 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:33:56 ] JE命令、 JZ命令 JE START(アドレスとか) if(ZF == 1) { goto START; } JNE命令、 JNZ命令 JNE START if(ZF == 0) { goto START; } JCXZ命令 jcxz START if(ecx == 0) { goto START; } loop命令 loop START ecx = ecx - 1; if(ecx != 0) { continue; }
14 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:36:18 ] たいへんです! ぜんぜん汎用レジスタが足りませんorz
15 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:37:54 ] EXX
16 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:38:10 ] その昔、BASE80と言うものがあってな、ゲフンゲフ 構造化マクロっちゅーものもあってな、ゲフ
17 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:38:37 ] >>13 loop間違ってたw loope命令、 loopz命令 loope START ecx = ecx - 1; if(ecx != 0 && ZF == 1) { goto START; } loopne命令、 loopnz命令 ecx = ecx - 1; if(ecx != 0 && ZF == 0) { goto START; } push命令 push eax eaxの値をスタックへ格納する(右下っぽい画面だった気がするollydbg) pop命令 pop eax eaxに一番上(?)のスタックの値を格納する(右下っぽい画面だった気がするollydbg)
18 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:44:07 ] pushf命令、 pushfd命令 pushf フラグレジスタをスタックへ退避する(使用用途がよくわからんが関数呼び出し時の退避のため?) popf命令、 popfd命令 popf フラグレジスタをスタックから復帰する(使用用途がよくわからんがreturn後のフラグ復帰の為?) call START WndProc(....); ret命令 ret サブルーチンから復帰する オペランドが渡されていたらそのオペランドのバイト数だけ スタックのデータを捨ててから復帰するらしい。 return Result; rcl命令 rcl eax CFフラグを含めたビットの左回転 よくわからんwwwwww
19 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:46:48 ] mul命令 mul ebx edx = ((eax * (uint64_t)ebx) >> 32) & 0xFFFFFFFF; eax = (eax * (uint64_t)ebx) & 0xFFFFFFFF; imul命令 imul ebx edx = ((eax * (int64_t)ebx) >> 32) & 0xFFFFFFFF; eax = (eax * (int64_t)ebx) & 0xFFFFFFFF; imul eax, ebx eax *= ebx; imul eax, ebx, 10 eax = ebx * 10; div命令 div ebx eax = (((uint64_t)edx << 32) & eax) / ebx edx = (((uint64_t)edx << 32) & eax) % ebx idiv命令 div ebx eax = (((int64_t)edx << 32) & eax) / ebx edx = (((int64_t)edx << 32) & eax) % ebx
20 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:48:43 ] rol命令 rol eax ビットの左回転 しるかwwwwwwwww ror命令 ror eax ビットの右回転 しるかwwwwwwwwwww sal命令、 shl命令 sal eax ビットの左シフト sar命令 sar eax 最上位ビットの変化がない右シフト shr命令 ビットの論理右シフト(最上位に0) 疲れた
21 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:49:48 ] >>19 64ビットかよwwwww
22 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 19:54:28 ] さてまずは MOV DWORD PTR SS:[ESP+4], EDXの意味がわからない これはULONG型のPTR(?)のSSレジスタのESP+4(アドレスだと思う)にEDXの 値を代入?って意味でいいんだろうかwwwwwww そもそもPTRってなんだよちくしょうが!!!!!!
23 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:00:00 ] cmp命令 cmp eax, ebx eax - ebx; /* フラグだけ変更し、結果は捨てる */ JA命令、JNBE命令とかは、 フラグがどうのこうのというよりは、 cmp と対応させて考えた方が良さげ。 A は above 、B は below 、C は carry とか、そういう風に。 test の時は、その都度表を見て調べればいい。 loop命令 loop START if(--exc != 0) goto START; でも、loop はちょい遅いので、 速度より容量や分かりやすさが要求される時しか使わない。 push 命令 push eax *esp = eax; esp -= 4; pop命令 pop eax eax = *esp; esp += 4;
24 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:02:44 ] 間違えた。 push命令 push eax esp -= 4; *esp = eax; か。
25 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:06:11 ] EAX = 0x00000028 EDX = 0x00000002 ESP = 0x0012F9E8 @MOV DWORD PTR SS:[ESP+4],EDX AMOV BYTE PTR SS:[ESP+8],0 BMOV DWORD PTR SS:[ESP+C],EAX CMOV BYTE PTR SS:[ESP+10],0 この場合 0x0012F9E8 + 4 = 0x00000002 0x0012F9E8 + 8 = 0x00 0x0012F9E8 + 12 = 0x00000028 0x0012F9EB + 16 = 0x00 という解釈でいいのかな? つまり4バイトの配列にそれぞれの値を代入してるのか。 でもなんで0代入の時はBYTEなんだろう・・・
26 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:06:14 ] 間違えた div命令 div ebx eax = (((uint64_t)edx << 32) | eax) / ebx edx = (((uint64_t)edx << 32) | eax) % ebx idiv命令 div ebx eax = (((int64_t)edx << 32) | eax) / ebx edx = (((int64_t)edx << 32) | eax) % ebx
27 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:07:23 ] call命令 call START esp -= 4; *esp = eip; eip = START; ret命令 ret eip = *esp; esp += 4; ret 8 eip = *esp; esp += 4 + 8; rcl命令 rcl eax tmp = (eax >> 31) & 1; eax = (eax << 1) | CF; CF = tmp; rol命令 rol eax tmp = (eax >> 31) & 1; eax = (eax << 1) | tmp;
28 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:07:46 ] >>23 なるほど参考にさせてもらいます。
29 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:11:30 ] MOV EDX モジュール名.00408AA0というのは恐らくモジュールの メモリのアドレスの中身を示しているのかな? 後LEA命令ってのがよくわからんが・・
30 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:12:54 ] これで十分か。 rol命令 rol eax eax = (eax << 1) | ((eax >> 31) & 1); ror命令 ror eax eax = ((eax >> 1) & 0x7FFFFFFF) | (eax << 31); sal命令、shl命令 sal eax eax <<= 1; sar命令、shr命令 sar eax eax = (eax >> 1) & 0x7FFFFFFF | (eax & 0x7FFFFFFF); shr eax eax = (eax >> 1) & 0x7FFFFFFF; C の >> は int の場合は sar で、unsigned の場合は shr で実装されてることもあるが、 それは C の規約で規定されている訳ではない。 というわけで、こうややこしく書いたけど、もしそう実装されていればそれぞれ以下のようにしたのでよい。 eax >>= 1; /* eax は signed int */ eax >>= 1; /* eax は unsigned int */
31 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:16:25 ] push, pop, call, ret は良くない書き方をした。すまん。 esp は char* として、 push eax esp -= 4; *(int*)esp = eax; pop eax eax = *(int*)esp; esp += 4; call START esp -= 4; *(char**)esp = eip; eip = START; ret eip = *(char**)esp; esp += 4; ret 8 eip = *(char**)esp; esp += 4 + 8; こうだな。
32 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:17:11 ] >>30 signedつきかつきじゃないかで変換される機械語が違ってくるのか LEAはアドレス代入って奴か ESP = 0x0012F9E8 LEA EAX,DWORD PTR SS:[ESP+4]という命令があるとすると ESPの値が0x0012F9ECになるって事なのかな恐らく。
33 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:20:29 ] >>31 そんなポインタの嵐を使われてもwwwwwwww 俺のスキルを考えてくれorz esp -= 4; *(char**)esp = eip; eip = START; はespが0x40000000とすると (char*)esp = 0x4000004 (char**)esp = 0x40000008 *(char**)esp = 0x40000008の中身って事かぐらい? みたいな漠然としたものしかわからねぇw
34 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:25:11 ] で、これだが、 MOV DWORD PTR SS:[ESP+4], EDX esp を char* とすれば、 *(int*)(esp + 4) = edx; だな。 C でセグメントレジスタを扱う方法はもう忘れたけど、 esp はデフォルトで ss: 付きだから気にする必要はないね。 MOV BYTE PTR SS:[ESP+8],0 の場合は *esp = 0; だな。 多分、内部変数を扱ってるコードなんじゃないかな。 最初の方に sub esp, (内部変数のサイズ) か何か書いてあると思う。 これで内部変数の領域をスタック上に確保してる。 分かりやすいコードを書くときは esp を ebp に退避しといてから ebp を通して参照するんだけど、 コンパイラはその辺最適化しちゃうことがあって、 可能な限り直接 esp を通して参照することがある。
35 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:26:46 ] >>30 signed か unsigned かで機械語が変わってくるかどうかはコンパイラ依存。 あまりあてにはしない方がいい。
36 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:28:54 ] >>33 この程度のポインタを理解できないようで C 使いというのもどうかとは思うが、 まあアセンブリ言語を使う事によって ポインタに対する理解も深まるだろう。多分。 というか、全然ポインタ分かってないな。 このキャストでアドレスは変わんないよ、普通の環境なら。
37 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:30:50 ] まあ、何というか、C を通して勉強しない方がいいと、俺は思う。 だって、C じゃ表現しきれない事だって多いし、 C の理解がその程度じゃむしろ誤解しそうで怖い。 おとなしく、本でも読んだ方がいいと思うぜ。
38 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 20:33:39 ] >>34 ものすごく漠然とだが見えてきた気がするw 配列に値を格納して言ってる感じかぁ >>35 その辺の処理系についてはまだ俺には遠い世界。。 >>36 バカヤロウ!!!この程度のスキルしかないから勉強してるんだろうが!!!!!
39 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:43:07 ] >>38 俺もアセンブリ言語を通してポインタの理解を深めたクチだから、 悪い選択じゃないと思う。 なあに、分かってしまえば大したことは無いさ。 eax == 0x12031000 の場合、 mov byte ptr [eax], dl |0x12031000| | dl | mov word ptr [eax], dx |0x12031000|0x12031001| | dx | mov word ptr [eax], edx |0x12031000|0x12031001|0x12031002|0x12031003| | edx | こういう風に代入される。 それぞれ、 *(char*)eax = dl; *(short*)eax = dx; *(int*)eax = edx; に対応する感じ。 char が 1 バイト、short が 2 バイト(1 ワード)、int が 4 バイト(2 ワード)と仮定してるけど。 1 word == 2 bytes, 2 words == 1 dword == 4 bytes な。
40 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:45:24 ] 間違えた。最後のは mov dword ptr [eax], edx |0x12031000|0x12031001|0x12031002|0x12031003| | edx | な。 まあ、分かるとは思うが。
41 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:03:44 ] 英語だけど、このあたりのマニュアルが有用。 ttp://www.intel.com/products/processor/manuals/index.htm
42 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 21:06:42 ] >>39 ふむ。 因みに(char*)eaxっていうのはchar型のポインタアドレスを 明示的に表しているっていう解釈でいいのかな? つまり(char**)eaxの場合char型のアドレスを格納している ポインタアドレスであって*(char**)はアドレスの先のアドレスの中身を 参照sd;gkjf;あwぇ;あ char **pAddr; char *string = "asm"; pAddr = string; pAddrはpAddrのアドレス? *pAddrはstringのアドレス? **pAddrはstringアドレスの中身? こういう解釈か!!!! とりあえず腹が減っては戦はできないので何か食べてくる。
43 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:08:38 ] char** は char* へのポインタだよ。 char **pAddr; char *string = "asm"; pp = &string; pAddr は string のアドレス。 *pAddr は string と同じ。 **pAddr は 'a' 。
44 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:09:18 ] 間違えた。 pAddr = &string; だ。
45 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:11:20 ] typedef char *PCHAR; PCHAR *pAddr; PCHAR string = "asm"; pAddr = &string; pAddr は string のアドレス。 *pAddr は string と同じ。 と int *pAddr; int string = 0; pAddr = &string; pAddr は string のアドレス。 *pAddr は string と同じ。 を比較すればいい。 全く同じ事。
46 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 21:37:50 ] >>43-45 まあまて。 char **pAddr; char *string = "asm"; pAddr= &string; pAddr は string のアドレス。 *pAddr は string と同じ。 **pAddr は 'a' 。 の部分で pAddr = &stringとあるがこれはpAddr = stringとは違うのか!? 適当なアドレスで表すと pAddr = 0xAAAAAAAA string = 0xBBBBBBBB->"asm" pAddr = &stringは0xAAAAAAAA = 0xBBBBBBBB pAddr = stringは0xAAAAAAAA = 0xBBBBBBBB とはちがったりするんだろうかあああああああああ &stringはstringのアドレス自体でstringはstringの先頭アドレス'a'という 解釈でいいんだろうか。だとすると納得。
47 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 21:42:40 ] >>45 おおおおおお!! なんとなくつかめた気がする! これで最強に一歩近づいたな。
48 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 23:35:49 ] ESI = 0x00000026 SAR ESI, 1 が何でESI = 0x00000013になるんだろう。
49 名前:1 ◆LrnSVKDHBg mailto:sage [2007/03/03(土) 23:41:41 ] 16進じゃなくて10進の26だった
50 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 02:51:05 ] x86の浮動小数点演算についてわかりやすく説明したページないですか?
51 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 07:13:15 ] 一つ疑問がある。 なんでx86見たいな変態アーキテクチャでアセンブラ勉強しようと思ったんだ? マゾなのか?
52 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 10:23:19 ] >>48 x を右へ n だけシフトすれば x / (2 の n 乗) になるのは常識。 2進シフトで分かりにくければ、 10進シフトで考えてみるといい。 31239832 を右に2桁シフトすれば 312398 になる。 これは 31239832 / 100 でしょ?
53 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 10:24:40 ] >>50 浮動小数点数でググればいくらでも出てくる。
54 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 10:25:25 ] x86 以外で勉強する方が、環境用意するのが大変でマゾだろう・・・。
55 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 11:42:56 ] >>51 ぜんぜん問題ない。 86アーキを理解したいなら別だが、 それは言語とは別問題だ。
56 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 12:25:38 ] >>53 たとえばどれ?
57 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 14:05:23 ] >>56 上から全部読んでいけ。 IEEE754 ってのがそれだ。
58 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 14:59:35 ] 動物には餌を与えるべきではないだろう。 餌を与えると自分で餌を探そうとする意思をなくす。
59 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:32:37 ] >54 俺としては、シミュレータも揃っててサンプルコードの多いCASLII辺りの方がお勧めだがな
60 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:36:38 ] >>57 そのページを参照すればx86で浮動小数点演算をアセンブラで書けることを証明してください。
61 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:46:32 ] 馬鹿かコイツは。自分で証明しろよ。
62 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:51:54 ] 馬鹿というよりもむしろ害虫
63 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 10:41:59 ] 休み明けに新規スレチェックしてみてタイトルにアセンブラとあるから来てみたら…… 何このCも碌に判っていない癖にC使いとかほざいている>>1 … アセンブラを勉強する以前にやるべきことが腐るほどありそうだ。
64 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 18:05:04 ] このスレにいる人はアセンブラなんて書けない人ばかり
65 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 21:01:51 ] そうでもない。 68000とかH8とかARM7あたりならガリガリ書けるぞ。
66 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:36:06 ] アセンブラを勉強したいなら、 Cコンパイラに-Sオプションでも付けて 各CPUのソースを「同一のCソースから」生成してみると かなりおもしろいという事を発見できる。 まずはgcc使って遊べ。
67 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 23:13:25 ] え〜〜、gasはよみにくいからきら〜い♪
68 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 23:49:19 ] asmやるんなら、いちいちcでこう書いたらこうなるとか考えない。 最初からasmで考えないと。
69 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 00:17:02 ] >>60 ああ、fadd とかそういう話か。 >>41 のマニュアルでも見れば?
70 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:00:51 ] Intelは日本語でも色々揃えている。 www.intel.com/jp/developer/download/
71 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:38:56 ] インテルは頻繁にレイアウト変えてややこしすぎる。
72 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 22:45:10 ] >>54 あ?マイコンのほうが環境は揃いやすいですよ? 多少の出費があってもよければx86よりポケコンのほうが 純粋にアセンブラを学べる
73 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 22:56:51 ] ポケコンってまだ一般向けに売ってるのか? 今時持ってるのは工業高校の生徒くらいだろ。
74 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 22:58:26 ] 秋葉原、日本橋ならいつでも買えるんだぜ?
75 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:14:26 ] x86 なら出費なんていらないだろ。 VC++ Express Edition で デバッガの混合モードや インラインアセンブラを使えばいいだけ。
76 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:22:53 ] >>74 それじゃ揃いやすいとは言えんだろ
77 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:33:01 ] >>76 誰もそんなことは言ってない
78 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:33:43 ] >>75 標準搭載してない
79 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:40:57 ] じゃあ、debug.exeで
80 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 00:07:15 ] 結局>>1 は三日坊主か
81 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 06:02:21 ] >79 Winでx86の最初の環境としては最良だよな 標準搭載だし
82 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:12:21 ] MASM は今フリーだっけか? VC++ についてるってだけだっけ?
83 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:30:08 ] >>53 >>57 は論理的におかしいな。 >>50 は 「浮動小数点演算について説明したページ」ではなく 「浮動小数点演算についてわかりやすく説明したページ」を聞いているのだから。 検索で出てきたものが全て「わかりやすく説明したページ」であるはずがない。
84 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 20:11:29 ] 病名でググって一番上にきた病院は繁盛するってNHKスペシャルで言ってた
85 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 20:29:53 ] >>83 そんぐらい自分で探せよ。
86 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:25:22 ] Wikipediaもまあよくまとまってるけど、「わかりやすい」ってこういうのとかじゃね? ttp://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml
87 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 04:28:28 ] 間違っていなきゃね。
88 名前:デフォルトの名無しさん [2007/03/13(火) 16:21:38 ] アセンブラかと思ったら… インラインアセンブラにもなってなくてorz
89 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:39:36 ] >>88 こちらへどうぞ アセンブラ… (゜□゜) ↑アッー!↓ pc11.2ch.net/test/read.cgi/tech/1148402614/l50
90 名前:デフォルトの名無しさん [2007/03/16(金) 20:36:19 ] MASM初心者です。 OR AX, AX と CMP AX, 0 は同義だということをネットで見たのですが、意味がわかりませんでした。 また、OR命令はフラグレジスタのゼロフラグに影響を与えないと思ってたの ですが、どうなのでしょうか?
91 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 20:40:33 ] >>90 まずはIntelのサイトに言って「IA-32 インテル アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル」を全部ダウンロードしなさい。
92 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 20:41:10 ] ×言って ○行って
93 名前:デフォルトの名無しさん [2007/03/16(金) 21:12:41 ] >>91 ありがとうございます。 なるほど思い切り書いてありました。。 ナットクです。
94 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:23:20 ] で、>>1 は勉強終わったのか?
95 名前:デフォルトの名無しさん [2007/04/11(水) 04:05:26 ] 486のポケコンねえ?
96 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 15:10:03 ] 俺も今から勉強するぜ! 命令が27個でアドレッシングモードが7つ、レジスタが16個って16bitCPUのをな!!
97 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:36:24 ] >96 そのネタが全く分からない俺はここに居るべきじゃないんだろうな…
98 名前:デフォルトの名無しさん [2007/04/28(土) 23:10:48 ] CASL e-Learning System ttp://www.inf.ie.kanagawa-u.ac.jp/uchida/eCASL/index.html
99 名前:デフォルトの名無しさん [2007/05/09(水) 04:06:24 ] 今更アセンブラを勉強しようと思ってこのスレ覗いたんだが、 全くわけわからん。。。 一応C++、Javaなどは仕事で使ってきたからある程度はわかっているつもりだけど アセンブラでメモリの内容書き換えたり、Jumpしたりして一体何がどうなるのか??? つながりが全くわからない俺はどこから手をつけたらいいんでしょうか。
100 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 05:25:04 ] >>99 >>98 見て勉強したら?
101 名前:デフォルトの名無しさん [2007/05/09(水) 12:13:49 ] >>99 SIMD弄ってみたら?
102 名前:デフォルトの名無しさん mailto:saeg [2007/05/09(水) 13:11:09 ] C++がわかるならC++コンパイラにアセンブリコードを出力させるなり逆アセンブルするなりして比較するのがわかりやすい
103 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:58:36 ] >>100-102 レスサンクス。まずはC++からアセンブリコード出力させるとこからやってみるわー。
104 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 15:26:06 ] 計算に使うレジスタ自体が書き換わるのがウザい
105 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:41:19 ] VC++ の混合モードとか便利ね。
106 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:29:40 ] >>105 つ[gcc -g -S]
107 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 02:26:25 ] >>98 そこ何度やっても www.inf.ie.kanagawa-u.ac.jp のサーバからの応答が一定時間以内に返ってきませんでした。 ってなってつながらないんだが、どうしてだろう?
108 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 03:07:51 ] プロバイダで撥ねられてる or 夜中3:00〜3:10のメンテナンス中に読みにいったキャッシュが残ってる。 じゃない?
109 名前:デフォルトの名無しさん [2007/05/20(日) 16:10:03 ] >>1 学習は済んだのか?
110 名前:デフォルトの名無しさん [2007/05/30(水) 18:26:16 ] uwAAvwAAtAay/80hdQPpggCIhRICR4P/A3XruQQA6BAAA9+D+zl127QJug8CzSHrz74AANAmFALQ FhMC0BYSAtHW0CYUAtAWEwLQFhIC0dbQJhQC0BYTAtAWEgLR1tAmFALQFhMC0BYSAtHW0CYUAtAW EwLQFhIC0dbQJhQC0BYTAtAWEgLR1rQGipTPAc0h4p/Dg/8DdQm0CboSAs0h6yGD/wJ1DrkDAOiF /+gZAOgWAOsOg/8BdQm5AgDocv/oBgC0TLAAzSG0BrI9zSHDQUJDREVGR0hJSktMTU5PUFFSU1RV VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw0KJDAwMCQ==
111 名前:デフォルトの名無しさん [2007/05/30(水) 23:16:41 ] なんか最近いろんなスレで >>110 みたい書き込みを見るけど、 また掲示板に情報を書き込むタイプのウィルスでも流行ってる?
112 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:25:49 ] エンコードも知らんのかw
113 名前:デフォルトの名無しさん [2007/05/30(水) 23:27:16 ] >>112 いや、base64だろうってことぐらいはわかるけど。 ん? エンコードかけてんのはただの馬鹿よけ?
114 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 00:33:45 ] カーネルの特定の部分をいじろうと思ってるんですが、 スーパーバイザーモードなときの話ってどっかにいい入門用の資料はないですかね? x86でいいんですが。
115 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:32:47 ] はじめて読む486、じゃちょっと浅すぎるか
116 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 16:04:52 ] x86のアセンブリについて、助けてください。。。 XP付属のdebug.exeで勉強中です。 divニーモニックのところで躓きました。 -a 0100 3529:0100 mov ax, 000a 3529:0103 mov dx, 0003 3529:0106 div dx 3529:0108 -g =100 108 実行すると、debug.exeが終了してしまいます。 多分、何か間違いがあるんだと思いますが、 いったい何がまずいのでしょうか。 axに商が、dxにあまりが入るものと思って書いているのですが。。。
117 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 19:07:24 ] 商がでかくてaxレジスタに入らなくて例外が発生。
118 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 20:13:42 ] >>116 div dx だと dx:ax 割る dx = ax 余り dx になるから>>117 のいうとおり例外が起きてるで正解。
119 名前:116 mailto:sage [2007/06/20(水) 21:19:07 ] >>117-118 ありがとうございました。 丁寧な解説のおかげで勘違いに気づけました。 「ax 割る dx」だとばかり。。。 予期せぬ空き時間ができたので、ここを見ながら勉強してました。 ttp://wisdom.sakura.ne.jp/programming/asm/index.html 1文字ずつロードしてhello worldが出せたときは、久々に コンピュータを使っていて楽しいと思えました。 さて、次は何を参考に勉強を進めようか。。。 いつまでもこの秋時間は続かないので、どこまで進むかわからないんですが。
120 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:31:45 ] 初歩過ぎる質問なのですが incとdecってどういう作業をするのでしょうか
121 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 03:32:21 ] ++a; --a;
122 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:02:45 ] その昔、VCはリリースモードでコンパイルすると、変数の並びが変わるから アセンブラの勉強に使えない糞コンパイラとか言ってたあほがいたな。
123 名前:デフォルトの名無しさん [2007/09/18(火) 16:15:39 ] age
124 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:27:43 ] >>122 あのメルマガか お勧めが最適化の無い無料コンパイラでワロタ
125 名前:デフォルトの名無しさん [2007/09/30(日) 14:47:12 ] INT 0x13でディスクへのRAW書き込みをするアセンブラ関数を作成して、 C言語(コンパイラ:BCC)から、その関数を使ってデータを書き込もうとしています。 その際に、データを引数でアドレス渡しでやろうとしているのですが、 ES:BX へのデータのアドレス指定は、どうやったらいいのでしょうか? Cから渡されてくるアドレスは32ビットなので、ここのアドレスの指定の仕方がわかりません・・・。
126 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:30:24 ] このスレで質問する大きなお友達が守るべき3つのおやくそく。 ・質問するときはどの石についての質問であるか明記すること。 ・マニュアルを参照すればわかる質問は極力しないこと。 ・自己解決したときはその方法をきちんと報告すること。
127 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:44:32 ] BIOSコールは16bitモード以外では使うな。 以上。
128 名前:125 [2007/09/30(日) 15:48:56 ] すまそ x86です。nasmとBCCでやろうとしています。 Cのソースで char data[512]; func(data); という形でnasmで作ったfuncをコールしようとしています。 funcでは mov eax,[ESP+4] でdataへのアドレスは取得できます。 このデータをINT 13hを使って、ディスクに書き込みたいのですが、 ES:BXにバッファのアドレスを指定する方法がわかりません。 mov eax,[ESP+4] mov [addr],eax mov es,[addr+2] ;ここでエラー mov bx,[addr] addr: db 0x00,0x00,0x00,0x00 とすると、デバッガで mov es,[addr+2] でセグメントを更新している!というメッセージが出ていて、ここで停止してしまいます。
129 名前:125 [2007/09/30(日) 15:51:34 ] >>127 32ビットモードではやっぱり使えないんでしょうか?
130 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:58:08 ] どうしても必要なら拡張INT13Hを使おう。 INT 13 拡張書き込み AH = 0x43 AL = bir0 ベリファイフラグ(多分) DL = ドライブ番号 DS:SI = ディスクアドレスパケットのアドレス ディスクアドレスパケット(アセンブラ側で作業領域として確保) 0x00 BYTE パケット自身のサイズ (0x10 or 0x18) 0x01 BYTE 予約領域 0x02 WORD 転送ブロック数 0x04 DWORD 転送バッファ 0x08 QWORD 開始絶対ブロック番号 (以下オプション) 0x10 QWORD 転送バッファへのフラットな64bitアドレス(使うときは0x04をFFFFFFFFで埋めておく)
131 名前:デフォルトの名無しさん [2007/09/30(日) 19:16:51 ] >>130 ありがとうございます! 拡張INT 13hで、資料漁ってみます!!!
132 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 12:41:13 ] >>128 さん そういう場合は、LES命令じゃありませんでしたっけ? MOV命令で、メモリからセグメントレジスタへの直接ロードは、 出来ないと思いますよ。
133 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:35:33 ] それ以前に、bccとかデバッガ云々言ってることから、win32でやろうとしてるんじゃないだろうか。 根本的に間違ってる気がする。
134 名前:デフォルトの名無しさん [2007/10/15(月) 17:59:38 ] プログラムの「前」ってどっちですか? SAMPLE: move.l d0, #0 ← こっちが前? move.l d1, #1 L1: add.l d0, d1 add.l d1, #1 cmp.l d1, #10 blt L1 ← こっちが前? rts
135 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 19:03:57 ] プログラムカウンタが進む方向
136 名前:デフォルトの名無しさん [2007/10/15(月) 19:46:27 ] じゃぁ前方参照って?
137 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 20:01:12 ] そんな事も自分で考えられないのか? 小学校からやり直してこい
138 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:29:25 ] アセンブラでDOSプログラムやるなら便利そうなの見つけたので貼っておきます reef.path.ne.jp/~hero/hero.htm の DOS.CHM です
139 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 10:54:20 ] Cから呼ばれる関数内でFPUを使う場合、 戻るときにレジスタスタックの深さを戻す必要ありますか? それとも特に何も考えなくていいのでしょうか?
140 名前:デフォルトの名無しさん [2007/10/21(日) 13:26:57 ] すみません宿題なのですがどなたか教えてください 次の実行結果を説明せよ。なぜそうなるか理由も書くこと。 という問題なのですがわかりません・・ お願いします・・ 問1 CLR R0 ADD #1, RO ADD #2, R0 ADD #3, R0 ADD #4, R0 問2 MOV #100, R1 CLR -(R1) CLR -(R1) CLR -(R1) CLR -(R1) 問3 CLR @#100
141 名前:デフォルトの名無しさん [2007/10/21(日) 20:42:35 ] 誰か>>140 教えてくださいお願いします・・・
142 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:59:58 ] 本気で聞いてるのならせめてCPUの種類くらい書けや。
143 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:24:22 ] ニーモックみりゃわかるだろ糞虫
144 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:38:50 ] >>143 分からんだろ?
145 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:29:05 ] >>140 勉強したいのなら自分でやれ。 ヒントは命令表だ。にらめっこしながら自分で解け。 アセンブラを勉強するのなら、命令表を見るのは必須だ。 それすらせずに宿題を丸投げする馬鹿者は糞でも食って死ね。
146 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:51:37 ] >>140 勉強する気のない糞虫野郎はこれでももってとっとと消えろ。 問1 CLR R0 ;R0を0にする ADD #1, RO ;R0に1を加算 ADD #2, R0 ;R0に2を加算 ADD #3, R0 ;R0に3を加算 ADD #4, R0 ;R0に4を加算 ここまでR0=1+2+3+4。糞の詰まった頭でじっくり考えろ。答えはいくつだ? いいか、4じゃないぞ?ちゃんと指を折って数えるんだぞ? 問2 MOV #100, R1 ;R1に100を格納 CLR -(R1) ;R1を1サイズ分減算した内容が指すアドレスを0にする。 CLR -(R1) ;同上 CLR -(R1) ;同上 CLR -(R1) ;同上 1サイズが2バイトなら98,96,94,92番地の内容が0だ。 1サイズが1バイトや4バイトなら・・・あとはわかるな? 問3 CLR @#100 ;実効番地100の内容を0に ここまで書けば、糞を食うしか能のないお前でも分かるだろう。 ところで、この問題、前にVIPあたりで見かけたことがあるんだが 釣りのつもりなのか?
147 名前:デフォルトの名無しさん [2007/10/21(日) 23:54:55 ] >>142 >>144 それ、マジで言ってんの?ネタだよね?
148 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:01:42 ] 分かる分からんではなく質問の仕方に問題があるつーこったろ。
149 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:38:15 ] ちなみに俺なら、 予想はできるが間違っている可能性を否定できないので分かるとは言わない。
150 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 09:43:59 ] >ADD #1, RO このようなニーモニックのは俺はいじったことが無いな
151 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 09:54:06 ] レジスタR0…RISCプロセッサの何かかな? 何かの雑誌で見たような見てないような?
152 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 16:34:10 ] 俺も同じ質問を前に見た記憶があるな。 PDP-11だっけ?
153 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:09:06 ] >>140 ここで回答されてるよ m.oshiete1.goo.ne.jp/search/eturan3.php3?qid=3431805&cid=709&keyword=&start=9
154 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:54:38 ] >>152 同じ大学なんじゃね アセンブラ… (゜□゜) ↑アッー!↓ pc11.2ch.net/test/read.cgi/tech/1148402614/614
155 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:57:36 ] そこら中にマルチしてるのか、それとも受講した学生が軒並み馬鹿ばっかだったのか・・・
156 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:17:19 ] 後者。
157 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 20:00:11 ] 結局、ROレジスタの謎だけが残ったのか・・・・
158 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:44:25 ] >>146 お前、ベジータか?
159 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 16:00:27 ] よ、よくわかったな・・・
160 名前:デフォルトの名無しさん [2007/11/24(土) 04:23:05 ] mov ebx,eax と lea ebx,[eax] って、ebxにロードされる値は同一ですか?
161 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:32:57 ] セグメントディスクリプタ(古いCPUだとセグメントレジスタ)の値によって変わる もちろん同じになることもある
162 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:48:06 ] lea ebx, [eax * 2 + eax] で eax の3倍の値を入れたり。
163 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:03:25 ] 猫娘のおフェラ〜♪ww ttp://userdisk.webry.biglobe.ne.jp/002/078/73/N000/000/000/117897859702816119025.jpg
164 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 12:04:16 ] 通報しました
165 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 17:37:23 ] Windowsソフトの逆アセの中に LEA EBX,DWORD PTR [EBX+00000000] というのを見かけるんだけど、イマイチようわからん・・・なんじゃこりゃ?
166 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 17:55:17 ] 入れろ EBX に 、32ビット値で 後述の番地から (EBXの中身 足す 00000000)
167 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 18:04:18 ] ひとつの命令でアラインメントするためだと思う
168 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 18:18:20 ] >>166 おい
169 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 18:20:53 ] >>166 それじゃMOV文じゃね? >>167 う〜ん、 AND EBX,-04 で良い様な気もしたんでね・・・。 ひょっとしてフラグかフラグなのか?
170 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 18:29:30 ] ANDだとフラグ変わっちゃう
171 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 18:31:29 ] フラグを変えたくなかったんだろという事で理解。 レスくれた人ありがとう。 先に進める事にします。
172 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:04:53 ] ループの分岐先を16byte境界に整列するために コンパイラがNOPを挿入することがある
173 名前:デフォルトの名無しさん [2007/12/01(土) 02:37:38 ] コンパイラ技術者のオナニー
174 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 16:50:59 ] ウチが見たのは整列するのに INT 03 で埋まってたな。 テキストだと フ になるんだけど、並んでとなんかこう気持ち悪い。
175 名前:デフォルトの名無しさん [2007/12/02(日) 17:03:44 ] プ
176 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 17:08:31 ] フフフフフフフフフフフフフフフ
177 名前:デフォルトの名無しさん [2007/12/02(日) 17:53:42 ] VisualStudio2008って64bitのアセンブラ使えますか?
178 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:36:35 ] >>176 ガリでもくってろフフフ(ry って、やめんかw
179 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 12:56:58 ] コォォォォォォォォ
180 名前:デフォルトの名無しさん [2007/12/07(金) 22:14:24 ] ゴゴゴゴゴゴ
181 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 12:29:50 ] FLD DWORD PTR [00B8AFB7] で ロ-キック
182 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:04:33 ] C++なんかのクラス構造の逆アセ解析マンドクセ
183 名前:デフォルトの名無しさん [2007/12/12(水) 15:33:42 ] 「メモリのX番地以降にN個の符号付整数が格納 されている.これらの整数の絶対値を求めて, Y番地以降に順に格納するプログラムを作成せよ. データの個数NはN番地に格納されているものとする.」 という課題が出されているんだがサッパリ解らない 誰か助けてくれ
184 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:39:00 ] 個数(N)を得るのに必要な情報である、格納アドレス(N)が必要だとなると、循環参照になるから絶対得られないのだが。 つーか、何のアセンブラの話なんだか。
185 名前:デフォルトの名無しさん mailto:sage [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つやっつけるだけだ。
186 名前:デフォルトの名無しさん [2007/12/12(水) 15:41:28 ] すまんかった COMETII/CASLIIだ
187 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:43:41 ] >>186 なんで>184の2行目しか読まないかねぇ……
188 名前:デフォルトの名無しさん [2007/12/12(水) 15:44:04 ] すまんかった COMETII/CASLIIだ
189 名前:デフォルトの名無しさん [2007/12/12(水) 15:45:31 ] 二重書き込みしてしまった・・・ >>185 とりあえず試行錯誤してみる >>187 すまん、何を言っているのかすら解らなかったんだ
190 名前:デフォルトの名無しさん [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 ここまで書いたが、絶対値の求め方ってなんだっけ?
191 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:50:26 ] >>189 > 個数NはN番地に格納されている って、私の住所は私の住んでいる所ですって言ってるようなものだ
192 名前:デフォルトの名無しさん [2007/12/12(水) 15:58:24 ] >>191 なるほど、でも問題文そのままなんだよなぁ・・
193 名前:デフォルトの名無しさん [2007/12/12(水) 16:06:48 ] >3. 絶対値を求める これのやり方がわからない
194 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:12:37 ] まあ個数NのNは個数への名前付けであって個数がN個あるわけではないってのは常識的には分かるけどねw 「データの個数はN番地に格納されている」とかなら文句はたぶん出ない
195 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:15:26 ] >絶対値 負の数だったら0から引けばOK。アセンブラによっては符号反転のニモニックがあるかも知らん。 CASL知らんからCで書いておく。 signed foo; if (foo < 0) foo = 0 - foo; or if (foo < 0) foo = -foo;
196 名前:デフォルトの名無しさん [2007/12/12(水) 16:20:48 ] なるほど、つまり >190に正だったらそのまま格納 負だったら0からその数を引けばいいんだな
197 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:23:18 ] >>193 CASLには符号反転命令はないから正負を判断して負なら0からその値を引く 1.正なら3へジャンプ 2.0から値を引く 3. みたいな感じでいいんじゃまいか?
198 名前:デフォルトの名無しさん [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 としてみたんだがエラーが発生してしまう・・・
199 名前:デフォルトの名無しさん mailto:sage [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 でもいいかも アセンブルとか動作チェックとかして確かめていないが
200 名前:199 mailto:sage [2007/12/12(水) 16:58:06 ] 見直すと比較が逆っぽい CPA GR3,GR2 でなく CPA GR2,GR3 かな
201 名前:デフォルトの名無しさん [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 アセンブルではうまく言ったんだけど 無限ループしてしまった
202 名前:デフォルトの名無しさん [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 これで提出してみました 合格してるといいなぁ
203 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:19:54 ] >>201 HUTUの次の行の LAD GR1,1,GR1 が抜けてる気がする
204 名前:デフォルトの名無しさん mailto:sage [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ビット幅だったよね?
205 名前:デフォルトの名無しさん [2007/12/12(水) 17:32:02 ] やったー、合格できた! お前らのおかげだ!ありがとう! >>202 あ、うん直前で気づいていれておいた >>203 すまないが見たことの無い単語が出てきて解らない 16ビットなのは合ってるよ さて、最後の課題だ 「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」 もう早速意味の解らない data番地とか指標レジスタって日本語?
206 名前:デフォルトの名無しさん mailto:sage [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しか知らないから違うかもしれないけど。
207 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:46:42 ] xの絶対値はxが負なら(x+(-1))と(-1)の排他的論理和をとればいい xが正なら(x+(0))と(0)の排他的論理和をとる 0と-1はxを右に15ビット算術シフトすれば出てくる DATA番地も指標レジスタも日本語だw DATA番地はN個の符号付整数が格納されているブロックの先頭の番地のラベルじゃないかな 指標レジスタはCASLIIの仕様書にちゃんと載ってるぞ
208 名前:デフォルトの名無しさん [2007/12/12(水) 17:53:46 ] え、えーと つまり? 排他的論理和ってのを使えばいいのかな?
209 名前:デフォルトの名無しさん [2007/12/12(水) 17:55:10 ] 排他的論理和は先週の講義でやったなぁ XORだよな? っというかもうやっぱり問題文の日本語がわからない なにをさせたいのかさっぱり
210 名前:デフォルトの名無しさん [2007/12/12(水) 17:58:31 ] 指標レジスタってのはインデッテクスレジスタのことか!
211 名前:デフォルトの名無しさん mailto:sage [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に入れている
212 名前:デフォルトの名無しさん [2007/12/12(水) 18:04:31 ] あ、つまり 「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」 ではなくその前の課題についてだったのか
213 名前:デフォルトの名無しさん mailto:sage [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 すまん、混乱させてしまった
214 名前:デフォルトの名無しさん [2007/12/12(水) 18:12:30 ] たったいま講義が終わった 最後の問題はクリアしてなくても帰れるみたいだ 今日はお前ら本当にありがとう
215 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:16:11 ] > SUM番地にGR2を加算 CASLはメモリをディスティネーションにする加算命令はなかったかも 途中の和を入れるためのレジスタを用意してループ中ではそれに加算して 最後にSUMにSTする形をとったほうがいいか
216 名前:デフォルトの名無しさん [2007/12/12(水) 22:46:44 ] ところで、64-bitアセンブラのいい本ありませんか?
217 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:58:04 ] >>216 何を(どういうことを)勉強したいの?
218 名前:デフォルトの名無しさん [2007/12/12(水) 23:34:20 ] x64のやさしい解説書が欲しいんですが。
219 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:43:07 ] x86-64 ? ...x64 とも言うのか。 まだなさげ?
220 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:59:12 ] >>218 ビットサイズだけじゃアセンブラが特定できん。
221 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:04:57 ] MASM8.0のまともな解説書とかありませんか?
222 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:07:45 ] >>221 5から大してかわってない。
223 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:31:01 ] ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/lang/asm/x86/ 前何かで参考になった
224 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 05:36:47 ] MASM8.0のまともなマクロライブラリとかありませんか?
225 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 15:03:35 ] MASM って自分でカスタマイズするための言語だべ? 既存のライブラリでやるなら何もASMでやる必要は無いんじゃね?
226 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:44:57 ] MASMのマクロキットつったら、 アセンブラMACROSしか知らないなぁ。公開されたものは。 使ったことないけど。 これね。 ttp://www.vector.co.jp/soft/dos/prog/se001158.html
227 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:14:23 ] >>224 もし、一連の質問の同一人物なら、 質問に答えてもらったら・・・後はわかるな?
228 名前:226 mailto:sage [2007/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 こういう空間を良しと考えていたみたいだし (個人的にはこのひろゆこのエントリにはいろいろツッコミたい点は覆いが)
229 名前:デフォルトの名無しさん [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 ご助力頼む!
230 名前:デフォルトの名無しさん [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 とりあえず自分でやってみた どうだろうか
231 名前:デフォルトの名無しさん [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
232 名前:デフォルトの名無しさん [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 ここまで自分で入れてみた
233 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 17:19:13 ] ・・・コメント部分に答えが丸ごと書いてあるのにこれ以上どうしろと。
234 名前:デフォルトの名無しさん [2007/12/20(木) 00:20:59 ] Intel Core2の1次、2次キャッシュって、何wayで、キャッシュブロックは何バイトでしょうか?
235 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:34:28 ] >>234 スレ違い。寧ろ鼬害かも。
236 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:52:16 ] >>235 日本語でおk
237 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 01:00:31 ] ヒト以外の生物は巣にお帰りください。
238 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 07:35:31 ] x86命令の所要クロック計測スレPart3 pc11.2ch.net/test/read.cgi/tech/1168399966/l50
239 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:38:17 ] mpeg compass.jp 名古屋駅近辺でお話しましょう
240 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:23:17 ] MMXで最大値を求めるには、どっちを使った方が良い? pmaxubかpcmpgtb 後者の使い方がよくわからないorz
241 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:48:23 ] 簡単な使い方としては結果を使ってANDしたりAND NOTしたり
242 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:42:50 ] 初心者の質問です。 32bitレジスタにSSEレジスタの内容を書込む場合は、 どうしたら良いのでしょうか? movapsを使って転送しようとしたところで落ちます。 movaps xmm0, [esi] // 〜処理〜 movaps [ecx], xmm0 <-- ここで落ちる.
243 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:50:12 ] >> 242 自己レス、ごめんなさいループ条件を間違えていただけでした。
244 名前:デフォルトの名無しさん [2007/12/27(木) 00:15:18 ] スクラッチレジスタってなんですか?
245 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:20:22 ] 答えはWebで www.google.co.jp/
246 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 03:29:12 ] レジスタで何を対決させるんだろう?
247 名前:デフォルトの名無しさん [2007/12/27(木) 09:47:32 ] jumpとbranchはどう違いますか?
248 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 10:24:20 ] 命令語と動作が違う。 具体的な違いは石に依存するので種類を明記しない質問にはこれ以上答えようがない。
249 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 13:11:10 ] 条件分岐がbra だったり 相対アドレッシングでの分岐がbra だったり 逆だったり
250 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:28:29 ] Cで作成した、プログラムを逆アセンブルしてみると and $0xfffffff0,%esp って記述が必ずあるんだが、これはなんのためにやってるの?
251 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:42:11 ] >>250 ローカル変数をメモリ上でアライメントするため、 だと思われる。
252 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 14:50:54 ] >>251 アライメント? wikiでみたら、データを特定のサイズに調節することって書いてあるんだが 意味がわからない int型だと2バイトcharだと1バイト見たいなのが関係してんの?
253 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 14:58:10 ] >>252 www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html
254 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:04:47 ] >>252 「32ビット整数を格納するときはアドレスが4の倍数でないとすごくアク セスが遅くなる」とか聞いたことないかい? いまのx86は最大で128ビットのXMMレジスタまであるので、とりあえず アドレスを16の倍数にしておけばどんなデータも遅くならない。
255 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:57:54 ] バスがエラーだ電車を使え
256 名前:デフォルトの名無しさん [2007/12/31(月) 01:35:07 ] 4の倍数で数字を格納しないと、2回読み込みしたり、エラーが起きたりするから and演算でespレジスタに格納されてるアドレスの最下位の値を0にしてるって考えていいの?
257 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 05:35:56 ] その理解で合ってます。もっと昔は、「参照番地が4の倍数でない」 というだけで実行時エラー になったりしたものだが、後にいくらか親切になって、半端なアドレスのときは回路が二度読み してくれるようになった。その分実行が遅くなるので、高速が要求される場面では参照アドレスが 4の倍数になるようにコードで保証するテクニックです。
258 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 08:48:16 ] >>257 >になったりしたものだが、後にいくらか親切になって、半端なアドレスのときは回路が二度読み 真ん中辺が禿げ上がるほど大間違い。
259 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:10:41 ] ダンゴさんの鋭い解説が期待されるところだ
260 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:40:52 ] 68Kなど、他の16bitCPUにはそういうアライメントのミスで実行時エラーというのは実在したが x86という書き方をするけど、実は初期のIBM-PC のデータバスは8ビットで 8086ではなく8088だった。 だから、昔はワードデータが奇数番地から始まろうが偶数番地から始まろうが関係なかった。 そんなわけでx86シリーズに限るとアライメントミスで実行時エラーになることはなかった。
261 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:43:37 ] MIPSやSPARCは無視ですか
262 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 03:35:14 ] S/360ではおもいっきり起きたぞ
263 名前:デフォルトの名無しさん [2008/01/02(水) 02:30:34 ] sprintfみたいな可変個引数関数をアセンブラで実装したいんですが、stdcall呼び出し規約は使えないと思ってよいですか?
264 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 07:39:51 ] 別に最初にpushする引数に個数が判るパラメータを入れるという事にすればいいだけでは? ただc/delphiなんかから呼び出す時にはそれが最後のパラメータになるってだけで でも、手続き側でスタックの消去をするから、引数の個数を間違えると悲惨な事になるんで 普通はstdcallは使わないよね。
265 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 11:55:54 ] VC++ のメンバ関数は thiscall っていって、 this は ecx レジスタで渡して、引数は stdcall みたいに扱ってるけど、 可変個引数メンバ関数は例外的に引数を cdecl みたいに扱ってる。 普通はこんな感じで可変個引数の時には stdcall は使わないと思う。 ただ、可変個引数だろうと、何らかの形で引数のサイズは分かるような仕様にはするだろうから、 その情報を使ってスタックをクリアすることは可能なはずだけど(リターンアドレスをコピーする必要はある)、 ただ、>>264 にもある通りかなり注意する必要がある。 クリアされない引数が出ると、それが呼び出しもとの関数のリターンアドレスになって・・・とか。
266 名前:デフォルトの名無しさん [2008/01/02(水) 12:40:16 ] int $0x10で画面にAを1文字表示させるプログラムを作ったのですが、Segmentation Faultになってしまいます。 なにがいけないのでしょうか? --------------ソース---------------------------- .text .globl main main: movb $(0x0e),%ah movb $(0x14),%al movb $(0x00),%bh movb $(0x07),%bl int $0x10
267 名前:266 [2008/01/02(水) 12:53:24 ] 書き忘れましたが、環境はubuntuでgccです。
268 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:07:13 ] >>267 ubuntuはアセンブラ非対応だよ?
269 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:14:25 ] >>268 ? >>266 どういう環境で走らすためのコードだそれ? 保護機構のある32ビットOSの下で動かすものにはとても見えないが。
270 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:18:02 ] >>266 一応、確認するが石は何?
271 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 14:32:10 ] >>266 ビデオBIOSコール? 環境を間違えてる。MS-DOSの上でおやりなさい。
272 名前:266 [2008/01/02(水) 15:09:00 ] >>268-271 レスをありがとうございます。 CPUはペンティアム3です。 GRUBから何かのプログラムを起動させようとして作ってみました。 GRUBから起動させると、リブートになるので、ubuntu上で動くか確認しています。
273 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 15:12:08 ] >>272 VMにつっこんでやれよアホ 一回頃してやろうか?
274 名前:266 [2008/01/02(水) 15:14:11 ] GRUBからの起動は別のマシンでやってます
275 名前:デフォルトの名無しさん [2008/01/02(水) 21:54:22 ] >>266 参考にしてるサイトなり書籍なりを教えて。
276 名前:デフォルトの名無しさん [2008/01/03(木) 01:28:01 ] int main(){ int a[4]; } ってプログラムをコンパイルして逆アセンブルすると sub 0x10,%esp ってなってるんだけど int型は、2バイトだんだから 2*4でsub 0x8,%espで確保してもよさそうなもんなんだが なんで0x10で確保してるの?
277 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 01:31:59 ] 4*4 だろ?
278 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 01:33:52 ] >>276 環境が不明でなんとも言いようがないが、とりあえず。 >int型は、2バイトだんだから コンパイラ依存
279 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 01:40:05 ] つ-mpreferred-stack-boundary att記法で%espとか書いてるからi386でgccだろう。あと、espと書いてるからにはintは4バイトな気もするな。
280 名前:266 [2008/01/03(木) 04:42:41 ] BIOSを使わないで文字を表示させる方法を考えてみます
281 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 13:12:39 ] >>276 てか printf("%d\n", sizeof(int)); ってのがおまいが真っ先にやるべきことだ。 「Cは自らハックする者を助く」
282 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 19:41:50 ] 10バイト確保してるのか なるほどw
283 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:54:28 ] >>280 libcをリンクしてprintfを呼び出すといいよ
284 名前:デフォルトの名無しさん [2008/01/07(月) 02:57:35 ] lookasideって、日本語で言うと何ですか?どういう意味ですか?
285 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 03:43:42 ] TLBって(ry
286 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:31:18 ] アセンブラでハン○ームのオセロ多重起動しようと思ったけどわからなかったよー
287 名前:デフォルトの名無しさん [2008/01/23(水) 03:06:48 ] こんにちは アセンブラをはじめたのですが本に書かれてるソースがwindows用でlinuxで同じように出力させようとしてもできません。 どこが間違っているのか教えてください。 ソース section .text global _start msg db "Hello,assembler",0x0a msglen equ $-msg _start: mov eax,4 mov ebx,1 mov ecx,[msg] mov edx,1 int 0x80 mov eax,1 mov ebx,0 int 0x80
288 名前:デフォルトの名無しさん [2008/01/23(水) 03:14:21 ] すいません、書き忘れました。 出力させたいのはmsgの先頭の「H」です
289 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 05:26:20 ] 287はどうみてもLinux用だが・・・?
290 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 05:45:38 ] アセンブラがasだったりして。
291 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 09:33:09 ] 質問者の状況がよく判んないんだけど。 どうせなら www.nk.rim.or.jp/~jun/lxasm/asm00.html 辺りは、熟読して置いて欲しいと思った。 このサイトならアセンブル方法なんかの手順から細かく書かれているし。
292 名前:デフォルトの名無しさん [2008/01/23(水) 09:46:55 ] >>291 情報ありがとうございます。 どうやら_startからmov eax,1の間を mov eax,[msg] push eax mov eax,4 mov ebx,1 mov edx,1 mov ecx,esp int 0x80 pop eax とすればよかったみたいです。 わかりずらい質問をしてしまってすいませんでした。
293 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:03:53 ] 別の板(電気電子)に書いた質問なんだけど、この考え方で正しいかな? science6.2ch.net/test/read.cgi/denki/1108630837/682 8bitマイコンにおけるシンプルなBCD演算の最適化に関する話題なんですが、 よかったら見てやって下さい。
294 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:43:56 ] >>293 仮定条件が多過ぎてわけわかめ。CPUを限定していいから実在するニモニックで実際に動くコード貼ってみたら?
295 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 18:22:14 ] BCD10進数で XH-YHを求めたいのに >ACC = (0x99 + CarryBit) - YH; ACC += XH; DA(ACC); XH = ACC; でいいかという問題だよね? 問題が起きそうなのはYHの下位が0の時 まず、ACC = (0x99 + CarryBit) - YH; で 0x?A という値になる これに対して10進補正をかけないでいいのかという事? 通常10進補正命令は、下位4ビットについて ・ ハーフキャリーが立ってるなら下位4ビットに6を足す ・ 9以上なら8bit分6を足す という仕様になっているなら大丈夫だろう
296 名前:293 mailto:sage [2008/01/26(土) 21:29:57 ] >>295 >・ ハーフキャリーが立ってるなら下位4ビットに6を足す >・ 9以上なら8bit分6を足す はい、そういう仕様になってます。 やっぱこれで間違ってないですよね? 理屈上はこれでいいはずだと思ったんですが、何かこう 直感に反するような感覚が消えなくて……
297 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:56:43 ] 遅レスだが、 BCD演算について、値の表現が 0-9= 0x0-0x09というのは縛り? 昔からある手法で、0-9=0x03-0x0cというのもある。(offset-3) BCD部分に限れば、n+m => (n+3)+(m+3)で、キャリーの有無で次の桁へのcarry-upが計算できる。 減算もほぼ同様。 HW回路に直すと、効率が結構良いのが分かるはず。
298 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:51:36 ] この人の縛りはBCD演算命令があるCPUでという事だから仕方ないのだろ。 ソフトで計算しなければならないならソレも方法だね。 でもソフトで計算するなら100進数の方が楽だけどね
299 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:18:50 ] えー 09 + 01 = 10 の代わりに 3C + 34 = 70 -> 43 ってなる訳じゃん? 70 -> 43 ってどこから持ってくるのん?
300 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:24:59 ] あくまでも加算は4ビット単位にするんじゃないの?
301 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:32:36 ] 9 + 1 = 10 C + 4 = 10 であって 40 ではない罠
302 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:33:13 ] 40じゃない43だったorz
303 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:10:38 ] 最近の CPU の BCD 命令って 十分な速さを与えてもらえてるのか?
304 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:00:05 ] DAA/DAS命令を持っているならね。 ただ、最近はC言語で書くのが当然のようになってるから、ハブられ易いね
305 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:15:20 ] IA-32 Intel (R) Architecture Optimization で DAA/DAS 検索したら出てこねえw
306 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:08:12 ] verilogベースで3-offset-BCDを書くと module alu8bit( a, b, bcd, x, co ) ; input [7:0] a ; input [7:0] b ; input bcd ; // 0:bin 1:bcd output [7:0] x ; output co ; wire [4:0] t_lsb= {1'b0,a[3:0]}+{1'b0,b[3:0]} ; wire [4:0] t_msb= {1'b0,a[7:4]}+{1'b0,b[7:4]}+{4'h0,t_lsb[4]} ; assign co= t_msb[4] ; wire [3:0] t_lsb0= ,a[3:0]+b[3:0]-4'h3 ; wire [3:0] t_msb0= a[7:4]+,b[7:4]+{3'h0,t_lsb[4]}-4'h3 ; assign x[3:0]= ({t_lsb[4],bcd}!=2'b01) ? t_lsb0[3:0] : t_lsb[3:0] ; assign x[7:4]= ({t_msb[4],bcd}!=2'b01) ? t_msb0[3:0] : t_msb[3:0] ; endmodule て雰囲気になる。 多bit-ALUの数とワーストディレイに関する考え方でそれなりに優位はあったが、 最近の力任せgate数には勝てないかな? asmベースでは、x86界ではDAAが基本になるので工夫がなかなか難しい。 (細かいテクを使えば色々ありそうだが) * ビール1Lぐらい摂取して、書いているので、バグについては容赦願います。
307 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:06:56 ] >>303 単なる憶測だけど IBM の Power6 の BCD 演算回路なんか速いんじゃない?
308 名前:デフォルトの名無しさん [2008/02/14(木) 17:17:11 ] すいません、質問なんですが ----------ここから(label.s)---------- .globl main .code16 main: xorw %ax,%ax movw %ax,%dx movw %ax,%bx movw $0xFFFA,%ax call ch_dx movw $0xFFFB,%bx ret ch_dx: movw $0xFFFD,%dx ret ----------ここまで---------- 以上のように書いてアセンブルしたところ $gcc -o label label.s 実行時にセグメンテーションフォルトが出てしまいます。 >Segmentation fault: 11 (core dumped) これはなぜなんでしょうか?gccは $gcc -v Using built-in specs. Configured with: FreeBSD/i386 system compiler Thread model: posix gcc version 3.4.6 [FreeBSD] 20060305 です。
309 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:07:54 ] >>308 下から4行目のretの次の命令がないからじゃないかな システムコールでプログラムの終了すればいいと思う FreeBSDならこんな感じ pushl $0 /* return value */ movl $1, %eax /* SYS_exit */ pushl %eax int $0x80 16ビットだとどうなるかはわからん
310 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:31:07 ] ちがうだろ。 >>308 の環境で16bitコードでmainを書こうなんて考えたのがそもそもの原因。 それ専用のcrt0を用意したわけでもなかろうに。 どこの何見てそんなことやろうと思ったのか知らんが。
311 名前:デフォルトの名無しさん [2008/02/14(木) 19:52:52 ] >>309 どうもです。retの後に(16ビットコードなのでmovw $1,%axみたいな感じ) 4行書いてみたんですが、相変わらずセグメンテーションフォルトでした。 32bitコードだと ----------ここから(label_32.s)---------- .globl main main: xorl %eax,%eax movl %eax,%edx movl %eax,%ebx movl $0xFFFFFFFA,%eax call ch_edx movl $0xFFFFFFFB,%ebx ret ch_edx: movl $0xFFFFFFFD,%edx ret ----------ここまで---------- これでコンパイルすると正常に動作しました(gdbでstepiして確認) >>310 crt0って何でしょう?すいませんよくわかりません。 コードはどこに載っていたというわけではなく 単に16bitコードをBSDで動かしてみたかったので。 URLか、何か適切な本があれば教えてくれませんか?
312 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:59:41 ] .code16が何か勘違いしている
313 名前:デフォルトの名無しさん [2008/02/14(木) 20:08:36 ] 勘違いしてますかね? sourceware.org/binutils/docs-2.18/as/i386_002d16bit.html#i386_002d16bit
314 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:17:07 ] it also supports writing code to run in real mode or in 16-bit protected mode code segments. To do this, put a `.code16' or `.code16gcc' directive before the assembly language instructions to be run in 16-bit mode.
315 名前:309 mailto:sage [2008/02/14(木) 20:57:14 ] >>311 すまん関係なかったか
316 名前:デフォルトの名無しさん [2008/02/14(木) 21:09:05 ] >>314 そこ読んでも何を勘違いしてるのかわかりません… すいません教えてください。
317 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:17:58 ] BSDって16ビットコードを実行できたっけ?
318 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:22:22 ] リアルモードや16ビットプロテクトモード用の機械語を生成するように アセンブラに指示を出すのが.code16ディレクティブ。 *BSD系は普通32ビットプロテクトモードを使う。 32ビットモードで16ビットモードのコード食わせれば当然暴走することになる。
319 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:06:38 ] >>315 いえいえ >>317 >>318 了解です。ありがとうございました。
320 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:26:32 ] x86についての超初心者の質問ですが付き合ってください mov m,i; ってのは不可能なんでしょうか?つまり mov [esi], 0FFFFFFFFH; なんてのは無理なんでしょうか?
321 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:23:00 ] >>320 アセンブルできるよ。 念のため「うさみみハリケーン」付属の簡易アセンブラで試してみた。 mov dword ptr [esi], 0FFFFFFFFH これをアセンブルすると、 C706FFFFFFFF になった。
322 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:03:38 ] >>318 当然暴走するって言い方は乱暴だなぁ。 意味はないけど暴走しないように書く事だっでできる。 >>319 gdb使っているなら逆アセしてみれば、なぜ落ちるかわかるはず。
323 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 03:18:50 ] >>322 call ch_dxの手前まで進んでSIGSEGVを出して落ちたので 本来$eipが32bitで指し示しているアドレスを、.code16モードでは その下位16bitしか読まないため、不正なアドレスにアクセスしようとして エラーが出たんじゃないかと思います。たぶんですが
324 名前:320 mailto:sage [2008/02/15(金) 05:47:09 ] >>321 ありがとうございます! ptr演算子ってのがあるんですね。勉強になりました
325 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 07:10:22 ] それはMASM系の構文かな
326 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:09:11 ] >>323 はずれ。 ヒント .code16のmovwと.code32のmovlは同じコード
327 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 23:33:19 ] >>326 どうもです、ちょっと考えてきます。
328 名前:デフォルトの名無しさん [2008/02/25(月) 15:25:47 ] ttp://mixi.jp/view_bbs.pl?id=28403306&comment_count=0&comm_id=90935
329 名前:デフォルトの名無しさん [2008/06/01(日) 12:34:51 ] スレが伸びない mov ah,4ch int 21h
330 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 13:49:17 ] halt
331 名前:デフォルトの名無しさん [2008/06/02(月) 16:32:39 ] nop nop nop
332 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 16:34:14 ] CPUによっては、halt命令は相対ジャンプ命令だし、nop命令はレジスタ間演算命令だったりする罠。
333 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:13:51 ] 9090909090909090
334 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:25:36 ] jump 1 (もう忘れたよ)
335 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:36:38 ] 【データの交換】 N 番地と M 番地のデータを交換するプログラムを作成しなさい.
336 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:47:28 ] push [N] push [M] pop [N] pop [M]
337 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:21:30 ] >>336 それってレジスタNとレジスタMでの交換じぇねえか? 自信ないけど。 >335の問題はN番地とM番地の交換だろ?
338 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:16:09 ] 普通は括弧ついてりゃメモリだろう。
339 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:10:15 ] レジスタ使わない(スタックポインタは使うけど元に戻る) push [N] push [M] pop [N] pop [M] レジスタ1個使う mov K, [N] xor K, [M] xor [M], K xor K, [M] mov [N], K レジスタ1個使う(スタックポインタも使うけど元に戻る) mov K, [N] push [M] pop [N] mov [M], K レジスタ2個使う mov K, [N] mov L, [M] mov [N], L mov [M], K レジスタ使用数と速度を比較してみると面白いか。
340 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:27:28 ] xchg [N], eax xchg [M], eax xchg [N], eax
341 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:35:28 ] xchg はつい忘れてしまうから困る
342 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:58:33 ] プロセッサを指定しないと駄目だろ・・・。
343 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:02:33 ] xchg eax,eax
344 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:04:11 ] 全プロセッサでやればいいじゃん
345 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:24:58 ] lea ってどうやってアドレス計算しとんじゃボケ!
346 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:37:31 ] アセンブラって、今から勉強しても時代遅れ?
347 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:50:03 ] IA-64をハンドアセンブルできたら英雄になれる
348 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:55:16 ] >>347 氏ねと?
349 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 01:24:36 ] >>346 何時でもマの必須項目
350 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:26:31 ] EB08とかあったな。 単純JUMP8バイト。
351 名前:デフォルトの名無しさん [2008/06/29(日) 14:09:28 ] アセンブリ言語を勉強しようと思い書籍を探しているのですが、 はじめて読むアセンブラ と いまどきのアセンブラの教科書 は持っているのですが、どうもわからないので、 とっつきやすい書籍を紹介してほしいです。
352 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:16:30 ] それはもう、本を読むよりも手を動かした方がいいということだ。
353 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 15:44:58 ] いや、さすがに教科書が宜しくない。 PIC か何か、PCではないもので学ぶか、PC で学ぶかという選択肢はあるが、 後者なら「はじめて読むPentiumマシン語入門編」をすすめておく。
354 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:15:05 ] あ、もしWindowsじゃない環境だったら... と書こうと思ったけど そのレベルなら自力でなんとかすると思うので続きは (省略されました)
355 名前:デフォルトの名無しさん [2008/06/30(月) 09:42:15 ] とにかく手を動かして見る事にします。 お願いします。 僕に課題を下さい
356 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 11:53:30 ] アセンブラだけで全部書こうとか思ってるから厳しいんだと思うよ Windows上なら Delphiのインラインアセンブラとか手軽に利用出来て便利 多倍長の四則演算あたりを書いてみたらいいと思うな。
357 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:25:06 ] 多倍長か…。 ハードウェアで乗算器の設計しようとして、1024bitの加算器を使おうとしたあふぉがいたなあ。 (某大手企業の中堅クラス以上の社員) シフト加算で何とかなるとか言っていた。w
358 名前:デフォルトの名無しさん [2008/08/18(月) 16:54:10 ] DOSの時 OUT命令でFM音源動かしたり VRAMに直接書き込んだりしていたけど ウィンドウだと出来るのでしょうか 複雑すぎて自分ではやれないとは思うのですけどね
359 名前:デフォルトの名無しさん [2008/08/18(月) 17:20:25 ] WindowsはOSですから。 そうですよねえ。 直接やりたいですよね。 んで、しつこいですけどもう一度。 WindowsはOSです。 わかりますよね??言ってる事。
360 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 17:44:39 ] saveDS dw ? saveES dw ? saveSS dw ? ;; void RealToProto(void); public _RealToProto _RealToProto proc near push bp mov bp,sp ; mov saveDS, ds mov saveES, es mov saveSS, ss これは、はじめて読む486という本にあるリアルモードのプログラムの一部なんですが、 saveDSをコードセグメント内で定義したら、mov saveDS, dsは mov CS:saveDS, dsと解釈されアセンブルされるのでしょうか?
361 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:17:36 ] call GetLocalTime movzx eax,word[SystemTimewHour] mov ebx,60 mul ebx movzx ebx,word[SystemTimewMinute] add eax,ebx mov ebx,60 mul ebx movzx ebx,word[SystemTimewSecond] add eax,ebx ret
362 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:25:03 ] >>358 ウィンドウってX?ms? どっちでもやろうと思えばできる。 ただ、やらない方がいい。
363 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 01:37:14 ] bits 32 extern MessageBoxA section .data title: db 'title',0 string: db 'Hello World!',0 section .text global start start: push dword 0 push dword title push dword string push dword 0 call MessageBoxA ret
364 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 11:30:39 ] >>360 そんなお節介なアセンブラいらね。 ちう事で自分でオーバーライド。
365 名前:デフォルトの名無しさん [2008/08/19(火) 17:13:58 ] >>362 やれなくはないのですね >>359 リアルモードとプロテクトモードだと メモリのアクセス方法とか全然違うんだよねっと 思っただけです
366 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:10:50 ] MS-DOSで動くのMASMのプログラムの中に flush_q2: db 0eah dw offset set_cs_desc3 dw seg set_cs_desc3 set_cs_desc3: って書いてあります。DOSから割り当てられるセグメントは 決まってないと思うのですが、dw seg set_cs_desc3 はどうしてアセンブルできるのでしょうか?
367 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:20:36 ] exeヘッダにリロケート情報が入っててメモリにロードしたときパッチが当たるんじゃなかったかな
368 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 13:40:07 ] >>358 何がどう複雑かって言うと、マルチタスクなので複数のプログラムが同時にIOしようとする 可能性を考慮しないといけないところ。だから、普通だとIOはデバイスドライバの仕事。 ドライバは複数のプログラムの要求を調停しながらIOを行う。 これが一般のアプリケーションには抽象化されたOSのAPIという形になる。 変わったところでは、16bitのと9xのWindowsがAPIだけでなくDOSシステムコールなども そのままデバイスドライバへの要求に使えるというのがあった。DOS窓でDOSアプリケーションを 動かすための仕組みだが、副作用としてWindowsアプリケーションでもINとOUTなどができてしまう。 もちろん、そのIN/OUTはドライバが捕まえて、ドライバが代わりにやり直すんだけどな。 もう1つ、近頃はWindows用のドライバさえ用意すればよいという風潮で、 直接叩く方法が分からないハードウェアが多いというのも問題。
369 名前:デフォルトの名無しさん [2008/08/20(水) 15:26:40 ] >>368 何か複雑ですね out文をいろいろやったりするのが好きだったものです
370 名前:デフォルトの名無しさん [2008/08/22(金) 02:22:51 ] アセンブラまったくの未経験者の私に非常に困難な課題がかせられました。 それがこれです。 以下の2つのプログラムについて、各行の命令文を言葉化し、 (例えば、movw num, %cx なら"numの内容をCXレジスタに代入"とか) それぞれの行における、メモリ、aレジスタ、bレジスタ、cレジスタ、dレジスタの内容を示しなさい。 なお、ファイルはエクセルで作成すること。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7638.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7639.txt どなたか助けてくれませんか?お願いします… エクセルで作成せよとのことですが、内容がわかればメモ帳でもなんでも構いませんので。
371 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 04:22:00 ] こういうのは困難とは言わん。命令表みながらやれば小学生でもできる。 難読化もされてなけりゃ意地悪い箇所もない親切で読みやすいプログラムじゃないか。 面倒でも1命令づつ読んでいけ。この程度を読むのが嫌なら何もするな。
372 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 10:12:58 ] >>370 折角の課題なのに「勉強しよう」スレで勉強する気ゼロな依頼をするとはこれ如何。
373 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 21:54:19 ] Excelか・・ せんせいはきっと、 「分かり易く図や表を使ってね」 と暗に言ってるんだろう。そこを押さえればバッチグーだな m9(^Д^)
374 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 01:32:59 ] 普通にエクセルの表にするだけだろ 図が要るとは思えないが
375 名前:デフォルトの名無しさん [2008/08/23(土) 23:21:34 ] 質問です。 x86のeaxなど汎用レジスタの上位16ビットと下位16ビットを 入れ替える命令ってありませんでしたっけ?
376 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 23:26:51 ] rol eax, 16
377 名前:デフォルトの名無しさん [2008/08/23(土) 23:33:41 ] >>376 やっぱローテートでやるんですね。どうもありがとうございます
378 名前:デフォルトの名無しさん [2008/08/27(水) 15:57:58 ] ローテートは遅い
379 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:12:11 ] バレルシフタが載って以降は普通にできるんじゃない?
380 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:20:16 ] xchg ah, al
381 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:21:40 ] それ16ビットレジスタの上位8ビットと下位8ビットだから
382 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 09:36:05 ] 強引にxchgでやってみる。 xchg ah,al bswap eax xchg ah,al 普通に回した方が早いよなあ。
383 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 11:15:19 ] 手元の資料じゃローテートはシフトと同じレイテンシ/スループットになってる。 ネットバーストでの記述だからレイテンシ4サイクルだけどPenM以降なら1に戻ってるだろうな。
384 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:23:12 ] 004B4ADA . 81B8 98020000 >CMP DWORD PTR DS:[EAX+298],4349726F 004B4AE4 . 74 12 JE SHORT kuma.004B4AF8 EAXに入っている値+298のアドレスに入っている値とアドレス4349726Fの比較ですか?
385 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 11:40:58 ] 違う
386 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 07:33:28 ] TEST BYTE PTR SS:[ESP+8],1 MOV DWORD PTR DS:[ESI+4],0 MOV DWORD PTR DS:[ESI+8],0 MOV DWORD PTR DS:[ESI+C],0 JE SHORT ESP+8のアドレスの中身と1の論理積を取る 定数0を入れる ZF = 1 ならジャンプ これであってますでしょうか?
387 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:34:50 ] 何の石かちゃんと書いてくれ。 書いてないものは68K/Coldfireとみなすからな。
388 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 10:15:55 ] 68KにDS:なんてないだろ。
389 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 09:07:27 ] ないな。で?
390 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:15:40 ] >>386 プロテクトモードか? そのmovでフラグは変化しないからあってる。 と思う。
391 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:53:32 ] バイトでアセンブラやるんだけど、アセンブラて何
392 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:08:16 ] 機械語とほぼ1対1に対応するプログラミング言語の処理系
393 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:56:50 ] >>391 つーか、マルチすんな。
394 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 15:31:22 ] メインの組立ラインの横で部品を組み立てる仕事かもしれん
395 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 16:18:27 ] まさしくハンドアセンブラ?
396 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 09:48:21 ] 837C24 04 E0 : CMP DWORD PTR SS:[ESP+4],-20 この場合10進数で-20、-52、-32のどれでしょうか? あと、-20という定数はここだけでしか使われていなかったのですが こういう定数は主にどのようなケースで使われるのでしょうか?
397 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:49:54 ] >>396 何の石の何のアセンブラかを書かないとわからない。
398 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 22:15:51 ] >>396 224だか-32だか。少なくとも、-52なんてことは有り得ない。
399 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 12:34:44 ] コードがE0になってるからここでは-32が正解 一般的には16進の定数は 20h 0x20 $20 などの表記をすることが多い。
400 名前:396 mailto:sage [2008/09/24(水) 07:59:05 ] >>397 すいません。何のアセンブラか自分でもよくわからないです。 >>398-399 ありがとうです。
401 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 09:05:39 ] >>400 チート、割れ物は鼬害。
402 名前:デフォルトの名無しさん [2008/11/03(月) 19:30:27 ] 8個のスイッチからデータを入力し、そのデータが55Hとなった時に LEDすべて点滅するプログラムを作るにはどうしたら良いか? 解き方がわかりません!どなたか解き方を教えて下さい! また、上と同様に、スイッチのデータが10Hより大きい時 LEDのビット7が点滅し、スイッチのデータがOFHより 小さい時はLEDのビット0が点滅するプログラムを作る には、どうしたら良いか? こちらもお願いします!
403 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:38:19 ] コピペ君って馬鹿だな、まで読んだ。
404 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 02:48:39 ] 排他的論理和とゼロフラグだな。 下は教える気にもならんほど初級
405 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 03:22:39 ] >>402 書いてやってもよいが、せめて石と言語くらい書いてくれ。
406 名前:デフォルトの名無しさん [2008/11/04(火) 18:51:09 ] >>405 ぜひ、助けて下さい。 ↓ のような感じで、プログラムお願いします。 10 ORG 0100H 20PA EQU 20H ちなみに、アセンブラ言語・8255です。 30CR EQU 23H 40 LD A,98H
407 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 18:57:37 ] 8255はパラレルインターフェースなのだが。 だいたい、どうやってスイッチを読むのか、どうやってLEDの制御をするのかを 指定してくれなければ何もガイドできないぞ。
408 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:03:10 ] 初心者だからわかりません!そのくらいさっしてください!
409 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:22:09 ] >>406 左端の二桁の数字は行番号?
410 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:37:30 ] 昔、BASICのエディタを利用して入力するアセンブラ(行番号を無視する)とか あったけど、そういうのかなぁ?
411 名前:デフォルトの名無しさん [2008/11/04(火) 19:39:26 ] >>409 その通りです。行番号です。
412 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 22:30:20 ] まあ、順調にレポート落としてくれや 誰かが手助けできる程度の情報を提供できるようになってからまた来なさい
413 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 04:35:57 ] ORG 0000 LXI SP,0A000H ; RAMの末尾番地 JMP MAIN SW EQU 0E000H ; SWのMAPされる番地 LED EQU 0F000H ; LEDのMAPされる番地 ORG 0100h ; 飛ばした場所には割り込みベクタが置かれる 朝飯だから続きは後で
414 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:04:33 ] MAIN: LDA SW CMA ; 8bitパラレル入力は8255にDIPSW入力を仮定。負論理のことが多いのでここで反転 CPI 055H JZ ALLBLINK CPI 010H JC UNDER ; 10Hを引いてキャリー=0F以下。>>402 では10より大、0Fより小と言って ; いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。 LOOP1: ; ここが10H以上のとき。 MVI A,0FFH STA LED ; LEDにFF(All Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい MVI A,000H STA LED ; LEDに00(All On)をライト CALL DELAY JMP LOOP1
415 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:08:59 ] ごめん、上のはALLBLINKの処理だ。 LOOP1: ; ここが10H以上のとき。 MVI A,80H STA LED ; LEDに80H(bit7off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい MVI A,000H STA LED ; LEDに00(bit7 On)をライト CALL DELAY JMP LOOP1 ALLBLINK: ; ここが55Hと一致したとき。 MVI A,0FFH STA LED ; LEDにFF(All Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい MVI A,000H STA LED ; LEDに00(All On)をライト CALL DELAY JMP ALLBLINK
416 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:28:52 ] UNDER: ; ここが0FH以下(=10H未満)のとき MVI A,01H STA LED ; LEDに01(bit0 off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい MVI A,0FEH STA LED ; LEDにFE(bit0 ON)をライト CALL DELAY JMP UNDER DELAY: ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで LXI B,8 DELAY0: LXI H,0 DELAY1: DCX H MOV A,L ORA H JNZ DELAY1 ; 内側のloopが6clock*65536回回る。 DCX B MOV A,C ORA B JNZ DELAY0 ; 外側のloop8回で1秒ぐらい。 RET
417 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:37:10 ] >>415 の、LOOP1の所、bit7 offのパターンは LDA 0FFH (他のbitはoff) bit7 ONのパターンは LDA 07FH (他のbitはoff) の間違いでした。 本当は8253とかの外付けタイマをRST7.5に割り込み入れてソフトタイマを減算したほうが スマートなのだけど、402はそういう余計な情報を消化できないと思って、loopでディレイを 作りました。割り込みを使う方法も知りたければその旨書いてね。
418 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 17:16:49 ] ザイログニモニックでないとピンとこない・・・
419 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:05:19 ] なんという・・・書いてやってもいいけど、自分で翻訳できるでしょ。MOVがLD、ORAはOR A, とか もうすぐ朝飯だから、気が向いたら午後にでも書きにくるかも。
420 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:12:45 ] 宿題の人がザイログニモニックという単語を知ってるとは思えないが
421 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:53:40 ] 宿題の人のためじゃないけど、暇なので書いてみた。 ORG 0000 LD SP,0A000H ; RAMの末尾番地 JP MAIN SW EQU 0E000H ; SWのMAPされる番地 LED EQU 0F000H ; LEDのMAPされる番地 ORG 0100h ; 飛ばした場所には割り込みベクタが置かれる 16進4桁のportアドレスだと、たしかIN/OUTは A,(BC)とかを使うんだよね。 この先書いてる間に誰かフォローお願い。
422 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:02:45 ] MAIN: LD BC,SW IN A,(BC) XXX ; Aregの反転。負論理のことが多いのでここで反転 CP 055H JP Z,ALLBLINK CP 010H JP C,UNDER ; 10Hを引いてキャリー=0F以下。>>402 では10より大、0Fより小と言って ; いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。 LOOP1: ; ここが10H以上のとき。 LD A,0FFH LD BC,LED OUT (BC),A ; LEDにFF(All Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい LD A,0 LD BC,LED OUT (BC),A ; LEDに00(All On)をライト CALL DELAY JP LOOP1 コンプリメントのニーモニックが判らなくてゴメン。読む人はザイログ慣れてるでしょうから補って。
423 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:07:18 ] ごめん、上のはALLBLINKの処理だ。 LOOP1: ; ここが10H以上のとき。 LD A,0FFH LD BC,LED OUT (BC),A ; LEDにFF(bit7 Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい MVI A,07FH LD BC,LED OUT (BC),A ; LEDに7F(bit7 On)をライト CALL DELAY JMP LOOP1 ALLBLINK: ; ここが55Hと一致したとき。 LD A,0FFH LD BC,LED OUT (BC),A ; LEDにFF(All Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい LD A,000H LD BC,LED OUT (BC),A ; LEDに00(All On)をライト CALL DELAY JP ALLBLINK
424 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:56:53 ] UNDER: ; ここが0FH以下(=10H未満)のとき LD A,255 LD BC,LED OUT (BC),A ; LEDにFF(bit0 Off)をライト CALL DELAY ; 後で作る。たぶん1秒ぐらい LD A,0FEH LD BC,LED OUT (BC),A ; LEDにFE(bit0 On)をライト CALL DELAY JMP UNDER DELAY: ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで LD BC,8 DELAY0: LD HL,0 DELAY1: DEC HL LD A,L OR A,H JP NZ,DELAY1 ; 内側のloopが6clock*65536回回る。 DEC BC LD A,C OR A,B JP NZ,DELAY0 ; 外側のloop8回で1秒ぐらい。 RET
425 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:01:45 ] こんなのでよかったかな。今からアセンブルしてみる(先にやってから書けよw) Z80も今では作られてないだろうから、実際に動かすならZ80180か川崎の180かな。 バンクとか、幾つかの内蔵I/Oレジスタの初期化が要るはずだが、デフォが16bitリニアな アドレス空間になっていると思うので、デフォのままで動くのでしょう。
426 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:32:44 ] いっぱい書きミスがありました(w アセンブルリスト貼ると、' 'が詰まるんだろうな。 CSEG ORG 0000 0000 3100A0 LD SP,0A000H ; RAMの末尾番地 0003 C30001 JP MAIN E000= SW EQU 0E000H ; SWのMAPされる番地 F000= LED EQU 0F000H ; LEDのMAPされる番地 ORG 0100h ; 飛ばした場所には割り込みベクタが置かれる 0100 0100E0 MAIN: LD BC,SW 0103 ED78 IN A,(C) 0105 1EFF LD E,255 0107 AB XOR E ; Aregの反転。負論理のことが多いのでここで反転 0108 FE55 CP 055H 010A CA2901 JP Z,ALLBLINK 010D FE10 CP 010H 010F DA4001 JP C,UNDER ; 10Hを引いてキャリー=0F以下。>>402 では10より大、0Fより小と言って ; いるが、10/0Fと等しいときの処理が読みとれないので10以上と未満と解釈する。
427 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:33:44 ] 0112 LOOP1: ; ここが10H以上のとき。 0112 3EFF LD A,0FFH 0114 0100F0 LD BC,LED 0117 ED79 OUT (C),A ; LEDにFF(bit7 Off)をライト 0119 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい 011C 3E7F LD A,07FH 011E 0100F0 LD BC,LED 0121 ED79 OUT (C),A ; LEDに7F(bit7 On)をライト 0123 CD5701 CALL DELAY 0126 C31201 JP LOOP1 0129 ALLBLINK: ; ここが55Hと一致したとき。 0129 3EFF LD A,0FFH 012B 0100F0 LD BC,LED 012E ED79 OUT (C),A ; LEDにFF(All Off)をライト 0130 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい 0133 3E00 LD A,000H 0135 0100F0 LD BC,LED 0138 ED79 OUT (C),A ; LEDに00(All On)をライト 013A CD5701 CALL DELAY 013D C32901 JP ALLBLINK
428 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:35:13 ] 0140 UNDER: ; ここが0FH以下(=10H未満)のとき 0140 3EFF LD A,255 0142 0100F0 LD BC,LED 0145 ED79 OUT (C),A ; LEDにFF(bit0 Off)をライト 0147 CD5701 CALL DELAY ; 後で作る。たぶん1秒ぐらい 014A 3EFE LD A,0FEH 014C 0100F0 LD BC,LED 014F ED79 OUT (C),A ; LEDにFE(bit0 On)をライト 0151 CD5701 CALL DELAY 0154 C34001 JP UNDER 0157 DELAY: ; clockが書かれてないので、とりあえず俺のやってる3.072MHzで 0157 010800 LD BC,8 015A DELAY0: 015A 210000 LD HL,0 015D DELAY1: 015D 2B DEC HL 015E 7D LD A,L 015F B4 OR H 0160 C25D01 JP NZ,DELAY1 ; 内側のloopが6clock*65536回回る。 0163 0B DEC BC 0164 79 LD A,C 0165 B0 OR B 0166 C25A01 JP NZ,DELAY0 ; 外側のloop8回で1秒ぐらい。 0169 C9 RET 016A END ここからcopyしてスペースの所をタブに変えれば読めるリストに戻ります。
429 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 17:35:51 ] Z80の可能なニーモニックを片っ端から書いてRZ80してみてるんですが、EX AF,AF' って書いて *** missing quote syntax error ってエラーが出るんですよ。これどう書けばいいんだろ・・・
430 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:11:32 ] ハンドアセンブルしてDBで書く
431 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:29:54 ] take it easy >126 名前: デフォルトの名無しさん [sage] 投稿日: 2008/09/22(月) 15:54:58 >今日のわたしはモード2なのよ >ttp://www.youtube.com/watch?v=gpzCBUwU_Ys
432 名前:429 mailto:sage [2008/11/10(月) 04:56:57 ] EX AF,AF でエラー消えました。メッセージの意味が反対ですよね。 IN r,(C) とか、OUT (C),r って、A以外の諸レジスタもrに(文法上は)書けるのですが、 BやCを使うことはないし、D〜Lだってまず使わないですよね。なんでこんなこと許してるのかな。
433 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:45:58 ] inrやoutrのため。それと、(c)と言いつつ実はアドレスバスにはbcが乗るので、 I/Oポートアドレス空間を64KiBフルにデコードすることも可能といえば可能。 それを利用したのがSonyのHitBitじゃなかったかな。
434 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:05:41 ] >>432 ’〜で後ろの"'"が無いことになってるんだから別に間違ってなかろう。 EX AF,AF'だけ特別扱いするのはめんどいし。 rでA以外も受け付けるのは、その方が簡単だから。
435 名前:429 mailto:sage [2008/11/11(火) 05:01:14 ] >>433 INIRやOTIRのことですね? 連続したポートアドレスから幾つも読み書きするって 実機でそういう構成の奴はやったことないんですよね。どなたかありますか? >>434 missing〜って、quoteがありませんよ、という文句だと思ってました。あるのに・・・ Z80のほぼ全ての命令を書いてASMリストを取り、コードの頭でsortして>z80.dicに出して、 同様に作った8085.dicと見比べると、面白いですね。8080の命令は実行できるように作られた そうですが、けっこう違う所がありました。 8085 Z80 コード0F,1F RRC,RAR 無い RRC a、RR a で同機能の拡張命令がある コード2F CMA 無い コード30 SIM JR NC,xx コード3F CMC 無い コードC0 RNZ 無い コードC4 CNZ 無い コードC8 RZ 無い コードCC CZ 無い コードCB 無い bit操作命令の開始バイト コードCF RST 1 無い コードD0 RNC 無い コードD4 CNC 無い コードD8 RC 無い コードDC CC 無い コードDD 無い IXレジスタ操作命令の1バイト目 コードDF RST 3 無い コードE0 RPO 無い コードE2 JPO 無い コードE4 CPO 無い コードE7 RST 4 無い
436 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:49:52 ] 8085にあってz80にないのは二つだけ。RRCはz80拡張命令とではフラグの動きが違う。
437 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:13:56 ] >>435 普通は「'hoge'」と書かなきゃいかんのに「AF'」て書いたんで、 「'」が閉じてないがなといわれてるんですな。 IN[ID]R/OT[ID]RはCの値変わんないので、同じ所をどかどか読み書きするんですな。 で、OTIRはZ80DMAとかZ80SIOの初期化に使ってた記憶が。 あのへんは無駄に初期設定大変だったからなあ… なんて事を書いていたらZ80ファミリハンドブック読みたくなってきた。 どこにしまったかのう。
438 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:55:23 ] 私の机の上にあるよ。
439 名前:429 mailto:sage [2008/11/11(火) 11:03:31 ] >>436 435で書いた諸々の無い命令は、どんな書式になりますか? RST 1〜7はoperand errorになりました。return on condition とか call on condition とかも 書式が判りません。 今はコード照合しながら書いてない命令が無いかチェックしてます。
440 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:29:55 ] z80の命令表なんてぐぐればいくらでも出てくるのに 例えばこことか ttp://tomocyan.net/~kagurazaka/html/op_code_01.html
441 名前:429 mailto:sage [2008/11/11(火) 12:54:43 ] あ〜、これはいいものをありがとうございます。メモメモ・・・ RSTは番号じゃなくてマスクを書くんですね。
442 名前:429 mailto:sage [2008/11/12(水) 03:23:04 ] 全部の命令コードをアセンブルできました。>>436 の2つってどれのことですか?
443 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 03:31:56 ] >>442 rim, sim。それらのコードはz80では全く違うインストラクションに割り当てられている。 8085では8080にこのインストラクションを追加した仕様になっている。 面白いところでは、8085にもz80にもドキュメントされていない隠しニモニックが多数ある。 その辺りは、ますます8085とz80の互換性がなくなる結果になっている。
444 名前:429 mailto:sage [2008/11/12(水) 04:38:39 ] あ、ホントだ。JRとJR NC ですね。NR80ではrimとsimはDBで書いてました。 割り込みマスクのread/writeなんてごく一部のコードしか使わないから、 アプリ層だったら85のコードをZ80で実行するのはありですね。 でも実際には周辺ICも違うから、なかなかそういう場面はなさそう。
445 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:10:45 ] 現在8085の課題をやっているのですが 他の課題に負われ8085の方の内容がまったくつかめないままここまで来てしまいました 八方塞の状態でまったく出来ません(独自でやっていたのですがとてもでは無いですができそうではないです) とりあえず形になっていればいいのですが、提出が明日の午前11時が期限になっています もしよければ協力してくれる方いらっしゃいませんか(当方、かなり必死です…) 課題の内容 8085でデジタル目覚まし時計の作成をせよ ・タイマ割り込みは必須 ・設定した時間で音がなる ・複数のスイッチを入力する事で音が止まるようにする 以上の条件を満たす、フローチャートを作成し、プログラムを作成せよ
446 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:02:56 ] >>445 > 8085でデジタル目覚まし時計の作成をせよ > ・タイマ割り込みは必須 > ・設定した時間で音がなる > ・複数のスイッチを入力する事で音が止まるようにする 回路図とかあるんかい?
447 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:04:36 ] >>446 無いです フローチャートを作成して それに乗っ取ったプログラミングをすることが課題となっています
448 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:12:02 ] >>446 うんじゃ、以下の質問に答えれ o タイマり込みって何をどう叩いて割り込ませるの? o 音って何をどう叩いて出てくるの? o スイッチってどこを読めば ON/OFF 判定できるの?
449 名前:445 mailto:sage [2008/11/12(水) 22:20:05 ] >>448 ちょっと待っていてください 全部答えられるかわかりませんが 参考になるだろうプログラムがあるのでちょっとアップしてみます
450 名前:445 mailto:sage [2008/11/12(水) 22:43:22 ] >>448 パスはsageです ttp://www.uploda.org/uporg1780635.zip.html 中に説明も書いておきましたのでよろしくお願いします 中にも書いていますが今夜は徹夜でいる予定ですので何時でも質問してくださって大丈夫です
451 名前:デフォルトの名無しさん [2008/11/13(木) 02:42:33 ] さっき起きたが、もう流れてる。とりあえず、手持ちのASMから使えそうなとこ拾ってあげる。 ファイルabs.asm=cのmainに飛ばすための初期化コードから: CSEG ORG 0000h LXI SP,0A000h ; RAMの末尾番地 JMP MAIN ; cのmainに飛ばすにはc_main_ ORG 003Ch ; RST7.5の割り込みベクタの番地 JMP TIMER ; 8253という石をつなぎ、ここに割り込みを入れるよう設定する
452 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:51:00 ] P53_0 EQU 0F000h ; 8253がMAPされるアドレス空間 P53_1 EQU 0F001h P53_2 EQU 0F002h P53_3 EQU 0F003h MAIN: ; main loopの開始 /* 8253初期化 */ P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */ P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */ P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */ /* mode3だと方形波が出るだけなので、カウンタ2はmode0にして割込み を使う方が正論だが、カウンタ2出力先の8085のRST7.5がエッジトリガ- なのでmode3(方形波)でうまく行く。CPUによってはmode0を 使わなければならないが、その時は割込み処理でカウンタ2をリロード しなければならない。 */ P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */ P53_2 = 30720 >> 8; /* カウンタ 2 MSB */ /* 3.072MHz/30720 = 100Hz ( 10mS毎 ) */ RST7.5割り込みを使う理由はコメントを読んでね。このcコードと同じ意味のASMは書ける?
453 名前:455 mailto:sage [2008/11/13(木) 02:52:13 ] >>451 ありです とりあえず再うpしました ttp://www.vipper.org/vip988437.zip.html
454 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:54:42 ] メインループの概要: >>452 のように8253を初期化 時刻メモリを00:00:00に設定 loop: SWを読む SWの時刻とメモリが一致したら音を鳴らす/または止める loopへJMP
455 名前:455 mailto:sage [2008/11/13(木) 02:58:44 ] >>452 >このcコードと同じ意味のASMは書ける? ちょっと辛いと思います・・・orz
456 名前:455 mailto:sage [2008/11/13(木) 03:00:27 ] >>454 ああ、非常にわかりやすいです ありがとうございます
457 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:04:23 ] ざっと読んだ。ORGのアドレスとかは>>453 の環境のように直せるよね? CSEGは、リンカで再配置するための命令で、ASEGはASMが吐いたオブジェクトをそのまま 実行アドレスにするためなのは理解してる? 今回は音は単なる断続音でいいと思うから、MUSICのテーブルMUSIC:の所を、 音・休符のくり返しにしておけばいい。
458 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:10:21 ] >>455 しょ〜がねーなあ・・・ P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */ MVI A,036h STA P53_3 P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */ MVI A,076h STA P53_3 P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */ MVI A,0B6h STA P53_3 P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */ MVI A,0FFh STA P53_2 P53_2 = 30720 >> 8; /* カウンタ 2 MSB */ MVI A,30720/256 STA P53_2
459 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:17:02 ] >>457 >ORGのアドレスとかは>>453 の環境のように直せるよね? 試行錯誤してみますが即時にはちょっと辛いかもしれません >>458 あまりの優しさに。・゚・(ノД`)・゚・。
460 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:18:35 ] cのコメントを; にしてASMに振ってね。 なかなか本題に入れないな(w TIMER: ; 8253をつないで上のように初期化すると、10mSごとに割り込みが発生し、ここにジャンプしてくる ; 8253は___|~~~|___|~~~|___|~~~・・・という信号を出し、これの立ち下がりエッジを8085は割り込みと認識する訳。 PUSH H PUSH D PUSH B PUSH PSW (割り込み処理本体) POP PSW POP B POP D POP H ; メインで使っているレジスタをこういうpush/popで保護する。順序は判るよね? EI ; 割り込んだときいったんDI状態になるのでそれを回復(また割り込み可能に) RET ; 割り込んだ次の番地(メインのどこか)に復帰 こういうのが割り込み処理プログラミングの基本的なお作法です。
461 名前:445 mailto:sage [2008/11/13(木) 03:22:32 ] >>460 了解しました
462 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:23:48 ] 俺の環境は、プログラムのコード(実行命令部)はROMの0番地から、RAMは0A000番地〜 数`バイト、という物なのでORG 0000hになってるわけ。>>455 の環境はASMの吐いたコードを RAMにロードして実行させる環境なのではないかと思う。ORG 8000hとか書かれてるから。
463 名前:445 mailto:sage [2008/11/13(木) 03:28:02 ] >>462 >RAMにロードして実行させる環境なのではないかと思う はい、その通りです
464 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:32:33 ] 割り込み処理本体: TIMER1: DS 1 ; soft couter 1 100回をカウントし、1秒を作る SEC: DS 1 ; 秒カウンタ MIN: DS 1 ; 分カウンタ HOUR: DS ; 時カウンタ 変数としては最低限、この位は必要だね。 CSEGは上でも書いたけどROMにロードさせるためのアセンブラ命令なので、 >>455 はASEGで書き始めればいい。
465 名前:445 mailto:sage [2008/11/13(木) 03:42:01 ] >>464 了解です
466 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:51:44 ] 割り込み処理本体の実行部: TIMER1を減算、0になったらまた100を入れる。(MAINの初期化時に100にしておくべき) 0になったときが「1秒ごと」だから、その時に 秒を加算、59を越えたら、0に戻し、 分を加算、59を越えたら、0に戻し、 時を加算、23を越えたら、0に戻す(日付までやるとえらいことになるぞ。) 時分秒を(表示器があれば)表示器に表示。 (これは割り込み中にやらずに、メインループに対しフラグで通知して、メインループで 表示してもらう手法が一般的だ。こういう情報(割り込みからメインループに伝える情報) が「イベント」という概念で教えられているものだ。 時刻そのものではなく、「表示が必要だよ」という情報ね。 割り込み処理では時刻を変更する、メインではそれを読みとるのみで変更はしない。) 音が鳴っている状態であれば、音用のポートのON/OFFを切り換える (これで、警報音の断続が制御できる) 段付け毎にcのif文=ASMならCPI 、JCかJZかJNZで分岐が必要なのは判るよね。 時分秒は00:00:00〜23:59:59だから、SW入力は8bitのDIPSWか何かが3器つながる必要がある。 その辺は455の環境に合わせてI/Oの番地を書いてね。 プログラムの基本構成はこれで伝わったとおもう。全部書いてあげるのじゃカンニングみたいだし、 そろそろ朝飯食って出勤なので、ここまでにしたい。
467 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 03:55:49 ] 思い出した。毎年今頃に8085の質問投げてくるkitの学生か?
468 名前:445 mailto:sage [2008/11/13(木) 03:56:42 ] >>466 お疲れ様でした 大変、助かりました これを元に頑張ってみます 本当にありがとうございました
469 名前:445 mailto:sage [2008/11/13(木) 03:58:14 ] >>467 kitは大当たりですw 前例いたんですねw
470 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:19:35 ] 工芸繊維大!?
471 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:56:22 ] どこだ?九州工業大学か?
472 名前:467 mailto:sage [2008/11/15(土) 04:20:18 ] 上の方で誰かがkitって書いてたんだが、俺もkitが何なのか知りたいな。
473 名前:467 mailto:sage [2008/11/15(土) 04:34:12 ] あ(*o*) Kyuusyuu Institute of Technology か
474 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 09:45:04 ] 金馬鹿工業大学
475 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:30:34 ] Knight Industries Two Thousand
476 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 18:55:09 ] お邪魔します。基本情報処理試験(午後 アセンブラ)の問題集を解いているのですが 解らない問題で行き詰りました。 こちらで教えて頂ますでしょうか? スレ違いでしたら申し訳ございません。(CASLU 福嶋宏訓 著)
477 名前:467 mailto:sage [2008/11/19(水) 17:54:40 ] スレチじゃないけど、俺は85得意だがCASL音痴なんでお役に立てない(m_ _m)
478 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 06:50:58 ] 教えてください。 MASMを使用したいのですが、現在PCにインストールされている Visual C++ 2008 Expressには、付属していないようですので www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64&DisplayLang=ja このMASMをDLしてインストールしようとしました。 しかし、インストールしようとすると「Visual C++ 2005 Express Edition required」 というメッセージが出てインストールできません。 どうすればMASMを使えるようになるのでしょうか。
479 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 07:18:25 ] ダウンロードしたzipを強制解凍してくと〜〜ml_exe〜〜というファイルが出てくる。 これがml.exe本体だから適宜リネーム。
480 名前:478 mailto:sage [2008/11/23(日) 07:23:50 ] ありがとうございます。 しかし、なぜこんな面倒なことせにゃならんのでしょうかね。 MSはアホなのでしょうか。
481 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 08:18:26 ] つーか、VC++2008EEならそんな面倒なコトしなくてもSP1あてれば ml ver9が勝手に入んないか?
482 名前:478 mailto:sage [2008/11/23(日) 08:51:08 ] with SP1なるものが出ていたんですね。今から入れ直します。どうもです。
483 名前:デフォルトの名無しさん [2008/11/23(日) 18:04:37 ] c言語のscanfと同じようなことをアセンブラで実行したいんですけど どういうプログラムを書いたらいいか分かりません どなたかヒントください
484 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 18:49:42 ] Cのscanfをアセンブラから呼べばいい。
485 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 18:50:15 ] >>483 地道に解析するしかない。
486 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 23:04:55 ] アセンブラって、書くのは労力いりそうですが、習得するのは簡単 ですよね?C言語とかよりも。
487 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 23:07:18 ] プロセッサによる。IA64のアセンブラは死ぬるぞよ。
488 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 23:07:51 ] x86は?
489 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 04:54:02 ] >>483 「可変個の引数リスト」 を扱うってとこがミソかな。 引数リストの場所を覚えておくポインタを設ければいい。cではそのような書き方をしてるはず。
490 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 10:17:20 ] インラインアセンブラを使う場合に _asm{}と__asm{}と2種類を見かけたのですが、どう違うのでしょうか。
491 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 13:47:53 ] >>488 IA64よりは簡単。VLIWのアセンブラは人間が書くものじゃねえ。 まあ32bitでRing3だけなら簡単な方じゃないかと思う。 >>490 書き方。
492 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 20:41:41 ] IA-64はバンドルに無理やり詰め込まなければ難しくない。
493 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 21:51:34 ] IA-64というかItaniumって、けっきょく商業的には失敗作なんでしょ? 消えゆく運命か?
494 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 00:09:38 ] HPC用途でもうしばらくは・・・ まあ、そもそもアセンブラでガリガリ書くようなプロセッサじゃないし
495 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 08:32:10 ] とりあえず漠然とアセンブリを学習する場合は、16ビットプログラミングが 初心者にはいいの? 32ビットでも変わらない?
496 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 09:30:17 ] 実行環境を確保できるものにしとけ。
497 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:24:25 ] MS-DOS はアセンブリ言語勉強するのにいい環境だったな・・・。 割り込みとか簡単にできたし。
498 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 17:36:49 ] 16ビットっていうと今では無用なセグメント方式とか思い出すな
499 名前:デフォルトの名無しさん [2008/11/26(水) 18:26:22 ] Linuxとかだとアドレッシングにセグメント機能通してるし、方式自体は生きてるけどなあ・・ でもいつまで残るんだろね。 Intelがそれを望む限り続くんだろうけどさ。
500 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:17:20 ] Linuxってどこでセグメントレジスタ活用しているの? 4GBフラットアドレスに設定しているだけだと思うのだが。
501 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:19:41 ] >>500 >4GBフラットアドレスに設定しているだけだと思うのだが。 え?そこで使ってるじゃんセグメントレジスタ。
502 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:20:30 ] だったらWindowsもそだね
503 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:22:09 ] Win2Kまで使えたOS/2 1.x 互換モードが何気に変態ぽくて好きだったな。
504 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:25:05 ] フラットに使うだけだと「活用」してるとは言えないな。 32ビットCPUでメモリ空間を拡張するカーネルオプションとか あったような気もするけど...
505 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:35:37 ] >>501 それいったら、どうやってセグメントレジスタ抜きでx86を使うの。 64ビットモードならセグメントレジスタ無視が基本だから、使っていないと言えるだろうけど。 そういえば、x86-64はAMD発だから、 Intelはセグメントレジスタ潰したいのだろうと言う根拠に使うのは苦しいな。
506 名前:デフォルトの名無しさん mailto:saeg [2008/11/26(水) 19:56:47 ] x86版のWindowsは構造化例外処理にセグメントを思いっきり使っているが
507 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:00:52 ] いつの間にか追加され忘れ去られてしまったFSとGSのこと、時々でいいから思い出してください。
508 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:32:34 ] FSは例外で使われてるね
509 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 22:02:34 ] FSとGSはほんとに気が付いたらあった感じだね 386以降だっけか
510 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 22:18:21 ] Windowsのカーネルで使用するKPCR構造体はx86ではFS、x64ではGSを使ってアクセスしているよ。
511 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 23:02:29 ] GSって自由に使ってもいいの?
512 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 23:15:13 ] 何をしたいのか環境によるっしょ
513 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 01:51:03 ] 486から後のセグメントの意味と、386から前のセグメントの意味を混同している奴は恥ずかしいぞ。
514 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 02:11:51 ] すまん386と486の間のセグメントの違いはわからん。 リアルモードとプロテクトモードの違いのことじゃないよね?
515 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 02:34:49 ] それって、386以降のプロテクトモードでのメモリー空間マッピング機能とか領域保護機能のためのレジスタになったってやつ?
516 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 05:48:17 ] 513は恥ずかしい奴。
517 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 11:02:24 ] 513は386と286と言いたかったのだと思われ。 リアルモードとプロテクトモードと言い換えてもいいか。
518 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 11:15:39 ] 286にも16bitプロテクトモードなんていうものがあって、186と286の間ではないかと。
519 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 11:24:28 ] GS, FSセグメントレジスタの使用、アドレッシングを目的を除く32Bitレジスタの使用は、 386以降ならリアルモードでも仮想86でも可能。 もちろんこのモードでのセグメントレジスタは伝統的な4ビットシフト型となる。
520 名前:デフォルトの名無しさん mailto:saeg [2008/11/27(木) 12:01:43 ] リアルモードに戻った直後のセグメントレジスタ更新前なら プロテクトモード時に設定されたアドレスにアクセス可能
521 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:51:31 ] 4Gリアルモードとか呼ばれてる奴ですな
522 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 14:18:52 ] いい加減、モード大杉
523 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:54:15 ] 今でもSSとCSを別にしているOSがあると聞いたことがある。セキュリティ上の理由で。 詳細は知らんが。
524 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:10:15 ] Windowsがアプリケーションのメモリ空間の拡張にAWEなんてやっていたけど、 そんなことするくらいならセレクタ復活させたらいいのにと思っていた。
525 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 21:52:51 ] >>523 Windowsのカーネルモード時のセグメントセレクタの基本値 cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 CS!=SSですね。 >>524 それじゃAWEのかわりにならんだろ。
526 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 22:03:31 ] >>525 セレクタが違ってもディスクプリタが同じ領域をポイントしてる可能性もあるのでは。
527 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 22:41:20 ] >>523 Linuxとかそこらへん向けにそういう実装があったな、名前忘れたが。 4G全域でなく、必要な部分だけにきっちりセグメント範囲を限定することで 想定外のアクセスでフォルト起こすようにするんだったか。
528 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 01:36:24 ] >>522 だって互換性が・・・。
529 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 03:06:03 ] 互換を言うならx64のロングモードに仮想86を復活汁
530 名前: ◆0uxK91AxII mailto:sage [2008/11/28(金) 05:02:04 ] >>525 >>526 手元にあるW2kのkernelModeだと、同じ場所を示していた。 CS:0008 SS:0010 DS:0023 ES:0023 FS:0030 GS:0000 GDT base:80036000 limit:03ff 0: 00 00 00 00 00 00 00 00 1: 00 cf 9b 00 00 00 ff ff 2: 00 cf 93 00 00 00 ff ff 3: 00 cf fb 00 00 00 ff ff 4: 00 cf f3 00 00 00 ff ff 5: 80 00 8b 2c 10 00 20 ab 6: ff c0 93 df f0 00 00 01 どうでも良い事だけどね。
531 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 09:50:53 ] アセンブリの入門書を2冊持っているのですが、どちらも実数定数に ついては、簡略・割愛しているのですが、実数定数は初心者には 複雑なのでしょうか? 実数の計算できないとお話にならない気もしますが…
532 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 10:01:44 ] 複雑です 浮動小数点が必要な場面でアセンブラを使うような人なら そのあたりの情報はだいたい見つけられます
533 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 10:50:32 ] >>531 何のアセンブラかにも拠るからねぇ。定数ロードのインストラクションを持つチップもあることだし、大した話じゃないけどね。 >>532 それは、フォーマットが複雑だといっているのか?
534 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 11:15:53 ] >>533 入門書を読んでる人にとっちゃ、いろんな意味で複雑でしょ 一通り分かった人ならともかく
535 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 12:36:20 ] アセンブラ使いが実数? 何を頓珍漢な事言ってるんだ?? 実数演算が必要な所では計算式も煩雑だろうに 素直に高級言語使ってろって話だと思うがな。
536 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 12:40:33 ] 例えばこんなコードなら複雑でもなんでもないじゃん。 # 実在するかは兎も角 invPi: ld rf0, #1.0 ldpi rf1 div rf0, rf1 ret >>535 そうは言うがな大佐、読める能力はあるに越したことはないと思うぞ。
537 名前: ◆0uxK91AxII mailto:sage [2008/11/28(金) 13:55:39 ] 例えば、100.0を掛ける場合、この値をどう書くかとか、そういう辺りだろうね。
538 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 14:52:44 ] アセンブラが実数をサポートしていないなら諦める。
539 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 14:54:24 ] CPUやアセンブラを限定しないと答えようが無いうえ、定数が何を指してるかもあいまいかな。 1.実数計算機能が無いCPU 2.実数計算機能があり、直値のロードができないCPU 3.実数計算機能があり、直値のロードが可能なCPU と分けるとx86系は2になるので、x86で定数は静的なデータとして定義する必要がある。 .DATA hoge REAL8 10.12345 .CODE FLD hoge FLDPI ; 円周率の定数ロードは専用命令があったりする。
540 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 19:44:11 ] x86 の実数計算は、浮動小数点レジスタの扱いがすげー面倒なので覚えてないわ・・・。 SSEx 使った方が楽なんじゃないか。
541 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 23:39:33 ] >>539 ボクの486SXマシンじゃ実行出来ません ><
542 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 00:34:00 ] >>541 Win9xやNTのWin32アプリならx87のエミュレーションやってくれる。 >>540 XMMをスカラで使うと何か損した気分になる。
543 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 11:03:27 ] MS-DOSでアセンブラするには16ビット版リンカってのが必ずいるの?
544 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 11:17:51 ] いるよ〜。 アセンブラはVS2008についてくるWin32用のでいけるけどね。
545 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 11:50:46 ] どうもです。 lnk563.exeなるものを調達してきて、その中からlink.exeを取り出しました。 試しに実行ファイルを作ってみようと、ml ver9とそのlink.exeをasmファイルの あるディレクトリにぶちこんで ml /omf ???.asm と打ち込んだら、アセンブルは完了したのにリンカが自動呼び出しさせません。 なぜでしょうか。
546 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 12:24:51 ] >>545 >リンカが自動呼び出しさせません って、実行のことか?
547 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 12:40:35 ] 32bit用と16bit用でLinkの引数の書式が違うから、呼び出す前に互換があるか確認してるのかも。
548 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:03:56 ] /omf オプション自体が /cと同じでlinkerの呼び出しを行わなくする作用がある。
549 名前:545 mailto:sage [2008/11/29(土) 13:10:02 ] 確かに、32ビットリンカだと、mlコマンド打てば自動で呼び出されますね。 ただし、OMF形式でなくて、COFF形式でオブジェクトファイルを作成する 必要がありますが…。 16ビットの場合はOMF形式じゃないとだめらしいのですが、それで作っても リンカは呼び出されません。自前で全部引数入れなきゃだめですかね。
550 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 18:37:46 ] ダメです。ちゃんとmakefileを作るか諦めてバッチでどうぞ。
551 名前:545 mailto:sage [2008/11/30(日) 00:52:02 ] そうですか、どうもです。
552 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 12:10:42 ] 突然ですが、レガシーなDMAコントローラを使う場合、 CPUのキャッシュとDMAによる物理メモリへの書き込みとを同期させる には、far jmp 命令を実行すれば良かったんでしょうか?
553 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 14:56:45 ] x86でのDMA転送は、I/O Agent が勝手にsnoopして、物理メモリとキャッシュ と同期する、という噂がありますが、正式な資料がどこかにありませんかね。 IA-32 Intel Architecture Software Developer's Manualの Volume 3「System Programming Guide」 の 9.3.2節の以下の 部分に何となく書かれていますが、「できる(can performe)」ことと 「実際にそうなっている」事とは別ですから。 9.3.2. Choosing a Memory Type The simplest system memory model does not use memory-mapped I/O with read or write side effects, does not include a frame buffer, and uses the write-back memory type for all memory. An I/O agent can perform direct memory access (DMA) to write-back memory and the cache protocol maintains cache coherency.
554 名前:a mailto:age [2008/12/02(火) 15:06:54 ] age
555 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:04:07 ] >>553 ハードの実装次第
556 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:59:39 ] >>552 far jmpはパイプラインが捨てられるだけだ。 キャッシュきれいにしたけりゃwbinvdあたり使わねば。
557 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 01:47:07 ] >>556 自己書き換えコードの直後に jmp するというのはキャッシュ・クリア ではなくパイプライン・クリアでしたっけ? 言われてみれば、データ用のキャッシュは、CPU自身の書き換えでは 整合するに決まってますね。
558 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 01:53:55 ] >>555 PCIは、あるデバイスがマスターになって、メモリに転送する機能が 定められている。Legacy DMAは、ISAバスに繋がっているが、ISAバスは ISA-PCIブリッジによってPCIバスに繋がっている。 Legacy DMA転送は、PCIのこの転送機能を利用しているのだろうか?
559 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 02:16:42 ] >>558 そりゃブリッジがバスマスタになってごにょごにょしなけりゃ、 DMAにならんだろう。
560 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 07:53:34 ] >>559 PCIバスマスタ転送は、自動的にチップセットによってsnoopされ、 CPU内部のキャッシュと同期が取られるはずなので、 Legacy DMA 転送も、CPUの内部キャッシュと勝手に同期される ということで正しいのだろうか。
561 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 09:34:17 ] されなきゃ8237直に叩くような行儀の悪いコードが 動かなくなってしまうのではないかと。 ISAのバスマスタなんてとんでもないモノは無理だと思うが。
562 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 10:03:45 ] >>561 てっきり、仮想8086モードでjmp far ptrを行うと、キャッシュや パイプラインなどが実メモリと同期される性質(未確認)を使っているの かと思ってますた。 チップセット内蔵の8237同等パーツは、今でも実メモリに直に繋がっている ようにエミュレートされているのかと思ってましたが、そうではないの かも知れませんね。 今は、絶対に、PCIのバスマスタ転送を利用していて、勝手にsnoopされて いるんだという明確な証拠が欲しいですが。
563 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:02:23 ] 少なくとも論理的にはPCIデバイスの先につながっているようになっている。 ちなみにキャッシュは気にする必要がない。そうでなければ既存のOSが動かなくなる。
564 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 06:21:42 ] >>563 便乗質問ですが、この場合CPUからの書き込みも何も気にする必要がないんでしょうか? それともドライバーで何かの処理(DMAの領域はキャッシュ不可(ライトスルー)にする 等)が必要でしょうか? ちなみにむかーし自分がm68kの乗ったマシンのドライバを書いた時はその手の処理を したように記憶しています。今どき(?)のx86 & PCIのドライバに関してこの辺の知識を 得たいと思ったら何かお勧めの書籍等ありますかね?
565 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 14:18:11 ] ちょっと質問しまつ 使うアセンブラはyasm 汎用32ビットレジスタは eax,ebx,ecx,edx とかあるけど 汎用64ビットレジスタって rax,rbx,rcx.. .とか先頭にrを付けるのでいいのかな
566 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 14:43:38 ] ドキュメント読まないYUTORIか
567 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:59:37 ] >>566 読まないんじゃなくて読めない ゆとりです
568 名前:565・567 mailto:sage [2008/12/10(水) 21:48:48 ] 自己解決しますた nasmのドキュメソトにレジスタ名載ってますた >>566 d
569 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:34:33 ] ARMなんですが,実行ファイル(ELF)を無理矢理で良いので アセンブラの段階まで書き下してくれるようなソフトってすでにあったりしませんか? FF DE FF E7 FF DE ・・・・・・ ↓ bx lr なんていうかこんな感じで
570 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:50:02 ] >>569 あったな、あった。 昔はそんなの沢山あったな。 まあ、難しいもんでもないから自分で作ってみたら? データとプログラムの区別とか、ジャンプテーブルの解釈がミソだぜ。
571 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:50:36 ] objdump -D
572 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 16:44:55 ] win32+VC++で、逆アセした関数をC++に組み込むのに安全で手っ取り早い方法を教えてケロ
573 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 17:02:33 ] MASMで書いてリンクじゃ駄目なの?
574 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 19:32:32 ] >>572 違法行為やめろ
575 名前: ◆0uxK91AxII mailto:sage [2008/12/19(金) 19:48:25 ] 途中でdisassembleしている辺りが、被効率的杉で、ハナシにならない。
576 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:28:38 ] >>574 なにがどう違法行為なんだかw もうすぐ合法になって、契約による縛りも無意味になるご時世だというのに。
577 名前: ◆0uxK91AxII mailto:sage [2008/12/19(金) 20:40:06 ] 被 -> 非 VirtualAllocで確保して、書き込んで、呼べばokな気がするする。
578 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 01:18:10 ] それだと使いたい所が空いてなかったら困らんかい? 適当にもらってから頑張って再配置とか。
579 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 10:52:50 ] >>577 それじゃ命令内のアドレスが無茶苦茶だろ。
580 名前: ◆0uxK91AxII mailto:sage [2008/12/20(土) 10:58:24 ] (゚Д゚)ハァ? バカは死ね。
581 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 11:00:48 ] 絶対ジャンプや静的変数の扱いをどうすんの。
582 名前: ◆0uxK91AxII mailto:sage [2008/12/20(土) 11:04:14 ] 関数に、そんなモノは無い。
583 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 11:05:50 ] ゚o゚
584 名前: ◆0uxK91AxII mailto:sage [2008/12/20(土) 11:14:57 ] 572が想定している関数に、そんなモノは無い。 ...と書くべきだったか。
585 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 11:22:07 ] もちろん無いなら問題ないんだが、 どうして何の情報も出してない572の想定が分かるのだろうか。
586 名前: ◆0uxK91AxII mailto:sage [2008/12/20(土) 11:25:37 ] 『手っ取り早い』という条件があるからね。 とにかく、バカは死ね。
587 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 13:22:16 ] ・・・これはひどい。
588 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 11:56:49 ] 取り敢えず、>572が諦めれば済むな。
589 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 20:09:21 ] アセンブラを安全に使うなんて、無理だろ。つうか使う意味が無い。 危険だけど好きな事が出来るのがアセンブラの醍醐味なんだからな。
590 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 08:24:12 ] 危険つっても攻殻機動隊の世界みたく脳が焼かれるわけじゃなし
591 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:03:18 ] 無茶すりゃOSに怒られるしなあ…
592 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 15:45:23 ] MS-DOS の時代に比べれば、みんな安全なプログラムだよなぁ。
593 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:31:13 ] そうだねえ。 ハード叩きまくりだったからなあ。 再起不能になって修理するハメになったり…
594 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 00:52:29 ] 32ビットは対象外かな?
595 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 01:00:40 ] いくらでもOK
596 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 08:44:52 ] アセンブラ勉強ならmasm使うべき
597 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 01:21:28 ] x86が基本ってことはないと思うが・・。
598 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 07:11:30 ] 目の前にあるじゃない
599 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 09:01:18 ] 基本中の基本ということなら68000かな。
600 名前:,,・´∀`・,,)っ-●◎○ [2008/12/29(月) 09:11:44 ] そこはMMIXwareだろう