Underc0de

Programación General => ASM => Mensaje iniciado por: Juan en Mayo 15, 2013, 11:42:15 AM

Título: Obtener dia de la semana 16 bits.
Publicado por: Juan en Mayo 15, 2013, 11:42:15 AM
Código (asm) [Seleccionar]
; Ejemplo obtener dia de la semana.
; juan fary (mDrinky)

org 0x100

mov ah,0x2A
int 21h

cmp al,0 ; Es domingo
je Domingo

cmp al,1 ; es lunes

cmp al,3 ; es miercoles
je Miercoles

cmp al,4 ; es jueves
je Jueves

cmp al,5 ; es viernes
je Viernes

cmp al,6 ; es sabado
je Sabado

salir:

mov ah,0x1
int 21h

mov ah,0x4C
mov al,0

int 0x21

Domingo:
    push textDomingo
    call _print
    jmp salir

Lunes:
    push textLunes
    call _print
    jmp salir

Martes:
    push textMartes
    call _print
    jmp salir

Miercoles:
    push textMiercoles
    call _print
    jmp salir

Jueves:
    push textJueves
    call _print
    jmp salir

Viernes:
    push textViernes
    call _print
    jmp salir

Sabado:
    push textSabado
    call _print
    jmp salir

_print:      ; Función que imprime en pantalla.
    push bp
    mov bp,sp

    mov ah,0x9
    mov dx,word[bp+4]
    int 21h

    pop bp

    ret 2

textDomingo             db 'Es Domindo$'
textLunes               db 'Es Lunes$'
textMartes              db 'Es Martes$'
textMiercoles           db 'Es Miercoles$'
textJueves              db 'Es Jueves$'
textViernes             db 'Es Viernes'
textSabado              db 'Es Sabado$'     
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Karcrack en Mayo 15, 2013, 02:01:39 PM
¿Por qué no usar un array de punteros? :-\
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Cygog en Mayo 15, 2013, 02:06:30 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
¿Por qué no usar un array de punteros? :-\

Coincido XD
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Juan en Mayo 15, 2013, 02:24:40 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
¿Por qué no usar un array de punteros? :-\

Emm, como sería lo que tu dices?


un saludo!




EDITO:

Lo pense y supongo que dices asi...

Código (asm) [Seleccionar]
; Ejemplo obtener dia de la semana.  V2.0
; juan fary (mDrinky)

org 0x100

mov ah,0x2A
int 21h

xor dx,dx
xor ah,ah

mov cx,2
mul cx

mov bx,Dias
add bx,ax

mov dx,[bx]

push dx
call _print

salir:

mov ah,0x1
int 21h

mov ah,0x4C
mov al,0

int 0x21


_print:      ; Función que imprime en pantalla.
    push bp
    mov bp,sp

    mov ah,0x9
    mov dx,word[bp+4]
    int 21h

    pop bp

    ret 2

Dias                    dw D1,D2,D3,D4,D5,D6,D7

D1                      db 'Es Domingo$'
D2                      db 'Es Lunes$'
D3                      db 'Es Martes$'
D4                      db 'Es Miercoles$'
D5                      db 'Es Jueves$'
D6                      db 'Es Viernes'
D7                      db 'Es Sabado$'   


saludos!
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Karcrack en Mayo 15, 2013, 03:09:45 PM
A eso me refería pero se puede simplificar más:
Código (asm) [Seleccionar]
mov ah,0x2A
int 21h

mov bx, ax
shl bx, 2

push [Dias + bx]
call _print
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Juan en Mayo 15, 2013, 03:12:46 PM
Con el fragmento que as puesto no muestra correctamente el resultado  :-\
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Karcrack en Mayo 15, 2013, 03:20:59 PM
No he programado nunca para 16bits... Tal vez sea por no limpiar la parte superior de AX. Mira a ver así:
Código (asm) [Seleccionar]
mov ah,0x2A
int 21h

xor ah, ah
mov bx, ax
shl bx, 2

push [Dias + bx]
call _print
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Juan en Mayo 15, 2013, 03:44:36 PM
Ya se porque es... al ser para 16 bits la palabra es de 2 bytes y no 4, el error esta aquí:

shl bx, 2

En 32 bits estaría bien multiplicar por 4, pero para 16 tienes que multiplicar por 2.

Así funciona correctamente...

Código (asm) [Seleccionar]
    mov ah,0x2A
    int 21h
     
    xor ah, ah
    mov bx, ax
    shl bx, 1
     
    push [Dias + bx]
    call _print     


un saludo!
Título: Re:Obtener dia de la semana 16 bits.
Publicado por: Karcrack en Mayo 15, 2013, 04:47:39 PM
Sí, lo copié de tu código sin pensar y no caí en que eran punteros de dos bytes :P