C ARM汇编程序中的可变大小int矩阵

C ARM汇编程序中的可变大小int矩阵,c,assembly,matrix,int,arm,C,Assembly,Matrix,Int,Arm,我目前正试图在ARM汇编程序中实现矩阵乘法。我已经阅读了一些关于汇编程序中矩阵计算的教程,它们都在3x3或4x4浮点矩阵上使用霓虹灯指令。但这和我想做的完全不同。我有两个对称的int矩阵,所以两个矩阵的行数和列数是相同的,我的汇编函数将矩阵的大小作为参数,所以我不能像教程中那样为3x3或4x4矩阵编写matMul函数 所以我的问题是什么是最好最简单的方法?甚至可以将NEON指令与100x100或更大的矩阵一起使用吗?而且单精度和双精度寄存器也是不必要的,因为我只有整数 另一个问题是,我对ARM汇

我目前正试图在ARM汇编程序中实现矩阵乘法。我已经阅读了一些关于汇编程序中矩阵计算的教程,它们都在3x3或4x4浮点矩阵上使用霓虹灯指令。但这和我想做的完全不同。我有两个对称的int矩阵,所以两个矩阵的行数和列数是相同的,我的汇编函数将矩阵的大小作为参数,所以我不能像教程中那样为3x3或4x4矩阵编写matMul函数

所以我的问题是什么是最好最简单的方法?甚至可以将NEON指令与100x100或更大的矩阵一起使用吗?而且单精度和双精度寄存器也是不必要的,因为我只有整数

另一个问题是,我对ARM汇编程序几乎完全陌生,所以我不完全理解NEON指令。

MAIN PROC NEAR

  MOV DI,OFFSET M_RESULT
  MOV SI,OFFSET M_A
  MOV BX,OFFSET M_B
背景1: 莫夫奇,N 分队 MOV列,N

背景2:

  MOV AL,CH  
  MOV X,N
  MUL X
  ADD SI,AX
  MOV AH,0
  MOV AL,P
  ADD BX,AX
  MOV COUNTER,N 
  MOV TEMP,0

BACK3:
  MOV AL,[SI]
  MUL [BX] 
  ADD TEMP,AX
  INC SI
  ADD BX,N
DEC COUNTER
JNZ BACK3


  MOV AX,TEMP
  MOV [DI],AX
  ADD DI,2    
  MOV SI,OFFSET M_A 
  MOV BX,OFFSET M_B 
  INC P
DEC列 JNZ BACK2

  MOV P,0
DEC线 JNZ BACK1

;
MOV AX,4C00H   ;8- End of 
INT 21H        ;9- processing
主端点;程序结束 代码结束;段末 结束-开始;节目结束 ;作者:Mojtaba Alizadeh
INT 21H;9-处理 主端点;程序结束 代码结束;段末
结束-开始

你应该看看这篇博文上链接的一些教程。它们似乎在霓虹灯指示方面对一些人有所帮助。我会花一些时间来更全面地理解NEON,它会帮助您找到答案。您还可以通过递归处理较小的(例如4x4)块来乘以较大的矩阵。我不知道一个很好的链接到一个实现的解释,但这将是一个开始。好的,这听起来已经太复杂了,所以我将从简单的实现开始,并使用3个循环。在汇编程序中有分配内存的方法吗?或者我应该在c代码中分配它,并给汇编函数3个参数,2个指针用于乘法矩阵,1个指针用于结果矩阵?您可以使用NEON,但SIMD通常针对3x3或4x4矩阵进行优化。也就是说,“多数据”部分一次处理3或4个值(对于图形等很好)。要将SIMD用于较大的矩阵,您需要将其细分为较小的4x4操作/子矩阵。谢谢您的评论,但我真的无法想象将矩阵细分为较小的矩阵会如何工作。有人对这种方法有描述或信息吗?