【问题标题】:How do I write a LC-3 assembly code for finding the maximum of a list?如何编写 LC-3 汇编代码来查找列表的最大值?
【发布时间】:2016-03-08 20:30:21
【问题描述】:

写一个 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

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

【问题讨论】:

    标签: assembly lc3


    【解决方案1】:

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

    list: .BLKW 1000
    

    您可以通过使用 LEA 获取列表的地址、存储并递增计数器变量然后使用 LDR 将内存加载到寄存器中来读取此内存。

    【讨论】:

      【解决方案2】:

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

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

      ;数字是正数,所以检查哪个是最大值
      与 R3, R3, #0 ;清除 R3 添加 R3, R2, #0 ; Calc 2-补码
      不是 R3,R3 添加 R3、R3、#1 添加 R6、R3、R5 BRP 循环 BRz 循环 ;新最大 与 R5、R5、#0 添加 R5、R2、#0 BR 循环

      退出 暂停

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

      .END

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多