首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写查找列表最大值的LC-3汇编代码?

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

Stack Overflow用户
提问于 2016-03-09 04:30:22
回答 2查看 3.1K关注 0票数 0

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

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

代码语言:javascript
复制
.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

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

EN

回答 2

Stack Overflow用户

发布于 2016-03-09 23:06:42

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

代码语言:javascript
复制
list: .BLKW 1000

您可以通过LEA获取list的地址,存储并递增计数器变量,然后使用LDR将内存加载到寄存器中,从而读取该内存。

票数 0
EN

Stack Overflow用户

发布于 2017-08-14 00:50:37

.orig x3000和R0,R0,#0;Clear R0 LEA R1,N1;R1是指向N1 LDR R5,R1,#0的指针;R5是最大循环

代码语言:javascript
复制
LDR R2, R1, #0 ; load numbers into R2    ADD R1, R1, #1 ; Increment pointer

添加R2,R2,#0 BRz Exit;如果number为cero BRn Exit,则跳转到Exit;如果number为负数,则跳到Exit

;数字为正数,请检查哪个为最大值

代码语言:javascript
复制
AND R3, R3, #0  ; Clear R3    ADD R3, R2, #0  ; Calc 2-complement
代码语言:javascript
复制
NOT R3, R3    ADD R3, R3, #1     ADD R6, R3, R5     BRp Loop    BRz Loop    ; new max    AND R5, R5, #0    ADD R5, R2, #0     BR Loop

退出停止

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

.END

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35877405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档