用MARIE汇编语言打印奇数,最多可达用户输入值

时间:2017-04-06 01:41:03

标签: assembly marie

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

我尝试将奇数打印到用户输入值(例如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

1 个答案:

答案 0 :(得分:0)

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

num = input
oddnum = 1

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

(oddnum <= num)等于(not(oddnum > num))

换句话说,如果(oddnum-num) > 0为真,那么在循环(退出)之后跳转到第一条指令,否则循环循环直到循环到looblivion ......

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

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