Anuncios Google

Ensamblador - Escribiendo texto en la consola del windows

Pues eso, me ha surgido esta duda, como puedo mandar texto a la consola de Windows usando solo ASM?, es decir sin likear a las librerias de C ni nada por el estilo. He probado varios metodos pero todos me dan un resultado indeseado y varios pitidos del Speaker del PC.



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Almamu

He conseguido, mediante

He conseguido, mediante Virtual PC, MSDOS 6.22, WINDOWS 3.11, TASM 2.0 y TLINK 2.0 hacer un Hello World, pero cuando llega al punto de final de cadena($)empieza a tirar errores a "tocateja", xD.


Este es el codigo que he usado:

.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code
 
programa:
	mov ax, @data
	mov ds, ax
	mov dx, offset Cadena1
	mov ah, 9
	int 21h
end programa

EDIT: Vale, he añadido la opcion /3 al linker y he conseguido que muestre bien el texto, pero el programa se para justo al final del todo.

Editado: El límite del ancho de las imágenes es de 500 pixeles, sobrepasar este límite puede descolocar la web e incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| AORV

Editado por AlmamuPP: Perdon no mire el ancho de la imagen y me parecio que era de 500x500(cosa de tener la resolucion a 1600x1200), cagada mia, no volverá a pasar.


http://spike.scu.edu.au/~barr

http://spike.scu.edu.au/~barry/interrupts.html#ah09

mov ah,24h
mov dx,puntero_a_cadena ; tiene que estar terminada en un caracter "$"
mov ds,segmento_de_datos_donde_esta_la_cadena
int 21h

Algo así debería valer. El registro DS igual no lo tienes ni que cambiar.

 

Si no dices los modos que has probado, tampoco podemos hacer gran cosa.

Imagen de Almamu

Probe con el int 21h, era

Probe con el int 21h, era algo parecido a eso. El caso es que he intendado como tu me comentas(que no es muy diferente de como lo he visto en otros sitios)pero ahora mismo no obtengo ningun texto en pantalla. Me he leido la documentacion de NASM por si acaso me hacia falta algo en especial para obtener el puntero, pero por mucho que he probado, nada...

SECTION .data
hello db 'Hola mundo...$'
 
SECTION .code
..@start:
	mov ah,24h
	mov dx,[hello]
	int 21h

Ese codigo lo unico que hace es mover el cursor por la pantalla. como le viene en gana. He probado varias cosas mas, pero o no escribe nada en pantalla o hace lo que le viene en gana. Estoy usando NASM y TLINK 2.0(ya se que este es viejo, pero por el momento solo quiero conseguir algo funcionando...).

Uso este .bat para compilarlo:

@echo Compiling example.s
@nasm -fobj -ot.obj example.s
@echo Linking with an old linker
@tlink t.obj /n
@echo Starting t.exe
@t.exe
@echo Execution ended
@pause

Se linkea bien, pero con el codigo de arriba lanza un warning: no stack incluso cuando pongo la seccion del STACK y no hay manera...


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.