Como você imprime uma cara de sorriso na montagem?
Pergunta
Escrevi um programa em Assembler e o compilei. É destinado a imprimir um rosto sorridente azul e, em seguida, aguarde o usuário pressionar uma tecla antes de terminar. Faz isso por último, mas não imprime o rosto sorridente. Alguém pode explicar o que eu fiz de errado?
CSEG segment
org 100h
Begin:
mov ax,0B800h
mov es,ax
mov di,0
mov ah,31
mov al,1
mov es:[di],ax
mov ah,10h
int 16h
int 20h
CSEG ends
end Begin
Eu compilei com MASM com um Linker de 16 bits
Solução
Você só pode cutucar o buffer de vídeo diretamente se estiver no modo de vídeo somente de texto. Acho que você está usando o Windows de algum tipo e, na verdade, não está inicializando o DOS, então você provavelmente está no modo gráfico.
O que você poderia ser capaz de fazer é abrir uma janela do console e depois AltDigitar Para ir para um modo de texto em tela cheia. Tente executar seu programa lá.
Outras dicas
Faz cerca de um ano ou mais desde que trabalhei com a MASM e o único livro de referência que tenho em casa é o MIPS, por isso estou um pouco enferrujado, no entanto, a impressão na tela requer uma interrupção do sistema (int 21h), mas o único sistema A interrupção que estou vendo é a chamada de terminação do programa após a interrupção do teclado.
Seu código está ok, você só precisa executar a tela completa, como sugeriu Greg Hewgill ou configurar sua janela de comando para usar uma fonte de raster antiga (como sistema). Clique com o botão direito do mouse na barra de título da janela e dê uma olhada na guia Fonte.