Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

assembler4, Notas de estudo de Eletrônica

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 09/02/2008

bruno-diego-10
bruno-diego-10 🇧🇷

5 documentos

1 / 10

Pré-visualização parcial do texto

Baixe assembler4 e outras Notas de estudo em PDF para Eletrônica, somente na Docsity! ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ RBT þ Curso de Assembly þ Aula N§ 04 ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; Por: Bruno Diego ÕÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ ASSEMBLY IV ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍ; 0 0 8 7 0 0 8 7 0 0 9 4 Come aremos a ver algumas instru es do microprocessador 8086 0 0 8 7 0 0 9 4agora. Existem os seguintes tipos de instru es: 0 0 8 7 0 0 9 4 0 0 8 2 þ Instru es Aritim ticas 0 0 8 7 0 0 9 4 þ Instru es L¢gicas 0 0 8 7 0 0 9 4 þ Instru es de Controle de Fluxo de Programa 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4 þ Instru es de manipula o de flags 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4 þ Instru es de manipula o da pilha 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4 þ Instru es de manipula o de blocos 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4 þ Instru es de manipula o de registradores/dados 0 0 8 7 0 0 9 4 þ Instru es de Entrada/Sa¡da 0 0 8 7 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4 Vamos come ar com as instru es de manipula o de registradores/dados por serem estas as mais f ceis de entender. ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ 0 0 8 7 0 0 8 4³ Instru o MOV ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; MOV tem a finalidade de MOVimentar um dado de um lugar para outro. Por exemplo, para carregar um registrador com um determinado 0 0 8 2valor. Isto feito com MOV: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV AX,0001h ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 9 0 a mesma coisa que dizer: "AX = 1". Na verdade, movimentamos o valor 1 para dentro do registrador AX. Podemos mover o conte£do de um registrador para outro: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV BH,CL ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 9 0 a mesma coisa que "BH = CL"! 0 0 8 4 Os registradores de segmento n o podem ser inicializados com MOV 0 0 8 2 0 0 8 4tomando um parametro imediato (num rico). Esses registradores s o inicializados indiretamente: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV DS,0 ; ERRADO!!! ³ ³ ³ ³ MOV AX,0 ³ ³ MOV DS,AX ; CORRETO! ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Carregar um registrador com o conte£do (byte ou word, depende da 0 0 8 7 0 0 8 4 0 0 8 2instru o!) armazenado em um segmento simples, basta especificar o 0 0 8 7 0 0 8 4offset do dado entre colchetes. Aten o que o segmento de dados 0 0 8 2 0 0 9 4(DS) assumido por default com algumas excess es: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV AL,[0FFFFh] ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 7 0 0 8 4 0 0 8 7 A instru o acima, pega o byte armazenado no endere o DS:FFFFh e coloca-o em AL. Sabemos que um byte vai ser lido do offset especificado porque AL tem 8 bits de tamanho. 0 0 8 2 Ao inv s de usarmos um offset imediato podemos usar um registrador: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV BX,0FFFFh ³ ³ MOV CH,[BX] ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 2 0 0 8 7 0 0 8 2 Neste caso, BX cont m o offset e o byte no endere o DS:BX armazenado em CH. Note que o registrador usado como indice obrigatoriamente deve ser de 16 bits. ³ MOV SP,BP ³ ³ ... ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 4 0 0 8 4 Se o conte£do de BP n o for 0FFFFh ent o a CPU est com algum 0 0 8 4 0 0 8 4problema e o computador n o pode funcionar! Os flags s o testados de uma outra forma... :) ÕÍÍÍÍÍ͸ ³ XCHG ³ ÔÍÍÍÍÍ; 0 0 8 7 0 0 8 4 Esta instru o serve para trocarmos o conte£do de um registrador pelo outro. Por exemplo: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ XCHG AH,AL ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 7 0 0 8 4 Se AH=1Ah e AL=6Dh, ap¢s esta instru o AH=6Dh e AL=1Ah por causa da troca... 0 0 8 8 0 0 8 5 Pode-se usar uma refer ncia mem¢ria assim como em MOV... com 0 0 8 7 0 0 8 4a mesma restri o de que um dos operandos TEM que ser um 0 0 8 4registrador. N o h possibilidade de usar um operando imediato. ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ MOVSB e MOUSW ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; 0 0 8 7 0 0 9 4 0 0 8 8 Essas instru es suprem a defici ncia de MOV quanto a 0 0 8 7 0 0 8 4 0 0 8 7 0 0 8 4movimenta o de dados de uma posi o de mem¢ria para outra diretamente. Antes de ser chamada os seguintes registradores tem que ser inicializados: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ¿ 0 0 8 8 0 0 8 7 ³ DS:SI <- DS e SI t m o endere o fonte ³ 0 0 8 8 0 0 8 7 ³ ES:DI <- ES e DI t m o endere o destino ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÙ Dai podemos executar MOVSB ou MOVSW. MOVSB move um byte, enquanto MOVSW move um word (16 bits). Os registradores SI e DI sao incrementados ou decrementados de 0 0 8 4acordo com o flag D (Direction) - Veja discuss o sobre os flags na mensagem anterior. No caso de MOVSW, SI e DI serao incrementados 0 0 8 7 0 0 9 4(ou decrementados) de 2 posi es de forma que DS:SI e ES:DI apontem sempre para a pr¢xima word. ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ STOSB e STOSW ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; 0 0 8 7 0 0 9 4 Essas instru es servem para armazenar um valor que est em AX 0 0 8 7 0 0 8 4 0 0 8 7ou AL (dependendo da instru o usada) no endere o apontado por 0 0 8 4ES:DI. Ent o, antes de ser chamada, os seguintes registradores devem ser inicializados: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AX -> Valor a ser armazenado se usarmos STOSW ³ ³ AL -> Valor a ser armazenado se usarmos STOSB ³ 0 0 8 7 ³ ES:DI -> Endere o onde o dado ser armazenado ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 7 0 0 8 4 0 0 8 7 0 0 8 4 Depois da execu o da instru o o registrador DI ser incrementado ou decrementado de acordo com o flag D (Direction). DI ser incrementado de 2 no case de usarmos STOSW, isto garante que ES:DI aponte para a proxima word. ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ LODSB e LODSW ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; 0 0 8 7 0 0 9 4 0 0 8 7 Essas instru es servem para ler um valor que est no endere o apontado por DS:SI e armazen -lo em AX ou AL (dependendo da 0 0 8 7 0 0 8 4 0 0 8 4instru o usada). Ent o, antes de ser chamada, os seguintes registradores devem ser inicializados: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 0 0 8 7 ³ DS:SI -> Endere o de onde o dado ser lido ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 7 0 0 8 4 0 0 8 7 0 0 8 4 Depois da execu o da instru o o registrador SI ser incrementado ou decrementado de acordo com o flag D (Direction). No caso de usarmos LODSW, SI ser incrementado de 2 para garantir que DS:SI aponte para a pr¢xima word. ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ 0 0 8 7 0 0 9 4 0 0 8 7 0 0 8 4³ Outras instru es de manipula o de registros/dados ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; 0 0 8 7 0 0 9 4 Existem ainda as instru es LEA, LES e LDS. þ LEA: 0 0 8 2 0 0 8 7 0 0 8 4 LEA , basicamente, igual a instru o MOV, com apenas uma 0 0 8 7 0 0 8 2 0 0 8 7diferen a: o operando "fonte" um endere o (precisamente: um 0 0 8 7"offset"). LEA simplesmente calcula o endere o e transfere para o 0 0 8 7 0 0 9 4operando "destino", de forma que as instru es abaixo sao equivalentes: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV BX,100h ³ ³ LEA BX,[100h] ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 2 0 0 8 7 0 0 8 4 Por m, a instru o: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ LEA DX,[BX + SI + 10h] ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Equivale a: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ MOV DX,BX ³ ³ ADD DX,SI ; DX = DX + SI ³ ³ ADD DX,10h ; DX = DX + 10h ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 0 0 8 7 0 0 8 4 0 0 8 7 0 0 8 8 Repare que apenas uma instru o faz o servi o de tr s!! Nos
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved