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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top