プロが教えるわが家の防犯対策術!

アセンブリ言語の書き方が分かりません。


R0が示す番地以降のR2が示すバイト数をR1が示す番地以降に転送
これをアセンブリ言語で書くにはどうしたらいいでしょうか?
教えてください。

A 回答 (3件)

確かアセンブリ言語はCPUに依存するので対象CPUが分からないと答えられないのではないかと思うのですが。

。。

--------------------------------------------------------
よく使われる80x86系CPUを対象とした場合として仮定します。

C言語で簡単なコピープログラムを記述し混合モードの結果を表示すれば、どんなアセンブリコードとなっているのか分かるのではないかと思います。
内容については、調べていません。

--[Source Code]--
int main()
{
 char buf1[256] = {0};
 char buf2[256];
 int imax = 256;

 for(int i = 0 ; i < imax ; i++) {
  buf2[i] = buf1[i];
 }
}

--[混合モード表示結果]--
int main()
{
00A413A0 push    ebp 
00A413A1 mov     ebp,esp
00A413A3 sub     esp,2ECh
00A413A9 push    ebx 
00A413AA push    esi 
00A413AB push    edi 
00A413AC lea     edi,[ebp-2ECh]
00A413B2 mov     ecx,0BBh
00A413B7 mov     eax,0CCCCCCCCh
00A413BC rep stos  dword ptr es:[edi]
00A413BE mov     eax,dword ptr [___security_cookie (0A47004h)]
00A413C3 xor     eax,ebp
00A413C5 mov     dword ptr [ebp-4],eax
 char buf1[256] = {0};
00A413C8 mov     byte ptr [ebp-108h],0
00A413CF push    0FFh
00A413D4 push    0  
00A413D6 lea     eax,[ebp-107h]
00A413DC push    eax 
00A413DD call    @ILT+115(_memset) (0A41078h)
00A413E2 add     esp,0Ch
 char buf2[256];
 int imax = 256;
00A413E5 mov     dword ptr [ebp-21Ch],100h

 for(int i = 0 ; i < imax ; i++) {
00A413EF mov     dword ptr [i],0
00A413F9 jmp     main+6Ah (0A4140Ah)
00A413FB mov     eax,dword ptr [i]
00A41401 add     eax,1
00A41404 mov     dword ptr [i],eax
00A4140A mov     eax,dword ptr [i]
00A41410 cmp     eax,dword ptr [ebp-21Ch]
00A41416 jge     main+94h (0A41434h)
  buf2[i] = buf1[i];
00A41418 mov     eax,dword ptr [i]
00A4141E mov     ecx,dword ptr [i]
00A41424 mov     dl,byte ptr [ebp+ecx-108h]
00A4142B mov     byte ptr [ebp+eax-210h],dl
 }
00A41432 jmp     main+5Bh (0A413FBh)

}
00A41434 xor     eax,eax
00A41436 push    edx 
00A41437 mov     ecx,ebp
00A41439 push    eax 
00A4143A lea     edx,[ (0A41468h)]

この回答への補足

解答ありがとうございます。
CPUについて調べてみましたが、PDP-11というものでした。
教えていただけるとありがたいです。

補足日時:2010/02/26 15:17
    • good
    • 0

PDP-11 じゃなくて, 他のプロセッサなら書けますか?


あるいは, アセンブリ言語じゃなくて他の言語 (例えば C) でなら (ライブラリなどを使わずに) 書けますか?
    • good
    • 0

No.1さんが書かれているように、CPUがわからないと何とも言えませんが、場合によっては、ブロック転送命令(ストリング命令)で一気に転送できる場合もあります。


(ちなみに、Z80だとLDIR/LDDRです)

この回答への補足

ありがとうございます
下のhiro_knighさんのほうにも書きましたが、CPUはPDP-11というものらしいです。

補足日時:2010/02/26 15:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!