我试图找出如何创建两个阵列(硬编码),它们相乘(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
我的理解是一段时间,因为这已被要求,但是这可能帮助别人谁也有类似的问题。 这将是一个有点棘手,如果你不希望在一个线性的实现代码。
- 首先,我会成立了循环来循环通过每个阵列项目
- 存储所有当前正在使用这个循环寄存器
- 创建第二个循环来处理乘法
- 存储值和第二退出循环
- 恢复你的第一个循环的寄存器
- 增加你的循环计数,然后跳回循环的顶端
下面是一些示例代码通过在阵列中的每个元素的周期,并将它们一起相乘。 结果之后被存储在阵列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