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