PREGUNTAS CONTESTADAS - Ensamblador

 Hay un total de 123 Preguntas.<<  >> 

    Pregunta:  24815 - NUMEROS NEGATIVOS EN ENSAMBLADOR
Autor:  Raul Rocha
estoy eleborando un programa en lenguaje ensamblador sobre las operacione aritmeticas basica con numeros enteros pero no he podido hacerlo funcionar con numeros negativos. soy un principiante en este lenguaje gracias por su ayuda
  Respuesta:  Manuel Redondo
Para utilizar números negativos en binario, se tienen que complementar a 2. Es decir, reservar un bit para el signo. De hecho, todo esto lo hace el compilador y tú no te tienes que preocupar de nada. Pero, si quieres programar a más bajo nivel, necesariamente tienes que complementar a 2 (hay procesadores que tienen instrucciones específicas).
  Respuesta:  Paul Guerra
Para utilizar números enteros negativos se procede como si fuese cualquier otro número:

mov eax, -5
mov dword ptr [ebx], -50
...

Hay que tener en cuenta que los números negativos no se diferencian de los números positivos. Por lo que el código del programa es el que define cómo hay que tratarlos. Para aclarar las cosas:

mov eax, -5
mov ebx, 2
cmp eax,ebx
ja salto ;El salto se produce, aunque nosotros no queremos que salte
...
salto:
...

Lo correcto sería:

mov eax, -5
mov ebx, 2
cmp eax,ebx
jg salto ;El salto no se produce
...
salto:
...

La instrucción JA (Jump if Above) no diferencia entre positivos y negativos, aunque JG (Jump if Greater) sí lo hace.

    Pregunta:  24891 - ERROR DE PILA AL LINKAR UN CODIGO .ASM
Autor:  Jose Robles
Cuando enlazo un .obj que supuestamente lleva un pila (stack), tlink me da la siguiente alerta: "Warning: No stack". Me gustaria saber por qué da esa alerta y como rectificarla, pues me es necesaria para la implementación de procedimientos. Nota: el fuente .asm que uso para la pila sigue la siguiente estructura:
pila segment stack
db 256 dup ('?')
pila ends
...
code segment
assume ..., ss:pila
Gracias.
  Respuesta:  nn nn
primero figate si el programa lo escribiste .com en el caso que fuese .com debiera tener despues de declarar el pto. code o codigo segment una sigla org 100h que es un desplazamiento
si eso esta escrito los comsndos del link es el suiguiente tlink /t [ nombre] y no tlink [nombre]
  Respuesta:  nn nn
primero figate si el programa lo escribiste .com en el caso que fuese .com debiera tener despues de declarar el pto. code o codigo segment una sigla org 100h que es un desplazamiento
si eso esta escrito los comsndos del link es el suiguiente tlink /t [ nombre] y no tlink [nombre]

    Pregunta:  25090 - MANEJAR LA SALIDA DEL PROGRAMA A UN DISPLAY CONECTADO A LPT1
Autor:  Diónysos Durán
Necesito realizar un programa que acepte un caracter de teclado, lo compare con una tabla y despliegue otro caracter distinto en un display a 7 segmentos conectado a través del puerto paralelo de la PC o puerto de la impresora.
Que al inicio despliegue unmensaje que diga: "Introduce caracter" y que si el caracter introducido es "0" (Cero) el display desplegará un "A".
Si es un 1, el display desplegará un "B", y así sucesivamente hasta el "9" que mostrará un "J".

Necesito que me ayuden a resolver este problema.
Sobre todo necesito que me pudieran decir cómo conecto el display a un cable para el puerto de la impresora.
Me urge mucho...
Se los agradezco de antemano...
  Respuesta:  Ergue Vittoriano
Que tal amigo!, leí tu pregunta y creo que puedo ayudarte un poco, lo que quieres hacer segun entendi, es mas o menos sencillo, el programa es lo de menos lo puedes hacer en cualquier lenguaje, y que el programita se encargue de hacer la conversion, lo primero que tienes que hacer es un circuito para conectar el display, como el display tiene 7 segmentos mas el punto que son 8, y por el puerto paralelo tienes 8 bits casualmente, puedes manejar cada segmento con cada bit del puerto de datos, recuerda que el circuito tiene que acoplarse con el protocolo de transmision de la computadora para puerto paralelo, es decir, que tu circuito sepa cuando le esta llegando la informacion, la parte del circuito no es tan facil como crees, tienes que poner un lacht o un buffer para retener el dato que viene del puerto y que el programa se encargue de enviar un caracter que pueda activar los bits correspondientes en display para que se formen las letras...

bueno es todo lo que te puedo decir, te recomiendo que busques ayuda, si no sabes de electronica digital, con un ingeniero o un tecnico de electronica o computacion, porque para armar el circuito debes tener algo de experiencia en la materia...

Bye!

    Pregunta:  25117 - PROGRAMAR EN ENSAMBLADOR PUEDE DAÑAR A LA MEMORIA?
