LC3汇编语言 - 创建2个阵列,乘,并添加总和(LC3 assembly language - c

2019-10-22 05:05发布

我试图找出如何创建两个阵列(硬编码),它们相乘(A [0] XB [0],A [1] XB [1] ...等),然后添加的款项一起打印它。

我没有太多尚未但那是因为我仍然习惯这一点。 请请请帮助!

我至今列表如下 -

.ORIG x3000
LEA R1, arr1
LEA R2, arr2 
AND R3, R3, #0  ;index 
AND R4, R4, #0  ;total


LOOP    ADD R4, R3, #4  
BRzp    DONE    
ADD R5, R1, R3  
LDR R6, R5, #0  
ADD R4, R4, R6  
ADD R3, R3, #-1     
BR  LOOP

HALT

arr1    .FILL   5   
.FILL   2   
.FILL   7   
.FILL   3    
arr1    .FILL   7   
.FILL   4   
.FILL   1   
.FILL   2   

.END

请和谢谢,

Kristyn

Answer 1:

我的理解是一段时间,因为这已被要求,但是这可能帮助别人谁也有类似的问题。 这将是一个有点棘手,如果你不希望在一个线性的实现代码。

  1. 首先,我会成立了循环来循环通过每个阵列项目
  2. 存储所有当前正在使用这个循环寄存器
  3. 创建第二个循环来处理乘法
  4. 存储值和第二退出循环
  5. 恢复你的第一个循环的寄存器
  6. 增加你的循环计数,然后跳回循环的顶端

下面是一些示例代码通过在阵列中的每个元素的周期,并将它们一起相乘。 结果之后被存储在阵列ARR3。

码:

.ORIG x3000

MAIN    
    AND R1, R1, #0          ; LOOP counter

    LOOP        
        LD R2, LIMIT
        ADD R2, R2, R1      ; Check to see if we've hit our limit
        BRz END_LOOP

        LEA R2, arr1        ; Load the memory location of arr1
        ADD R2, R2, R1      ; Add our array index to get our current arr1 memory location           
        LDR R3, R2, #0      ; Load the value at arr1[R1] into R3

        LEA R2, arr2        ; Load the memory location of arr2
        ADD R2, R2, R1      ; Add our array index to get our current arr2 memory location
        LDR R4, R2, #0      ; Load the value at arr2[R1] into R4

        ; This loop is used to multiply our numbers
        ; R3 becomes our LOOP2 counter for the multiplication
        ; Example: 7 x 5 = 7 + 7 + 7 + 7 +7
        ;
        AND R5, R5, #0
        ADD R5, R5, R4      ; Make R5 = R4
        ADD R3, R3, #-1     ; Reduce our count by 1
        LOOP2
            ADD R5, R5, R4      ; Add our second number to itself

            ADD R3, R3, #-1     ; Decrease our loop counter
            BRz END_L2      ; If our LOOP2 counter has reached 0 then break
            BR LOOP2
        END_L2

        LEA R2, arr3        ; Load the memory location of arr3
        ADD R2, R2, R1      ; Add our array index to get our current arr3 memory location
        STR R5, R2, #0      ; Store our answer currently in R5 into the memory location stored in R2

        ADD R1, R1, #1      ; Increment our loop counter
        BR LOOP         ; Branch to LOOP
    END_LOOP

HALT    

    ; Variables
LIMIT   .FILL xFFFC     ; Store the value of -4 into our loop limit variable

arr1    .FILL   5   
    .FILL   2   
    .FILL   7   
    .FILL   3    

arr2    .FILL   7   
    .FILL   4   
    .FILL   1   
    .FILL   2  

arr3    .BLKW 4         ; used to store our answer

.END


文章来源: LC3 assembly language - create 2 arrays, multiply, and add sums