> > трабл такой: > > пишу процедуру на пасе и ее debug'y...полу4ается такая > > хрень... > > > > procedure xyz(var x:byte; y:integer; z:byte); > > ... > > пушутся два слова(естесвенно seg,ofs),затем еще по > слово > > (зна4ения y и z) и еще одно - ip > > > > теперь главное: пушется BP(и скорее всего для некого > > "leave") > > затем естественно ret. > > > > таки вот - 4е за leave push bp??? > > приблизительно все должно выглядеть так: >
> push bp
> mov bp,sp - для доступа к параметрам процедуры
> enter ... - место под локальные переменные...
> ........................
> leave - освобождает память
>
---
картина такая:
...
push bp
mov bp,sp
xor ax,ax
call 5C29:02CD
...тело...
leave
ret 8
несовсем понятно "с доступом к параметрам proc" и leave.
-вообще-то (если я правильно тя понял...) параметры пихаются
в стек и освобождаются они оттуда 4ерез ret с параметром.
нельзя ли 4уть подробней(и 4то делает call 5C29:02CD)?
> трабл такой: > пишу процедуру на пасе и ее debug'y...полу4ается такая > хрень... > > procedure xyz(var x:byte; y:integer; z:byte); > ... > пушутся два слова(естесвенно seg,ofs),затем еще по слово > (зна4ения y и z) и еще одно - ip > > теперь главное: пушется BP(и скорее всего для некого > "leave") > затем естественно ret. > > таки вот - 4е за leave push bp???
приблизительно все должно выглядеть так:
push bp
mov bp,sp - для доступа к параметрам процедуры
enter ... - место под локальные переменные...
........................
leave - освобождает память
---
...уто4нение19.11.01 20:01 Автор: kar Статус: Незарегистрированный пользователь
> > трабл такой: > > пишу процедуру на пасе и ее debug'y...полу4ается такая > > хрень... > > > > procedure xyz(var x:byte; y:integer; z:byte); > > ... > > пушутся два слова(естесвенно seg,ofs),затем еще по > слово > > (зна4ения y и z) и еще одно - ip > > > > теперь главное: пушется BP(и скорее всего для некого > > "leave") > > затем естественно ret. > > > > таки вот - 4е за leave push bp??? > > приблизительно все должно выглядеть так: >
> push bp
> mov bp,sp - для доступа к параметрам процедуры
> enter ... - место под локальные переменные...
> ........................
> leave - освобождает память
>
---
картина такая:
...
push bp
mov bp,sp
xor ax,ax
call 5C29:02CD
...тело...
leave
ret 8
несовсем понятно "с доступом к параметрам proc" и leave.
-вообще-то (если я правильно тя понял...) параметры пихаются
в стек и освобождаются они оттуда 4ерез ret с параметром.
нельзя ли 4уть подробней(и 4то делает call 5C29:02CD)?
...уто4нение20.11.01 11:26 Автор: Cyril <sc> Статус: Member Отредактировано 20.11.01 11:31 Количество правок: 1
доступ к параметрам [bp+2] = z, [bp+4] = y, [bp+6] = address(x)
[bp-...] доступ к локальным параметрам процедуры
> push bp > mov bp,sp
в компилере указана опция StackChecking
так вот это оно самое и есть
> xor ax,ax > call 5C29:02CD
> ...тело...
Если отключишь 286 инструкции то leave исчезнет
Я думаю это должно прояснить ситуацию c leave
enter imm16, 0 286+ push bp ENTER is always slower
mov bp, sp and 4 bytes in length
sub sp, imm16 if imm16 = 0 then push/mov
is smaller
leave 486+ mov sp, bp LEAVE is only 1 byte
pop bp long and is faster
on the 186-386. The
mov esp, ebp MOV/POP is much faster
pop ebp on 486 and Pentium
---
> leave
выталкиваем параметры процедуры и ip
> ret 8 > > несовсем понятно "с доступом к параметрам proc" и leave. > -вообще-то (если я правильно тя понял...) параметры > пихаются > в стек и освобождаются они оттуда 4ерез ret с параметром. > > нельзя ли 4уть подробней(и 4то делает call 5C29:02CD)? >
Работа с локальными переменными и Call20.11.01 11:03 Автор: Chingachguk <Chingachguk> Статус: Member