Todo pc ejecuta código máquina: Ya sea en el arranque (La bios no es más que código máquina), en la carga del sistema operativo (el kernel esta programado en su mayor parte en código maquina) y en la ejecución de programas (el código fuente compilado o interpretado se transforma de una u otra manera en código máquina). Esta forma de trabajar hace que realmente no sea necesario un sistema operativo para ejecutar aplicaciones (y si me lo poneis dificil, hasta tampoco haría falta la bios). Es por ello que hay aplicaciones como los gestores de arraque (lilo, grub, nt loader), virus, etc que no necesitan de un sistema operativo para funcionar.
Siguiendo este camino, cualquiera podría crear una aplicación que, manteniendola y añadiendola nuevas funcionalidades, podría convertirse en el kernel que Linus Torvalds desarrolló de minix y que posteriormente se transformaría en linux.
Mi intención esta lejos de desarrollar un sistema operativo propio… aún :-), sin embargo a continuación pongo una aplicación, que ejecutada desde un disquete nada más arrancar el pc, muestra un menú y realiza operaciones básicas (chorras). Necesitareis un disquete ya formateado, el programa debug del msdos (por defecto en todos los windows) y que como primera unidad de arranque del pc sea la disquetera (próximamente hablaremos de como pasarlo a un cd mediante el estandar «el torito»). Para los linuxeros de pc, próximamente pondré algo parecido al rawrite. Las instrucciones para hacerlo funcionar son las siguientes:
1-cargad una consola msdos (en windows 9x: inicio/ejecutar/command, en windows nt,2000 o xp: inicio/ejecutar/cmd)
2-Insertad un disquete ya formateado en la disquetera y que no tenga nada importante (ya que perdereis toda la información que contuviera)
3-copiad el siguiente texto a un fichero de texto en vuestro disco duro (dejad al final un retorno de carro), por ejemplo codigo.txt:
a
jmp 1f7
db ‘Seleccione una opcion del menu’
db ‘1- Mostrar hora’
db ‘2- Coche Fantastico’
db ‘3- Salir’
db ‘Desarrollado por Oscar Rodriguez http://sistemasorp.blogspot.com’
db ’00:00:00′
db ‘Fijese en las luces del teclado’
db ‘Retire el disco o cd de la unidad de arranque y pulse una tecla’
cli
xor ax,ax
mov ss,ax
mov sp,7c00
mov es,ax
mov ds,ax
sti
mov ah,0
mov dl,0
int 13h
mov ax,201
mov bx,7e00
mov cx,2
xor dx,dx
int 13h
mov ax,3
int 10h
mov ax,1001
mov bh,1
int 10h
mov ax,1300
mov bx,2
mov cx,1e
mov dx,0119
mov bp,7c03
int 10h
mov ax,1300
mov bx,2
mov cx,0f
mov dx,0519
mov bp,7c21
int 10h
mov ax,1300
mov bx,2
mov cx,13
mov dx,0619
mov bp,7c30
int 10h
mov ax,1300
mov bx,2
mov cx,8
mov dx,0719
mov bp,7c43
int 10h
mov ax,1300
mov bx,4
mov cx,46
mov dx,1705
mov bp,7c4b
int 10h
mov ah,0
int 16h
push ax
mov ax,700
mov bh,0
mov cx,0900
mov dx,094f
int 10h
pop ax
cmp ah,2
je 29f
cmp ah,3
je 2fd
cmp ah,4
jne 29d
jmp 32f
jmp 278
mov ah,2
int 1ah
push cx
mov bx,7c91
mov al,ch
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,ch
and al,0f
add al,30
mov [bx],al
add bx,2
pop cx
mov ch,cl
mov al,ch
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,ch
and al,0f
add al,30
mov [bx],al
add bx,2
mov al,dh
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,dh
and al,0f
add al,30
mov [bx],al
mov ax,1300
mov bx,7
mov cx,8
mov dx,0919
mov bp,7c91
int 10h
jmp 278
mov ax,1300
mov bx,7
mov cx,1f
mov dx,0919
mov bp,7c99
int 10h
mov cx,3
mov ah,2
call 346
mov ah,4
call 346
mov ah,1
call 346
mov ah,4
call 346
loop 311
mov ah,0
call 346
jmp 278
mov ax,1300
mov bx,7
mov cx,3f
mov dx,0908
mov bp,7cb8
int 10h
mov ah,0
int 16h
int 19h
push cx
cli
mov al,ed
out 60,al
in al,64
test al,2
loopnz 34c
mov al,ah
out 60,al
sti
mov ah,0
int 1ah
mov bx,dx
add bx,9
mov ah,0
int 1ah
cmp bx,dx
jnz 360
pop cx
retw 100 0 0 2
q
4-Ejecutad el siguiente comando: debug < codigo.txt
5-Reiniciad el ordenador con el disquete dentro
Este proceso lo que hace es ejecutar tanto comandos del debug del msdos, como intrucciones en ensamblador. Con esto guardamos en el sector de arranque del disquete (no del disco duro) un programa que se ejecutará nada más reiniciar el ordenador, antes de que se cargue el sistema operativo. Este programa tiene un menú con 3 opciones:
1- Mostrar hora: Muestra la hora actual del sistema.
2- Coche Fantastico: Simula las luces del coche fantástico en los led del teclado
3- Salir: Sale del programa, cuando se retira el disquete carga el sector de arranque del disco duro.
Con este programa se muestra todo lo que que se puede necesitar de un pc:
-interfaz con el usuario de entrada (teclado)
-interfaz con el usuario de salida (monitor)
-lectura de disco (lectura del resto del programa en otro sector)
-gestión de memoria (las cadenas de texto y la pila)
-gestión de dispositivos (luces de teclado)
Las instrucciones del debug son:
a: introducir código en ensamblador.
w 100 0 0 2: escribir el programa en los primeros sectores de arranque del disquete desde la posicion de memoria 100.
q: salir del debug.
No voy a explicar que hace cada cosa en el programa, sin embargo si alguien tiene dudas puede preguntarme que significa cualquier parte del código en ensamblador. A grosso modo usa las funciones de la bios para poder funcionar: la interrupción 10h la uso para mostrar cadenas, la interrupción 13h para leer un segundo sector del disquete, la interrupción 16h para leer caracteres pulsados del teclado, la interrupción 19h para reiniciar el sistema sin tener que testearlo todo de nuevo, la interrupción 1ah para hacer retardos y averiguar la hora del sistema. Escribo en el puerto 60 para modificar el estado de los leds del teclado. Su arquitectura se basa en la peculiaridad de la bios de guardar nada más arrancar el primer sector del disquete en la zona de memoria 0000:7C00 y luego enviar la ejecución a ese punto.
El hecho de haber usado la herramienta debug es porque lo tiene todo el mundo en su windows. Sin embargo no esta orientada a usarse para programar sectores de arranque, más bién para editarlos, editar ficheros o crear ficheros ejecutables con extensión .COM; por este último motivo he tenido que ir jugando con los saltos relativos a pelo, es decir, como los programas en debug empiezan en el desplazamiento 100h de la memoria (típico de los ficheros .COM) he estado poniendo los destinos de los saltos en base a esa posición 100h, por lo que cuando he necesitado modificar una instrucción, he tenido que cambiarlos también. Por suerte al ser saltos relativos (e internamente el debug los convierte así) no influye en el resultado final.
Por último si teneis curiosidad por el mundo del pc y sus interioridades, saber como es el proceso de arranque del pc, cambiar las luces del teclado y muchísimo más, teneis el maravilloso y gratuito libro EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2 de Ciriaco García de Celis, el cual explica con mucho detalle las tripas de los pcs.
ole tus huevos!
jajajaja. Quizá me haya pasado un poquito haciendolo todo en ensamblador con el debug, pero era la forma más fácil de que todo el mundo pudiera ejecutarlo sin mayores problemas.
Agradecer a Manu Dávila el que haya probado el invento y me haya recomendado decir que hay que poner un retorno de carro y que el fichero se ha de guardar el el disco duro.
Recuerda que xor reg, reg, es usualmente más veloz que mov reg, 0
Eso no es del todo cierto. En los casos que son registros de 16 bit o más la velocidad efectivamente si es mayor. En casos de registros de 8 bit los ciclos de reloj son los mismos y el tamaño de la instrucción (2 bytes) es igual.
Como podrás comprobar en el código los registros de 16 bits si uso el xor, sin embargo con los de 8 uso el mov por lo que te he explicado arriba.
Hola Oscar, estoy haciendo un proyecto de un pequeño sistema autoarrancable (tipo un SO monolitico) y me gustaria que me comentarás un poco del codigo (mi conocimiento de ASM es más bien nulo, lo voy a hacer en C++ aunque tenga que usar alguna rutina de ASM).
Mi mail es cristiangmNOPONGASESTO@gmail.com
Hola hermano programador… Fijate que tengo un problemón… Me dejaron una tarea para calificacion final en la escuela y si no lo entrego no me gradúo :'(…
Verás, se que es un programa básico, pero me ha creado muchos dolores de cabeza…
Se trata de un programa en DEBUG ke tenga el sig. menu:
1. Altas
2. Bajas
3. Consultas
4. Salir
Elige tu opcion:
Al elegir la opcion ke uno desee se tiene ke limpiar la pantalla:
Limpia la pantalla:
mov ah,0
mov al,3
int 10
En el numero 1 (altas) debe preguntar:
Nombre:
Direccion:
Telefono:
e-mail:
Desea guardar (s/n):
y todo eso guaradarlo komo archivo .txt
krea un archivo
mov ah,3c
mov cx,0
mov dx, direccion de memoria
int 21
En el num. 2 (Bajas), obviamente tiene ke borrar los archivos creados, pero antes de borrarlos, tiene ke mostrarlos al usuario.
Borra un archivo
mov ah,41
mov dx,dir. de archivo a borrar
int 21
En el num. 3 (consultas) debe de mostrar el archivo ke se kreo, ademas de permitir hacerle modificaciones a dicho archivo.
Abrir un archivo
mov ah,3d
mov al, (0 para lectura, 1 para escritura y 2 para ambos, en este caso seria ambos)
mov dx, dir. de archivo
int 21
algunas funciones ke te serian de ayuda:
Cerrar archivo
mov cx,ax
mov ah,3e
mov bx,cx
int 21
Escribir datos en archivo:
mov ah,40
mov bx,cx
mov cx,A
mov dx, dir. de mem. donde se encuentran los datos a guardar en el archivo.
int 21
Leer datos de un archivo:
mov ah,3F
mov dx,cx
mov cx,A
mov dx, dir…
int 21
Te lo enkargo por favor; Hoy por mi mañana por ti… Te lo agradeceria muchisimo karnal (y)…
Me llamo Jackson
Mi mail es jackson.ipn@gmail.com
Hola, quisiera saber como puedo resetear el equipo con debug, gracias
mi mail es angeloj23@yahoo.es
No pongais vuestras direcciones de correo electrónico en los comentarios, que es la leña del fuego con que arrasan los spammers.
En cuanto a lo de resetar, solo si es en modo real (MS-DOS) puedes usar la intrucción jmp ffff:0000. En windows ya no puedes usar ensamblador para este tipo de cosas, por lo que deberías usar la función ExitWindowsEx, y en linux la función reboot(2)
Hola, quisiera saber si hay alguna interrupción (función bios) que permita reiniciar el equipo y como puedo bloquear algunas teclas como el ALT,SUP,ALT GR,ETC.
—– gracias———-
Si es en modo real, puedes usar la función 19h de la BIOS para hacer el reinicio (en frio tendrías que poner a 0 la zona de memoria 40h:72h y en caliente 1234h en la misma zona).
Para bloquear teclas (hablando siempre del modo real) deberías interceptar la interrupción 9 y derivarla a un codigo tuyo que comprobase la tecla pulsada y la ignorase si es una de las que te interesan
Felicidades por el articulo editado, me parece realmente muy interesante, pero me queda una duda. El arranque se inicia a través del unico archivo generado dentro del disquet, pero… ¿como se define el archivo de inicio de entre muchos que puede haber? ¿O es el mismo Pc (bios, Rom o lo que sea) que lo busca y lo ejecuta si ve que funciona?
Perdona si me pregunta parece (o es absurda). Gracias
No, en este caso ya no estamos hablando de archivos, sino de los sectores del disco. La BIOS se encarga de leer el primer sector del disquete, cargarlo en memoria (0:7c00h) y luego lanzar la ejecución a ese punto de la memoria.
Entonces, digamos:
– copiar primero el archivo que tiene el arranque en el disquet
– el archivo se queda en el primer sector (suponido que todo él quepa en ese sector,¿no?)
– cuando la bios busque coge este archivo (que esta en este sector), lo copia en la memoria desde (0:7c00h) y lo ejecuta
Esta bien? o no es tan sencillo.
Gracias por haberme contestado.
No es exactamente un archivo. El archivo contiene código en ensamblador que será grabado directamente en el disquete (no el archivo en si). Como este código en ensamblador ocupa más de 512 bytes (que es lo que puede almacenar un sector) lo graba en dos sectores. La BIOS lee el primer sector, y el codigo cuando se ejecuta se encarga de leer el segundo sector y almacenarlo en memoria.
Creo que lo he entendido.
Me queda una ultima cosa. Si el codigo (que se distribuye por la capacidad del disquet al copiarlo, por la traduccion del codigo a binario ¿lo digo bien?)se engloba en lo que llamamos fichero por la influencia del MSDOS y es introducido en un disquet formateado (nuevamente por la influencia del MSDOS): ¿Es posible desvincularse del MSDOS y copiar un codigo dentro de un disquet sin formatear?
¿O el formateo no influye en nada? lo digo porque casa SO tiene su propio formateo y su propio tipo de FAT.
Gracias de nuevo.
Si, si que es posible. Que usase el debug del msdos con un disquete formateado no fue para otra cosa que para simplificar la creación del mismo para todos los usuarios. Se Podría hacer un programa que hiciese esto mismo en windows, linux, Mac OS, OS/2, DR-DOS, etc.
hola me llamo juan
lei esto me parecio interesante
y me dije como sabian hacer esto
pues esto es lo importante como se hacen las cosas porque y como funcionan etc etc
lo que yo queria hacer es que al arrancar apareciera un menu de opcciones de arranque de juegos como un emuladorsistema operativo poner el juego en un diquete y que al arrancar bun el juego lo plantee a mis cuates a lo menos saber que se puede hacer da esperanzas y ganas de seguir
se lo comente a mis cuates no muy quisieron
y bueno esa era la idea por ello quise saber algo del msdos
o de las primeras cosas que salieron
saludos y sigan con estos comenarios
ha digagame que es un blogger
nuevamente quiero hacer un comentario me llamo juan
me gustaria que la programacion fuera mas facil y estas han sido mis mas grandes dudas hasta haora
en donde se hacian los programas(juegos del atari conoci el 2600 destape uno y era pues un cepillo como de bebe con una bolita la memoria prom)bien en que programa se hacia o en que lenguaje de programacion si segun eran de 8 bits deve ser no tan duro programar en 8 bits
aunque o si las sentencias eran duras porque no hacer un lenguaje de programacion para esta consola
bueno son comentarios
bien es posible hacer
algo asi como en ves de ponerle este brasito se lo cambiemos es decir
piratear el msdos y hacer uno mas o menos parecido
lo que pasa es que tengo un msdos vercion 6.22 en ingles
cabe en tres disquetess? no parece tan dificil
a lo que isisite segun es un minisistema operativo
mi mas grande duda porque no hacer todo en lenguaje maquina
que tamano tendria un instrucccion como la de solo he conocido un poco de sistaxis de programas de programacion ldp como el vb
para decirle en lenguaje maquina por ejemplo antrar al direcctorio c como seria
los dejo
les voy a ha hacer comentarios
si es posible me gustaria ver respuestas a esto
ha hay buenos programas para msdos
y en donde se encuentran
no olviden el msdos talves lo mejor que se ha hecho
oigan
tengo un problema con un escaner
me dije no es posible abrir el origen twain y me pregunto si no es el puerto como se sabe que el puerto paralelo esta bien tengo una p4vxms de ecs
hola chicos me pueden decir
si hay alguna forma de conseguir el windows 95 en archivos autoejecutable para crear los discos de instalacion donde como cuando o como se le puede hacer
lo quiero por la ayuda grafica
y por correr algunos programas que solo corren en verciones viejas
gracias
hola chicos me pueden decir donde puede decargar el msdos 7.10 me gusatria verlo y que me dijeran
ha gracias y haganme caso thanks
no se nada de esto pero para hacer un comentario hacerca del el tema
una ves queria hacer un formato a bajo nivel segun porque pensaba que era mejor y que bueno busque informacion y/o sofware para hacerlo y me encontre que el codigo para hacer un formato a bajo nivel en esto que estudes llaman bug
era algo asi
<23<
<2415io
dhssad
ds
22d
solo por la manera en que lo vi
es decir
se puede hacer un formato a bajo nivel en el disco duro haciendo algo parecido a lo que el autor de esta pagina hizo en relacion a su ministemaoperativo con un blug
den mas informacion de que es esto del blug
gracias
El MSDOS es un sistema operativo propietario y no se puede descargar de ninguna web, ftp o cualquier otro medio legalmente.
Written by: juanitux
From: Barcelona
Hola chaval, que buena idea que me has dado. Te felicito por tu creación.
Desde hace mucho miro con curiosidad un Libro de Assembler(Ensamblador de los x86), en el cual explica casi a la perfección accesos a servicios de la BIOS, usar DEBUG, etc. Pero nunca habia leído este tipo de información, no soy ingeniero, solo un simple técnico en electrónica, con conocimientos en C y al que le gusta mucho Linux.
Con tu blog he podido ver la luz :-), mañana mismo pondré en practica todo esto.
PD: Felicitaciones
hola muyr bueno tu pblubicacion no se si me puedas ayudar. Deseo que una aplicaci’on similar a a que haz creado se ejecute desde el disco antes de iniciar el sistema operativo\
Por favor si saber como ayudame vale!!!
Te puedo echar una mano. Pero tienes que estar seguro de lo que quieres y sobre todo saber ensamblador.
Hola! Mi nombre es Tavo.. mi duda es la siguiente.. yo copie en el archivo txt hasta la instruccion «RET» porque si copio lo demas me da error.. la cosa es que me ubico en A: y escribo la instruccion debug < archivo.txt pero cuando reinicio la maquina me dice.. "retire cualquier medio presente y presione cualquier tecla".. la cuestion es... como hago para que el debug me escriba el programa en el primer sector del diskette??? desde ya muchas gracias... Nos vemos.... TAVO
Hola Tavo. Debes copiar TODO el código en el fichero TXT o no te funcionará la solución, ya que lo que hay por debajo del RET es lo que realmente hace que se escriba en el disquete. Por otro lado en ningún momento había comentado que tengas que ir a la unidad A: para ejeuctar el debug < archivo.txt, hazlo todo desde la unidad C:
Hola,
si el código empieza en 07c0:013c, puesto que los 03ch bytes son la información del disquete, que sumándolos a los 0100h, hacen en total 013ch bytes que dejamos al escribir en el disquete, entonces ¿por qué las cadenas que muestra el programa las referencia en la posición 0000:07c03h y sucesivas?, es más, después de haber realizado el salto inicial que incluye los 0100h. Además, al hacer ese salto inicial, se supone que no es un salto relativo, puesto que los 0100h ya habrían quedado atrás, puesto que se dejan delante del programa. Gracias por leerlo y a ver si me podéis ayudar.
El offset de 100h bytes es necesario solo para el debug del msdos, ya que al introducir comandos con la sentencia a estos se empiezan a meter a partir del offset 100h. Por eso en el caso de los saltos verás que se usan esos 100h bytes de más, pero si te fijas en el código ensamblador en realidad son saltos relativos. Por ejemplo:
La primera instrucción es jmp 1f7, Sin embargo el debug lo transforma a
E9h F4h 00h, que es un salto relativo de F4h bytes (no es F7h porque ya cuenta con los 3 bytes de la intrucción del salto). Así cuando carga el programa en la memoria en al arrancar desde el disquete, el salto sería a 0000:7cf7h. Como podrás comprobar ya no se usa en ningún momento el offset de 100h bytes, ya que los saltos relativos se adaptan a la zona en memoria en la que esten ejecutandonse.
Y qué hay de los 03ch datos de información del disquete, porque estos están almacenados en el primer sector del disquete, el cual se copia a la posición 07c00h.
Sin esos datos, la BIOS no puede copiar y ejecutar el contenido del disquete. A no ser que en realidad no los copie, en cuyo caso no puede interpretarlos, y es contradictorio.
Otra posibilidad es que los copie en otra posición de memoria… ¿?
La BIOS lee el sector completo del disquete a esa posición de memoria, y no necesita ninguna información de disquete ni nada parecido para empezar a ejecutar lo que ha llevado a memoria.
Si te refieres a la información que pone el MS-DOS sobre el tipo de disco, la etiqueta de volumen, etc. No es necesario, puesto que es información solo relevante para el sistema operativo, no para la BIOS.
Un disquete le puedes meter lo que quieras en el primer sector siempre que la BIOS lo pueda interpretar como código ejecutable (ya se encargará el código de tomar otras porciones de memoria como datos)
Hola, me gustaria saber que herramienta diferente de DEBUG puedo utilizar para este ejemplo
GRACIAS
Puedes usar el turbo assembler (tasm).
La cuestión es que a la hora de construirte el .com, el tasm se olvida de los 100h, cosa que esperamos, pero no modifica las direcciones de los saltos y tampoco te hace saltos relativos «ea», así pues poniendo:
mov ax, 0108h ;3 bytes
jmp ax ;2 bytes
se mantienen los 0108h como dirección de destino, cuando no necesitamos saltarlos porque realmente no están.
La opción que he empleado ha sido colocar:
db 0eah
db 05h
db «Sel»
para que salte la cadena «Sel», pero no funciona.
¿Por qué no funciona?
Ahora mismo no tengo la información delante, ¿es posible que los saltos relativos en vez de ser «ea» sean «e9»?
Puedes usar etiquetas:
jmp sel
.
.
.
.
.
sel:
.
.
.
.
Hola,
compilo código fiable de paso a modo protegido y lo escribo en un disquete.
Reinicio y, al leer el pc el disquete, se vuelve a reiniciar automáticamente.
Ya me pasa lo mismo con código fiable y no fiable de paso a modo protegido.
¿A qué se puede deber?
No se a que te refieres con codigo fiable y no fiable
– Con fiable quiero decir código de fuentes que parecen haberlo testeado con resultados positivos.
El documento donde está el código es:
http://www.alpertron.com.ar/ANEXO.PDF
¿puede ser que las definiciones equ de la cabecera de los programas provoquen esos reinicios al no ser saltadas por encima?
– Con no fiable me refiero a código mío.
El problema principal que veo en ese código que me has pasado es que usa la directiva ORG 100h, es decir, a cualquier salto se le sumarán 100 bytes y no funcionará, ya que debería usarse el ORG 0.
El programa ensamblador TASM obliga a que se coloque un ORG 100h al principio.
He probado código ensamblador en modo real con esa directiva y ha funcionado.
¿te animas a conseguir el paso a modo protegido, para publicarlo por ejemplo en tu blog?
Bién, en ese caso hágalo de la siguiente forma:
Cree un fichero .ASM y meta el siguiente código:
.model small
.stack 0
.code
org 7b00h ; necesario hacerlo 100h bytes antes
inicio:
jmp codigo
db ‘Seleccione una opcion del menu’
db ‘1- Mostrar hora’
db ‘2- Coche Fantastico’
db ‘3- Salir’
db ‘Desarrollado por Oscar Rodriguez Parra http://sistemasorp.blogspot.com‘
db ’00:00:00′
db ‘Fijese en las luces del teclado’
db ‘Retire el disco o cd de la unidad de arranque y pulse una tecla’
codigo:
cli
xor ax,ax
;… continuar aqui con el resto de código
END
A continuación ejecute TASM <fichero.asm> y después TLINK <fichero.obj>
Después ejecute debug <fichero.exe> y finalmente w 7c00 0 0 2 (con un disquete metido dentro)
Con este método ya puede usar el TASM para crear su propio código con saltos a etiquetas y demás y luego poder guardarlo en el disquete.
A ver si alguien sabe por qué mi ventana de MS-DOS no me permite ejecutar los programas .COM ni el programa DEBUG.
Antes sí me lo permitía, y ahora sin que yo haya tocado nada (conscientemente), han dejado de funcionar.
Aparece el mensaje:
«El sistema no puede ejecutar el programa especificado»
disculpa por mi pregunta , pero en tu programa como , con que y donde mandas llamar a los mensajes que colocas en los db si no tienen un identificador por ejemplo:
mensaje db «esto es texto $»
La forma del ejemplo es típica en MSDOS, tambien podría haber usado el caracter 0 como en C. Sin embargo las funciones de la BIOS usan directamente el principio de la cadena y su tamaño para representarla.
q tal genios de la programacion , me pueden explicar como funciona esta rutina ??=??’
MOV AH, 1
INT 16h
JZ Sigue
MOV AH, 0
INT 16H
;si presionas eSc finaliza el programa:
CMP AL, 1BH
JNZ Sigue
INT 19H
Pues comprueba si existe en el buffer del teclado una tecla que haya sido previamente pulsada, si no existe vuelve a la etiqueta Sigue, si existe comprueba que esa tecla sea el escape, si no lo es vuelve a la etiqueta Sigue, si lo es sigue con el resto de instrucciones.
Hola viejo quisiera q me ayudes en como hacer un programa en lenguaje ensamblador que lea un diskette. Ya sea con una interrupcion directamente desde la bios o desde DOS llamando al archivo y luego al comando DIR. Espero puedas ayudarme. Mi mail es rafo_del_20@yahoo.es
Hola mayorcete, pues no se exactamente que es lo que quieres… ¿leer un disquete? ¿leer un fichero? ¿ejecutar un dir?
Hola, la respuesta a tu pregunta es leer un diskette. Lo demas eran posibles formas de hacerlo aunq no sabia como. Podrias ayudarme?Saludos y gracias.