La Web del Programador: Comunidad de Programadores
 
    Pregunta:  444 - IMPLEMENTACIÓN DE CÓDIGOS ASSEMBLER EN CLIPPER
Autor:  Marcelo DPR
He creado un código en ASSEMBLER el cual se encarga de hacer una sombra en pantalla, y lo he implementado en un programa CLIPPER v5.2, he utilizado las funciones de intercambio de lenguajes, _PARNI, _RET, _RETNI, etc...
Todo funciona bien en varias invocaciones, pero llega un momento en que el sistema se cuelga.
¿ Cual puede ser el problema ?

  Respuesta:  josé andrés urlezaga
en las rutinas asembler que debas llamar desde clipper las tienes que declarar públicas, por ejemplo: PUBLIC PRU1 COMO NOMBRE DE LA FUNCIÓN PÚBLICA¨. EL SEGMENTO DE CÓDIGO IDEN CODIGO_CODE SEGMENT PARA PUBLIC !CODE! Y EL NOMBRE DE LA FUNCIÓN DEBE SER FAR Y EL ASSUME CS:CÓDIGO_CODE,DS:NOTHIND,ES:NOTHING SI NO SE EMPLEA ESTOS SEGMENTOS. PRIMORDIAL INCLUIR EL FICHERO DE CABECERA EXTASM.INC PARA QUE LUEGO PUEDAS TERMINAR DE MANERA CORRECTA LA FUNCIÓN PUES ANTES DE LIBERAR EL STACK PARA RETORNAR A LA APLICACIÓN HAY QUE LLAMAR A LA FUNCIÓN DE CLIPPER __RET DE MANERA CALL FAR PTR __RET.

  Respuesta:  Juan Reyes
Posiblemente estés enlazando en modo protegido con Blinker, y tu código assembler viola el manejo de selectores de memoria.