Obtener dia de la semana 16 bits.

Iniciado por Juan, Mayo 15, 2013, 11:42:15 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Código: asm
; 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$'     

¿Por qué no usar un array de punteros? :-\
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
¿Por qué no usar un array de punteros? :-\

Coincido XD

Mayo 15, 2013, 02:24:40 PM #3 Ultima modificación: Mayo 15, 2013, 03:00:04 PM por mDrinky
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
¿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
; 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!

A eso me refería pero se puede simplificar más:
Código: asm
mov ah,0x2A
int 21h

mov bx, ax
shl bx, 2

push [Dias + bx]
call _print
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Con el fragmento que as puesto no muestra correctamente el resultado  :-\

No he programado nunca para 16bits... Tal vez sea por no limpiar la parte superior de AX. Mira a ver así:
Código: asm
mov ah,0x2A
int 21h

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

push [Dias + bx]
call _print
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Ya se porque es... al ser para 16 bits la palabra es de 2 bytes y no 4, el error esta aquí:

Código: text
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
    mov ah,0x2A
    int 21h
     
    xor ah, ah
    mov bx, ax
    shl bx, 1
     
    push [Dias + bx]
    call _print     


un saludo!

Sí, lo copié de tu código sin pensar y no caí en que eran punteros de dos bytes :P
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer