在汇编程序中填充"n"内存位置



我想做这项工作,但做不到。有人能帮我解释一下如何完成任务吗;从具有值-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中增加指针。


您将需要一个计数循环。

由于其他寄存器(AD(将忙于在循环内执行任务,因此计数器必须位于内存中的某个位置。你被告知计数器在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 )

最新更新