我在LMC中有一个列表,我想尝试将其反转如下:
第一个
- 我试着先用表的大小找到正确的元素-然后我从那个指令中减去200,这样指令就从520变成了320。
- 实际上,我将指令从LOAD(加载累加器中的当前内容到RAM中的第20个平方)更改为STORE(存储累加器中的当前内容到RAM中的第20个平方)
- 然后,我将索引0处的内容选项卡加载到累加器(111)中,然后将其保存在最后一个索引中
- 我不知道我必须做什么之后
- 我觉得我对这个问题的理解是错误的
right_el lda size
sub one
sta size
lda load
add size
sub 2hund
sta save
load lda tab
bra save
inc lda load
add one
sto load
bra load
save dat
bra right_el
left_el dat
tab dat 111
dat 222
dat 333
dat 444
dat 555
one dat 1
size dat 5
temp dat
2hund dat 200
我试着一步一步地运行程序。我设法把表变成:
tab dat 111
dat 222
dat 333
dat 444
dat 111
但我不知道之后该怎么办
1条答案
按热度按时间iugsix8n1#
这是一个良好的开端。几个问题:
save
处,您将写入移动后的值,但因此会丢失原来的值。temp
,但在覆盖原始值之前,您需要它来保存原始值,以便您可以从temp
再次读取它,并将其写回列表的前半部分。...并将
two
定义为2。inc
处的代码从未执行。它应该执行。但还需要两个:
其他备注:
sto
和sta
。我会坚持一种口味。bra save
,您可以将目标代码块移到那里,这样就不需要分支了。twohund
而不是2hund
作为标签。通常的做法是不以数字开始标识符,一些模拟器甚至可能会有这样的问题。loop
而不是right_el
作为标签,因为循环肯定必须覆盖整个交换--从左到右,反之亦然。可以用两种方式编写:
下面是生成的代码--我在您的一些标签后面添加了“left”和“right”,这样我就可以添加自己的标签并进行区分:
你可以在这里运行代码。