2010-02-01 21 views
7

yo uso devcpp y Borland C compilador ....un programa sencillo lenguaje "Hello World" de ensamblador en línea en C/C++

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    mov cx,&name // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

en los fragmentos de código anteriores Quiero imprimir una cadena con la ayuda de lenguaje ensamblador ... pero ¿cómo puedo poner la dirección de la cadena en el registro cx ....

¿Hay algo mal en el código?

+0

0x21 - wow felicitaciones por llegar a lo básico :-) –

+0

¿Cómo se almacena la cuerda? es decir: ¿Cuál es la declaración de 'nombre'? – GManNickG

+4

Sugiero ignorar el ensamblador en modo real de 16 bits y comenzar directamente con el ensamblador de 32 bits. Es mucho más fácil y mucho más práctico en estos días. –

Respuesta

4

no tengo el compilador Borland en la mano, por lo que podría estar misremembering su sintaxis, pero ¿ha intentado esto:

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx,"Hello, world" // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

o esto:

char msg[] = "Hello, world"; 

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx, msg // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

de edición: aunque esto compilará (ahora que he cambiado MOV a LDS), aún arrojará un error en el tiempo de ejecución. Lo intentaré de nuevo ...

+1

no, no funciona ... da error ........ hay alguna otra manera por la cual puedo obtener la dirección de la cadena..y ponerla de nuevo en el registro cx .... – vs4vijay

+0

Hasta donde sé, 'mov cx, msg' puso la dirección' msg' en el registro 'cx'. ¿Que estas obteniendo? – Jack

+0

@ vs4vijay No debe aceptar la solución que no funciona como una respuesta porque es engañosa. – ST3

2

Sólo hay que poner el nombre de la variable en la que hay:

mov ax,4  // (I/O Func.) 
mov bx,1  // (Output func) 
mov cx,name // (address of the string) 
mov dx,6  // (lenght of the string) 
int 0x21  // system call 

Negación: No soy muy bueno en el montaje.