18/11/20102 - Instruções Assembly This is Google's cache of http://www.dee.cefet-ma.br/pessoal/orlando/arquivoshtml/Assembler8088.htm. It is a snapshot of the page as it appeared on 15 Nov 2010 11:31:19 GMT. The current page could have changed in the meantime. Learn more Text-only version Apostila das instruções assembler do8088 Departamento de Eletroeletrônica Disciplina:Microprocessadores II, Arquitetura de Sistemas Digitais Professores: Cláudio Leão,Orlando Rocha, Sérgio Campos webcache.googleusercontent.com/searc… 1/55 18/11/2010 2 - Instruções Assembly Índice 1 - Modos de endereçamento do 8086.................................................... 1.1- MODOS DE ENDEREÇAMENTO DE PROGRAMA............................................. 1.2- MODOS DE ENDEREÇAMENTO DE DADOS.................................................. 2 - Tipos de Dados (8086)....................................................................... 3 - Instruções Assembly........................................................................ 3.1- INSTRUÇÕES DE MOVIMENTAÇÃO DE DADOS............................................ 3.1.1 - Instruções de movimentação de uso geral......................................... 3.1.2 - Instruções para manipulação de stack............................................... 3.1.3 - Instruções de conversão de tipo...................................................... 3.2- INSTRUÇÕES ARITMÉTICAS BINÁRIAS...................................................... 3.2.1 - Instruções de adição e subtração..................................................... 3.2.2 - Instruções de comparação e mudança de sinal................................. 3.2.3 - Instruções de multiplicação e divisão............................................... 3.3- INSTRUÇÕES DE ARITMÉTICA DECIMAL.................................................. 3.3.1 - Instruções de alteração para BCD compactado................................. 3.3.2 - Instruções de alteração para BCD nãocompactado............................ 3.4- INSTRUÇÕES LÓGICAS........................................................................ 3.4.1 - Instruções para operações booleanas.............................................. 3.4.2 - Instrução de teste de bit............................................................... 3.4.3 - Instruções de rotação e deslocamento............................................ 3.5- INSTRUÇÕES DE TRANSFERÊNCIA DE CONTROLE...................................... webcache.googleusercontent.com/searc… 2/55 18/11/2010 2 - Instruções Assembly 3.5.1 - Instruções de transferência de controleincondicional......................... 3.5.2 - Instruções de transferência de controlecondicional........................... 3.5.3 - Instruções de LOOP...................................................................... 3.6- OPERAÇÕES COM STRING.................................................................... 3.6.1 - Prefixos de repetição.................................................................... 3.7- INSTRUÇÕES DE CONTROLE DE FLAG..................................................... 3.7.1 - Instruções de controle do flag de direção,flag carry e de interrupção... 3.7.2 - Instruções de transferência de flags................................................ 3.8- INSTRUÇÕES DE ACESSO A PORTAS DE ENTRADA E SAÍDA......................... 3.9- INSTRUÇÕES DE USO GERAL................................................................ 1 - Modos de endereçamento do 8086 Osmodos de endereçamento do 8086 podem ser divididos em dois tipos distintos: 1. Modos de endereçamento de programa 2. Modos de endereçamento de dados 1.1 -Modos de endereçamento de programa Quando deseja-se que a CPU realize umabusca de instrução, o endereço da localização de memória da qual a instrução éobtida é calculado como a soma de um offset armazenado no ponteiro de instruçãoIP, com o conteúdo do registrador CS. Normalmente, o conteúdo do IP é incrementadoà medida que as instruções são executadas. Entretanto, as instruções de desviono fluxo de execução de um programa podem modificá-lo de uma das três maneirasabaixo: 1. Endereçamentorelativo a programa: Umdeslocamento de 8 ou 16 bits webcache.googleusercontent.com/searc… 3/55 18/11/2010 2 - Instruções Assembly fornecido pela instrução na forma de uma dado ésomado ao IP como um número binário sinalizado. Essa operação não altera oconteúdo de CS, sendo uma operação intra-segmento (dentro do próprio segmentocorrente). 2. Endereçamentodireto: Um endereço de 16 bitsobtido da própria instrução na forma de um dado é colocado no IP, nesse casotrata-se de uma operação intrasegmento. Se o endereço especificado for de 32bits, os primeiros dois bytes carregarão o IP e os dois seguintes o CS, nessecaso ocorre uma operação intersegmento (fora do segmento de código corrente). 3. Endereçamentoindireto: Um dos modos deendereçamento de dados (que serão descritos a seguir) podem ser utilizados paraler um dado da memória. Entretanto, esse dado é interpretado como um endereçode memória pelas instruções de desvio ou chamada de subrotina. Se o dado de 16bits é acessado, este será carregado no registrador IP (operaçãointra-segmento). Se no entanto, dois dados de 16 bits são acessados, o primeiroserá carregado em IP e o segundo em CS, realizando assim uma operaçãointer-segmento. 1.2 -Modos de endereçamento de dados Seisopções estão disponíveis para o endereçamento de dados *Modo Imediato Neste tipo de endereçamento, um dosoperandos está presente no byte seguinte ao código da instrução (op-code). Sebytes de endereçamento seguem o op-code, então o dado a ser transferido demaneira imediata virá logo após os bytes de endereçamento. Exemplo: ADD AX,1000h : Soma 1000h ao conteúdo do registrador AX *Modo Direto O modo de endereçamento direto é feitosomando-se os dois bytes seguintes ao op-code, ao CS, para compor um novoendereço linear. Exemplo:suponha que o registrador DS contenha B000h. A instrução MOV DX, [8000h], carregará em DX o conteúdo daposição de memória DS:8000, cujo endereço linear é B8000h. webcache.googleusercontent.com/searc… 4/55 18/11/2010 2 - Instruções Assembly *Modo Direto Indexado Nesse modo de endereçamento utiliza-seos registradores SI e DI como indexadores, somando-se um deslocamento de 8 ou16 bits a um desses registradores de forma a gerar um endereço efetivo(offset). Exemplo: MOV AL,[SI+10h] MOV [DI-1000h],DX *Modo Implícito O modo implícito é uma versãosimplificada do modo de endereçamento direto indexado. A única diferença entreeles é que, nesse modo, não é especificado um deslocamento. Exemplo: MOV AL,[SI] MOV [DI],DX *Modo Relativo a Dados (utilizando oregistrador de segmento DS) Nesse modo o conteúdo do registrador BXé utilizado para formar a base para o endereço linear. Todos os modos deendereçamento descritos até aqui, com exceção do modo imediato, podem serutilizados também no modo relativo. Exemplo: Modo relativo direto Modo relativo implícito Modo relativo direto indexado MOV AX,[BX+1000h] MOV DH,[BX+SI] MOV [BX+DI+1000h],DL *Modo Relativo a Stack Nesse modo o conteúdo do registrador BPé utilizado para formar a base para o endereço linear de acesso a dadosgravados na pilha. webcache.googleusercontent.com/searc… 5/55 18/11/2010 para o endereço linear de acesso 2 . Como o 8086 possui um barramento de 16bits. estará na faixa de 0 a 255. em múltiplastransferências alinhadas.Tipos de Dados (8086) Os principais tipos de dados são osbytes e as words. as comunicações entre o microprocessador e a memória ocorrem comotransferências de words alinhadas a endereços pares. se numa word.[BP+04h] MOV [BP+DI+10h]. Todas as operaçõesassumem a representação em complemento de dois. o low byte éarmazenado no endereço mais baixo e seu endereço é também o endereço da word. A word é uma seqüência dedois bytes que ocupam dois endereços consecutivos quaisquer. Oendereço do high byte é utilizado somente quando a metade superior da wordestiver endereçada separadamente da parte baixa. As operações desalinhadas reduzem a velocidade doprocessamento em função de ciclos extras de barramento. este bit será igual a 1. o bit 0 é omenos significativo (LSB). 16 bits os quais são numerados de 0 a 15.BX Exemplo: 2 . Um byte são 8 bits. o microprocessadorconverte transferências entre endereços não alinhados a words. caso positivoserá 0. o mesmo tem a possibilidade deinterpretar estes operandos de maneiras diversas. Se negativo. Novamente. • Ordinal:Número binário sem sinal armazenado em um byte ou uma word. naword pode-se representar de -32768 a +32767. o bit 0 éo menos significativo (LSB .least significant bit). O bit de sinal é o 7 se for umbyte ou o 15 se for uma word.SP MOV AX. No 8086 e nos demais microprocessadores da família INTEL.googleusercontent. Algumas instruçõesespecializadas reconhecem os seguintes tipos de dados: • Inteiro:Número binário sinalizado armazenado em uma word ou byte.portanto. entre 0 webcache. Embora os bytes e words sejam osprincipais tipos de dados para o 8086. a dadosgravados MOV BP. Uma word tem. Em um byte pode-se ter os valores compreendidos entre -128 a +127.com/searc… 6/55 . sendo estes numerados de 0 a 7. O byte que contém o bit zero da word é chamado delow byte (byte baixo) e o que contém o bit 15 é chamado de high byte (bytealto). Se estiver contidoem um byte.Instruções Assembly na pilha. Uma string pode conter de 0 a (220)-1bytes. Cada dígito é armazenado em um byte.18/11/2010 2 .Instruções de movimentação de dados Neste grupo de instruções estão aquelasque permitem manipular dados do tipo byte. 3 . portanto cada byte comporta doisdígitos. doubleword entre memória eregistradores do microprocessador. word.1 .com/searc… 7/55 . • BCD:Representação de um dígito decimal codificado em binário (Binary Coded Decimal)na faixa de 0 a 9. osdígitos somente podem assumir valores entre 0 e 9. São de três tipos: Instruçõesde movimentação de uso geral Instruçõespara manipulação de stack Instruçõesde conversão de tipo 3. cada umna faixa de 0 a 9. • BCD Compactado(packed BCD): Representação de dígitos decimais codificados em binário. A magnitude do número é o valorbinário do nibble de ordem mais baixa (4 bits menos significativos do byte).googleusercontent. e podem conter qualquer valor nas somas esubtrações. que se aplicam a qualquer microprocessador dafamília 80XXX da Intel 3.Instruções Assembly a 65535. Um decimal não compactado é expresso por um byte sem bit desinal.Instruções de movimentação de uso geral webcache. deve estar zerado para as operações demultiplicação e de divisão.Instruções Assembly Neste capítulo serão apresentadas asinstruções assembly do 8086.1 . • String:Seqüência contínua de bytes ou words. Um dígito é armazenado nos 4 bits menos significativos dobyte e outro nos 4 bits mais significativos. O nibble de ordem mais alta(4 bits mais significativos do byte).1. [BX] Obs: O registrador CS não pode serusado como destino.SS MOV [500].com/searc… 8/55 .DS webcache.Instruções Assembly a) MOV .AX MOV [400]. AL 2 .[400] 3 .[SI] MOV AL.fonte Flags: Nenhum afetado Exemplos:Há 7 tipos de instruções MOV: 1 .BX MOV DS.Do acumulador para a memória MOV [SI].18/11/2010 2 . O conteúdo do fonte não é afetado Formato: MOV destino.Da memória para o acumulador MOV AL.Move Propósito: Copiar o conteúdo do operando-fonte para ooperando-destino.CS MOV CX.[SI] MOV SS.googleusercontent.Do registrador de segmento para amemória ou registrador MOV AX. AL MOV [BX+DI].Da memória ou registrador para registradorde segmento MOV ES. 4 .[BX+2] MOV AX. 18/11/2010 2 .Instruções Assembly 5 .Dado imediato para registrador MOV AX.Dado imediato para a memória MOV BYTE PTR[SI].De registrador para registrador /da memória ou registrador para registrador / deregistrador para a memória MOV CL.99H MOV CX. Um webcache.0FFFFH MOV DI.googleusercontent.1157H b) LDS .[SI] MOV DX.DH MOV AL.Carrega registrador de segmento Propósito: Transferir quatro bytes consecutivos de umoperando fonte para um par de registradores de 16 bits.[SI+1000] MOV [BX+DI].BX MOV DI.61CH 7 .99H MOV BL.DH MOV TABELA[BX+3].com/searc… 9/55 . O operando-fonteprecisa estar na memória.DX MOV CL.AH MOV SI.CL 6 .0FH MOV WORD PTR[BX+1234]. contenha os seguintes bytes E3h.googleusercontent. Formato: LES destino.Instruções para manipulação de stack d) PUSH .1. dword ptr[BX] o registrador ES conterá o valor 2DE3H e oregistrador DI conterá o valor AC24H. dentro do segmento dedados. Modode operação: webcache. c) LES . Formato: LDS destino. contenha os seguintes bytes 21h. fonte Flags: Nenhum afetado Exemplo:Considere que o registrador BX contenha o valor 5334H. DFh e 2Ch. 12h. Após a instrução LES DI. o outro é o DS. O operando-fonteprecisa estar na memória. BX contenha 0FFFFH e queas posições de memória a partir da indicada por SI.com/searc… 10/55 . na área de memória usada como pilha. Após a instrução LDS BX. 3. 24h e ACh.18/11/2010 2 . dentro do segmento dedados.Instruções Assembly dos registradores é aquele especificado nainstrução. Um dos registradores é aquele especificado nainstrução. fonte Flags: Nenhum afetado Exemplo:Considere que o registrador SI contenha o valor 5334H. 2Dh. DI contenha 0FEF3H e queas posições de memória a partir da indicada por BX. dword ptr[SI] o registrador DS conterá o valor 1221H e oregistrador BX conterá o valor 2CDFH.Grava word na pilha Propósito: Colocar. oconteúdo de um registrador ou posição de memória. o outro é o ES.2 .Carrega registrador desegmento extra Propósito: Transferir quatro bytes consecutivos de umoperando fonte para um par de registradores de 16 bits. Decrementa o SP 4.Instruções Assembly 1.Move o byte mais baixo do operando para a locação indicada por SS:SP Formato: PUSH fonte Flags: Nenhum afetado Exemplo: PUSH SI PUSH ES . movendo-o para obyte de mais baixa ordem do operando destino.Move o byte mais alto do registrador ou posição de memória para a locaçãoindicada por SS:SP 3.18/11/2010 2 .Copia word da pilha pararegistrador ou memória Propósito: Retirar uma palavra armazenada no topo da pilha. Grava na pilha a wordarmazenada em ES PUSH [BX+SI].Incrementa o SP em 1 Formato: POP destino Flags: Nenhum afetado webcache.Retira o byte da posição indicada por SS:SP e o move para o byte de altaordem do operando destino.com/searc… 11/55 .colocando-a no registrador ou posição de memória especificada.Decrementa o SP 2.Retira o byte no endereço de memória determinado por SS:SP. Modode operação: 1. Grava na pilha a word armazenada na posição de memória apontadapor (BX+SI) e) POP .googleusercontent. 2.Incrementa o SP em 1 3. 4. Grava na pilha a word armazenada em SI . 0FFFFH. se ovalor em AL for positivo.Converte byte para word Propósito: Propagar o bit de sinal do valor presente noregistrador AL (bit mais significativo) para o registrador AH. Os operandos fontes podemser valores webcache.2 . divisão. Assim.Instruções de conversão de tipo f)CBW . a instrução armazena 0000H em DX e.0FFH.incremento. São suportados tantonúmeros inteiros sinalizados como os não sinalizados. Formato: CBW Flags: Nenhum g)CWD . As operações incluem adição.3 . Assim. Essa instrução é utilizada antes da execução de uma divisãosinalizada do conteúdo de AX por outro operando de 16 bits. Grava em DS a wordno topo da pilha . em caso contrário. operam com dados codificadosem binário. de modo a preenchero DX com o valor do sinal em AX. a instrução armazena 00H em AH e.googleusercontent.Instruções aritméticas binárias As instruções aritméticas binárias dosprocessadores da família 8086/286/386/486/586. Grava em AL a word no topo da pilha .. multiplicação..18/11/2010 2 . em casocontrário. subtração.Converte word em doubleword Propósito: Propagar o bit de sinal do valor presente noregistrador AX (bit mais significativo) para o registrador DX.com/searc… 12/55 . Grava na posição dememória apontada por DI a word da pilha no topo 3. decremento. se ovalor em AX for positivo.Instruções Assembly Exemplo: POP POP POP AX DS [DI] . comparação e mudança de sinal. Formato: CWD Flags: Nenhum 3.1. o flag CF pode ser testadoapós uma instrução aritmética binária para determinar se a operação requercarry ou borrow que será propagado para o próximo estágio da operação. o flag CFserá igual a 1. Os flags SF e OF reportam a aritmética sinalizada. SF e OF para reportar o tipo de resultado produzido pela execuçãoda mesma.googleusercontent. 16 ou 32 bits. registradores ou memória. o resultado foi menor do que o menor valor negativo que pode serrepresentado no formato complemento de dois. Se o número inteiro é sem sinal. O tipo de instrução a ser utilizada para o teste do flag dependerá dodado estar sendo interpretado como valor sinalizado ou não. ou seja.Adição Propósito: Executar a adição normal entre dois operandos. o resultado foi maior do que o maior número positivo que pode serrepresentado no formato complemento de dois. Operandos destino podem serregistradores ou memória (exceto quando o operando fonte estiver na memória). e será setado sempre que um resultado for 00H As instruções aritméticas operam dadosde 8. se o resultado de umaoperação de ADD com dados de 8 bits for maior do que 255 (decimal).Instruções Assembly imediatos.18/11/2010 2 . As instruções aritméticas alteram osflags ZF.Instruções de adição e subtração h) ADD .2. Estes flags de status podem sertestados por qualquer tipo de instrução condicional. 3. O flag OF seráigual a 1 em qualquer destes casos: • Um carry foigerado do MSB para o bit de sinal mais o bit de sinal não gerou um carry para oCF.1 . ou seja. O flag ZF é relevante paraambos.com/searc… 13/55 . umfonte e outro webcache.O flag SF possui o mesmo valor do bit de sinal de um resultado. Os flags são utilizados para refletir o tamanho da operação. isto permite o uso destas instruçõespara a atualização de contadores no controle de loops sem alteração dosreportes referentes aos resultados da aritmética. CF. As instruções de incremento edecremento não alteram o indicador CF. Por exemplo. O flag CF contéminformações importantes para inteiros sinalizados. • Um carry foigerado do bit de sinal para o MSB mas nenhum carry foi gerado para o bit desinal. CF. PF.Adição com carry * Propósito: Executar a adição normal entre dois operandos. Exemplos: ADD ADD AL.Adiciona o conteúdo de AL ao posiçãode memória i) ADC . mais o valor do flag carry existente antes da operação. OF.Adiciona o conteúdo de SI ao conteúdo DL. Formato: ADC destino. SF. OF.fonte Flags: Afetados AF. CF. SF. Exemplos: soma ADC AL. ZF. Adiciona 04H ao conteúdo deAL e então o conteúdodo flag carry ADC posição de conteúdo do ADC byte ptr[300].04H .AL .04H .Adiciona o byte gravado em DS:0300 ao conteúdo de DL ADD conteúdo da DS:SI+BX+02 [SI+BX+2].SI .Adiciona o conteúdo de SI ao conteúdo 14/55 webcache.SI .devolvendo o resultado no destino. 05H . devolvendo o resultado no destino. ZF. Formato: ADD destino.Instruções Assembly destino. Adiciona05H ao conteúdo da posição de memória DS:0300 ADD de AX ADD AX.05H .com/searc… .fonte Flags: Afetados AF.Adiciona 05H ao conteúdo da memóriaDS:0300 e então soma o flag carry AX.googleusercontent. umfonte e outro destino. PF. Adiciona 04H ao conteúdo deAL byte ptr[300].18/11/2010 2 .[300] . 18/11/2010 2 .googleusercontent. com o resultadode (destino+ fonte). ou b) Há um “vai um”na etapa da soma do flag carry (existente antes da operação). j) SUB . devolvendo o resultado no destino. apósa execução da instrução ADC.Subtração Propósito: Executar uma subtração entre dois operandos. AL DL. umfonte e outro destino. caso uma das condições abaixo ocorra: a) Há um “vai um”na etapa da soma dos operandos destino e fonte.[300] e entãosoma o conteúdo do flag carry .Instruções Assembly de AX ADC flag ADC conteúdo da DS:SI+BX+02 e então [SI+BX+2].com/searc… 15/55 . webcache.Adiciona o conteúdo de AL ao posiçãode memória somao conteúdo do flag carry (*) O flag carry será setado.Adiciona o byte gravado em DS:0300 ao conteúdo de DL eentão soma o conteúdo do carry . fonte Flags: Afetados AF. Subtrai 04H do conteúdo de BLe então doresultado o conteúdo do flag carry SBB byte ptr[DI]. PF.04H byte ptr[DI]. ZF. Subtrai 04H do conteúdo de BL .05H .Subtrai o conteúdo de CX do Exemplos: subtrai SBB BL. SF. OF. Formato: SBB destino.Instruções Assembly Formato: SUB destino. um fontee outro destino. PF.devolvendo o resultado no destino. CF.Subtrai o conteúdo de CX do eentão subtrai do resultado carry 16/55 webcache.Subtrai o conteúdo de DL do conteúdo da posição dememória DS:BX+02 j) SBB . Subtrai05H do conteúdo da posição de memória DS:DI SUB conteúdo de AX SUB do conteúdo SUB [BX+2].05H . CF.CX .DL BX. AX. menos o valor do flag carry existente antes da operação. ZF.Subtração com carry Propósito: Executar a subtração entre dois operandos. Subtrai05H do conteúdo da posição de memória DS:DI eentão subtrai do resultado o conteúdo do flag carry SBB conteúdo de AX o conteúdo do flag AX.Subtrai a word gravada em DS:SI deBX .[SI] .04H .CX .fonte Flags: Afetados AF. Exemplos: SUB SUB BL. OF.com/searc… .18/11/2010 2 . SF.googleusercontent. com/searc… 17/55 . Subtrai 1 do conteúdo de BX : Subtrai1 da word gravada na posição de apontadapor DS:0100 word ptr [0100] Obs:Registradores de segmento não podem ser usados como operando. Soma 1 ao conteúdo de BL :Soma 1 ao byte gravado na posição de apontadapor DS:SI byte ptr [SI] memória Obs:Registradores de segmento não podem ser usados como operando.DL Propósito: Soma 1 aoconteúdo de um operando. ZF. ZF. Formato: INC destino Flags: Afetados AF.googleusercontent. OF. SF.Decrementa destino em 1 Propósito: Subtrai 1 doconteúdo de um operando.Subtrai o conteúdo de DL do conteúdo da posição dememória DS:BX+02 e então do resultado o conteúdo doflag carry resultado o conteúdo SBB subtrai k) INC . PF.Subtrai a word gravada em DS:SI deBX e então subtrai do do flag carry . Formato: DEC destino Flags: Afetados AF.Incrementa destino em 1 [BX+2]. PF.18/11/2010 2 . l) DEC . que pode ser registrador ou posição de memória.Instruções Assembly SBB do conteúdo BX. Exemplos: INC INC BL . webcache. SF. que pode ser registrador ou posição de memória. OF.[SI] . Exemplos: DEC DEC memória BX . 57H DI. Compara osconteúdos de DI e BX . CF.com/searc… 18/55 . OF.[SI+BX+3] .. Compara umaword gravada na posição DS:SI. PF. OF.Compara dois operandos Propósito: Efetuar uma subtração entre dois operandos.Multiplicação sem sinal webcache. Compara o conteúdo de AL com o valor57H . CF. Exemplo:Considere que o registrador CX contenha o valor 0005 (+5). PF.BX [SI].18/11/2010 2 . SF. Após a execução dainstrução NEG CX. quepode ser registrador ou posição de memória.fonte Flags: Afetados AF. Formato: NEG destino Flags: Afetados AF.Calcula o complemento dedois do destino Propósito: Efetuar o complemento de dois de um operando. conteúdode AX com o CMP armazenado na DS:SI+BX+3 CH.AX .2. Formato: CMP destino.Instruções de multiplicação e divisão o) MUL . ZF. Exemplos: CMP CMP CMP AL. ZF.alterando os flags e descartando o resultado da operação.googleusercontent. oregistrador conterá o valor FFFB (-5).2 .3 . SF. Compara oconteúdo de CH com o byte posiçãode memória n) NEG .2.Instruções Assembly 3.Instruções de comparação e mudança de sinal m) CMP . 3. realiza oproduto entre AL e CL. SF.6000H MUL resultado BX . OF.googleusercontent.com/searc… 19/55 .Multiplicação com sinal Propósito: Efetuar uma multiplicação sinalizada entre oconteúdo do acumulador (AL ou AX) pelo operando fonte. indefinidos AF. Formato: MUL fonte Flags: Afetados CF. 44H MUL AX CL .Instruções Assembly Propósito: Efetuar uma multiplicação não sinalizada entre oconteúdo do acumulador (AL ou AX) pelo operando fonte. PF. realiza oproduto de 16 bits entre AX e BX.18/11/2010 2 . resultado em MOV AX.1234H MOV BX. SF. devolvendo o resultado noacumulador AX (caso a operação tenha envolvido AL com um operando de 8 bits). ZF. ou em DX e AX (caso a operação tenha envolvido AX e um operando de 16bits). os operandospodem ter valores na faixa de -128 a +127 (operação de 8 bits) ou entre -32768a +32767 (operação de 16 bits). devolvendo o resultadono acumulador AX (caso a operação tenha envolvido AL com um operando de 8bits). Como são sinalizados . OF. Formato: IMUL fonte Flags: Afetados CF. PF. 83H MOV CL. webcache. em DX(parte alta) eAX(parte baixa) p) IMUL . indefinidos AF.ou em DX e AX (caso a operação tenha envolvido AX e um operando de 16 bits). Exemplos: MOV AL. ZF. PF. realiza oproduto entre AL e CL. divisor em BL.Dividendo em AX. 83H MOV CL. resultado em MOV AX. realiza oproduto de 16 bits entre AX e BX.divisor em BX. Dividendo em DX:AX.1234H MOV BX.googleusercontent. o quociente da operação fica em AX eo resto da divisão em DX. Exemplos: DIV em AL e DIV estará em BL . O quociente AX e o resto em DX webcache.6000H IMUL BX resultado .com/searc… 20/55 . SF. em DX(parte alta) eAX(parte baixa) q) DIV .Instruções Assembly Exemplos: MOV AL. Na operação de 16 bits.18/11/2010 2 . OF. O quociente estará oresto em AH BX . CF. o quociente da operação de divisão fica em AL e o restoda divisão em AH. 44H IMUL CL AX .ou em DX e AX (caso a operação tenha envolvido DS:AX e um operando de 16 bits). devolvendo o resultado noacumulador AX (caso a operação tenha envolvido AX com um operando de 8 bits).Na operação de 8 bits. Formato: DIV fonte Flags: indefinidos AF.Divisão sem sinal Propósito: Efetuar uma divisão não sinalizada entre o conteúdodo acumulador (AL ou AX) pelo operando fonte. ZF. considere que oconteúdo do acumulador AX seja 800H e que BL contenha 30H. Se os operandos tiverem sinaisdiferentes.Divisão com sinal Propósito: Efetuar uma divisão sinalizada entre o conteúdo doacumulador (AL ou AX) pelo operando fonte. ou em DX eAX (caso a operação tenha envolvido DS:AX e um operando de 16 bits).Instruções de aritmética decimal A aritmética decimal é realizadacombinando-se as instruções da aritmética binária com as da aritmética decimal. CF. ZF.googleusercontent. PF. AL conterá 2AH e AH o valor 20H r) IDIV . Na operação de 16 bits. Após a execução dainstrução.18/11/2010 2 . O quociente oresto em DX 3.3 .Dividendo em DX:AX.com/searc… 21/55 . Formato: IDIV fonte Flags: indefinidos AF. OF. O estará emAL e o resto em AH word ptr[BX+100] . Exemplos: IDIV quociente IDIV posição de DH . divisor em DH. devolvendo o resultado no acumuladorAX (caso a operação tenha envolvido AX com um operando de 8 bits). a divisão será feita de formaque o resto tenha o mesmo sinal do dividendo.Dividendo em AX. SF. divisor na memória apontada estará em AX e por(BX+100). o quociente da operação de divisão fica em AL e o resto dadivisão em AH.Instruções Assembly No primeiro exemplo. o quociente da operação fica em AX e oresto da divisão em DX.As instruções da aritmética decimal são utilizadas em uma das seguintes formas: • Para ajustaros resultados de uma instrução da aritmética binária. sendo um positivo e o outro negativo. Naoperação de 8 bits. realizada webcache. SF. 3.para obter um par de dígitos BCD compactados. Após a seqüência ADD DAA oacumulador AL conterá o valor 92H.Ajuste decimal apósadição Propósito: Corrigir o resultado presente no acumulador AL. PF.após uma soma entre dois valores BCD compactados (um dígito em cada nibble). e não 8CH.1 .3. compactado ou não.com/searc… 22/55 . compactado ou não. somar 06H ao acumulador AL e ligar oflag AF.a fim de se produzir um valor decimal válido. ou se o flag AF está ligado. ZF. Exemplo:Suponha que AL contenha o valor 39H e AH o valor 53H. Oprocedimento dessa instrução é: 1. indefinido OF.Instruções de alteração para BCD compactado s) DAA .18/11/2010 2 . estas instruções operam somente nosregistradores AL ou AH. associados ao flag AF. Se os quatro bits mais significativos de AL estãoentre A e F. 2. então somar 60H ao acumulador AL e ligar o flag CF.após uma subtração webcache.googleusercontent. • Para ajustaras entradas de um a operação binária subsequente para que a mesma produza umresultado decimal.Ajuste decimal apóssubtração Propósito: Corrigir o resultado presente no acumulador AL. Se os quatro bits menos significativos de AL estãoentre A e F.AH t) DAS .Instruções Assembly anteriormente. Formato: DAA Flags: Afetados AF. CF. AL. ou se o flag CF está ligado. para obter um par de dígitos BCD compactados. subtrair 06H do conteúdo doacumulador AL e ligar o flag AF. então somar 06H ao acumulador AL.googleusercontent. então subtrair 60H do conteúdo doacumulador AL e ligar o flag CF. ou se o flag AF está ligado. somar 01H aoconteúdo de AH e ligar o flag AF. Oprocedimento dessa instrução é: 1. Se os quatro bits menos significativos de AL estãoentre A e F.após uma soma de dois dígitos ASCII. e não 6EH. Se os quatro bits menos significativos de AL estãoentre A e F. então execute o passo 3. ou se o flag AF=1. Se os quatro bits menos significativos de AL estãoentre A e F e o flag AF=0.DL 3. Após a seqüência SUB DAS oacumulador AL conterá o valor 68H. webcache.3. Oprocedimento dessa instrução é: 1. SF.Instruções Assembly entre dois valores BCD compactados (um dígito em cadanibble).2 . Se os quatro bits mais significativos de AL estãoentre A e F.Instruções de alteração para BCD nãocompactado u) AAA .18/11/2010 2 . 3. Apaga os quatro bits mais significativos doregistrador AL. Formato: DAS Flags: Afetados AF. 2. AL. ZF.com/searc… 23/55 . CF.Ajuste ASCII após adição Propósito: Corrigir o resultado presente no acumulador AL. 2. PF. Exemplo:Suponha que AL contenha o valor 84H e DL o valor 16H. ou se o flag AF=1. OF.18/11/2010 2 . 3. subtraia 01H do conteúdo de AH e ligue o flag AF. Exemplo:Considera que o acumulador AX contenha o valor 0935H. Exemplo:Suponha que o acumulador AX contenha o valor 0437H e que CL contenha o valor34H. AL.CL v) AAS . indefinidos. então subtraia 06H do conteúdo do acumuladorAL. CF. então execute o passo 3. Se os quatro bits menos significativos de AL estãoentre A e F e o flag AF=0.Instruções Assembly Formato: AAA Flags: Afetados AF. Se os quatro bits menos significativos de AL estãoentre A e F. indefinidos. SF. OF. PF. 2. SF. Após a seqüência ADD AAA oacumulador AX conterá o valor 0501H. Formato: AAS Flags: Afetados AF. ZF.após uma subtração entre dois dígitos ASCII. Após a seqüência webcache.com/searc… 24/55 . ZF. PF. 4. CF. Sinaliza o flag CF com o mesmo valor do AF. Oprocedimento dessa instrução é: 1. Apaga os quatro bits mais significativos doregistrador AL.Ajuste ASCII apóssubtração Propósito: Corrigir o resultado presente no acumulador AL.googleusercontent. Ajuste ASCII antes de umadivisão Propósito: Modifica o numerador nos registradores AH ou AL afim de prepará-lo para a divisão de dois operandos decimais não compactados. SF.Ajuste ASCII apósmultiplicação Propósito: Corrigir o resultado da multiplicação de doisnúmeros decimais não compactados. BL w) AAD . x) AAM . Formato: AAM Flags: Afetados PF. AF. oque resultará num número decimal não compactado válido.Instruções Assembly SUB AAS AL. (osflags são afetados de acordo com o resultado em AL. webcache.) Exemplo:Suponha que o acumulador AL contenha o valor 09 e que BL contenha o valor 08. teremos em AX dois dígitos numéricos em ASCII. CF.Após a seqüência MUL AAM oacumulador AX conterá o valor 0702H.googleusercontent. O registrador AH é zerado. indefinidos. ZF. armazenando oresultado em AH e o resto em AL. Observe que se a esse valor somarmos3030H. A instrução fará o seguinte: divide o valor em AL por 10. A instrução deve seguir-se a multiplicação dedois operandos decimais não compactados para produzir um resultado decimalválido. OF.com/searc… 25/55 .18/11/2010 2 . O registrador AH deveconter o dígito superior e o AL o dígito inferior o resultado desta instrução éarmazenado no registrador AL.36H oacumulador AX conterá o valor 0809H. Zera o registrador AH. webcache. CF. Estão organizadas em: • Instruções paraoperações booleanas. OF.com/searc… 26/55 . SF.Instruções Assembly Procedimentoexecutado pela instrução: 1. (osflags são afetados de acordo com o resultado em AL. • Instruções deteste de bit. As instruçõeslógicas modificam o estado dos flags. 2.4 . indefinidos. 3. Multiplica o valor de AH por 10. registradoresgerais.) Exemplo:Suponha que o acumulador AX contenha o valor 0902.4. Formato: AAD Flags: Afetados PF. Os operandos fontes podem ser valores imediatos. 3. Após a instrução AAD oacumulador AX conterá o valor 005CH. 3. AF. que podeser registrador ou memória.Instruções para operações booleanas As operações lógicas são realizadaspelas instruções AND. OR. ou memória. Todos os bits do operando são complementados. XOR e NOT y) NOT . Os operandos destino podem ser registradores gerais oumemória (exceto quando o operando fonte também for memória).1 . Soma o conteúdo de AH a AL.Instruções Lógicas As instruções lógicas possuem doisoperandos. • Instruções dedeslocamentos e rotações. ZF.googleusercontent.18/11/2010 2 .Operação lógica NOT Propósito: Efetuar o complemento de 1 do operando. ZF. AND AX.Operação lógica AND Propósito: Executar a função lógica AND (“E”) entre cada bitde um operandofonte e seu correspondente em um operando-destino. indefinido: AF Exemplo: AL e o AND AL. Realiza a operação lógica entre oconteúdo de CX.06H conteúdoda posição BX e o valor 06H.googleusercontent.08H .fonte Flags: Afetados: CF. bit-a-bit.Operação lógica OR webcache. CL assumiuo valor E0H. PF.18/11/2010 2 . Após a instrução.Realiza a operação lógica entre o conteúdo de valor08H. z) AND . bit-a-bit. . SF.CX AX e . OF. Formato: AND destino.Instruções Assembly Formato: NOT destino Flags: Nenhum afetado Exemplo: NOT NOT word ptr[SI] CL suponhaque no último caso o valor inicial de CL seja 1FH. a1) OR . Realiza a operação lógica entre o dememória apontada por AND byte ptr[BX]. colocando oresultado no operando-destino.com/searc… 27/55 . bit-a-bit. com/searc… . SF. Realiza a operação lógicaentre o conteúdoda posição de memória XOR DL.AL BL e .googleusercontent.fonte Flags: Afetados: CF. ZF. bit-a-bit. PF. Realiza a operação lógica entre oconteúdo de o dado imediato1234H.AH .Realiza a operação lógica entre o conteúdo de conteúdode AH.18/11/2010 2 .0801H . bit-a-bit. 28/55 . indefinido: AF Exemplo: AL e o XOR AL. Formato: OR destino. Formato: XOR destino.fonte Flags: Afetados: CF. ZF.Instruções Assembly Propósito: Executar a função lógica OR (“OU”) entre cada bitde um operandofonte e seu correspondente em um operando-destino.[BX] conteúdo de DL e o apontada por BX.Realiza a operação lógica entre o valor0801H. SF. OF.DL posição conteúdo do OR BL. indefinido: AF Exemplo: OR BX.1234H CX e webcache.colocando o resultado no operando-destino. b1) XOR . OF. . Realiza a operação lógica entre oconteúdo da de memóriaapontada por BX e o registrador DL. . XOR CX.Operação lógica XOR Propósito: Executar a função lógica XOR (“OU EXCLUSIVO”) entrecada bit de um operando-fonte e seu correspondente em um operando-destino. colocando oresultado no operando-destino. conteúdo de BX e o OR [BX]. PF. Realiza a operação lógica entreo conteúdo de AL. TEST DL.3 . para determinar se os mesmos estão ligados ou desligados.Instruções Assembly 3. SF. quando usado como contador.4.1234H de .Comparação lógica Propósito: Efetuar o teste de determinados bits de umoperando. acordocom a máscara gravada em AH. PF.2 . . CL Flags: Afetados: CF. para a esquerda. Formato: RCL destino. mas semafeta-los. OF Exemplos: RCL CL. Verifica que bits noregistrador DL estão acordo coma máscara gravada na apontada por BX. ou aquele contido no registrador CL.com/searc… . ZF. através do flag carry.18/11/2010 2 .Instruções de rotação e deslocamento d1) RCL . de posição de memória TEST CX.[BX] ativos.Verifica que bits no registrador AL estão ativos. O conteúdo de CLnão é afetado pela instrução.Rotacione para aesquerda através do carry Propósito: Rotacionar o conteúdo da locação de memória ouregistrador especificado.Instrução de teste de bit c1) TEST . acordo com a máscaraespecificada na instrução (1234H).1 .googleusercontent. O número devezes a rotacionar é 1.4.AH . Formato: TEST destino. OF. Verifica que bits no registrador CX estãoativos. 3. uma 29/55 webcache.fonte Flags: Afetados: CF. indefinido: AF Exemplo: de TEST AL. Rotaciona o conteúdo doregistrador CL.1 ou RCL destino. o vezesespecificado em CL.CL dememória DS:0300. uma para a direita. para a direita. o vezesespecificado em CL.Instruções Assembly posição RCL AX. para a esquerda. Rotaciona o conteúdo da posição onúmero de vezes webcache. . quando usado como contador. .CL número de . Rotaciona o conteúdo da posição porSI. OF Exemplos: posição RCR AL.1 ou RCR destino.com/searc… 30/55 .googleusercontent.18/11/2010 2 . Rotaciona o conteúdo doregistrador AL. O conteúdo de CL nãoé afetado pela instrução.Rotacione para a direitaatravés do carry Propósito: Rotacionar o conteúdo da locação de memória ouregistrador especificado. ou aquele contido no registrador CL. Rotaciona o conteúdo doregistrador BH. Rotaciona o conteúdo doregistrador AX. . RCR BH. o número de vezes e1) RCR .CL dememória apontada especificado em CL.CL número de RCL byte ptr[SI].1 . através do flag carry. Formato: RCR destino. especificado em CL. CL Flags: Afetados: CF. RCR byte ptr[300]. O número devezes a rotacionar é 1. O número de vezes a rotacionar é 1. para a direita. Formato: ROL destino.Rotacione para a esquerda Propósito: Rotacionar o conteúdo da locação de memória ouregistrador especificado. ROL BH. g1) ROR .googleusercontent. para a esquerda.CL número de ROL byte ptr[BX].1 .18/11/2010 2 . quando usado como contador. OF Exemplos: posição ROL DX. Rotaciona o conteúdo da posição uma posição para a esquerda.Instruções Assembly f1) ROL .1 dememória DS:BX. o vezesespecificado em CL. CL Flags: Afetados: CF. . O número de vezes a rotacionar é 1. uma para aesquerda. Rotaciona o conteúdo doregistrador BH.ou aquele contido no registrador CL. quando usado como contador.Rotacione para a direita Propósito: Rotacionar o conteúdo da locação de memória ouregistrador especificado.com/searc… 31/55 .ou aquele contido no registrador CL. Rotaciona o conteúdo doregistrador DX. O conteúdo de CL não é afetado pelainstrução. . webcache. O conteúdo de CL não é afetado pelainstrução.1 ou ROL destino. 1 ou ROR destino. Formato: SAL destino. Rotaciona o conteúdo doregistrador BH. quando usado como contador. O númerode vezes a deslocar é 1. CL Flags: Afetados: CF. Com o deslocamento o bit que estava naposição mais significativa é levado para o flag CF. Rotaciona o conteúdo da posição porDI. uma posição para a . SF. o número vezesespecificado em CL. no segmento de direita.18/11/2010 2 . PF.Instruções Assembly Formato: ROR destino. e um bit 0 é carregado na posição do bit menos significativo. ROR BH. Rotaciona o conteúdo doregistrador AL. cujo valor anterior éperdido. CL Flags: Afetados: CF.googleusercontent. webcache. ZF.Deslocamentoaritmético lógico / Deslocamento lógico Propósito: Deslocar o conteúdo da locação de memória ouregistrador especificado à esquerda. h1) SAL/SHL . O conteúdo de CLnão é afetado pela instrução. uma para adireita.com/searc… 32/55 .1 ou SAL destino.1 posição ROR byte ptr[DI]. ou aquele contido no registrador CL.1 dememória apontada dados.CL . indefinido AF. OF Exemplos: de ROR AL. . OF. Desloca o conteúdo da posição de memóriaapontada uma posiçãopara a por DI. ZF. no segmento de dados. Desloca o conteúdo doregistrador DX. uma para a esquerda. webcache. o número vezes especificadoem CL.Instruções Assembly Exemplos: posição SAL DX.18/11/2010 2 . h1) SAR .1 ou SAR destino. quando usado como contador. .1 posição . Desloca o conteúdo da posição uma posição para a esquerda.CL número de SAL byte ptr[BX]. . CL Flags: Afetados: CF. O conteúdode CL não é afetado pela instrução. ou aquele contido no registrador CL. indefinido AF.1 dememória DS:BX.CL . SAR byte ptr[DI]. o vezes especificadoem CL. Desloca o conteúdo do registradorBH. uma para a direita. direita. Desloca o conteúdo doregistrador AL.1 . PF. e o bit 0 é carregado no flag CF. Exemplos: de SAR AL. Onúmero de vezes a deslocar é 1.com/searc… 33/55 . SF. Formato: SAR destino.1 . Com o deslocamento o bit que estava naposição mais significativa é mantido. OF. SAR BH. SAL BH.Deslocamento aritméticoà direita Propósito: Deslocar o conteúdo da locação de memória ouregistrador especificado à direita. Desloca o conteúdo do registradorBH.googleusercontent. SHR BH. uma para a direita. webcache. PF.Instruções Assembly i1) SHR . Exemplos: de SHR AL.1 posição SHR byte ptr[DI].1 ou SHR destino.CL . CL Flags: Afetados: CF.5 . cujo valor inicial é perdido. inserindo um bit 0 na posição do bit maissignificativo do operando e levando o bit 0 (menos significativo)para o flagCF.Instruções de transferência de controle Os microprocessadores 80XXX permitemque o controle do fluxo de execução seja transferido de forma condicional ouincondicional. O modo condicional de transferência é feito a partir do estadoou de combinação de estados dos flags.Deslocamento lógico àdireita Propósito: Deslocar o conteúdo da locação de memória ouregistrador especificado à direita. o número vezes especificadoem CL. ZF. SF. Desloca o conteúdo do registradorAL. Formato: SHR destino.uma posição para a . O conteúdo de CL não é afetado pela instrução. indefinido AF. . Desloca o conteúdo doregistrador BH.com/searc… 34/55 . 3. O número de vezes a deslocar é 1. ou aquele contidono registrador CL. Desloca o conteúdo da posição por DI.googleusercontent.18/11/2010 2 . As transferências incondicionais sãosempre executadas. OF. quando usadocomo contador.1 dememória apontada dados. no segmento de direita. O código queidentifica um desvio incondicional para outro segmento deve ser seguido por 4bytes: os dois primeiros contendo o novo valor do IP e os dois seguintes o novovalor do CS. também chamado desvioincondicional relativo curto. No caso de desvios dentro do próprio segmento.com/searc… . CALL.próxima) ou em um segmento de códigosdiferente (transferência far . O desvio pode ser feito dentro ou forado atual segmento de código. contendo um valor sinalizado que.Instruções Assembly 3.googleusercontent.denominados desvios intrasegmento.5. Exemplo: ----------35/55 webcache. pode-se especificar um desvio-curto (JMP SHORT). Neste caso os valores do CS e IP precisam seralterados para que ocorra a migração de um segmento para outro. para onde se dá o desvio incondicional está entre -128 a +127bytes. sendo alterado para o valor endereço-alvo.Desviar Propósito: Provocar um desvio incondicional no fluxo deprocessamento. O endereço destino pode estar no mesmosegmento de códigos (transferência near . Se a distância relativa para onde se daráo desvio for maior que +127 ou -128. transferindo a execução para o operando alvo.Instruções de transferência de controleincondicional As instruções que realizam atransferência incondicional para um endereço destino em um segmento de códigosão: JMP. RET.18/11/2010 2 . Exemplo: label1: --------------------atual: JMP label1 A outra forma de desvio incondicional éo desvio inter-segmento. o que possibilita desvios por todo o segmentocorrente. j1) JMP .1 . ao ser somadoao valor de IP gerará o endereço-alvo. Quando a distância entre o valor atual e oendereço-alvo. então o endereço relativo gerado será umvalor sinalizado de 16 bits.distante). INT e IRET. apenas o registrador IP é afetado pelainstrução. com a vantagem de o deslocamento para o desvioser expresso por um único byte. Indireto.inter-segmento. o qual será movidopara o registrador IP. desvio_inter .googleusercontent. intra-segmento.18/11/2010 2 .Instruções Assembly atual: JMP novo_longe ----------- ----> Segmento de código atual ----------novo_longe: MOV AX. JMP está partir de dword ptr[BX] . vistas até aqui. quer por um “label”. webcache. Direto.10H ----------As formas de especificar um desvioincondicional. Direto. k1) CALL . CX . o endereço-alvo está armazenado em CX. A outra forma de executar-seum desvio incondicional é a indireta. onde o valor do endereço-alvo estáarmazenado em registrador(es) ou em posição(ões) de memória.Chama uma procedure Propósito: Chamar uma subrotina. pois o endereço daposição-alvo que deseja-se atingir é explicitamente especificado na instrução. Formato: JMP alvo Flags: Nenhum afetado ---->Segmento de código novo Exemplos: JMP JMP JMP JMP desvio_curto . no caso de desvio intrasegmento ou para osregistradores IP e CS. relativo. o endereço-alvo armazenadonas 4 posições de memória a DS:BX. Direto. no caso de desvio inter-segmento. alterando o fluxo normal deexecução. inter-segmento. desvio_intra .intra-segmento.intra-segmento.quer com um valor numérico. são ditas diretas.com/searc… 36/55 . Indireto. permitir que a execuçãoretorne ao ponto do programa imediatamente posterior à instrução de chamada dasubrotina. Direta. A sub-rotina pode ser chamada por viadireta ou indireta. Indireta.inter-segmento .Nas chamadas de sub-rotinas intersegmento. Para guardar o endereço da instrução aser executada ao retornar da subrotina. pois ele será alterado para provocar odesvio para outro segmento.18/11/2010 2 .por via indireta. enquanto que. foi colocado na pilha pelainstrução CALL. O processador primeiro salva o IP e só então o CS.intra-segmento . respectivamente.Instruções Assembly processar uma sub-rotina e ao fim da mesma. transferindo o fluxo doprocessamento para a instrução seguinte à chamada da subrotina. o valor do endereço onde se inicia a sub-rotina.com/searc… 37/55 . o processador salva na pilha oconteúdo do IP. para onde deve ser dado o retorno. webcache.Retorno de uma procedure Propósito: Encerrar uma sub-rotina. O endereçodesta instrução. usa-se registradores que contêm em si. inter-segmento CALL dword ptr [SI] l1) RET . Chamadas diretas podem ser realizadas a “labels”(nomesassociados a endereços de memória) dentro de segmentos de código. Portanto. ou nas posições dememórias apontadas por eles. no caso de chamadas a subrotinas no mesmo segmento de código.googleusercontent. intra-segmento . Formato: CALL alvo Flags: Nenhum afetado Exemplos: CALL sub_proxima CALL sub_distante CALL BX .Indireta. A sub-rotina chamada pode residir nomesmo segmento de código corrente ou não. Direta. Tem-se assim as chamadas desubrotinas intra-segmento e intersegmento. também énecessário salvar o conteúdo do CS. além do valor de IP. Procedimentoda instrução: • Decrementa oSP em 2 e salva o registrador de flags na pilha • Apaga os bitsIF e TF. a instrução RET deverá retirar as duaspalavras que foram armazenadas na pilha pela instrução CALL inter-segmento. A tabela de vetores de interrupção tem256 entradas. a instrução RET deverá apenas retirar uma palavra do topo dapilha e movê-la para o registrador IP. • Incrementar oSP em 2. Sea rotina é do tipo inter-segmento. que indicam o endereço de uma rotina namemória. • Incrementar oSP em 2.18/11/2010 2 . então: • Retirar outrapalavra do topo da pilha e move-la para o CS.restaurando os antigos valores de CS e IP.Instruções Assembly para encerrar uma sub-rotina “near”.desviando-se para uma rotina de interrupção. que reside nomesmo segmento. quereside em um outro segmento de código.com/searc… 38/55 . Formato: RET Flags: Nenhum afetado m1) INT .Interrupção Propósito: Alterar o fluxo normal de execução do programa. salva o CS na pilha e coloca a palavra de mais alta ordem do vetorselecionado em CS webcache.googleusercontent. cujo vetor (endereço formado porCS:IP) está presente numa tabela nos primeiros 1024 bytes da memória. Para endereçar uma procedurre “far”. cada qual com 4 bytes (os dois primeiros contendo o valor do IP eos dois seguintes o valor do CS). Operaçãoda instrução • Retirar umapalavra do topo da pilha e move-la para o IP. desabilitando futuras interrupções de hardware • Decrementa oSP em 2. • Incrementar oSP em 2.googleusercontent. • Retirar outrasegunda palavra do topo da pilha e move-la para o CS. • Incrementar oSP em 2. • Retirar outraterceira palavra do topo da pilha e move-la para o registrador de flags. Formato: INT tipo Flags: Afetados: IF e TF n1) IRET . Esta instrução simplesmente recupera da pilha o conteúdo dosregistradores que foram automaticamente salvos. A próxima instrução a ser executada será então a primeiradentro da rotina de interrupção. Operaçãoda instrução • Retirar umapalavra do topo da pilha e move-la para o IP.com/searc… 39/55 . na ocorrência da interrupção.Instruções Assembly • Decrementa oSP em 2. • Incrementar oSP em 2. salva o IP na pilha e carrega-o com a palavra de baixa ordem dentro dovetor selecionado. Formato: IRET Flags: Todos são afetados webcache.Retorno de umainterrupção Propósito: Retornar de uma rotina de tratamento deinterrupção.18/11/2010 2 . googleusercontent.5.18/11/2010 2 .Desvio curto secondição é satisfeita Propósito: Desviar o fluxo do processamento para ooperando-alvo. se uma webcache.2 . o1) J(condição) .Instruções Assembly 3.com/searc… 40/55 .Instruções de transferência de controlecondicional As instruções de controle condicionalsão desvios (jumps) que transferem a execução do programa caso o estado de umflag seja o mesmo que o especificado pela instrução. deve estar na faixa de-128 a +127 bytes da próxima instrução. à relação entre dois valores sinalizados Desvios condicionais não sinalizados Mnemônico JA/JNBE JAE/JNB JB/JNAE JBE/JNA JC JE/JZ JNC JNE/JNZ JNP/JPO Estado dos flags (CF ou ZF)=0 CF=0 CF=1 (CF ou ZF)=1 CF=1 ZF=1 CF=0 ZF=0 PF=0 Descrição Acima/Não abaixo ou igual Acima ou igual/Não abaixo Abaixo/Não acima ou igual Abaixo ou igual/Não acima Carry Igual/Zero Não carry Não igual/Não zero Sem paridade/Paridade ímpar Desvios condicionais sinalizados JG/JNLE JGE/JNL JL/JNGE JLE/JNG JNO JNS webcache. Observação:Above e below referem-se a relação entre dois valores não sinalizados e greater e less.com/searc… ((SF ⊕ OF) ou ZF)=0 (SF ⊕ OF)=0 (SF ⊕ OF)=1 ((SF ⊕ OF) ou ZF)=1 OF=0 SF=0 Maior/Não menor ou igual Maior ou igual/Não menor Menor/Não maior ou igual Menor ou igual/Não maior Sem estouro (overflow) Sem sinal (não 41/55 .18/11/2010 2 .Instruções Assembly condição testada for encontrada. para onde se quer direcionar o desvio. A distância doendereço-alvo.googleusercontent. 18/11/2010 2 . Formato: LOOP alvo Flags: Nenhum afetado n1) LOOPE/LOOPZ Retornar se igual/ zero Propósito: Decrementar o conteúdo do registrador contador CX eprovocar um desvio no fluxo do processamento para o endereço-alvo. o flag ZFpode ser utilizado para finalizar o loop mesmo que o conteúdo do registrador CXnão seja zero.3 . Em quatro das cinco formas possíveis.googleusercontent. se o valorem CX ainda não for zero.5. A distância para o desvio deve estar na faixa de 128bytes para trás ou 127 para a frente.Instruções Assembly negativo) Formato: J(condição) alvo_curto Flags: Nenhum afetado 3.Retornar até a contagemser completada Propósito: Decrementar o conteúdo do registrador contador CX eprovocar um desvio no fluxo do processamento para o endereço-alvo. se o valorem CX ainda não for zero e se o flag ZF=1. m1) LOOP .Instruções de LOOP As instruções de loop são desvioscondicionais que se utilizam do registrador CX como contador do número de vezesque um bloco de instruções deve ser executado.com/searc… 42/55 . em relação ao endereço da instrução quesegue o loop. Todas as instruções de loopsempre decrementam o conteúdo do registrador CX quando executadas e terminam seesta operação zerar o mesmo. A distância para o desvio deve estarna faixa de webcache. como por exemplo.Operações com string As operações com string manipulamgrande quantidade de dados em memória.São eles: webcache.Comparastring • SCAS .18/11/2010 2 .6 . em relação ao endereço dainstrução que segue o loop.googleusercontent.com/searc… 43/55 . em relação ao endereço dainstrução que segue o loop. uma cadeia decaracteres.Instruções Assembly 128 bytes para trás ou 127 para a frente. A distância para o desvio deve estarna faixa de 128 bytes para trás ou 127 para a frente. Formato: LOOPE alvoou LOOPZ alvo Flags: Nenhum afetado o1) LOOPNE/LOOPNZ Retornar sediferente / não zero Propósito: Decrementar o conteúdo do registrador contador CX eprovocar um desvio no fluxo do processamento para o endereço-alvo.Movestring • CMPS .Scan(busca) string • LODS .Load(carrega) string • STOS . se o valorem CX ainda não for zero e se o flag ZF=0.Store(armazena) string Oprocessador possui dois registradores especiais para manipulação de strings. Formato: LOOPNEalvo ou LOOPNZ alvo Flags: Nenhum afetado 3. As instruções são: • MOVS . Endereça a área de origem . para a posição de memória indicada peloconteúdo de DI. Contador em CX . dentro do segmento extra.18/11/2010 2 . O valor do incremento/decremento é de 1 ou 2. dependendo se aoperação envolve dados do tipo byte ou word. será deacordo com o tamanho do elemento da string.Move string de bytes ou words Propósito: Mover o byte ou word endereçada pelo conteúdo deSI. Diante desta instrução. p1)MOVS/MOVSB/MOVSW .estes registradores são automaticamente incrementados ou decrementados emacordo com o valor do flag de direção. dentro do segmento de dados. permitindo assim a movimentação de blocosde memória.Instruções Assembly • SI -Registrador de índice de fonte • DI -Registrador de índice de destino Após a execução de uma operação string. Formato: MOVSB ou MOVSW Flags: Nenhum afetado Exemplo: MOV SI.200H CLD REP MOVSW .googleusercontent.Move 200H words webcache. Endereça a área de destino .1500H MOV CX.respectivamente. respectivamente. o qual pode ser um byte ou umaword. ambos osregistradores de índice (SI e DI) são automaticamente incrementados oudecrementados. O incremento ou decremento. caso o flag de direção esteja resetado ou setado. Após a operação.com/searc… 44/55 .1000H MOV DI. que provocará uma repetição contínua. de acordo com onúmero de vezes especificado em CX. pode-seutilizar o prefixo REP. Reseta o flag de direção . Após a subtração os flags são alterados deacordo com o resultado mas o mesmo é desprezado. dependendo se acomparação foi realizada entre operandos do tipo byte ou word. DI terá 0763H e os flags CF e ZF. SF.Comparaduas string do tipo byte ou word Propósito: Comparar. Diante desta instrução. afetandoporém somente os flags. respectivamente. A instruçãoincrementa/decrementa automaticamente os registradores de índice SI e DI desdeque o flag de direção esteja resetado ou setado. webcache. PF. OF. estarão sinalizando: ZF = 1: os conteúdos dos operandos sãoiguais CF = 0: indicado por SI r1) SCAS/SCASB/SCASW .com/searc… 45/55 Oelemento indicado por DI é menor ou igual ao elemento .Busca byteou word Propósito: Comparar o elemento indicado por DI.o registrador SI conterá o valor 1257H. CF. Exemplos:Considere que o registrador SI contenha o valor 1255H. Oincremento/decremento será de 1 ou 2. A instrução efetua a subtração dobyte ou palavra indicada por DI do conteúdo do acumulador AL ou AX. O valor do incremento ou decremento é 1 ou 2. caso os dados comparados sejam do tipobyte ou word.googleusercontent. respectivamente. Formato: CMPSB ou CMPSW Flags: Afetados AF.18/11/2010 2 . respectivamente. a posição apontada por SI dentro do segmento de dados contenha apalavra 9988H e a posição apontada por DI dentro do segmento extra contenha apalavra 9988H. Após a execução de CMPSW. pode-seutilizar o prefixo REP. ZF. com o conteúdo do acumulador. até encontrar um que seja igual ou diferente aoconteúdo do acumulador. o registrador DIé automaticamente incrementado ou decrementado. dentro dosegmento extra. osmais relevantes de serem avaliados após a instrução. efetuando uma subtração entre o byte ouword endereçada por DI dentro do segmento extra e o byte ou word endereçada porSI dentro do segmento de dados. Após a comparação. de acordo com onúmero de vezes especificado em CX. DF=0.Instruções Assembly q1) CMPS/CMPSB/CMPSW . e não os operandos. que provocará uma repetição contínua. DI contenha o valor0761H. permitindo assim repetir a comparação emuma seqüência de elementos. dependendo do estado do flag dedireção. que provocará uma repetição contínua. DI seráincrementado . o registrador DI é automaticamente incrementado ou decrementado. endereço inicial de s1) STOS/STOSB/STOSW . CF. dependendo se foi movido um byte ou uma word. Grava em ALFFH. Valor a preencher as posições a partir 46/55 . PF. STOSBmove o conteúdo de AL para a posição indicada por ES:DI e STOSW move o conteúdode AX para a posição de memória indicada por ES:DI.com/searc… . ZF. Endereço inicial da área destino . Exemplo: MOV CX.18/11/2010 2 . O valor do incremento ou decremento é1 ou 2. FFFFH webcache.Grava namemória um byte ou word armazenado no acumulador Propósito: Mover o conteúdo do acumulador para a posição dememória indicada pelo registrador DI.100 MOV DI. dentro do segmento extra de dados.FF CLD REPNZ SCASB .Reseta o flag de direção .dependendo do estado do flag de direção. o dado a ser comparado . Formato: STOSB ou STOSW Flags: Nenhum afetado Exemplo: CLD MOV DI. Contador em CX .Instruções Assembly Formato: SCASB ou SCASW Flags: Afetados: AF. permitindo assim que um bloco de memóriaseja preenchido com um dado valor. 300H MOV AX. OF. Grava em CX 0100H .googleusercontent.1000H MOV CX. Diante desta instrução. de acordo com onúmero de vezes especificado em CX.400 pesquisa MOV AL. Após a movimentação dosdados. respectivamente. Compara e repete enquanto CX ≠0 e ZF=0 . SF. pode-seutilizar o prefixo REP.Grava em DI 0400H. Reseta o flag de direção. o registrador AX conterá o valor 1100He o registrador SI conterá o valor 1236H. indicando a próxima palavra a seracessada. webcache.LODSB move para AL um byte na posição indicada por DS:SI e LODSW move para AXuma word na posição de memória indicada por DS:SI. Desta forma. especificammais de uma execução de uma mesma instrução de string. especificada no prefixo. O valor do incremento ou decremento é1 ou 2. DF=0 e que a posição dememória indicada por SI.Preenche 300H words com FFFFH t1) LODS/LODSB/LODSW .6.googleusercontent.a resposta do sistema a uma interrupção não fica comprometida pela execução deuma instrução com string. Quando acompanha umainstrução de string. Formato: LODSB ou LODSW Flags: Nenhum afetado Exemplo:Considere que o registrador SI contenha o valor 1234H.dependendo do estado do flag de direção. dentro do segmento de dados para o acumulador.Instruções Assembly deES:DI REP STOSW . 3.Após a instrução LODSW . contenha a palavra 1100H. Após ter sido atendida a exceção oua interrupção. dependendo se foi movido um byte ou uma word.Prefixos de repetição Os prefixos de repetição. o registrador SI é automaticamente incrementado ou decrementado.18/11/2010 2 .Grava noacumulador um byte ou word copiado da memória Propósito: Mover um byte ou word da posição de memóriaindicada pelo registrador SI. a operação podeser suspensa por uma interrupção ou exceção. a operação reinicializa do ponto onde foi suspensa. respectivamente.1 . a operação é repetida até que uma das condições detérmino. Após a movimentação dosdados. seja satisfeita Para cada repetição.com/searc… 47/55 . dentro do segmento de dados. 1000 MOV AX. LODS eSTOS.Instruções Assembly u1) REP/REPZ ou REPE/REPNZ ouREPNE . CLD MOV CX.pode-se usar os prefixos REPZ ou REPNZ. que decrementa o registrador CX (sem afetaros flags) e repete a instrução string enquanto CX ≠ 0. Endereça a área de memória .1 . Diante das instruções MOVS. Dados em AH e AL .18/11/2010 2 .7 . O prefixo REPNZ decrementa o contadorCX (sem afetar os flags) e provoca a repetição da instrução string enquanto CX ≠ 0 e ZF=0. com o valor inicial 20H.Instruções de controle do flag de direção.Instruções de controle de flag 3. Diante das instruções CMPS e SCAS.Reseta o flag de direção .flag carry e de interrupção webcache.7. Preenche 200 palavras a partir deES:1000 (ES:DI) 3. Contador em CX .200 MOV DI. REPZ decrementa o registrador CX (semafetar os flags) e repete a instrução string enquanto CX ≠ 0 e ZF =1. Formato: REP REPZ REPNZ instrução_string instrução_string instrução_string Flags: Serão aqueles afetados pela instrução_string Exemplo:Considere que se queira preencher um bloco de memória.com/searc… 48/55 . pode-se usar o prefixo REP.Repita operação de string Propósito: Prefixos usados para repetir a instrução stringseguinte pelo número de vezes especificado em CX. com 512 bytes deextensão.2020 REP STOSW .googleusercontent. inicializar o conteúdo do flag carry que será carregado em umoperando.googleusercontent. Pode-sea partir delas.18/11/2010 2 .com/searc… 49/55 .Seta o flag carry Propósito: Setar o bit CF no registrador de flags Formato: STC Flags: Afetado: CF y1) CLD .Complementa o flag carry Propósito: Complementar o estado do bit CF no registrador deflags. forçandoassim.Reseta o flag carry Propósito: Resetar o bit CF no registrador de flags Formato: CLC Flags: Afetado: CF x1) CMC . e vice-versa. Se o valor de CF era 1. Formato: CMC Flags: Afetado: CF w1) STC .Instruções Assembly As instruções de controle de carry sãoúteis em conjunto com as instruções de rotações com carry com o RCL e RCR.Reseta o flag de direção Propósito: Resetar o bit DF no registrador de flags. ele passará a 0. o incremento dos registradores de índice após a execução de uma dasinstruções string. v1) CLC . Formato: CLD webcache. Para acessar os demais indicadores as instruções de transferência de flagsdevem ser utilizadas para movimentar o conteúdo do registrador de flags (F)para o registrador AH ou a pilha.Reseta o flag deinterrupção Propósito: Resetar o bit IF no registrador de flags. webcache.com/searc… 50/55 . poderão ser alterados e emseguida retornados para o registrador de flags (F). Formato: STI Flags: Afetado: IF 3. que aparecem na linha INTRdo processador.Seta o flag deinterrupção Propósito: Setar o bit IF no registrador de flags. onde então. Formato: STD Flags: Afetado: DF a2) CLI .Seta o flag de direção Propósito: Setar o bit DF no registrador de flags.Instruções de transferência de flags Apenas os flags CF.habilitando as interrupções mascaráveis externas. Formato: CLI Flags: Afetado: IF b2) STI .18/11/2010 2 .2 . que aparecem na linha INTR doprocessador. o decremento dos registradores de índice após a execução de uma dasinstruções string. possueminstruções especificas que permitem a alteração de seus estados diretamente. forçandoassim.7.Instruções Assembly Flags: Afetado: DF z1) STD .desabilitando as interrupções mascaráveis externas.googleusercontent. DF e IF. Os demais bits não são movidos. ZF. SF. e2) PUSHF . Modode operação: Idêntico ao da instrução PUSH Formato: PUSHF Flags: Nenhum afetado webcache.googleusercontent. PF. na área de memória usada como pilha. Formato: LAHF Flags: Nenhum afetado d2) SAHF . para a parte baixa do registrador de flags.Grava o conteúdo doregistrador de flags na pilha Propósito: Colocar.. oconteúdo do registrador de flags.Armazena conteúdo de AHno registrador de flags Propósito: Transferir bits específicos do registrador AH.AF.Instruções Assembly c2) LAHF . PF e CF para o registrador AH. CF. Os demais bits não são movidos.mantendo a mesma posição relativa. mantendo a mesma posição relativa que ocupamna parte baixa no registrador de flags.com/searc… 51/55 . ZF.Carregar o conteúdo doregistrador de flags em AH Propósito: Mover os bits dos registradores de flags SF.18/11/2010 2 . (SF)=bit 7 de AH (ZF)=bit 6 de AH (AF)=bit 4 de AH (PF)=bit 2 de AH (CF)=bit 0 de AH Formato: SAHF Flags: Afetados: AF. especificada h2) OUT .googleusercontent.Transfere para AL. respectivamente.Instruções Assembly f2) POPF .Lê byte ou word de umaporta de E/S Propósito: Transferir dados (byte ou word) de uma porta deentrada para o acumulador AL ou AX. 38H IN AX.8 .Escreve byte ou word em umaporta de E/S Propósito: Transferir um byte ou uma word. ou com o uso de DX que. o byte na porta de entrada 38H. para uma porta de saída.sendo de 16 bits. .DX . Formato: POPF Flags: Todos são afetados 3. DX ou Flags: Nenhum afetado Exemplo: IN AL.18/11/2010 2 . a word na porta deentrada pelo registrador DX. Formato: IN IN acumulador. Transfere para AX.Copia word da pilhapara o registrador de flags. porta acumulador. webcache. Propósito: Retirar a palavra no topo da pilha e movê-la parao registrador de flags. presente noacumulador AL ou AX.com/searc… 52/55 . Sua operação é idêntica a da instrução POP.Instruções de acesso a portas de entrada esaída g2) IN . A porta é identificada com um valor de8 bits que permite a acesso a portas cujos endereços variam de 0 a 255. permite a especificação de endereços de portas que variam de0 a 65535. ou com o uso de DX que.sendo de 16 bits. byte 3. Formato: OUT OUT porta. mensagem SI. o byte em AL.Transfere para a porta de saída 61H. especificado na própria instrução. Transfere para a porta de saídaespecificada em DX. Formato: LEA destino.9 .googleusercontent.AL . como sãoimportantes. acumulador ou Flags: Nenhum afetado Exemplo: OUT 61H. o gravado em AL.Instruções Assembly A porta é identificada com um valor de8 bits que permite a acesso a portas cujos endereços variam de 0 a 255.18/11/2010 2 . i2) LEA . OUT DX. são reunidas nesse bloco de instruções de uso geral. fonte Flags: Nenhum afetado Exemplos: mensagem DB LEA LEA ‘Curso Assembler $’ DX.AL .Instruções de uso geral Algumas instruções não se encaixam emnenhuma das categorias apresentadas até agora. acumulador DX. No entanto.com/searc… 53/55 . para um registradorde 16 bits. permite a especificação de endereços de portas que variam de0 a 65535.[BX+DI+5] webcache.Carrega endereço efetivoem um registrador Propósito: Carregar o offsetde um endereço ou deslocamento de um operando na memória. Permuta o conteúdo de SI e DI . haja uma tabela com webcache. o registrador DXconterá o valor do endereço associado ao “label” mensagem.Trocar Propósito: Permutar o conteúdo de dois operandos. Permuta oconteúdo da posição apontada por SI conteúdode AL k2) XLAT . Permute oconteúdo de AL com o da posição de memória apontada por(BX+2) XCHG AL.googleusercontent. j2) XCHG .18/11/2010 2 .fonte Flags: Nenhum afetado Exemplos: XCHG AL. Permuta o conteúdo de AL e CH . com no máximo 256 valores. Formato: XLAT Flags: Nenhum afetado Exemplo:Considere que no endereço DS:0300 de memória.com/searc… 54/55 .Instruções Assembly No primeiro caso. O Byte assim endereçado é então colocado nopróprio registrador AL.AX com o . que podemser dois registradores ou um registrador e uma posição de memória.Converter Propósito: Converter um valor presente em AL acessando umatabela previamente endereçada por BX.DI . no segundo. Formato: XCHG destino.[BX+2] XCHG [SI]. o registrador SI conterá o valor do endereçode memória do operando indicado pela somatória de BX e DI com 5.CH XCHG SI. usando o valorem AL como índice desta tabela.. Apósa seqüência de instruções MOV BX.com/searc… 55/55 .04H XLAT o registrador AL conterá o valor 20.0300H MOV AL...googleusercontent. Isto é. ovalor inicial 04 foi convertido para 20 (elemento de índice 04).Instruções Assembly os seguintesvalores: 12 14 16 18 20 22 24 26 28 30 32 34.18/11/2010 2 . O primeiroelemento da tabela tem índice 00. webcache.