> Везде надо не dword ptr, а far ptr, или проcто call > >
> .MODEL Large,Pascal > > EXTRN Sound: FAR > > .DATA > ; put external data here > EXTRN i: Byte > > .CODE > PUBLIC Init > Init PROC FAR > mov ax, 500 > push ax > call Sound > ret > Init ENDP > END
хотел вот уто4нить кое-4то:
1.здесь кажется нужно писать proc вместо far( EXTRN Sound:proc ),процедура
как никак.
2.4e за модель такая,pascal?;)
и главное:
.DATA
EXTRN i: Byte
.немножко непонял смысла этой записи...
Если я правильно понял, есть довольно большая прога на asm и хочется что-то дергать из нее на pas ? Например, интерфейс или форматированный вывод ?
В этом случае есть такой вариант:
Все-таки делаешь свою прогу на asm в виде obj и подключаешь ее
к pas. Вызываешь ее основную процедуру из паса в самом начале программы (begin / external call / end.).
В asm - программе те ф-ции паса, которые тебе нужны, объявляешь в заголовке как extrn, например:
;...
extrn sound:far
extrn delay:far
extrn nosound:far
;...
;И вызываешь их в коде на asm(выдать звук):
; Sound(100);
push 100
call dword ptr Sound
; Delay(500);
push 500
call dword ptr Delay
; NoSound;
call dword ptr NoSound.
Может, проще сделать ?20.11.01 20:29 Автор: :-) <:-)> Статус: Elderman
> Везде надо не dword ptr, а far ptr, или проcто call > >
> .MODEL Large,Pascal > > EXTRN Sound: FAR > > .DATA > ; put external data here > EXTRN i: Byte > > .CODE > PUBLIC Init > Init PROC FAR > mov ax, 500 > push ax > call Sound > ret > Init ENDP > END
хотел вот уто4нить кое-4то:
1.здесь кажется нужно писать proc вместо far( EXTRN Sound:proc ),процедура
как никак.
2.4e за модель такая,pascal?;)
и главное:
.DATA
EXTRN i: Byte
.немножко непонял смысла этой записи...
в основном smile'y.21.11.01 09:25 Автор: :-) <:-)> Статус: Elderman Отредактировано 21.11.01 09:27 Количество правок: 2
> хотел вот уто4нить кое-4то: > 1.здесь кажется нужно писать proc вместо far( EXTRN > Sound:proc ),процедура > как никак. нет, надо far
> 2.4e за модель такая,pascal?;) это чтобы удобнее писать процедуры - не устанавливать самому фрейм
push bp
mov bp, sp
...
pop bp
это будет делаться автоматически. Параметры процедуры можно просто перечислить в ее заголовке:
PROC Init x:Byte, у:Byte
(не помню точный синтаксис)
и в процедуре обращаться к ним просто
mov al, x
а компилятор будет сам их адресовать относ. bp
В паскале объявить ее: procedure Init(x:Byte, y:Byte); Exterlnal;
> и главное: > .DATA > EXTRN i: Byte > .немножко непонял смысла этой записи...
Тут надо объявлять переменные, объявленные в pas проге, к которым ты хочешь получить доступ из asm кода.
напр. если в Паскалевской проге объявлена
var
i: Byte;
то объявив ее
EXTRN i: Byte
можно обратиться к ней так:
mov i, 1
Thank$ all.21.11.01 12:43 Автор: kar Статус: Незарегистрированный пользователь
> > такой трабл: > > пишу прогу на асме,нужно подгрузить > процедуры,написанные на > > пасе. > > > > хотелось бы pas-progs скомпилить в obj. > > это возможно? > > hm...
Ты навероне под ДОС пишешь на Турбо Паскале? Турбо Паскаль .obj не делает :( Возможный вырианты:
1) писать основную прогу на pas и вызывать asm из нее
2) переписать pas-процедуры на C (pas2c тебе поможет)
3) найти компилятор Паскаля, делающий .obj (я таких не встречал)
З.Ы. Дельфи делает .obj, правда не помню какие - COFF или OMF