; 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? :-\
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
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...
; 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