【问题标题】:Marie Removal of space玛丽去除空间
【发布时间】:2018-09-04 03:03:18
【问题描述】:

我是 MARIE 的新手。我正在创建一个玛丽代码,它将删除元素之间的“空格”。例如。如果是~~FIT ~ 1047~~~,它将删除元素~~~~

任何人都可以看看我的代码并指导我吗?

我知道当它到达 HEX 020 时,它会在应该删除它并将下一个值添加到字符串时跳转到结束。

Load NameAddr
Store TrimStringAddr
JnS TrimString
Halt

NameAddr, ADR Name
Name, HEX 052 / R <--- this is where you add your name
      HEX 061 / A
      HEX 06e / N
      HEX 061 / A
      HEX 020 / SPACE
      HEX 041 / A 
      HEX 074 / T
      HEX 069 / I
      HEX 06e / N
      HEX 064 / D
      HEX 065 / E
      HEX 072 / R
      HEX 000 / END

TrimStringAddr, HEX 0    / address of string to trim
TrimString,     HEX 0 
StartTrim, LoadI TrimStringAddr
           Output
           Subt B
           Skipcond 800
           Jump End
           Subt B
           Load TrimStringAddr
           Add A
           Store TrimStringAddr
           Jump StartTrim

End, Halt

B, HEX 020
A, HEX 001

它正在被加载到 AC 中。然而。当我想要获得的是 RANAATINDER 时,我得到的输出是 RANA

【问题讨论】:

  • 请添加 cmets 以解释代码中的每条指令应该如何用于实现您的算法,并描述实际发生的情况。你能用你的调试器看到你是否将字符串的字符加载到累加器中吗?
  • 是的,它正在被加载到空调中。运行此代码后的输出是 RANA,而我要实现的是 RANAATINDER
  • 您应该edit 对您的问题发表评论,以便为可能想要回答您问题的其他人提供更好的minimal reproducible example。 (我不太了解 Marie,所以我花的时间比我想花更多的时间弄清楚你的代码有什么错误。)
  • 完成。谢谢先生。
  • 而不是Jump End,如果您只是跳转到Add A 指令,您的程序不会跳过空格吗?你需要一个不同的循环退出条件。

标签: assembly marie


【解决方案1】:

您在检查输出之前打印输出,并在到达空格时结束程序。

这可以通过在使用输出之前检查空格然后使用临时 IF 来纠正,方法是通过第二个选项循环打印输出,如下所示:

StartTrim, LoadI TrimStringAddr
       Subt B
       Skipcond 400 / If not zero will Jump to process output
       Jump IsLetter
       Subt B
Load TrimStringAddr
       Add A
       Store TrimStringAddr
       Jump StartTrim
IsLetter,   LoadI TrimStringAddr
        Skipcond 800 / Check when empty to finish
        Jump End
        Output
        Subt C
        Load TrimStringAddr
        Add A
        Store TrimStringAddr
        Jump StartTrim

完整代码:

Load NameAddr
Store TrimStringAddr
JnS TrimString

NameAddr, ADD Name
Name, HEX 052 / R 
      HEX 061 / A
      HEX 06e / N
      HEX 061 / A
      HEX 020 / SPACE
      HEX 041 / A 
      HEX 074 / T
      HEX 069 / I
      HEX 06e / N
      HEX 064 / D
      HEX 065 / E
      HEX 072 / R
      HEX 000 / END

TrimStringAddr, HEX 0    / address of string to trim
TrimString,     HEX 0 

StartTrim, LoadI TrimStringAddr
       Subt B
       Skipcond 400
       Jump IsLetter
       Subt B
Load TrimStringAddr
       Add A
       Store TrimStringAddr
       Jump StartTrim
IsLetter,   LoadI TrimStringAddr
        Skipcond 800 / Check when empty to finish
        Jump End
        Output
        Subt C
        Load TrimStringAddr
        Add A
        Store TrimStringAddr
        Jump StartTrim

End, Halt

B, HEX 020
A, HEX 001
C, HEX 040

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多