Autor:  Alexis Leung
ES VERDAD QUE CUANDO ESTOY PROGRAMANDO EN ENSAMBLADOR, SI ME DESCUIDO PUEDO DAÑAR LA MEMORIA PERMANENTEMENTE?.
  Respuesta:  Gabriel Amezquita
no, no puedes dañar la memoria, hagas lo que hagas,
lo peor que puedes hacer es borrar de la RAM datos , aunque jueges con el controlador de memoria dinamica no lo dañaras, no te preocpues
  Respuesta:  Martin Candurra
No, eso es totalmente falso.
Podes perder datos, pero nunca dañar la memoria.
  Respuesta:  Juan Mellado
No, no es verdad, no puedes dañar la memoria.

Aunque me gustaría aclarar que:

1.- Si estás programando en ensamblador (o cualquier otro lenguaje) para un ordenador de lo más normal y corriente: ES IMPOSIBLE.

2.- Si el ordenador (o dispositivo) para el que estás programando está mal diseñado, pero bastante mal diseñado, podrías llegar a dañar la memoria o cualquier otro componente. El problema no sería el software, sino el hardware. Por ejemplo, escribir en un determinado puerto de E/S podría estropear un chip haciéndole llegar una tensión más elevada de la soportada. Recuerdo un caso de un ordenador comercial, pero no deja de ser una mera anécdota.

REPITO: No hay que preocuparse, sólo disfrutar programando.

Espero haberte ayudado.
Saludos, Juan
  Respuesta:  Edwin Plauchu
La verdad eso no pasara, la unica tecnica para dañar Hardware es conocida como codigo rojo y nada tiene que ver con el Assembler
en el Assembler solo puedes llevar a cabo operaciones permitidas por la arquitectura del cpu que manejas.

Hechale ganas!

    Pregunta:  25882 - CONFIGURACIONES DE RAID
Autor:  Ernesto Rodríguez Game
Deseo saber si me pueden ayudar dándome el dato de que son y en que consisten las configuraciones RAID o de arreglo de disco. He escuchado solamente nombrar RAID 1, RAID 0, RAID 5 y RAID 10 (he escuchado que es la unión de RAID 1 y RAID 0).
Agradeceré me indiquen si tienen el dato ustedes o en que sitio seguro de Internet puedo bajar la información solicitada.
Saludos y mil gracias anticipadas,
Ernesto Rodríguez G.
  Respuesta:  Mariano Cerdeiro
Buenas.

Hasta donde yo se existen 3 tipos de raids y el 10 que es como bien decis una mezcla del 0 y el 1...

El Raid 0 lo que hace es usar los discos en paralelo, con ello lo que se gana es velocidad, ya que si cada uno tiene un x ancho de banda, al escribir en paralelo tenes 2 veces x de ancho de vanda.

Raid 1 duplica toda la informacion, osea que los discos son imagnes, si la usas con dos discos iguales (claro) te queda la capacidad de tan solo uno..

Raid 5 tiene redundancia como raid 1 pero en ves de tener todo 2 veces que ocupa mucho lugar tiene 1/3 de la informacion duplicada, que es la paridad, si tenes 3 discos podes utilizar raid 5, con menos no... Entonces si tenes 3 discos de 32gb en raid 5 tenes una capacidad de 64, ya que un disco lo perdes con la paridad. En el caso de que un disco se roma podes sacarlo y colocar uno nuevo el cual se cargara con los datos segun la paridad, osea no perdes informacion... Idem con raid 1.

Raid 10 o 1+0 es la mezcla de raid 0 para velocidad y 1 para duplicar la info, se puede recien desde 4 discos claro...

no hay mucho mas para saber, va de concepto, si queres luego implementarlo, se puede hacer por soft o por hard, claro por hard es mas rapido, la implementacion depende mucho del hard, ya que se configura como el bios y si es soft, de que estes corriendo, hoy en dia las placas tienen raid por hard...

Saludos.

    Pregunta:  25948 - VECTORES EN ASM
Autor:  Oscar Castañeda
¿Alguno me puede decir como declarar o simular vectores (y por ende matrices) en el Macro Asambles de Microsoft?
  Respuesta:  Paul Guerra
He visto que declaran matrices en TASM de la siguiente forma:

<nombre_matriz> <tipo> <tamaño> dup(?)

por ejemplo:

matriz dword 0FFh dup(?)

esto deja un espacio en memoria de 255 * sizeof(dword) = 1020 bytes.
Nota: el ? le indica al ensamblador que el contenido de la matriz no sea inicializado.

Yo, para acceder a un elemento de una matriz (de tipo dword en este caso), hago así:

mov eax,offset matriz
mov eax,[eax+4*indice] ;<-- en eax queda el valor

Utilizo este método porque casi siempre son matrices dinámicas.

    Pregunta:  25959 - DONDE ENCUANTRO UN LIBRO PARA TASM EN ESPAñOL
