• Sábado 21 de Diciembre de 2024, 17:40

Autor Tema:  PROBLEMA ENSAMBLADOR 8086  (Leído 4937 veces)

benedyt

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
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!!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
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.

benedyt

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
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
  1.  
  2. .MODEL small
  3.  
  4. .stack 100h
  5.  
  6. .DATA
  7.  
  8.   cadleer db 9
  9.   long db ?
  10.   cadescr db 9 DUP (?),'$'
  11.   msj db 'Introduzca valor binario ... $'
  12.   msj2 db 'Valor en decimal ... $'
  13.  
  14. .CODE
  15.  
  16. ; ------------------ MACROS -------------
  17.  
  18.   posicionar MACRO fila,colum    ; posiciona el cursor en fila, colum
  19.  
  20.    PUSH AX
  21.    PUSH BX
  22.    PUSH DX
  23.  
  24.    mov ah,2 ;código de función
  25.     mov bh,0 ;página de video
  26.     mov dh,fila ;fila
  27.     mov dl,colum ;columna
  28.     int 10h
  29.  
  30.    POP DX
  31.    POP BX
  32.    POP AX
  33.  
  34.  
  35.   ENDM
  36.  
  37.   borrar MACRO                   ; macro borrar pantalla
  38.  
  39.    ;borrar pantalla
  40.    PUSH AX
  41.    PUSH BX
  42.    PUSH CX
  43.    PUSH DX
  44.     mov ah,6 ;código de la función
  45.     mov al,0 ;borrar pantalla
  46.     mov bh,07h ;atributo para borrado
  47.     mov cx,0 ;esquina superior izquierda (0,0)
  48.     mov dx, 24*256 +79 ;esquina inferior derecha (24,79)
  49.     int 10h
  50.    POP DX
  51.    POP CX
  52.    POP BX
  53.    POP AX
  54.  
  55.    ENDM
  56.  
  57.   leer MACRO FRASE               ; lee frase del teclado
  58.  
  59.     PUSH AX
  60.     PUSH DX
  61.     ; leer cadena
  62.     MOV DX,OFFSET FRASE
  63.     MOV AH,0Ah
  64.     INT 21h
  65.     POP DX
  66.     POP AX
  67.  
  68.   ENDM
  69.  
  70.   escribir MACRO FRASE           ; muestra frase por pantalla
  71.  
  72.     PUSH AX
  73.     PUSH DX
  74.     ; escribir cadena
  75.     MOV DX,OFFSET FRASE
  76.     MOV AH,9
  77.     INT 21h
  78.     POP DX
  79.     POP AX
  80.  
  81.   ENDM
  82.  
  83.   escribe_car MACRO char
  84.  
  85.     ; metemos en la pila
  86.     PUSH AX
  87.     PUSH DX
  88.     ; escribir cadena
  89.     MOV AH,6
  90.     MOV DL,char
  91.     ADD DL,48         ; sumamos para el codigo ASCII
  92.     INT 21h
  93.     ; recuperamos pila
  94.     POP DX
  95.     POP AX
  96.  
  97.   ENDM
  98.  
  99. ; -------- PROGRAMA PRINCIPAL ----------
  100.  
  101.   ; iniciando...
  102.   MOV AX,@DATA
  103.   MOV DS,AX
  104.  
  105.   ; cuerpo
  106.   borrar
  107.   posicionar 20,20
  108.   escribir msj
  109.  
  110.   leer cadleer
  111.  
  112.   ; lo metemos en la pila
  113.   ; para dar la vuelta a los datos
  114.  
  115.   MOV SI,0
  116.   BUCLE:
  117.     MOV AL, cadescr[SI]
  118.     MOV AH,0
  119.     PUSH AX
  120.     ADD SI,1
  121.     MOV BL,long
  122.     MOV BH,0
  123.     CMP SI,BX
  124.     JAE FINBUCLE               ; si SI > long sale del bucle
  125.     JMP BUCLE
  126.  
  127.   FINBUCLE:
  128.  
  129.   ; recogemos los datos de la pila
  130.   ; y vamos calculando
  131.  
  132.   ; en DL tendremos el resultado calculado
  133.   MOV DL,0           ; lo ponemos a 0
  134.  
  135.   ; recogemos el primer digito
  136.   POP CX
  137.   CMP CL,48       ; lo comparamos con '0' -> 48
  138.   JE CONT
  139.   MOV DL,1
  140.  
  141.   CONT:          ; calculamos demas digitos
  142.  
  143.   MOV SI,1
  144.   BUCL2:
  145.     MOV BL,long
  146.     MOV BH,0
  147.     CMP SI,BX
  148.     JAE FINBUCL2               ; si SI <= long sale del bucle
  149.  
  150.     POP CX
  151.     CMP CL,48        ; comparamos si el digito es '0' -> 48
  152.     JE CONTINUA     ; si es 0 saltamos todo.
  153.  
  154.     ; si no es 0 suponemos que es 1, aunque sea cualquier digito
  155.     MOV DI,0        ; iniciamos el indice
  156.     MOV AL,1
  157.     POTENCIA:       ; calculamos potencia en AL
  158.       CMP DI,SI
  159.       JAE FINPOT
  160.       MOV BL,2
  161.       MUL BL
  162.       INC DI
  163.     JMP POTENCIA
  164.  
  165.     FINPOT:
  166.       ADD DL,AL                  ; EL RESULTADO LO GUARDAREMOS EN DL
  167.  
  168.     CONTINUA:
  169.  
  170.     ADD SI,1
  171.     JMP BUCL2
  172.  
  173.   FINBUCL2:
  174.  
  175.   posicionar 21,20
  176.   escribir msj2
  177.   MOV CL,DL
  178.   MOV CH,0
  179.   CALL Visualiza_Numero
  180.  
  181.   ; cerrando...
  182.   MOV AH,4ch
  183.   INT 21h
  184.  
  185.   Visualiza_Numero PROC
  186.  
  187.     MOV CH,CL
  188.  
  189.     CMP CH,100        ; comprobamos si tiene 3 digitos
  190.     JB DOSDIG
  191.  
  192.     ; Tres digitos
  193.     MOV AH,0
  194.     MOV AL,CH
  195.     MOV BL,100
  196.     DIV BL
  197.     MOV CX,AX
  198.     escribe_car CL
  199.  
  200.     DOSDIG:
  201.     CMP CH,10
  202.     JB UNDIG
  203.  
  204.     ; Dos digitos
  205.     MOV AH,0
  206.     MOV AL,CH
  207.     MOV BL,10
  208.     DIV BL
  209.     MOV CX,AX
  210.     escribe_car CL
  211.  
  212.     UNDIG:
  213.     escribe_car CH
  214.  
  215.     RET
  216.  
  217.   ENDP
  218.  
  219. END
  220.  
  221.