首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串反转LC3汇编语言

字符串反转LC3汇编语言
EN

Stack Overflow用户
提问于 2014-03-27 23:47:17
回答 1查看 2.4K关注 0票数 0

我正在编写一个基于LC-3汇编语言的.asm程序,它将遍历字符串列表,反转每个字符串,并将其存储回列表中的相应位置。

例如:

代码语言:javascript
复制
     STRINGS .STRINGZ "aabbb"
                      "bbcva"
                      "abcde"

程序会将该列表翻转为"bbbaa“、"avcbb”和"edcba“-因此,颠倒了字符串,但保持了列表顺序。

我目前正在研究一个嵌套循环的想法,其中外部循环将从一个字符串转到另一个字符串,而内部循环将翻转它们,它将踢我的臀部!我用Java写了代码来做同样的事情,花了我5分钟的时间,但由于某种原因,汇编就像是在我的大脑上大便。关于如何做这件事有什么建议吗?

到目前为止,我使用的是psuedo和汇编的混合形式:

代码语言:javascript
复制
    .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程序要颠倒内存中的字符串,请帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-03-29 07:03:09

也许你应该写一个内部循环,去到字符串的一半并交换字符?I中的位置从头开始,而i中的位置从末尾开始?末尾NUL被保留为原样。如果字符数是奇数,则中间的字符保留原样。如果将字符串长度除以2(右移一位),就会得到要循环的字符数。Reminder要么是0,要么是1(在这个花瓶中,多余的一个id是奇数个字符字符串的中间字符)。因此,你交换了stri和strlast-i,其中'last‘是字符串长度- 1。通常在汇编中,向后循环更容易:从len/2开始,递减到索引为0(条件跳转到循环开始时也是结束条件)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22692642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档