Clipper On Line • Ver Tópico - Integração entre Clipper e Assembler
Mudar para estilo Clássico
Discussão sobre outras linguagens de programação.
Postar uma resposta

Integração entre Clipper e Assembler

07 Jun 2009 13:46

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.

Re: Integração entre Clipper e Assembler

08 Jun 2009 10:42

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

Re: Integração entre Clipper e Assembler

08 Jun 2009 12:09

A interface Assembly para Clipper é a mesma de C. O que muda, claro, é apenas a linguagem.

Re: Integração entre Clipper e Assembler

09 Jun 2009 01:57

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:
-------------------------------------------------------------
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:

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!

Re: Integração entre Clipper e Assembler

17 Jun 2009 14:06

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

Basicamente
Código:
              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.
Postar uma resposta