我正在编写一个基于LC-3汇编语言的.asm程序,它将遍历字符串列表,反转每个字符串,并将其存储回列表中的相应位置。
例如:
STRINGS .STRINGZ "aabbb"
"bbcva"
"abcde"程序会将该列表翻转为"bbbaa“、"avcbb”和"edcba“-因此,颠倒了字符串,但保持了列表顺序。
我目前正在研究一个嵌套循环的想法,其中外部循环将从一个字符串转到另一个字符串,而内部循环将翻转它们,它将踢我的臀部!我用Java写了代码来做同样的事情,花了我5分钟的时间,但由于某种原因,汇编就像是在我的大脑上大便。关于如何做这件事有什么建议吗?
到目前为止,我使用的是psuedo和汇编的混合形式:
.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我一点也不知道如何做字符串之间的外循环。
DR- Assembly程序要颠倒内存中的字符串,请帮助。
发布于 2014-03-29 07:03:09
也许你应该写一个内部循环,去到字符串的一半并交换字符?I中的位置从头开始,而i中的位置从末尾开始?末尾NUL被保留为原样。如果字符数是奇数,则中间的字符保留原样。如果将字符串长度除以2(右移一位),就会得到要循环的字符数。Reminder要么是0,要么是1(在这个花瓶中,多余的一个id是奇数个字符字符串的中间字符)。因此,你交换了stri和strlast-i,其中'last‘是字符串长度- 1。通常在汇编中,向后循环更容易:从len/2开始,递减到索引为0(条件跳转到循环开始时也是结束条件)。
https://stackoverflow.com/questions/22692642
复制相似问题