CÓMO: Pasar un valor de tipo char de C a MASM por valor y devolver un char

Seleccione idioma Seleccione idioma
Id. de artículo: 104618 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E104618
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Resumen

En el código de ejemplo siguiente se muestra cómo pasar un valor char desde un programa escrito en Microsoft C a un procedimiento escrito con Microsoft Macro Assembler (MASM). La función de MASM también devuelve un valor char al programa en C.

Se utilizan registros para devolver valores de tipos de datos simples. En el caso de código de 16 bits, como un programa de MS-DOS, utilice las convenciones siguientes para devolver datos a un programa de C:
 
char			AL 
short, int, near *	AX 
long, far *		DX: Parte de orden superior (segmento) 
			AX: Parte de orden inferior (desplazamiento)
En el caso de código de 32 bits, como un programa de Windows NT, utilice las convenciones siguientes para devolver datos a un programa de C:
 
char  		AL 
short 		AX 
long, int, *  	EAX
Los ejemplos siguientes incluyen un archivo de C y dos archivos de ensamblado diferentes. Los dos archivos de ensamblado demuestran cómo pasar una variable en modelo pequeño para MS-DOS y en modelo plano para Windows NT. Vincule al módulo de C el módulo de ensamblado apropiado únicamente.

Tenga en cuenta que MASM 6.1 o posterior y el compilador de C/C++ de 32 bits incluido con Visual C++, 32-bit Edition, son necesarios para generar la versión de Windows NT de modelo plano.

Código de ejemplo

 
// Nombre de archivo: CMAIN.C 
// Opciones de compilación necesarias: /c

#include <stdio.h>

#ifdef __cplusplus 
extern "C" { 
#endif

char MasmSub (char);

#ifdef __cplusplus 
} 
#endif

main () 
{ 
	char var = 'a'; 
	printf ("%c\n", var); 
	printf ("%c", MasmSub(var)); 
}

Código de ejemplo para la versión de modelo pequeño de MS-DOS

 
; Nombre de archivo: MASMSUB.ASM 
; Opciones de ensamblado necesarias para MASM: /MX 
; Opciones de ensamblado necesarias para ML: /c /Cx

.MODEL small, C 
.286 
.CODE

MasmSub PROC, \ 
	cVar:BYTE

 	mov al, cVar 	; Cargar el valor char en AL. 
	add al, 25 	; Como la función devuelve un char (un valor 
			; de retorno de 1 byte), C obtendrá el valor de retorno de AL. 

MasmSub ENDP 
END

Código de ejemplo para la versión de modelo plano de Windows NT

 
; Nombre de archivo: MASMSUB.ASM 
; Opciones de ensamblado necesarias para ML: /c /Cx /coff

.386 .MODEL flat, C .CODE

MasmSub PROC, \ cVar:BYTE

mov al, cVar 	; Cargar el valor char en AL. 
add al, 25 	; Como la función devuelve un char (un valor 
		; de retorno de 1 byte), C obtendrá el valor de retorno de AL. 
MasmSub ENDP END
Éste es el resultado del programa:
  a
  z

Propiedades

Id. de artículo: 104618 - Última revisión: sábado, 1 de marzo de 2014 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft C Professional Development System 6.0a
  • Microsoft C Professional Development System 6.0a
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, Learning Edition 6.0 de 32 bits
Palabras clave: 
kbnosurvey kbarchive kbhowtomaster kblangc kbcode KB104618

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com