如何循环遍历数组,同时在 LC3 中设置 if/else 条件

问题描述

我正在编写一些代码,目的是循环遍历从 0 到 99 的素数数组,然后如果在数组内找到用户输入,则返回“1”。否则返回“0”。 这是我不想让我的程序执行的一些伪代码

Array = [all prime numbers from 0-99]
if userinput = Array[i]:
    print "1"
else:
    print "0"

就 LC3 而言,以下是我到目前为止的情况:

.ORIG x3000
LD R2,PRIMENUMBERS   

PRIMENUMBERS .fill x6000

.orig x6000
.fill 2
.fill 3
.fill 5
.fill 7
.fill 11
.fill 13
.fill 17
.fill 19
.fill 23
.fill 29
.fill 31
.fill 37
.fill 41
.fill 43
.fill 47
.fill 53
.fill 59
.fill 61
.fill 67
.fill 71
.fill 73
.fill 79
.fill 83
.fill 89
.fill 97

.END

我似乎无法理解如何遍历数组中的元素,也不知道如何进行 if/else 语句,包括如何接收用户输入。

感谢任何帮助!

解决方法

您的伪代码需要包含一个循环。例如,i 是什么?

建议用 C 编写你的算法/伪代码并测试它以确保它有效——在汇编中调试设计缺陷或算法缺陷需要大量的工作。 (换句话说,很难将损坏的伪代码转化为汇编语言。)而其他语言提供的功能使人们更难看出需要用汇编语言完成什么。

在将伪代码翻译成汇编语言时,首先翻译所有变量,然后处理代码。

循环、if-then-else 语句等控制结构嵌套在高级语言中,尽管它们扩展为多行和标签,但它们也很好地嵌套在汇编语言中,并且没有 {}' 的好处s 和/或缩进。

当我们有一个嵌套在 for 循环中的 if 语句时,我们可以先翻译 if 语句或先翻译 for 循环——这无关紧要。只需保持方向,使完整的 if 语句嵌套在循环体中,就像在 C 中一样。

,

您只需要两张纸,其中一张用于绘制内存位置和寄存器名称以及它们指向的内容和/或值。 编写代码的第二张表,从中间开始,您必须在上方和下方添加代码。

啊,我忘记了橡皮(最重要)和铅笔!

在比较输入的值和表中的一个元素时,首先考虑最后一刻 画它(第一张)它看起来正确吗?编码吧! (第二张) 此时,您可以测试一个简短的程序,将某个值与内存中的某处进行比较并输出一条消息 您现在必须遍历所有元素,尤其是在第一个和最后一个之间,检查并重新检查是否未省略

画出你如何指向这些元素,当你不得不停下来时回答:小心点 您几乎完成了程序的第二部分 现在第一个 如何收集号码?先试一个数字,它是一个字符还是一个数字?如何将一种转化为另一种?你可以单独测试这部分 获取多个字符,转换(小心),通过循环到您的表中进行比较

对表的地址进行编码是一个非常糟糕的主意。让汇编程序来完成工作!

PRIMENUMBERS .fill 2 并使用 LEA Rn,PRIMENUMBERS