Miércoles 20 de Noviembre de 2024, 18:45
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
PROBLEMA ENSAMBLADOR 8086
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: PROBLEMA ENSAMBLADOR 8086 (Leído 4926 veces)
benedyt
Nuevo Miembro
Mensajes: 5
PROBLEMA ENSAMBLADOR 8086
«
en:
Lunes 31 de Enero de 2011, 20:23 »
0
Desarrollar un programa en ensamblador del 8086 en entorno MS-DOS que muestre en pantalla un
mensaje en el que se solicite una cadena binaria de 8 dígitos. A continuación, el programa se encargará
de calcular el valor equivalente de dicha representación binaria según los siguientes sistemas de
representación:
- Binario natural sin signo.
- Binario natural con signo.
- Complemento a 1.
- Complemento a 2.
- Decimal Codificado en Binario BCD.
- Hexadecimal.
QUE ALGUIEN ME AYUDE, POR FAVOR!!
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: PROBLEMA ENSAMBLADOR 8086
«
Respuesta #1 en:
Lunes 31 de Enero de 2011, 20:38 »
0
No se hace la tarea. Muéstranos qué llevas hecho o alguna duda más concreta.
Fr33k K0mpu73r
benedyt
Nuevo Miembro
Mensajes: 5
Re: PROBLEMA ENSAMBLADOR 8086
«
Respuesta #2 en:
Martes 1 de Febrero de 2011, 19:28 »
0
ESTO ES LO QUE TENGO ECHO PARA PASAR DE BINARIO A DECIMAL, HABER QUE TAL:
Código: Text
.MODEL small
.stack 100h
.DATA
cadleer db 9
long db ?
cadescr db 9 DUP (?),'$'
msj db 'Introduzca valor binario ... $'
msj2 db 'Valor en decimal ... $'
.CODE
; ------------------ MACROS -------------
posicionar MACRO fila,colum ; posiciona el cursor en fila, colum
PUSH AX
PUSH BX
PUSH DX
mov ah,2 ;código de función
mov bh,0 ;página de video
mov dh,fila ;fila
mov dl,colum ;columna
int 10h
POP DX
POP BX
POP AX
ENDM
borrar MACRO ; macro borrar pantalla
;borrar pantalla
PUSH AX
PUSH BX
PUSH CX
PUSH DX
mov ah,6 ;código de la función
mov al,0 ;borrar pantalla
mov bh,07h ;atributo para borrado
mov cx,0 ;esquina superior izquierda (0,0)
mov dx, 24*256 +79 ;esquina inferior derecha (24,79)
int 10h
POP DX
POP CX
POP BX
POP AX
ENDM
leer MACRO FRASE ; lee frase del teclado
PUSH AX
PUSH DX
; leer cadena
MOV DX,OFFSET FRASE
MOV AH,0Ah
INT 21h
POP DX
POP AX
ENDM
escribir MACRO FRASE ; muestra frase por pantalla
PUSH AX
PUSH DX
; escribir cadena
MOV DX,OFFSET FRASE
MOV AH,9
INT 21h
POP DX
POP AX
ENDM
escribe_car MACRO char
; metemos en la pila
PUSH AX
PUSH DX
; escribir cadena
MOV AH,6
MOV DL,char
ADD DL,48 ; sumamos para el codigo ASCII
INT 21h
; recuperamos pila
POP DX
POP AX
ENDM
; -------- PROGRAMA PRINCIPAL ----------
; iniciando...
MOV AX,@DATA
MOV DS,AX
; cuerpo
borrar
posicionar 20,20
escribir msj
leer cadleer
; lo metemos en la pila
; para dar la vuelta a los datos
MOV SI,0
BUCLE:
MOV AL, cadescr[SI]
MOV AH,0
PUSH AX
ADD SI,1
MOV BL,long
MOV BH,0
CMP SI,BX
JAE FINBUCLE ; si SI > long sale del bucle
JMP BUCLE
FINBUCLE:
; recogemos los datos de la pila
; y vamos calculando
; en DL tendremos el resultado calculado
MOV DL,0 ; lo ponemos a 0
; recogemos el primer digito
POP CX
CMP CL,48 ; lo comparamos con '0' -> 48
JE CONT
MOV DL,1
CONT: ; calculamos demas digitos
MOV SI,1
BUCL2:
MOV BL,long
MOV BH,0
CMP SI,BX
JAE FINBUCL2 ; si SI <= long sale del bucle
POP CX
CMP CL,48 ; comparamos si el digito es '0' -> 48
JE CONTINUA ; si es 0 saltamos todo.
; si no es 0 suponemos que es 1, aunque sea cualquier digito
MOV DI,0 ; iniciamos el indice
MOV AL,1
POTENCIA: ; calculamos potencia en AL
CMP DI,SI
JAE FINPOT
MOV BL,2
MUL BL
INC DI
JMP POTENCIA
FINPOT:
ADD DL,AL ; EL RESULTADO LO GUARDAREMOS EN DL
CONTINUA:
ADD SI,1
JMP BUCL2
FINBUCL2:
posicionar 21,20
escribir msj2
MOV CL,DL
MOV CH,0
CALL Visualiza_Numero
; cerrando...
MOV AH,4ch
INT 21h
Visualiza_Numero PROC
MOV CH,CL
CMP CH,100 ; comprobamos si tiene 3 digitos
JB DOSDIG
; Tres digitos
MOV AH,0
MOV AL,CH
MOV BL,100
DIV BL
MOV CX,AX
escribe_car CL
DOSDIG:
CMP CH,10
JB UNDIG
; Dos digitos
MOV AH,0
MOV AL,CH
MOV BL,10
DIV BL
MOV CX,AX
escribe_car CL
UNDIG:
escribe_car CH
RET
ENDP
END
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
PROBLEMA ENSAMBLADOR 8086