【问题标题】:How to increment a letter in string in lc3?如何在lc3中增加字符串中的字母?
【发布时间】:2015-05-01 03:33:17
【问题描述】:

我正在编写一个 LC3 程序,该程序在程序之后将存储在内存中的三字母单词的每个字母递增。 'a' 变成 'd','n' 变成 'q','z' 变成 'c',等等。

我将其用作 LC3 Assembly 参考

这是我目前的代码

.orig x3000
ADD R1, R1, #3 
LEA R2, STRING  
HALT
STRING  .STRINGZ "anz"    
.END

我能够从我的参考资料中弄清楚如何在 LC3 中声明一个字符串。但是,有没有人如何进行实际的增量或有任何参考资料可以用来弄清楚如何做?

【问题讨论】:

标签: string assembly encryption character lc3


【解决方案1】:

使用 while 循环,我能够让它递增字符串的每个字符,直到找到一个空值。我没有将其编码为循环(z 变为 c),但这应该可以帮助您入门。

;tells simulator where to put my code in memory(starting location). PC is set to thsi address at start up
.orig x3000

MAIN
    AND R1, R1, #0      ; clear our loop counter

    WHILE_LOOP
        LEA R2, STRING      ; load the memory location of the first char into R1
        ADD R2, R2, R1      ; Add our counter to str memory location. R2 = mem[R1 + R2]
        LDR R3, R2, #0      ; Loads the value stored in the memory location of R2
        BRz END_WHILE       ; If there is no char then exit loop

        ADD R3, R3, #3      ; change the char 
        STR R3, R2, #0      ; store the value in R3 back to the location in R2
        ADD R1, R1, #1      ; add one to our loop counter
        BR WHILE_LOOP       ; jump to the top of our loop
    END_WHILE

    HALT

; Stored Data
STRING      .STRINGZ "anz"    

.END

【讨论】:

  • 从 LC3edit 开始保存和汇编代码。打开 LC3 模拟器并加载汇编代码后。从那里你可以点击运行代码按钮来查看你的程序做了什么。
  • 我给您的代码示例不会打印到控制台窗口,您必须将其编码。如果您想查看对字符串所做的更改,您只需转到内存位置运行程序后的 STRING。
  • 您在正确的轨道上,但 SEXT 是 LC3 处理传递给它的信息的过程。 SEXT之所以称为符号扩展,是因为它取001011100之类的短值并将其扩展为0000000001011100。它与将STRING的内存位置存储到R2中的LEA命令关系不大
  • 我会在你的其他帖子中解释得更好
  • 查看 ASCII 值以外的字符串的唯一方法是将其打印到控制台。将字符串的内存地址加载到 R0 中,然后使用 PUT 将其显示在控制台窗口上。
猜你喜欢
  • 2013-10-09
  • 2020-01-06
  • 2015-08-21
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多