Здравствуйте. Вопрос такой. Есть программа, выполняющая сортировку массива, написана на паскале, но сама процедура сортировки на ассемблере. Интересует, каким образом передаются параметры из паскаля в ассемблер (по каким адресам), а если точнее - есть один конкретный вопрос - что хранится по адресу [bp+8]. Перечитала уже много всего по этому вопросу, ничего толкового не нашла, ответьте, пожалуйста, или хотя бы дайте скажите, где про это хорошо и подробно написано.
| Код | program insert_sort; {$L insert.obj} procedure ins_sort(n:integer;var data:array of integer);external; const n=10; var a: array [1..n] of integer; i:integer; BEGIN randomize; writeln('Данный массив'); for i:=1 to n do a[i]:=random(100); for i:=1 to n do write(a[i]:4); writeln; ins_sort(n,a); writeln('Отсортированный массив:'); for i:=1 to n do write(a[i]:4); writeln; readln; END.
|
| Код | code segment assume cs:code start: ins_sort proc push bp mov bp,sp pusha
MOV dX,[BP+10] mov Bx,[bp+6] mov cx,dx dec cx mov si,bx add si,2 elem: mov di,si sub di,2 seek_place: mov dx,[di] cmp dx,[si] jng found
sub di,2 cmp di,bx jl found jmp seek_place found: mov ax,si sub ax,2 cmp ax,di je not_found mov ax,[si] push ax mov dx,di mov di,si sub di,2 shift: mov ax,[di] mov [di+2],ax sub di,2 cmp di,dx jg shift
mov di,dx add di,2 pop ax mov [di],ax not_found: add si,2 loop elem
popa pop bp ret endp ins_sort code ends public ins_sort end start
|
что же хранится в этом проклятом [bp+8]?? заранее очень благодарна. хотя бы ссылочку... |