Autor:  Gerson Samaniego
Quiero saber si existen libros de Turbo Assembler 5.0 en español, si existen, donde puedo comprar uno?, puedo pedirlos por encomienda a Bogota D.C.
  Respuesta:  Cemendil Andayulme
Una buena referencia de iniciación, barata y comprensible. Cubre tanto tasm como masm, para 16 bits.

Jon Beltran de Heredia, "Lenguaje Ensamblador de los 80x86"
Anaya Multimedia, ISBN 84-7614-622-1

A título personal, creo que si te interesa ensamblar en serio deberías plantearte usar el 'nasm' (Netwide Assembler), que es libre, está bien documentado y es multiplataforma. Además, incorpora prácticamente todos los opcodes para todos los micros x86, incluso los más modernos.

Un saludo

    Pregunta:  26922 - ACCESO AL DISCO RíGIDO
Autor:  Paul Guerra
¿Hay alguna forma de que un programa de 32 bits acceda a un disco rígido sin utilizar las APIs de Windows? Cuando digo \'acceder al disco rígido\' me refiero a acceder a los sectores del disco, no a un archivo específico.
  Respuesta:  Ronny Rodríguez
Se me ocurre que uses la INT 0x13 en ensamblador, debes colocar varios parámetros tales como CIL,HEAD,SECTOR,...etc.
para usarla desde un programa de 32 bits, podrías crear un DLL desde C/C++....

Espero que funcione.... si necesitas ayuda sobre el uso de la Interrupción, escribeme... bye

    Pregunta:  27521 - PROGRAMA DE MICROPROCESADORES 8080 DE INTEL
Autor:  roberto gomez
de antemano muchas gracias por el favor que me van hacer , resulta que tengo un problema que resover con el lenguaje assembler 8080 de la materia microprocesadores , y no tengo idea de como resolverlo , yo conozco las instrucciones , pero no tengo la destreza de resoverlo solo , queria saber si me escriben las lineas de codigo . aqui va: Se requiere el diseño de un algoritmo que permita mover un bloque de 7 bytes de datos de informacion desde un bloque origen de direccion inicial en base octal de 003 040 y una direccion inicial en la misma base de 003 100 para el bloque destino . un programa en seudocodigo lenguaje 8080 que incluya : numero de linea -localidad de memoria-programa fuente-codigo de instruccion en el sistema octal - comentarios que refuercen la instruccion en cada linea . por favor mucho se los sabre agradecer , gracias le estoy enviando mi direccion de correo para cualquier informacion adicional . GRACIAS .
  Respuesta:  Manuel Redondo
Hola Roberto,

para mover bytes de un sitio a otro, tan fácil como hacer un bucle con contador:

MVI L,7
LXI BC,[@inicio]
LXI DE,[@destino]

bucle
LDAX BC
STAX DE
INX BC
INX DE
DCR L
JNZ bucle

Para escribir las direcciones de memoria en octal basta saber cómo hacerlo en el copilador que utilizas.

Saludos

    Pregunta:  28091 - INTERRUPCIóN DE LA UNIDAD DE DISCO FLEXIBLE (INT 0EH) BLOQUE
Autor:  Monika Luna
Necesito que si es posible me puedan dar el código de un programa que mediante la interrupción de la unidad de disco flexible (int 0EH) pueda yo bloquear la unidad de disco flexible y me mande un mensaje a pantalla cuando la unidad se allá bloqueado.
Les agradezco mucho si alguien me puede ayudar.
  Respuesta:  Wilfredo Pérez Velázquez
Hola colega:

Sobre tu pregunta, me surgen varias como:
En que Sistema Operativo estás trabajando? Porque lo del mensaje a pantalla lo veo difícil en windows, pues mis conocimientos son de la interface de ensamblador para modo real, es decir MS-DOS. Y de este te puedo decir que el núcleo de todo sistema operativo no es reentrante y si tu quieres que cuando se acceda al disco A este te envíe un mensaje UHHHH. Al sistema operativo ir al disco A su interface contra pantalla no está habilitado hasta que no retorne de la operación realizada con el disco, es decir hay que crear un drive para que sea cargado al arrancar window y esa tarea no es en ensamblador.

Ahora si deseas hacerlo a la antigua, te diré que la interrupción de disco flexible no s 0EH sino la 13H, pues la 0EH es un puntero a la tabla de control de acceso a las unidades de dsico flexible, tales como cantidad de sectores, velocidad del cabezal, tamaño de los sectores...

Por la int 13H chequearías los servicios de acceso al disco y devolverías un error al acceder a discos flexibles...

Pero eso es otro tema...

Si lo deseas te envío luego un ejemplo para que arranques desde disco flexible tu ordenador y así deposites un programita residente que te haga lo deseado...

Un saludo.

|<  <<  2 3 4 5 6 7 8 9 10 11 12  >>  >|