私は、LC-3 アセンブリ言語に基づいて .asm プログラムを作成しています。このプログラムは、文字列のリストをループし、それぞれを逆にして、リスト内の場所に戻します。
例えば:
STRINGS .STRINGZ "aabbb"
"bbcva"
"abcde"
プログラムはそのリストを " bbbaa
"、" avcbb
"、および " edcba
" に反転します。つまり、文字列を逆にしますが、リストの順序は維持します。
私は現在、ネストされたループのアイデアに取り組んでいます.外側のループが弦から弦へと移動し、内側のループがそれらを反転し、それは私のお尻を蹴っています! 同じことをするために Java でコードを書き、5 分かかりましたが、何らかの理由で、アセンブリが私の脳にうんざりしています。これを行う方法についての指針はありますか?
これまでのところ、疑似とアセンブリを組み合わせたものを次に示します。
.ORIG x3000
LEA R0, STRINGS ; Load the address of the first char of the list of strings
Loop until NOP is found, signaling end of the string.
LEA R1, the address above ; stores the address of the last char
LDR R2, #0 Offset +1 ; load the first char to be flipped
LDR R3, #0 Offset +2 ; load the last char to be flipped
STR R3, #0 Offset +1 ; store the last char in the mem addr of the first
STR R2, #0 Offset +2 ; store the first char in the addr of the last
ADD R1, R1 + 1 ; increment the addr of the first char to move to the second
ADD R2, R2 - 1 ; decrement the addr of the last char the move the second-to-last
loop back to beginning somehow
そして、文字列間の外側のループを行う方法が少しもわかりません。
TL;DR - メモリ内の文字列を逆にするアセンブリ プログラム、助けてください。