Загрузка дальнего указателя: LDS reg,mem

Команда загружает операнд памяти (двойное слово) в регистр сегмента и в регистр-получатель.

{$L sum.obj}

Program abc;

Uses CRT;

Const n=20;

Type tm = Array[1..n] of integer;

Var A: tm; i, s:integer;

Procedure SUM (Var A: tm; k:integer; var s: integer);external;

Begin

Clrscr; Randomize;

For i:= 1 to n do begin

A[i]:= Random (100);

Write (A[i]:3);

End;

SUM(A,n,s);

Writeln;

Write(s);

Readkey;

End.

.286; указание типа процессора и набора команд

public sum

stack1 segment stack

db 128 dup (?)

stack1 ends

code segment byte public

assume cs:code, ss:stack1

sum proc near

push bp

mov bp,sp

pusha

lds si,[bp+10]

mov cx,[bp+8]

lds di,[bp+4]

mov ax,0

cycl: add ax,[si]

add si,2

loop cycl

mov [di],ax

popa

pop bp

ret 10

sum endp

code ends

end

Способы адресации

Адресация – это задание адреса хранения операнда.

Существуют следующие способы адресации.

1. Регистровая адресация:

mov ax, bx

push ds

2. Непосредственная адресация:

mov ax, 2

3. Прямая адресация:

mov ax, х

Косвенная адресация:

mov ax, [bх]

5. Базовая, адресация по базе со сдвигом:

mov ax, [bх+2]

mov di, [bp+4]

6. Индексная адресация:

mov ax, mas[si]

7. Базово-индексная адресация:

mov ax, [bx+si+2]




double arrow
Сейчас читают про: