Fiz um programinha pra ler uma tecla digitada: org 0x100 ;onde a memoria nos coloca
mov ah,9 ;ah=9
mov dx,msg1 ;dx=msg1
int 0x21 ;chama interrupção 21,9
mov ah,0 ;ah=0
int 0x16 ;chama interrupção 16,0
mov dl,108 ;dl=108 (l em ascii)
cmp al,dl ;compara AL e DL
je sim ;se forem iguais
jne nao ;se não
sim:
mov ah,9
mov dx,msg2 ;print string msg2
ret ;tchau
nao:
mov ah,9
mov dx,msg3 ;print string msg3
ret ;tchau
;strings
msg1 db 'Digite uma tecla... $',0
msg2 db 'Voce digitou ',34,'l',34,' parabens! $',0
msg3 db 'Voce nao digitou ',34,'l',34,' =[$',0
Até a parte de comparar ele vai bem, depois, ele não compara, não pula para os labels etc, alguém pode me ajudar?
Hi,
Você esqueceu de chamar pela interrupção 0x21 após mover para o registrador DX, o ponteiro para string.
O código, portanto, seria:
org 0x100 ;onde a memoria nos coloca
mov ah,9 ;ah=9
mov dx,msg1 ;dx=msg1
int 0x21 ;chama interrupção 21,9
mov ah,0 ;ah=0
int 0x16 ;chama interrupção 16,0
mov dl,108 ;dl=108 (l em ascii)
cmp al,dl ;compara AL e DL
je sim ;se forem iguais
jne nao ;se não
sim:
mov ah,9
mov dx,msg2 ;print string msg2
int 0x21 ; Chama a interrupção
ret ;tchau
nao:
mov ah,9
mov dx,msg3 ;print string msg3
int 0x21 ; Chama a interrupção
ret ;tchau
;strings
msg1 db 'Digite uma tecla... $',0
msg2 db 'Voce digitou ',34,'l',34,' parabens! $',0
msg3 db 'Voce nao digitou ',34,'l',34,' =[$',0
Bye.
Ai, é mesmo, heheheh, que falta de atenção minha!!!
E qual é o problema desta:org 0x100
mov ah,0
int 0x16
mov ah,9
mov dx,msg
int 0x21
ret
msg db 'Codigo de retorno: ',al,'$',0
Não entendo!
Hi,
O erro ocorre quando se tenta passar o valor de um registrador (no caso o byte baixo de AX) como um caractere para string, em sua declaração. Você pode mover para uma determinada posição da string o caractere em AL, veja:
org 0x100 ; Origem -> endereço 256
mov ah,0 ; Obtém uma tecla
int 0x16
mov [msg+19],al ; Move para a posição 19 da string, o caractere em AL
mov [msg+20],'$' ; Move para a próxima posição: $ -> finalizar a string
mov ah,9 ; Mostra a string
mov dx,msg
int 0x21
ret
msg db 'Codigo de retorno: ',0 ; Não finalizamos a string com $, pois isso será feito durante a execução do programa.
Note que a string contém 19 caracteres ao ser declarada, e que o último caractere está na posição 18 (a contagem começa do 0). Isso explica porque movemos o caractere para a posição 19 - escrever o caractere após o último na string.
É mais ou menos isso...
Bye
Outra coisa hehehe, tem como passar o valor de um registrador de 8 bits (ex.: al) para um de 32 bits (ex.: eax) ?
Tem como? Tenho tenatado fazer isso mas não obtive sucesso...