- ベストアンサー
アセンブリ言語の書き方が分かりません。
アセンブリ言語の書き方が分かりません。 R0が示す番地以降のR2が示すバイト数をR1が示す番地以降に転送 これをアセンブリ言語で書くにはどうしたらいいでしょうか? 教えてください。
- みんなの回答 (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)]
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
PDP-11 じゃなくて, 他のプロセッサなら書けますか? あるいは, アセンブリ言語じゃなくて他の言語 (例えば C) でなら (ライブラリなどを使わずに) 書けますか?
No.1さんが書かれているように、CPUがわからないと何とも言えませんが、場合によっては、ブロック転送命令(ストリング命令)で一気に転送できる場合もあります。 (ちなみに、Z80だとLDIR/LDDRです)
補足
ありがとうございます 下のhiro_knighさんのほうにも書きましたが、CPUはPDP-11というものらしいです。
補足
解答ありがとうございます。 CPUについて調べてみましたが、PDP-11というものでした。 教えていただけるとありがたいです。