PDA

Ver la versión completa : ensamblador basico



eduardo40
18-12-2012, 20:30
Hola a todos en el foro. Estoy estudiando ensamblador como hobby y no paro de darme la cabeza contra la pared. Para empezar estoy aprendiendo en entorno DOS de 16 bits. La pregunta concreta que mucho agraceceria me contesten es:: porque no existe ninguna funciòn o interrupciòn que devuelva el "contenido" hexadecimal o binario de una registro AX o BX. Como todos sabràn las funciones de interrupciòn devuelven el equivalente Ascii del valor hexadecimal, con lo cual hacer una suma y viaualizar su resultado implica mucha programaciòn. Alguien sabe porque esto es asì? Que limitaciòn tecnica existe? Es realmente rarisimo que existiendo instrucciones complejas (por ejemplo de manejo de cadenas) no se pueda "ver" directamente un resultado en el registro AX y solamente se pueda ver a traves de la interrupcion ah,09 int 21 el equivalente ASCII. Porque no me muestra directamente el binario o el hexa? Para que traducir al Ascii?. Gracias mil.

hystd
19-12-2012, 00:00
Buenas y bienvenido.

Básicamente porque DOS es un sistema operativo y no un programa... Un sistema operativo no tiene por qué implementar tal función (aunque pueda)... DOS al igual que cualquier sistema operativo añejo o actual, provee y tiene que proveer de funciones para la gestión de memoria, procesos (si es multiprogramado), ficheros, E/S, etc... Y no necesariamente ofrecer una función específica de un usuario. Para eso, están los PROGRAMAS. Lo que tu quieres, es una tarea que un programa, el cual hace uso de las funciones que le provee el sistema operativo sobre el que se ejecuta, haga las tareas específicas que el usuario requiera. En tu caso, mostrar el código HEX en vez del caracter ASCII.

En cuanto a que las funciones de interrupción del DOS sólo sirven para mostrar caracteres... eso es falso. DOS provee de su llamada a función o INT 21h. Dicha interrupción ejecuta una subrutina u otra dependiendo del valor contenido en la parte alta del registro AX... esto es en AH. Si en AH está el valor 09h, entonces la subrutina a ejecutar es la de impresión por pantalla. Pero si en AH tienes por ejemplo el valor 40h, entonces la función que INT 21h va a ejecutar es la de "escribir en un fichero en disco", y así con cada función que provee DOS...

Para tu suerte, no existe en DOS un valor (o función) que poner en AH tal que te muestre por pantalla el contenido en hexadecimal de un registro del procesador.

Por último, DOS sólo provee de una función para el manejo de cadenas, por lo menos que yo conozca... tal función es precisamente la 09h, es decir, la "impresión por pantalla de una cadena de caracteres en ASCII".

Un saludo.