如何编写LC-3汇编代码以查找列表的最大值?

时间:2016-03-08 20:30:22

标签: assembly lc3

写一个LC-3 汇编代码,用于查找内存中正数列表的最大值。 R0 包含列表开头的内存中的位置,以及列表的结尾 数字由零或负数表示。代码应该是最好的 将列表中的值放入寄存器R5中。如果列表的第一个数字为零或 否定,R5应该包含零。 例如,如果R0包含值x4000,则内存包含以下内容 值:  x4000:10  x4001:20  x4002:15  x4003:-1

问题是书中有一个例子,但我没有发现任何帮助,我之前为这个问题写了一些代码,

.orig x3000

           LD R1, NUMBER1    ;load NUMBER1 into R1
           LD R2, NUMBER2    ;load NUMBER2 into R2

           BRz Equals        ;we jump to Equals if NUMBER1 = NUMBER2  (we can just jump directly to END)
           BRn GreaterR2     ;we jump to GreaterR2 if NUMBER1 < NUMBER2
           BRp GreaterR1     ;we jump to GreaterR1 if NUMBER1 > NUMBER2

Equals     BRnzp End         ;

GreaterR2  ADD R5, R5, #2   ;R0 = -1
           BRnzp End

GreaterR1  ADD R5, R5, #6    ;R0 = 1
           BRnzp End

End    HALT               ;THE END


NUMBER1 .FILL #2              ;
NUMBER2 .FILL #6              ;

.END

所以我有这个但是在我不知道怎么做列表之后。我可以得到一些帮助吗?

2 个答案:

答案 0 :(得分:0)

您的列表实际上是一个空终止的数字数组。您可以使用BLKW声明内存空间,后跟要保留的单词数

list: .BLKW 1000

您可以通过获取带有LEA的列表地址,存储和递增计数器变量,然后将存储器加载到具有LDR的寄存器中来读取此存储器。

答案 1 :(得分:0)

.orig x3000    AND R0,R0,#0;清除R0    LEA R1,N1; R1是指向N1的指针    LDR R5,R1,#0; R5是最大值 环
   LDR R2,R1,#0;将数字加载到R2中    添加R1,R1,#1;增量指针

ADD R2,R2,#0    BRz退出;如果数字是cero,请跳至退出    BRn退出;如果数字为负,则跳至退出

数字是正数,所以检查哪个是最大的    AND R3,R3,#0;清除R3    添加R3,R2,#0; Calc 2-complement
   不是R3,R3    添加R3,R3,#1    添加R6,R3,R5    BRp循环    BRz Loop    ;新的最大    AND R5,R5,#0    添加R5,R2,#0    BR Loop

退出    HALT

N1 .FILL#10 N2 .FILL#20 N3 .FILL#15 N4 .FILL#-1

.END