Programación General > ASM (Ensamblador)
PROBLEMA ENSAMBLADOR 8086
(1/1)
benedyt:
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!!
m0skit0:
No se hace la tarea. Muéstranos qué llevas hecho o alguna duda más concreta.
benedyt:
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
Navegación
Ir a la versión completa