• Jueves 14 de Noviembre de 2024, 23:10

Autor Tema:  Re: Par e Impar  (Leído 21487 veces)

Logan

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Par e Impar
« en: Lunes 29 de Septiembre de 2003, 20:49 »
0
:brickwall:
Hola Amigos, tengo un problemilla , estoy realizando un programa que me determine si un numero es Par o Impar pero algo no esta bien, aqui les muestro el codigo esperando que uno de ustedes me pueda iluminar porque no he podido, siento que estoy mal en los saltos, pero no lo consigo, les agradezco mucho ayuda bye.

pila    segment         stack
pila    ends
data    segment
        msg1     db     "Par",10,13,"$"
        msg2     db     "Impar",10,13,"$"
        num     dw      6
        d       dw      2      
data    ends
code    segment
        assume ds:data,cs:code,ss:pila
inicio:
        mov ax,data
        mov ds,ax
        mov dx,0
        mov ax,num
        mov bx,d
        div bx
        cmp ah,0d
        jz par
        jmp impar


par:
        mov dx,offset msg1
        mov ah,09h
        int 21h
        jmp fin

impar:
        mov dx,offset msg2
        mov ah,09h
        int 21h
        jmp fin

fin:
        mov ah,4ch
        int 21h

code    ends
       end inicio


:jumpie:
Estamos aqui porque jamás terminaremos de aprender....

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Par e Impar
« Respuesta #1 en: Miércoles 1 de Octubre de 2003, 06:02 »
0
vi tu programa a la rapida , y me parece que el error puede estar en tu comparacion ya que al realizar la divicion entre un registro de 16 bits el resto de la division(DXAX/BX) se ira a DX y no a AH, una solucion simplemente podria ser hacer la comparacion de 0 con DX, o la divicion hacerla con bl....pero la vere mas detenidamente despues

Logan

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Par e Impar
« Respuesta #2 en: Jueves 2 de Octubre de 2003, 19:33 »
0
Muchas gracias Super_G  era precisamento lo que me dijiste, el resuduo queda en DX, solo cambie eso y el programa funciona correctamente, ahora leeré más del por qué de este almacenamiento en DX y no en AH como yo creia, gracias nuevamente, hasta pronto.
:beer:
Estamos aqui porque jamás terminaremos de aprender....

colitroni

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Par e Impar
« Respuesta #3 en: Jueves 9 de Octubre de 2003, 02:48 »
0
Asi a bote pronto, tb se me ocurre hacerlo con una operacion and, ya que si el bit menos significativo está a 1 el nº seguro q es impar, corregirme si me equivoco


He realizado lo que comento arriba y el programa quedaria asi:

DSEG    SEGMENT 'DATA'
   num dw 2456   ;numero que se introduce
   msgp db 'El numero introducido es par.$'
   msgi db 'El numero introducido es impar.$'
DSEG    ENDS

SSEG    SEGMENT STACK   'STACK'
        DW      100h    DUP(?)
SSEG    ENDS

CSEG    SEGMENT 'CODE'
START   PROC    FAR
   ;todo esto para terminar el programa con ret
    PUSH DS
    MOV AX, 0
    PUSH AX
    ; empieza programa            
    MOV AX, DSEG
    MOV DS, AX
    mov bx,num         ;pongo en bx el numero introducido
    and bx,1         ; compruebo el bit 0
    cmp bx,1         ; si bx=1 es impar
    je impar
    mov dx,offset msgp   ; preparo el mensaje par
    jmp continua
    impar:
    mov dx,offset msgi   ; preparo el mensaje impar
    continua:
    mov ah,09h         ; muestro el mensaje en pantalla
    int 21h
    RET
START   ENDP

;*******************************************

CSEG    ENDS

        END    START    ; set entry point.


El programa funciona perfectamente. Salu2.