アセンブラを勉強しよう
at TECH
1:1 ◆LrnSVKDHBg
07/03/03 19:00:32
俺が一からアセンブラを勉強してやる!!!!!!
2:デフォルトの名無しさん
07/03/03 19:02:43
LDA 1
3:デフォルトの名無しさん
07/03/03 19:03:24
>>2
すいませんわかりませんwwwwwwwww
4:1 ◆LrnSVKDHBg
07/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:デフォルトの名無しさん
07/03/03 19:08:50
アセンブリ言語じゃないのか?
6:デフォルトの名無しさん
07/03/03 19:11:09
cpuは??
7:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/03 19:12:17
500番地と501番地の内容を足して、502番地に書き込む。
lha $500
clc
adc $501
sta $502
9:1 ◆LrnSVKDHBg
07/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:デフォルトの名無しさん
07/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
07/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
07/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
07/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:デフォルトの名無しさん
07/03/03 19:36:18
たいへんです!
ぜんぜん汎用レジスタが足りませんorz
15:デフォルトの名無しさん
07/03/03 19:37:54
EXX
16:デフォルトの名無しさん
07/03/03 19:38:10
その昔、BASE80と言うものがあってな、ゲフンゲフ
構造化マクロっちゅーものもあってな、ゲフ
17:1 ◆LrnSVKDHBg
07/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
07/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:デフォルトの名無しさん
07/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
07/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
07/03/03 19:49:48
>>19
64ビットかよwwwww
22:1 ◆LrnSVKDHBg
07/03/03 19:54:28
さてまずは
MOV DWORD PTR SS:[ESP+4], EDXの意味がわからない
これはULONG型のPTR(?)のSSレジスタのESP+4(アドレスだと思う)にEDXの
値を代入?って意味でいいんだろうかwwwwwww
そもそもPTRってなんだよちくしょうが!!!!!!
23:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/03 20:02:44
間違えた。
push命令
push eax
esp -= 4;
*esp = eax;
か。
25:1 ◆LrnSVKDHBg
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/03/03 20:07:46
>>23
なるほど参考にさせてもらいます。
29:1 ◆LrnSVKDHBg
07/03/03 20:11:30
MOV EDX モジュール名.00408AA0というのは恐らくモジュールの
メモリのアドレスの中身を示しているのかな?
後LEA命令ってのがよくわからんが・・
30:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/03/03 20:17:11
>>30
signedつきかつきじゃないかで変換される機械語が違ってくるのか
LEAはアドレス代入って奴か
ESP = 0x0012F9E8
LEA EAX,DWORD PTR SS:[ESP+4]という命令があるとすると
ESPの値が0x0012F9ECになるって事なのかな恐らく。
33:1 ◆LrnSVKDHBg
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/03 20:26:46
>>30
signed か unsigned かで機械語が変わってくるかどうかはコンパイラ依存。
あまりあてにはしない方がいい。
36:デフォルトの名無しさん
07/03/03 20:28:54
>>33
この程度のポインタを理解できないようで
C 使いというのもどうかとは思うが、
まあアセンブリ言語を使う事によって
ポインタに対する理解も深まるだろう。多分。
というか、全然ポインタ分かってないな。
このキャストでアドレスは変わんないよ、普通の環境なら。
37:デフォルトの名無しさん
07/03/03 20:30:50
まあ、何というか、C を通して勉強しない方がいいと、俺は思う。
だって、C じゃ表現しきれない事だって多いし、
C の理解がその程度じゃむしろ誤解しそうで怖い。
おとなしく、本でも読んだ方がいいと思うぜ。
38:1 ◆LrnSVKDHBg
07/03/03 20:33:39
>>34
ものすごく漠然とだが見えてきた気がするw
配列に値を格納して言ってる感じかぁ
>>35
その辺の処理系についてはまだ俺には遠い世界。。
>>36
バカヤロウ!!!この程度のスキルしかないから勉強してるんだろうが!!!!!
39:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/03 20:45:24
間違えた。最後のは
mov dword ptr [eax], edx
|0x12031000|0x12031001|0x12031002|0x12031003|
| edx |
な。
まあ、分かるとは思うが。
41:デフォルトの名無しさん
07/03/03 21:03:44
英語だけど、このあたりのマニュアルが有用。
URLリンク(www.intel.com)
42:1 ◆LrnSVKDHBg
07/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:デフォルトの名無しさん
07/03/03 21:08:38
char** は char* へのポインタだよ。
char **pAddr;
char *string = "asm";
pp = &string;
pAddr は string のアドレス。
*pAddr は string と同じ。
**pAddr は 'a' 。
44:デフォルトの名無しさん
07/03/03 21:09:18
間違えた。
pAddr = &string;
だ。
45:デフォルトの名無しさん
07/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
07/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
07/03/03 21:42:40
>>45
おおおおおお!!
なんとなくつかめた気がする!
これで最強に一歩近づいたな。
48:1 ◆LrnSVKDHBg
07/03/03 23:35:49
ESI = 0x00000026
SAR ESI, 1
が何でESI = 0x00000013になるんだろう。
49:1 ◆LrnSVKDHBg
07/03/03 23:41:41
16進じゃなくて10進の26だった
50:デフォルトの名無しさん
07/03/04 02:51:05
x86の浮動小数点演算についてわかりやすく説明したページないですか?
51:デフォルトの名無しさん
07/03/04 07:13:15
一つ疑問がある。
なんでx86見たいな変態アーキテクチャでアセンブラ勉強しようと思ったんだ?
マゾなのか?
52:デフォルトの名無しさん
07/03/04 10:23:19
>>48
x を右へ n だけシフトすれば
x / (2 の n 乗) になるのは常識。
2進シフトで分かりにくければ、
10進シフトで考えてみるといい。
31239832 を右に2桁シフトすれば 312398 になる。
これは 31239832 / 100 でしょ?
53:デフォルトの名無しさん
07/03/04 10:24:40
>>50
浮動小数点数でググればいくらでも出てくる。
54:デフォルトの名無しさん
07/03/04 10:25:25
x86 以外で勉強する方が、環境用意するのが大変でマゾだろう・・・。
55:デフォルトの名無しさん
07/03/04 11:42:56
>>51
ぜんぜん問題ない。
86アーキを理解したいなら別だが、
それは言語とは別問題だ。
56:デフォルトの名無しさん
07/03/04 12:25:38
>>53
たとえばどれ?
57:デフォルトの名無しさん
07/03/04 14:05:23
>>56
上から全部読んでいけ。
IEEE754 ってのがそれだ。
58:デフォルトの名無しさん
07/03/04 14:59:35
動物には餌を与えるべきではないだろう。
餌を与えると自分で餌を探そうとする意思をなくす。
59:デフォルトの名無しさん
07/03/05 06:32:37
>54
俺としては、シミュレータも揃っててサンプルコードの多いCASLII辺りの方がお勧めだがな
60:デフォルトの名無しさん
07/03/05 07:36:38
>>57
そのページを参照すればx86で浮動小数点演算をアセンブラで書けることを証明してください。
61:デフォルトの名無しさん
07/03/05 07:46:32
馬鹿かコイツは。自分で証明しろよ。
62:デフォルトの名無しさん
07/03/05 07:51:54
馬鹿というよりもむしろ害虫
63:デフォルトの名無しさん
07/03/05 10:41:59
休み明けに新規スレチェックしてみてタイトルにアセンブラとあるから来てみたら……
何このCも碌に判っていない癖にC使いとかほざいている>>1…
アセンブラを勉強する以前にやるべきことが腐るほどありそうだ。
64:デフォルトの名無しさん
07/03/05 18:05:04
このスレにいる人はアセンブラなんて書けない人ばかり
65:デフォルトの名無しさん
07/03/05 21:01:51
そうでもない。
68000とかH8とかARM7あたりならガリガリ書けるぞ。
66:デフォルトの名無しさん
07/03/05 22:36:06
アセンブラを勉強したいなら、
Cコンパイラに-Sオプションでも付けて
各CPUのソースを「同一のCソースから」生成してみると
かなりおもしろいという事を発見できる。
まずはgcc使って遊べ。
67:デフォルトの名無しさん
07/03/05 23:13:25
え〜〜、gasはよみにくいからきら〜い♪
68:デフォルトの名無しさん
07/03/05 23:49:19
asmやるんなら、いちいちcでこう書いたらこうなるとか考えない。
最初からasmで考えないと。
69:デフォルトの名無しさん
07/03/06 00:17:02
>>60
ああ、fadd とかそういう話か。
>>41 のマニュアルでも見れば?
70:デフォルトの名無しさん
07/03/06 18:00:51
Intelは日本語でも色々揃えている。
URLリンク(www.intel.com)
71:デフォルトの名無しさん
07/03/06 19:38:56
インテルは頻繁にレイアウト変えてややこしすぎる。
72:デフォルトの名無しさん
07/03/06 22:45:10
>>54
あ?マイコンのほうが環境は揃いやすいですよ?
多少の出費があってもよければx86よりポケコンのほうが
純粋にアセンブラを学べる
73:デフォルトの名無しさん
07/03/06 22:56:51
ポケコンってまだ一般向けに売ってるのか?
今時持ってるのは工業高校の生徒くらいだろ。
74:デフォルトの名無しさん
07/03/06 22:58:26
秋葉原、日本橋ならいつでも買えるんだぜ?
75:デフォルトの名無しさん
07/03/06 23:14:26
x86 なら出費なんていらないだろ。
VC++ Express Edition で
デバッガの混合モードや
インラインアセンブラを使えばいいだけ。
76:デフォルトの名無しさん
07/03/06 23:22:53
>>74
それじゃ揃いやすいとは言えんだろ
77:デフォルトの名無しさん
07/03/06 23:33:01
>>76
誰もそんなことは言ってない
78:デフォルトの名無しさん
07/03/06 23:33:43
>>75
標準搭載してない
79:デフォルトの名無しさん
07/03/06 23:40:57
じゃあ、debug.exeで
80:デフォルトの名無しさん
07/03/07 00:07:15
結局>>1は三日坊主か
81:デフォルトの名無しさん
07/03/07 06:02:21
>79
Winでx86の最初の環境としては最良だよな
標準搭載だし
82:デフォルトの名無しさん
07/03/07 09:12:21
MASM は今フリーだっけか?
VC++ についてるってだけだっけ?
83:デフォルトの名無しさん
07/03/07 18:30:08
>>53>>57は論理的におかしいな。
>>50は
「浮動小数点演算について説明したページ」ではなく
「浮動小数点演算についてわかりやすく説明したページ」を聞いているのだから。
検索で出てきたものが全て「わかりやすく説明したページ」であるはずがない。
84:デフォルトの名無しさん
07/03/07 20:11:29
病名でググって一番上にきた病院は繁盛するってNHKスペシャルで言ってた
85:デフォルトの名無しさん
07/03/07 20:29:53
>>83
そんぐらい自分で探せよ。
86:デフォルトの名無しさん
07/03/07 23:25:22
Wikipediaもまあよくまとまってるけど、「わかりやすい」ってこういうのとかじゃね?
URLリンク(pc.nikkeibp.co.jp)
87:デフォルトの名無しさん
07/03/08 04:28:28
間違っていなきゃね。
88:デフォルトの名無しさん
07/03/13 16:21:38
アセンブラかと思ったら…
インラインアセンブラにもなってなくてorz
89:デフォルトの名無しさん
07/03/13 20:39:36
>>88
こちらへどうぞ
アセンブラ… (゜□゜) ↑アッー!↓
スレリンク(tech板)l50
90:デフォルトの名無しさん
07/03/16 20:36:19
MASM初心者です。
OR AX, AX
と
CMP AX, 0
は同義だということをネットで見たのですが、意味がわかりませんでした。
また、OR命令はフラグレジスタのゼロフラグに影響を与えないと思ってたの
ですが、どうなのでしょうか?
91:デフォルトの名無しさん
07/03/16 20:40:33
>>90
まずはIntelのサイトに言って「IA-32 インテル アーキテクチャ
ソフトウェア・デベロッパーズ・マニュアル」を全部ダウンロードしなさい。
92:デフォルトの名無しさん
07/03/16 20:41:10
×言って
○行って
93:デフォルトの名無しさん
07/03/16 21:12:41
>>91
ありがとうございます。
なるほど思い切り書いてありました。。
ナットクです。
94:デフォルトの名無しさん
07/03/21 00:23:20
で、>>1 は勉強終わったのか?
95:デフォルトの名無しさん
07/04/11 04:05:26
486のポケコンねえ?
96:デフォルトの名無しさん
07/04/11 15:10:03
俺も今から勉強するぜ!
命令が27個でアドレッシングモードが7つ、レジスタが16個って16bitCPUのをな!!
97:デフォルトの名無しさん
07/04/12 13:36:24
>96
そのネタが全く分からない俺はここに居るべきじゃないんだろうな…
98:デフォルトの名無しさん
07/04/28 23:10:48
CASL e-Learning System
URLリンク(www.inf.ie.kanagawa-u.ac.jp)
99:デフォルトの名無しさん
07/05/09 04:06:24
今更アセンブラを勉強しようと思ってこのスレ覗いたんだが、
全くわけわからん。。。
一応C++、Javaなどは仕事で使ってきたからある程度はわかっているつもりだけど
アセンブラでメモリの内容書き換えたり、Jumpしたりして一体何がどうなるのか???
つながりが全くわからない俺はどこから手をつけたらいいんでしょうか。
100:デフォルトの名無しさん
07/05/09 05:25:04
>>99
>>98
見て勉強したら?
101:デフォルトの名無しさん
07/05/09 12:13:49
>>99
SIMD弄ってみたら?
102:デフォルトの名無しさん
07/05/09 13:11:09
C++がわかるならC++コンパイラにアセンブリコードを出力させるなり逆アセンブルするなりして比較するのがわかりやすい
103:デフォルトの名無しさん
07/05/09 14:58:36
>>100-102
レスサンクス。まずはC++からアセンブリコード出力させるとこからやってみるわー。
104:デフォルトの名無しさん
07/05/09 15:26:06
計算に使うレジスタ自体が書き換わるのがウザい
105:デフォルトの名無しさん
07/05/09 18:41:19
VC++ の混合モードとか便利ね。
106:デフォルトの名無しさん
07/05/09 21:29:40
>>105
つ[gcc -g -S]
107:デフォルトの名無しさん
07/05/10 02:26:25
>>98
そこ何度やっても
www.inf.ie.kanagawa-u.ac.jp のサーバからの応答が一定時間以内に返ってきませんでした。
ってなってつながらないんだが、どうしてだろう?
108:デフォルトの名無しさん
07/05/11 03:07:51
プロバイダで撥ねられてる or 夜中3:00〜3:10のメンテナンス中に読みにいったキャッシュが残ってる。
じゃない?
109:デフォルトの名無しさん
07/05/20 16:10:03
>>1
学習は済んだのか?
110:デフォルトの名無しさん
07/05/30 18:26:16
uwAAvwAAtAay/80hdQPpggCIhRICR4P/A3XruQQA6BAAA9+D+zl127QJug8CzSHrz74AANAmFALQ
FhMC0BYSAtHW0CYUAtAWEwLQFhIC0dbQJhQC0BYTAtAWEgLR1tAmFALQFhMC0BYSAtHW0CYUAtAW
EwLQFhIC0dbQJhQC0BYTAtAWEgLR1rQGipTPAc0h4p/Dg/8DdQm0CboSAs0h6yGD/wJ1DrkDAOiF
/+gZAOgWAOsOg/8BdQm5AgDocv/oBgC0TLAAzSG0BrI9zSHDQUJDREVGR0hJSktMTU5PUFFSU1RV
VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw0KJDAwMCQ==
111:デフォルトの名無しさん
07/05/30 23:16:41
なんか最近いろんなスレで >>110 みたい書き込みを見るけど、
また掲示板に情報を書き込むタイプのウィルスでも流行ってる?
112:デフォルトの名無しさん
07/05/30 23:25:49
エンコードも知らんのかw
113:デフォルトの名無しさん
07/05/30 23:27:16
>>112
いや、base64だろうってことぐらいはわかるけど。
ん? エンコードかけてんのはただの馬鹿よけ?
114:デフォルトの名無しさん
07/06/19 00:33:45
カーネルの特定の部分をいじろうと思ってるんですが、
スーパーバイザーモードなときの話ってどっかにいい入門用の資料はないですかね?
x86でいいんですが。
115:デフォルトの名無しさん
07/06/19 01:32:47
はじめて読む486、じゃちょっと浅すぎるか
116:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/06/19 19:07:24
商がでかくてaxレジスタに入らなくて例外が発生。
118:デフォルトの名無しさん
07/06/19 20:13:42
>>116
div dx だと dx:ax 割る dx = ax 余り dx になるから>>117のいうとおり例外が起きてるで正解。
119:116
07/06/20 21:19:07
>>117-118
ありがとうございました。
丁寧な解説のおかげで勘違いに気づけました。
「ax 割る dx」だとばかり。。。
予期せぬ空き時間ができたので、ここを見ながら勉強してました。
URLリンク(wisdom.sakura.ne.jp)
1文字ずつロードしてhello worldが出せたときは、久々に
コンピュータを使っていて楽しいと思えました。
さて、次は何を参考に勉強を進めようか。。。
いつまでもこの秋時間は続かないので、どこまで進むかわからないんですが。
120:デフォルトの名無しさん
07/08/01 01:31:45
初歩過ぎる質問なのですが
incとdecってどういう作業をするのでしょうか
121:デフォルトの名無しさん
07/08/01 03:32:21
++a;
--a;
122:デフォルトの名無しさん
07/09/06 21:02:45
その昔、VCはリリースモードでコンパイルすると、変数の並びが変わるから
アセンブラの勉強に使えない糞コンパイラとか言ってたあほがいたな。
123:デフォルトの名無しさん
07/09/18 16:15:39
age
124:デフォルトの名無しさん
07/09/18 22:27:43
>>122
あのメルマガか
お勧めが最適化の無い無料コンパイラでワロタ
125:デフォルトの名無しさん
07/09/30 14:47:12
INT 0x13でディスクへのRAW書き込みをするアセンブラ関数を作成して、
C言語(コンパイラ:BCC)から、その関数を使ってデータを書き込もうとしています。
その際に、データを引数でアドレス渡しでやろうとしているのですが、
ES:BX
へのデータのアドレス指定は、どうやったらいいのでしょうか?
Cから渡されてくるアドレスは32ビットなので、ここのアドレスの指定の仕方がわかりません・・・。
126:デフォルトの名無しさん
07/09/30 15:30:24
このスレで質問する大きなお友達が守るべき3つのおやくそく。
・質問するときはどの石についての質問であるか明記すること。
・マニュアルを参照すればわかる質問は極力しないこと。
・自己解決したときはその方法をきちんと報告すること。
127:デフォルトの名無しさん
07/09/30 15:44:32
BIOSコールは16bitモード以外では使うな。
以上。
128:125
07/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
07/09/30 15:51:34
>>127
32ビットモードではやっぱり使えないんでしょうか?
130:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/30 19:16:51
>>130
ありがとうございます!
拡張INT 13hで、資料漁ってみます!!!
132:デフォルトの名無しさん
07/10/06 12:41:13
>>128さん
そういう場合は、LES命令じゃありませんでしたっけ?
MOV命令で、メモリからセグメントレジスタへの直接ロードは、
出来ないと思いますよ。
133:デフォルトの名無しさん
07/10/06 13:35:33
それ以前に、bccとかデバッガ云々言ってることから、win32でやろうとしてるんじゃないだろうか。
根本的に間違ってる気がする。
134:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/15 19:03:57
プログラムカウンタが進む方向
136:デフォルトの名無しさん
07/10/15 19:46:27
じゃぁ前方参照って?
137:デフォルトの名無しさん
07/10/15 20:01:12
そんな事も自分で考えられないのか?
小学校からやり直してこい
138:デフォルトの名無しさん
07/10/16 00:29:25
アセンブラでDOSプログラムやるなら便利そうなの見つけたので貼っておきます
URLリンク(reef.path.ne.jp)
の DOS.CHM です
139:デフォルトの名無しさん
07/10/21 10:54:20
Cから呼ばれる関数内でFPUを使う場合、
戻るときにレジスタスタックの深さを戻す必要ありますか?
それとも特に何も考えなくていいのでしょうか?
140:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/21 20:42:35
誰か>>140教えてくださいお願いします・・・
142:デフォルトの名無しさん
07/10/21 20:59:58
本気で聞いてるのならせめてCPUの種類くらい書けや。
143:デフォルトの名無しさん
07/10/21 21:24:22
ニーモックみりゃわかるだろ糞虫
144:デフォルトの名無しさん
07/10/21 21:38:50
>>143
分からんだろ?
145:デフォルトの名無しさん
07/10/21 22:29:05
>>140
勉強したいのなら自分でやれ。
ヒントは命令表だ。にらめっこしながら自分で解け。
アセンブラを勉強するのなら、命令表を見るのは必須だ。
それすらせずに宿題を丸投げする馬鹿者は糞でも食って死ね。
146:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/21 23:54:55
>>142
>>144
それ、マジで言ってんの?ネタだよね?
148:デフォルトの名無しさん
07/10/22 00:01:42
分かる分からんではなく質問の仕方に問題があるつーこったろ。
149:デフォルトの名無しさん
07/10/22 00:38:15
ちなみに俺なら、
予想はできるが間違っている可能性を否定できないので分かるとは言わない。
150:デフォルトの名無しさん
07/10/22 09:43:59
>ADD #1, RO
このようなニーモニックのは俺はいじったことが無いな
151:デフォルトの名無しさん
07/10/22 09:54:06
レジスタR0…RISCプロセッサの何かかな?
何かの雑誌で見たような見てないような?
152:デフォルトの名無しさん
07/10/22 16:34:10
俺も同じ質問を前に見た記憶があるな。
PDP-11だっけ?
153:デフォルトの名無しさん
07/10/22 20:09:06
>>140
ここで回答されてるよ
URLリンク(m.oshiete1.goo.ne.jp)
154:デフォルトの名無しさん
07/10/22 20:54:38
>>152
同じ大学なんじゃね
アセンブラ… (゜□゜) ↑アッー!↓
スレリンク(tech板:614番)
155:デフォルトの名無しさん
07/10/22 21:57:36
そこら中にマルチしてるのか、それとも受講した学生が軒並み馬鹿ばっかだったのか・・・
156:デフォルトの名無しさん
07/10/23 11:17:19
後者。
157:デフォルトの名無しさん
07/10/23 20:00:11
結局、ROレジスタの謎だけが残ったのか・・・・
158:デフォルトの名無しさん
07/10/27 00:44:25
>>146
お前、ベジータか?
159:デフォルトの名無しさん
07/11/22 16:00:27
よ、よくわかったな・・・
160:デフォルトの名無しさん
07/11/24 04:23:05
mov ebx,eax
と
lea ebx,[eax]
って、ebxにロードされる値は同一ですか?
161:デフォルトの名無しさん
07/11/24 09:32:57
セグメントディスクリプタ(古いCPUだとセグメントレジスタ)の値によって変わる
もちろん同じになることもある
162:デフォルトの名無しさん
07/11/24 09:48:06
lea ebx, [eax * 2 + eax] で eax の3倍の値を入れたり。
163:デフォルトの名無しさん
07/11/24 10:03:25
猫娘のおフェラ〜♪ww
URLリンク(userdisk.webry.biglobe.ne.jp)
164:デフォルトの名無しさん
07/11/24 12:04:16
通報しました
165:デフォルトの名無しさん
07/11/30 17:37:23
Windowsソフトの逆アセの中に
LEA EBX,DWORD PTR [EBX+00000000]
というのを見かけるんだけど、イマイチようわからん・・・なんじゃこりゃ?
166:デフォルトの名無しさん
07/11/30 17:55:17
入れろ EBX に 、32ビット値で 後述の番地から (EBXの中身 足す 00000000)
167:デフォルトの名無しさん
07/11/30 18:04:18
ひとつの命令でアラインメントするためだと思う
168:デフォルトの名無しさん
07/11/30 18:18:20
>>166
おい
169:デフォルトの名無しさん
07/11/30 18:20:53
>>166
それじゃMOV文じゃね?
>>167
う〜ん、
AND EBX,-04
で良い様な気もしたんでね・・・。
ひょっとしてフラグかフラグなのか?
170:デフォルトの名無しさん
07/11/30 18:29:30
ANDだとフラグ変わっちゃう
171:デフォルトの名無しさん
07/11/30 18:31:29
フラグを変えたくなかったんだろという事で理解。
レスくれた人ありがとう。
先に進める事にします。
172:デフォルトの名無しさん
07/11/30 22:04:53
ループの分岐先を16byte境界に整列するために
コンパイラがNOPを挿入することがある
173:デフォルトの名無しさん
07/12/01 02:37:38
コンパイラ技術者のオナニー
174:デフォルトの名無しさん
07/12/02 16:50:59
ウチが見たのは整列するのに
INT 03
で埋まってたな。
テキストだと フ になるんだけど、並んでとなんかこう気持ち悪い。
175:デフォルトの名無しさん
07/12/02 17:03:44
プ
176:デフォルトの名無しさん
07/12/02 17:08:31
フフフフフフフフフフフフフフフ
177:デフォルトの名無しさん
07/12/02 17:53:42
VisualStudio2008って64bitのアセンブラ使えますか?
178:デフォルトの名無しさん
07/12/02 19:36:35
>>176
ガリでもくってろフフフ(ry
って、やめんかw
179:デフォルトの名無しさん
07/12/07 12:56:58
コォォォォォォォォ
180:デフォルトの名無しさん
07/12/07 22:14:24
ゴゴゴゴゴゴ
181:デフォルトの名無しさん
07/12/10 12:29:50
FLD DWORD PTR [00B8AFB7]
で
ロ-キック
182:デフォルトの名無しさん
07/12/12 15:04:33
C++なんかのクラス構造の逆アセ解析マンドクセ
183:デフォルトの名無しさん
07/12/12 15:33:42
「メモリのX番地以降にN個の符号付整数が格納 されている.これらの整数の絶対値を求めて, Y番地以降に順に格納するプログラムを作成せよ. データの個数NはN番地に格納されているものとする.」
という課題が出されているんだがサッパリ解らない
誰か助けてくれ
184:デフォルトの名無しさん
07/12/12 15:39:00
個数(N)を得るのに必要な情報である、格納アドレス(N)が必要だとなると、循環参照になるから絶対得られないのだが。
つーか、何のアセンブラの話なんだか。
185:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/12 15:41:28
すまんかった
COMETII/CASLIIだ
187:デフォルトの名無しさん
07/12/12 15:43:41
>>186
なんで>184の2行目しか読まないかねぇ……
188:デフォルトの名無しさん
07/12/12 15:44:04
すまんかった
COMETII/CASLIIだ
189:デフォルトの名無しさん
07/12/12 15:45:31
二重書き込みしてしまった・・・
>>185
とりあえず試行錯誤してみる
>>187
すまん、何を言っているのかすら解らなかったんだ
190:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/12 15:50:26
>>189
> 個数NはN番地に格納されている
って、私の住所は私の住んでいる所ですって言ってるようなものだ
192:デフォルトの名無しさん
07/12/12 15:58:24
>>191
なるほど、でも問題文そのままなんだよなぁ・・
193:デフォルトの名無しさん
07/12/12 16:06:48
>3. 絶対値を求める
これのやり方がわからない
194:デフォルトの名無しさん
07/12/12 16:12:37
まあ個数NのNは個数への名前付けであって個数がN個あるわけではないってのは常識的には分かるけどねw
「データの個数はN番地に格納されている」とかなら文句はたぶん出ない
195:デフォルトの名無しさん
07/12/12 16:15:26
>絶対値
負の数だったら0から引けばOK。アセンブラによっては符号反転のニモニックがあるかも知らん。
CASL知らんからCで書いておく。
signed foo;
if (foo < 0) foo = 0 - foo;
or
if (foo < 0) foo = -foo;
196:デフォルトの名無しさん
07/12/12 16:20:48
なるほど、つまり
>190に正だったらそのまま格納
負だったら0からその数を引けばいいんだな
197:デフォルトの名無しさん
07/12/12 16:23:18
>>193
CASLには符号反転命令はないから正負を判断して負なら0からその値を引く
1.正なら3へジャンプ
2.0から値を引く
3.
みたいな感じでいいんじゃまいか?
198:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/12/12 16:58:06
見直すと比較が逆っぽい
CPA GR3,GR2
でなく
CPA GR2,GR3
かな
201:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/12 17:19:54
>>201
HUTUの次の行の
LAD GR1,1,GR1
が抜けてる気がする
204:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/12 17:32:02
やったー、合格できた!
お前らのおかげだ!ありがとう!
>>202
あ、うん直前で気づいていれておいた
>>203
すまないが見たことの無い単語が出てきて解らない
16ビットなのは合ってるよ
さて、最後の課題だ
「メモリのDATA番地以降にN個の符号付整数が格納されている. 指標レジスタを用いて,これらの中の正の整数の合計を求め,結果 をSUM番地に格納するプログラムを作成せよ.データの個数NはN番地 に格納されているものとする.」
もう早速意味の解らない
data番地とか指標レジスタって日本語?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5180日前に更新/148 KB
担当:undef