algoritmo de direccionamiento de una memoria de matrices triangulares usando ensamblaje

Estaba haciendo un proyecto en ASM sobre el triángulo pascal usando NASM

entonces en el proyecto necesitas calcular el triángulo pascal de la línea 0 a la línea 63

mi primer problema es dónde almacenar los resultados del cálculo -> memoria

segundo problema, qué tipo de almacenamiento utilizo en la memoria, para entender a qué me refiero tengo 3 víasprimero declarar unmatrices completas así será así

memoryLabl:  resd 63*64     ; 63 rows of 64 columns each

pero el problema de esta manera es que no se usa la mitad de las matrices que hacen que mi programano eficiente así que vamos, el segundo método está disponible

que se declara para cada línea una etiqueta para la memoriapor ejemplo :

line0: dd   1
line1: dd  1,1
line2: dd 1,2,1      ; with pre-filled data for example purposes
...
line63: resd 64      ; reserve space for 64 dword entries

esta forma de hacerlo es como hacerlo a mano,

otro de la clase intenta usar macro como puedes veraquí pero no lo entiendo

hasta ahora tan bueno

vamos al último que he usado, que es como el primero pero uso unmatrices triangulares , cómo es eso, al declarar solo la cantidad de memoria que necesito

así que para almacenar la línea 0 a la línea 63 del triángulo pascal, me da un triángulo matrices porque cada nueva línea agrego una celda

He asignado 2080 dword para las matrices de triángulos, ¿cómo es eso? explicar para 2080 dword:

                okey we have line0 have 1 dword /* 1 number in first line */
                             line1 have 2 dword /* 2 numbers in second line */
                             line2 have 3 dword /* 3 numbers in third line */
                             ...
                             line63 have 64 dword /* 64 numbers in final line*/
                  so in the end we have 2080   as the sum of them 

Le doy a cada número 1 dword

okey, ahora hemos creado la memoria para almacenar resultados, comencemos el cálculo

primero# en el triángulo pascal tienes todas las celdas enfila 0 tener valor 1

Lo haré en pseudocódigo para que entiendas cómo pongo uno en todas las celdas de la fila 0:

s=0
for(i=0;i<64;i++):
     s = s+i
     mov dword[x+s*4],1   /* x is addresses of  triangle matrices */

segunda parte en el triángulo pascal es tener elúltima fila de cada línea igual a 1

Usaré pseudocódigo para hacerlo simple

s=0
for(i=2;i<64;i++):
     s = s+i
     mov dword[x+s*4],1

Comienzo desde i igual a 2 porque i = 0 (i = 1) es line0 (line1) y line0 (line1) está lleno porque solo tiene un valor (tow) como digo en la explicación anterior

así que el pseudocódigo de remolque hará que mi rectángulo se vea comoen memoria :

1
1  1
1      1
1          1
1             1
1                 1
1                     1
1                         1
1                              1
1                                 1
...
1                                        1

ahora viene la parte difícil es el cálculo usando este valor en triángulo para llenar todas las celdas del triángulo

comencemos con la idea aquí

let's take cell[line][row]

we have cell[2][1] = cell[1][0]+cell[1][1]
and     cell[3][1]= cell[2][0]+cell[2][1]
        cell[3][2]= cell[2][1]+cell[2][2]

in **general** we have 
        cell[line][row]= cell[line-1][row-1]+cell[line-1][row]

mi problema No pude romper esta relación usando la instrucción ASM porque tengo un

matrices triangulares con las que es extraño trabajar, ¿alguien puede ayudarme a romperlo usando una relación o un pseudocódigo o un código asm muy básico?

Respuestas a la pregunta(1)

Su respuesta a la pregunta