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

Assembly 如何编写LC-3汇编代码来查找列表的最大值?,assembly,lc3,Assembly,Lc3,写一个LC-3 用于查找内存中正数列表的最大值的汇编代码。R0 包含列表开始位置和列表结束位置在内存中的位置 数字由零或负数表示。代码应该放置最大的 将列表中的值输入寄存器R5。如果列表的第一个数字为零或 负,R5应该包含零。 例如,如果R0包含值x4000,并且内存包含以下内容 价值观: x4000:10 x4001:20 x4002:15 x4003:-1 问题是书中有一个例子,但我没有发现任何有用的东西,我以前为这个问题写过一些代码 .orig x3000 LD R

写一个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
.orig x3000
LD R1,编号1;将编号1装入R1
LD R2,编号2;将编号2装入R2
BRz等于;如果NUMBER1=NUMBER2,我们跳到等于(我们可以直接跳到末尾)
BRn更大2;如果数字1<数字2,我们跳到更大的数字2
BRp更大1;如果1号>2号,我们跳到更大的1号
等于BRnzp端;
较大的r2加上R5,R5,#2;R0=-1
BRnzp端
较大的1加上R5,R5,#6;R0=1
BRnzp端
结束停止;结局
数字1.填充#2;
数字2.填充#6;
.完

所以我有这个,但之后我不知道如何做一个列表。我能得到一些帮助吗?

您的列表实际上是一个以null结尾的数字数组。可以用BLKW声明内存空间,后跟要保留的字数

list: .BLKW 1000
通过使用LEA获取列表地址,存储并递增一个计数器变量,然后使用LDR将内存加载到寄存器中,您可以读取该内存。

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

加上R2,R2,#0 BRz出口;如果号码是cero,则跳转到退出 BRn出口;如果数字为负数,跳转到退出

);数字为正数,请检查最大值
R3,R3,#0;清除R3 加上R3,R2,#0;钙2-补体
不是R3,是R3 加上R3,R3,#1 加上R6,R3,R5 BRp环路 BRz环 ; 新马克斯 和R5,R5,#0 加上R5,R2,#0 溴环

出口 停止

N1.填充#10 N2.填充#20 N3.填充15 N4.填充#-1

.完