Curso completo de Assembly 16-bits. Apesar de antigo, pode ajudar a entender as bases de Assembly. Vale a lida! ? Segue o programa com 26 aulas: Embasamento Aritimetica binária Registradores Pilha e Flags Instruções de armazenamento e blocos Instruções Lógicas Instruções Aritiméticas Instruções de comparação Saltos Interrupções Shifts Mais instruções de comparação Usando assembly no TURBO PASCAL Usando assembly em C Usando o TURBO ASSEMBLER Mais TASM Entendendo o EMM386 Usando o EMM386 O processador 386 strlen e strcpy em Assembly Aritimética em ponto-fixo Mexendo com a VGA Latches e bitmasks Mexendo ainda mais na VGA O modo de escrita 1 da VGA O modo de escria 3 da VGA O modo de escrita 2 da VGA
Pessoal, Surgiu essa dúvida nos comentários de uma aula do CERO e achei legal de colocar aqui pra gente juntar ideias. Acontece que sabemos que EAX pode ter seus 16 bits mais baixos acessados através de AX e este, por sua vez, permite acesso a seus 8 bits mais baixos (AL) e os 8 bits mais altos também (AH). Sendo assim, se EAX = 0x12345678, então: AX = 0x5678 AH = 0x56 AL = 0x78 Como acessar somente o 0x1234? Na reposta ao usuário que perguntou, expliquei que não existe forma de acesso direta na arquitetura para estes 16 bits mais altos de EAX, ou de qualquer outro registrador, mas daria pra pegar esse valor com outras instruções, por exemplo: MOV EAX, 0x12345678 MOV EBX, 0xFFFF0000 AND EBX, EAX SHR EBX, 0x10 No código acima faço um AND do valor de EAX, que é 0x12345678 com 0xFFFF0000. Isso vai fazer com que EBX contenha 0x12340000. Aí basta empurrar os bits dezesseis (0x10) vezes para a direita com a instrução SHR e pimba, teremos 0x00001234 em EBX, que é o valor que queríamos recuperar de EAX. No entanto eu fiquei com a sensação de que há mais maneiras, provavelmente mais rápidas de se fazer isso. Ideias? Postem aqui para estudarmos! ? Grande abraço!