Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦИЙ ПО АССЕМБЛЕРУ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
471.55 Кб
Скачать

Примеры на обработку матрицы

(Примеры демонстрируют как использовать способы адресации для обращения к элементам матрицы. На компьютере примеры не проверены и требуют доработки )

Пример. Определить сумму элементов матрицы.

A DW 50 DUP (?)

N DW (?);N*M<=50

M DW (?)

S DW (?)

; --------------------

; ┌───┬───┬───┬───┬───┐ ┐

; │A11│A12│A13│A14│A15│>┐ │ A [BX + SI]

; └───┴───┴───┴───┴───┘ │ │ / \

; ┌───────────────────────┘ │ смещение строк смещ. эл-тов

; │ ┌───┬───┬───┬───┬───┐ │ относительно в строке от-

; └>│A21│A22│A23│A24│A25│>┐ ├─ M=3 начала носит.начала

; └───┴───┴───┴───┴───┘ │ │ N=5 строки

; ┌───────────────────────┘ │ SI = 0,2,4,6 -> дельта SI = 2

; │ ┌───┬───┬───┬───┬───┐ │ BX = 0,10,20 -> дельта BX = 10

; └>│A31│A32│A33│A34│A35│ │

; └───┴───┴───┴───┴───┘ ┘

; Решение на Паскале:

; for i:= 1 to n do

; for j:= 1 to m do

; s:=s+a[i,j]

MOV BX,0

MOV DX,N ;

SHL DX,1 ; дельта BX = n*2

MOV AX,0 ;S:=0

MOV CX,M ;счетчик цикла по строкам

C1: PUSH CX

MOV CX,N ;счетчик цикла по столбцам

MOV SI,0

C2: ADD AX,A[BX+SI]

INC SI

INC SI

LOOP C2

POP CX

ADD BX,DX

LOOP C1

MOV S,AX

Пример. В квадратной матрице поменять значения элементов, симметричных, относительно главной диагонали.

A DW 50 DUP (?)

N DW ? ; <=7

; ---------------------------

; ┌───┬───┬───┐ Решение на Паскале :

; │A11│A12│A13│>┐ for i:= 1 to n-1 do

; └▄▄▄┴───┴───┘ │ for j:=i+1 to n do

; ┌───────────────┘ N=3 A[i,j] <-> A[j,i]

; │ ┌───┬───┬───┐

; └>│A21│A22│A23│>┐

; └───┴▄▄▄┴───┘ │ SI = 0,2,4 -> дельта SI = 2

; ┌───────────────┘ BX = 0,6,12 -> дельта BX = 8

; │ ┌───┬───┬───┐

; └>│A31│A32│A33│

; └───┴───┴▄▄▄┘

;Будем использовать в программе математические индексы i,j

;В специальной процедуре будем вычислять смещение текущего элемента,

;относительно начала матрицы

; SI = 1,2..N – строки

; DI = 1,2..N – столбцы

; BX - смещение = f(i,j) = f(SI,DI)

; Cмещение строки = (i-1)*n*2

; Cмещение эл-тов строки = (j-1)*2

; BX = (i-1)*n*2 + (j-1)*2 = 2*((i-1)*n+j-1)

PUSH SI ; i

PUSH DI ; J

CALL SM

MOV AX,A[BX]

JMP ---

SM PROC NEAR

PUSH AX

PUSH DX

MOV BP,SP

MOV AX,[BP+8]

DEC AX

IMUL N

MOV BX,[BP+6]

DEC AX

IMUL N

MOV BX,[BP+6]

DEC BX

ADD BX,AX

SHL BX,1

POP DX

POP AX

RET 4

SM ENDP

----------------------

MOV CX,N ;-счетчик просмотра строк

DEC CX ;/

MOV SI,1 ;i:=1

с1: PUSH CX

;значение в CX в данном примере определяет кол-во просматривае-

;мых элементов текущей строки, поэтому новое значение CX не формируется.

MOV DI,SI ;-начальное значение j

INC DI ;/

C2: PUSH SI

PUSH DI

CALL SM

MOV AX,AC[BX]

PUSH BX

PUSH DI

PUSH SI

CALL SM

XCNG BX

MOV A[BX],AX

INC DI ; j:=j+1

LOOP C2

POP CX

INC SI ; i:=i+1

LOOP C1