• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

確かアセンブリ言語は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)]

SAPPORO009
質問者

補足

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

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

noname#140045
noname#140045
回答No.2

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

SAPPORO009
質問者

補足

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

関連するQ&A