Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Как это вообще???


Автор: Artem28 8.5.2012, 21:11
Построить вектор В, элементы которого равны элементам побочной диагонали А(m,m).

Автор: iff 9.5.2012, 14:37
Побочная диагональ содержит элементы с индексами i, j, у которых j=(m-1)-i. Соответственно, B[i] = A[i, (m-1)-i], i - целое от 0 до m-1.
Однако, т.к. программа будет реализована на ассемблере, то вам придётся по индексам i, j вычислять смещение (относительный адрес) элемента.
Смещение элемента можно вычислить как i*m+j.
Ниже приведена матрица 4x4 (m=4), где указаны индексы i и j каждого элемента, а также его смещение (в скобках). Восклицательным знаком помечены элементы побочной диагонали.
Код

0,0(0)   0,1(1)   0,2(2)   0,3(3)!

1,0(4)   1,1(5)   1,2(6)!  1,3(7)

2,0(8)   2,1(9)!  2,2(10)  2,3(11)

3,0(12)! 3,1(13)  3,2(14)  3,3(15)

Можно заметить, что элементы побочной диагонали имеют смещения 3, 6, 9, 12, т.е. (i+1)*(m-1).
Действительно, i*m+j=i*m+(m-1)-i=i*(m-1)+(m-1)=(i+1)*(m-1).

Код примерно такой:
Код

.data
; ...
m equ 4
a dw  13,  67,  78,  0
  dw  15,  40,  100, -1
  dw  -60, 123, 50,  11
  dw  7,   8,   3,   1500
b dw m dup(?)

.code
; ...
mov si, offset a
mov di, offset b
mov cx, m
rep1:
add si, (m-1)*2
mov ax, [si]
mov [di], ax
inc di
inc di
loop rep1
; ...


Автор: Artem28 15.5.2012, 19:04
А можно полносю программу с выводом вектора на экран, а то я вообще не шарю ASM((

Автор: maksnik200 30.6.2013, 11:01
Я тоже хотел бы узнатьuser posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)