さて、私はこれについて、おそらく本当に複雑な解決策で進んでいますが、それが私の頭に浮かんだ最初のことです。
「ターゲット」文字列(一時変数)を使用せずに、「ソース」文字列を逆にするアセンブリ言語プログラムを作成する必要があります。これが私の試みです。
INCLUDE Irvine32.inc
.data
source BYTE "This is the source string", 0
count DWORD ?
.code
main PROC
mov ecx, LENGTHOF source
L1:
mov count, ecx ; save our outer loop count
mov al,[source+0] ; get the first character in the string
mov ecx,LENGTHOF source ; set out inner loop count
mov esi, OFFSET source
inc esi
L2:
mov bl,[esi]
dec esi
mov [esi],bl
add esi, 2
loop L2
mov ecx, count
loop L1
mov edx,OFFSET source
call WriteString
exit
main ENDP
END main
さて、これの「アルゴリズム」は基本的にこれです:文字列から最初の文字を取り出し、他のすべての文字を文字配列の1スペース下に移動し、最初に取り出した文字を配列の後ろに置きます。今、私はこれが非常に複雑になるところまで来ています。実際、配列の最後に到達するにはどうすればよいですか。別のループが必要になると思いますか?私は確かに3つのループを必要としないか、それを処理したいとさえ思っています。
たぶん私は正しい方向に進んでいて、それさえ知らないでしょう。提案、ヒント、コード、または別のアルゴリズムが役立ちます!