我想做这项工作,但做不到。有人能帮我解释一下如何完成任务吗;从具有值-1"//的地址填充n个存储器位置R1<-n//R2<-地址
有人能帮我解释一下如何进行分配吗:
我们的想法是将问题分解并解决各个部分,然后将这些部分组合成一个整体解决方案。
无特殊顺序:
在C:中设置内存的算法
int R1;
int *R2;
do {
*R2++ = -1;
} while ( --R1 >= 0 );
你不必用汇编语言思考就能想出一个算法。用一种你知道的语言做这件事要容易得多,然后把它的各个部分组装起来。
您将需要进行内存写入。
通过执行M=
指令(例如M=D
(来执行存储器写入。该操作将执行Memory[A]=D
,因此在执行此操作之前,您需要在A
寄存器中有一个内存地址,并在D
寄存器中存储一个值。
您被告知将值放在R2
引用的位置,因此获取R2
中变量的值并将其放入A
寄存器。R2
是数据内存位置2的别名,因此这里,R2
是内存中的指针变量。
@R2 // put 2 in `A`
A=M // fetch from Memory[A] and put the result back into A
您被告知使用-1来填充内存,因此在D
中放入-1。我们可以在C指令中直接执行此操作,因此不需要@
指令来加载-1:
D=-1 // set D to -1
使用上面的设置,您可以执行M=D
来用-1填充一个内存位置。
要存储在连续的位置,您需要在R2
中增加指针。
您将需要一个计数循环。
由于其他寄存器(A
、D
(将忙于在循环内执行任务,因此计数器必须位于内存中的某个位置。你被告知计数器在R1
中——与Memory[1]
相同。
您可以按如下简单顺序递减计数器:
@R1 // put 1, the memory address of R1, in A
M=M-1 // instruction the machine to decrement memory
但是,如果您也想测试计数器,请将计数器放入D
寄存器并将其存储回内存,然后添加一个后向条件分支以继续循环:
(loop1) // define top of loop
... // body of loop
@R1 // target the counter (A=&counter)
MD=M-1 // compute counter-1, store back to memory &counter, and keep copy in D
@loop1 // target the loop top (A=&loop)
D;JGE // branch to repeat the loop if D >= 0
这将实现,例如:
do {
...
} while ( --counter >= 0 )