этот ряд заканчивается рядом длины
ал проект в ASM о треугольнике Паскаля, используя NASM
поэтому в проекте нужно рассчитать паскаль треугольник от линии 0 до линии 63
Моя первая проблема - где хранить результаты расчетов -> память
Вторая проблема, какой тип памяти я использую в памяти, чтобы понять, что я имею в виду, у меня есть 3 способапервый объявитьполные матрицы так будет так
memoryLabl: resd 63*64 ; 63 rows of 64 columns each
но проблема в том, что половина матриц не используется, что делает мою программуне эффективный так что давайте пойдем второй метод доступен
который объявляет для каждой строки метку для памятинапример :
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
этот способ, как сделать это вручную,
некоторые другие из класса пытаются использовать макрос, как вы можете видетьВот но я не понимаю
Все идет нормально
давайте перейдем к последнему, который я использовал, который похож на первый, но я используютреугольные матрицы Как это, объявив только объем памяти, который мне нужен
поэтому, чтобы сохранить строку от 0 до 63 строки паскаль треугольника, это дает мне матрицы треугольника, потому что каждую новую строку я добавляю ячейку
Я выделил 2080 dword для матриц треугольника, как это? объяснить 2080 мечом:
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
У меня есть каждый номер 1 меч
хорошо, теперь мы должны создать память для хранения результатов, давайте начнем расчет
первый# в треугольнике Паскаля у вас есть все клетки встрока 0 имеют значение 1
Я сделаю это в псевдокоде, чтобы вы поняли, как я поместил один во все ячейки строки 0:
s=0
for(i=0;i<64;i++):
s = s+i
mov dword[x+s*4],1 /* x is addresses of triangle matrices */
вторая часть в паскальском треугольнике должна иметьпоследний ряд каждой строки равно 1
Я буду использовать псевдокод, чтобы сделать его простым
s=0
for(i=2;i<64;i++):
s = s+i
mov dword[x+s*4],1
Я начинаю с i, равного 2, потому что i = 0 (i = 1) - это line0 (line1), а line0 (line1) заполнено, потому что содержит только одно (tow) значение, как я говорю в объяснении выше.
так что буксирный псевдокод сделает мой прямоугольник похожим нав памяти :
1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
...
1 1
Теперь самое сложное - это вычисление с использованием этого значения в треугольнике, чтобы заполнить все ячейки треугольника.
давайте начнем с идеи здесь
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]
моя проблема Я не мог разорвать это отношение, используя инструкцию ASM, потому что у меня есть
Треугольные матрицы, с которыми странно работать, может ли кто-нибудь помочь мне сломать их, используя отношение, или очень простой псевдокод или асм код?