字符串反转LC3汇编语言

时间:2014-03-27 15:47:17

标签: string loops assembly reverse lc3

我正在编写一个基于LC-3汇编语言的.asm程序,它将遍历一个字符串列表,反转每个字符串,然后将它存回到它的位置。名单。

例如:

     STRINGS .STRINGZ "aabbb"
                      "bbcva"
                      "abcde"

该计划会将该列表翻转为" bbbaa"," avcbb"和" edcba&# 34; - 因此,反转字符串但保持列表排序。

我目前正在研究一个嵌套循环的想法,其中外部循环将从一个字符串变为另一个字符串,内部循环将翻转它们并且它踢我的屁股!我用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 - 汇编程序在内存中反转一个字符串,请帮忙。

1 个答案:

答案 0 :(得分:0)

也许你应该编写内部循环,转到字符串的一半并交换字符? 我从一开头的那个地方从最后的地方开始? 结束NUL保持原样。 如果字符数是奇数,则中间字符保持不变。 如果将字符串长度除以2(向右移一位),您将获得要循环的字符数。 提醒是0或1(其中多余的一个id是奇数个字符串的中间字符)。 所以你交换str [i]和str [last-i](通过一个临时商店),其中' last'是字符串长度 - 1。 通常在汇编中,它更容易向后循环:从len / 2开始并递减直到索引为零(条件跳转到循环开始的结束条件)。