Integração entre Clipper e Assembler

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Integração entre Clipper e Assembler

Mensagem por Dr.Microso »

Senhores saudações!

Não raro, encontramos na NET uma vasta coleção de preciosos executáveis em Assembler, de emprego diverso e com manipulação de recursos fabulosos, porém ainda inexistentes em LIB (ou portados) para o Clipper.

Veja o caso:
> Tenho um executável em ASM (e seu fonte).
> Possui uma instrução de retorno 0 ou 1 ou apenas de mudança de comportamento visual da aplicação (poderia ser UMA outra função específica).
> Não tenho interesse em agregar ou reduzir nada em termos de sua função básica (que pode ser qualquer), porque é única, prevista e aprovada.
> Que linhas de instrução devo colocar dentro desta rotina em ASM para receber a chamada e retornar o valor ao Clipper?
> Como implementar em termos de Clipper uma chamada a esta rotina em ASM e receber seu valor (1 ou 0 por exemplo)?
> A intenção óbvia e criar uma LIB com os OBJ Assembler (que antes eram apenas executaveis para MS-DOS) tratados para uso posterior com Clipper.

Alguém poderia postar exemplos de código?
Exemplo: rotina em ASM (sem modificação) => mesma rotina em ASM modificada para chamada e retorno ao Clipper

Grato!
Nota de Moderação:
por Pablo César: O tópico foi movido da seção Clipper por tratar específicamente de outra linguagem.
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Maurício Elias
Usuário Nível 3
Usuário Nível 3
Mensagens: 304
Registrado em: 12 Mai 2005 08:48

Re: Integração entre Clipper e Assembler

Mensagem por Maurício Elias »

Bom dia colega.

Cara, essa sua função em ASM não tem como receber parâmetros ?

Tente enviar um email para haroldo@unoeste.br
Ele é diretor da fac de inf de Pte Prudente. Pergunta se ele tem algum aluno ou colega q programa em assembler e possa te ajudar.

Abraços.

_______
Maurício
Abraços.
_______
Maurício
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Integração entre Clipper e Assembler

Mensagem por Maligno »

A interface Assembly para Clipper é a mesma de C. O que muda, claro, é apenas a linguagem.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Re: Integração entre Clipper e Assembler

Mensagem por Dr.Microso »

Maurício, saudações!

Grato pela contribuição do e-mail do sr. Haroldo, ainda vou contatá-lo. Contatos assim são muito valiosos!

Não, ela não recebe parametros de entrada (não ainda nesta fase do tópico).
Mas se recebesse, seria em linha de comando, pq é um arquivo executável do qual eu tenho o fonte.

No contexto é apenas uma questão hipotética, para estudos mais profundos e ampliação de conhecimento a partir deste tópico inicial.
Sabe aqueles pequenos executáveis em ASM que sua aplicação ou de outros executa externamente? Vou exemplificar...
Imagine que vc possua um executável (com o fonte) de nome MAURICIO e ele faça apenas uma destas coisas:

> muda o vídeo de 25 linhas para 36 linhas, ou...
> captura o endereço físico do modem (MAC), ou...
> retorne a quantos ciclos encontra-se o processador do PC naquele momento.
> e outros OUs....

Como pode observar, a função (lógica) do executável é bem definida (sem sustos). A ação é prevista ou o tipo de dado retornado está dentro de um escopo.
Vc deseja então ter o código incorporado no seu executável (nada de arquivo externo ou mais um na pasta), executando-o como uma função.
Evidentemente vc quer modificar, compilar e agregar MAURICIO.OBJ a sua LIB.
Veja um código super simplificado que ilustra a intenção...

MICROSO.PRG

Código: Selecionar todos

 -------------------------------------------------------------
LOCAL cA
-------------------------------------------------------------
cls

cA := Mauricio()           //neste caso vai retornar uma STR

DispOutAT(10,10, cA, "GR+/N"); Inke(5)
retu
--------------------------------------------------The End-- 
A função deste ASM é apenas a impressão de uma STR. Está "IN NATURA" como foi encontrado.
Sua simplicidade facilita o entendimento futuro de onde se procede a alteração para retorno do dado ao Clipper.

MAURICIO.ASM

Código: Selecionar todos


dosseg
.model small
.stack 100h

.data
hello_message db 'Saudações CURSORianas a todos!!!',0dh,0ah,'$'

.code
main  proc
      mov    ax,@data
      mov    ds,ax

      mov    ah,9
      mov    dx,offset hello_message
      int    21h

      mov    ax,4C00h
      int    21h
main  endp
end   main
As questões são:

> quais as instruções que deveriam ser agregadas ao código acima para o dado ser retornado ao Clipper?
> O dado no contexto é do tipo Caracter. E se a saída fosse do tipo Numérica, Data, Lógica ou Array?
> Qual seria o melhor compilador e quais parametros de compilação usar?

Um forte abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Integração entre Clipper e Assembler

Mensagem por vagucs »

cara, tem uns 10 anos que nao faço nada em ASM, a rotina que vc vai usar é a _retc(<cChar>)

Basicamente

Código: Selecionar todos

              mov   dx, seg hello_message
              mov   ax, offset hello_message
              push  dx
              push  ax
              call  __retc
              add   sp, 4
É ajustar para gerar um OBJ no formato, esse exemplo acima pode ser obtido no NG do clipper.
Sem mais
Wagner Nunes
www.vagucs.com.br
Responder