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

[0] Índice de Mensajes

Ir a la versión completa