; 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? :-\
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
¿Por qué no usar un array de punteros? :-\
Coincido XD
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...
; 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:
mov ah,0x2A
int 21h
mov bx, ax
shl bx, 2
push [Dias + bx]
call _print
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í:
mov ah,0x2A
int 21h
xor ah, ah
mov bx, ax
shl bx, 2
push [Dias + bx]
call _print
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...
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