Listing 2

/*  stringexec */ 

#include <dos.h>

char *x_str = "\xB4\x0E\xB0\x41\xB7\x00\xCD\x10\xCB";

/*

Assembly listing of x_str :

MOV  AH,0Eh    ; put 0Eh in AH register
MOV  AL,41h    ; put 41h (Hex ASCII value of 'A' in AL register
MOV  BH,00h    ; put 00h in BH register (current video page)
INT  10h       ; call interrupt 10h
RET  FAR       ; far return to come back in main routine

*/

void main()
{
   char far *xx_str   /* declaring a far pointer to char */
   
   /* setting the far pointer using MK_FP( )_macro */
   xx_str = (char far *) MK_FP(_DS,x_str);
   
   printf(" This is the character : ");
   
   /* calling xx_str as a far function using the cast */
   (*((void (far *)())xx_str))();
}