【问题标题】:print odd numbers in MARIE assembly language up to user input value以 MARIE 汇编语言打印奇数,直到用户输入值
【发布时间】:2017-04-06 01:41:03
【问题描述】:

这是一个家庭作业,我被困在这里。任何帮助表示赞赏。

我正在尝试打印不超过用户输入值(例如 6 或 7)的奇数。 我有以下代码可以满足我的要求,但不完全是。

这是我的代码:

org 100

input             /ask for input
store num         /store the input as num

load one
store oddnum      /store 1 as odd number
output            /print odd number, prints 1

oddloop, load oddnum  /start of loop
add two               /adds 2 in previous odd number value
store oddnum          /stores the new odd number
output                /prints odd number

load num              /loads user input
subt oddnum           /input value minus current odd number value

skipcond 000          /skips next line if value is negative
jump oddloop          /jumps to loop

halt                  /end program

zero,   dec 0
one,    dec 1
two,    dec 2
num,    dec 0
oddnum, dec 0

如果用户输入是 7;它打印

1 3 5 7 9

这里,预期输出是 1 3 5 7

如果用户输入是 6;它打印

1 3 5 7

这里,预期输出是 1 3 5

【问题讨论】:

    标签: assembly marie


    【解决方案1】:

    更改代码的逻辑,有很多可能的方法,但我个人会这样做:

    num = input
    oddnum = 1
    
    while (oddnum <= num) {
      output oddnum
      oddnum += 2
    }
    

    (oddnum &lt;= num) 等于 (not(oddnum &gt; num))

    也就是说,如果(oddnum-num) &gt; 0 为真,则在循环之后跳转到第一条指令(退出它),否则循环循环直到循环到 looblivion...


    以及为什么我会使用 这个 一种逻辑而不是其他逻辑:

    • 注意只有一个输出点(你有两个)
    • 它是while(){},而不是do {} while(),因此它也适用于“0”输入(不显示任何内容)或“1”(“2”)输入仅显示"1"do {} while() 逻辑有两个输出将至少显示"1 3")。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多