assembler - 8088.pdf

43
ARQUITETURA DE SISTEMAS DIGITAIS PROF. ORLANDO ROCHA INSTRUÇÕES DE ASSEMBLER PÁGINA 1 APOSTILA DAS INSTRUÇÕES ASSEMBLER DO 8088 Departamento de Eletroeletrônica Disciplina: Microprocessadores II, Arquitetura de Sistemas Digitais Professores: Cláudio Leão, Orlando Rocha, Sérgio Campos

Upload: liege-silva-da-rosa

Post on 17-Aug-2015

273 views

Category:

Documents


3 download

TRANSCRIPT

ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 1 APOSTILA DAS INSTRUES ASSEMBLER DO 8088 Departamento de Eletroeletrnica Disciplina:MicroprocessadoresII,ArquiteturadeSistemas Digitais Professores: Cludio Leo, Orlando Rocha, Srgio Campos ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 2 ndice 1 - MODOS DE ENDEREAMENTO DO 8086 ................................................. 3 1.1 - MODOS DE ENDEREAMENTO DE PROGRAMA ....................................................... 3 1.2 - MODOS DE ENDEREAMENTO DE DADOS............................................................ 3 2 - TIPOS DE DADOS (8086)....................................................................... 5 3 - INSTRUES ASSEMBLY........................................................................ 7 3.1 - INSTRUES DE MOVIMENTAO DE DADOS ....................................................... 7 3.1.1 - Instrues de movimentao de uso geral .......................................... 7 3.1.2 - Instrues para manipulao de stack ............................................... 9 3.1.3 - Instrues de converso de tipo.......................................................10 3.2 - INSTRUES ARITMTICAS BINRIAS ..............................................................10 3.2.1 - Instrues de adio e subtrao .....................................................11 3.2.2 - Instrues de comparao e mudana de sinal...................................14 3.2.3 - Instrues de multiplicao e diviso................................................15 3.3 - INSTRUES DE ARITMTICA DECIMAL.............................................................17 3.3.1 - Instrues de alterao para BCD compactado...................................17 3.3.2 - Instrues de alterao para BCD no compactado.............................18 3.4 - INSTRUES LGICAS...............................................................................21 3.4.1 - Instrues para operaes booleanas ...............................................21 3.4.2 - Instruo de teste de bit.................................................................22 3.4.3 - Instrues de rotao e deslocamento ..............................................23 3.5 - INSTRUES DE TRANSFERNCIA DE CONTROLE ..................................................27 3.5.1 - Instrues de transferncia de controle incondicional ..........................27 3.5.2 - Instrues de transferncia de controle condicional ............................32 3.5.3 - Instrues de LOOP .......................................................................33 3.6 - OPERAES COM STRING............................................................................34 3.6.1 - Prefixos de repetio......................................................................37 3.7 - INSTRUES DE CONTROLE DE FLAG ...............................................................38 3.7.1 - Instrues de controle do flag de direo, flag carry e de interrupo....38 3.7.2 - Instrues de transferncia de flags .................................................40 3.8 - INSTRUES DE ACESSO A PORTAS DE ENTRADA E SADA .......................................41 3.9 - INSTRUES DE USO GERAL ........................................................................41 ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 3 1 - Modos de endereamento do 8086 Os modos de endereamento do 8086 podem ser divididos em dois tipos distintos: 1. Modos de endereamento de programa 2. Modos de endereamento de dados 1.1 - Modos de endereamento de programa Quandodeseja-sequeaCPUrealizeumabuscadeinstruo,oendereoda localizao de memria da qual a instruo obtida calculado como a soma de um offsetarmazenadonoponteirodeinstruoIP,comocontedodoregistradorCS. Normalmente,ocontedodoIPincrementadomedidaqueasinstruesso executadas. Entretanto, as instrues de desvio no fluxo de execuo de um programa podem modific-lo de uma das trs maneiras abaixo: 1. Endereamentorelativoaprograma:Umdeslocamentode8ou16bits fornecido pela instruo na forma de uma dado somado ao IP como um nmero binrio sinalizado. Essa operao no altera o contedo de CS, sendo uma operao intra-segmento (dentro do prprio segmento corrente). 2. Endereamentodireto:Umendereode16bitsobtidodaprpriainstruona formadeumdadocolocadonoIP,nessecasotrata-sedeumaoperaointra-segmento.Seoendereoespecificadoforde32bits,osprimeirosdoisbytes carregarooIPeosdoisseguintesoCS,nessecasoocorreumaoperaointer-segmento (fora do segmento de cdigo corrente). 3. Endereamento indireto: Um dos modos de endereamento de dados (que sero descritos a seguir) podem ser utilizados para ler um dado da memria. Entretanto, esse dado interpretado como um endereo de memria pelas instrues de desvio ou chamada de subrotina. Se o dado de 16 bits acessado, este ser carregado no registrador IP (operao intra-segmento). Se no entanto, dois dados de 16 bits so acessados, o primeiro ser carregado em IP e o segundo em CS, realizando assim uma operao inter-segmento. 1.2 - Modos de endereamento de dados Seis opes esto disponveis para o endereamento de dados * Modo Imediato Nestetipodeendereamento,umdosoperandosestpresentenobyte seguinte ao cdigo da instruo (op-code). Se bytes de endereamento seguem o op-ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 4 code, ento o dado a ser transferido de maneira imediata vir logo aps os bytes de endereamento. Exemplo:ADDAX,1000h: Soma 1000h ao contedo do registrador AX * Modo Direto O modo de endereamento direto feito somando-se os dois bytes seguintes ao op-code, ao CS, para compor um novo endereo linear. Exemplo:suponhaqueoregistradorDScontenhaB000h.AinstruoMOV DX,[8000h],carregaremDXocontedodaposiodememriaDS:8000,cujo endereo linear B8000h. *Modo Direto Indexado Nessemododeendereamentoutiliza-seosregistradoresSIeDIcomo indexadores, somando-se um deslocamento de 8 ou 16 bits a um desses registradores de forma a gerar um endereo efetivo (offset). Exemplo:MOVAL,[SI+10h] MOV[DI-1000h],DX *Modo Implcito O modo implcito uma verso simplificada do modo de endereamento direto indexado.Anicadiferenaentreelesque,nessemodo,noespecificadoum deslocamento. Exemplo:MOVAL,[SI] MOV[DI],DX *Modo Relativo a Dados (utilizando o registrador de segmento DS) Nesse modo o contedo do registrador BX utilizado para formar a base para o endereolinear.Todosos modos de endereamento descritos at aqui, com exceo do modo imediato, podem ser utilizados tambm no modo relativo.Exemplo:Modo relativo diretoMOV AX,[BX+1000h] Modo relativo implcitoMOVDH,[BX+SI] Modo relativo direto indexadoMOV[BX+DI+1000h],DL *Modo Relativo a Stack ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 5 Nesse modo o contedo do registrador BP utilizado para formar a base para o endereo linear de acesso a dados gravados na pilha. Exemplo:MOV BP,SP MOVAX,[BP+04h] MOV[BP+DI+10h],BX 2 - Tipos de Dados (8086) Os principais tipos de dados so os bytes e as words. Um byte so 8 bits, sendo estes numerados de 0 a 7, o bit 0 o menos significativo (LSB - least significant bit). Awordumaseqnciadedoisbytesqueocupamdoisendereosconsecutivos quaisquer.Umawordtem,portanto,16bitsosquaissonumeradosde0a15. Novamente,obit0omenossignificativo(LSB).Obytequecontmobitzeroda word chamado de low byte (byte baixo) e o que contm o bit 15 chamado de high byte(bytealto).No8086enosdemaismicroprocessadoresdafamliaINTEL,olow byte armazenado no endereo mais baixo e seu endereo tambm o endereo da word. O endereo do high byte utilizado somente quando a metade superior da word estiver endereada separadamente da parte baixa. Comoo8086possuiumbarramentode16bits,ascomunicaesentreo microprocessadoreamemriaocorremcomotransfernciasdewordsalinhadasa endereospares;omicroprocessadorconvertetransfernciasentreendereosno alinhados a words, em mltiplas transferncias alinhadas. As operaes desalinhadas reduzem a velocidade do processamento em funo de ciclos extras de barramento. Emboraosbytesewordssejamosprincipaistiposdedadosparao8086,o mesmotemapossibilidadedeinterpretarestesoperandosdemaneirasdiversas. Algumas instrues especializadas reconhecem os seguintes tipos de dados: Inteiro:Nmerobinriosinalizadoarmazenadoemumawordoubyte.Todasas operaes assumem a representao em complemento de dois. O bit de sinal o 7 se for um byte ou o 15 se for uma word. Se negativo, este bit ser igual a 1, caso positivoser0.Emumbytepode-seterosvalorescompreendidosentre-128a +127; na word pode-se representar de -32768 a +32767. Ordinal:Nmerobinriosemsinalarmazenadoemumbyteouumaword.Se estiver contido em um byte, estar na faixa de 0 a 255, se numa word, entre 0 a 65535. String: Seqncia contnua de bytes ou words. Uma string pode conter de 0 a (220)-1 bytes. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 6 BCD:Representaodeumdgitodecimalcodificadoembinrio(BinaryCoded Decimal)nafaixade0a9.Umdecimalnocompactadoexpressoporumbyte sem bit de sinal. Cada dgito armazenado em um byte. A magnitude do nmero o valor binrio do nibble de ordem mais baixa (4 bits menos significativos do byte); os dgitos somente podem assumir valores entre 0 e 9. O nibble de ordem mais alta (4bitsmaissignificativosdobyte),deveestarzeradoparaasoperaesde multiplicao e de diviso, e podem conter qualquer valor nas somas e subtraes. BCD Compactado (packed BCD): Representao de dgitos decimais codificados em binrio,cadaumnafaixade0a9.Umdgitoarmazenadonos4bitsmenos significativosdobyteeoutronos4bitsmaissignificativos;portantocadabyte comporta dois dgitos. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 7 3 - Instrues AssemblyNestecaptuloseroapresentadasasinstruesassemblydo8086,quese aplicam a qualquer microprocessador da famlia 80XXX da Intel 3.1 - Instrues de movimentao de dados Neste grupo de instrues esto aquelas que permitem manipular dados do tipo byte,word,doublewordentrememriaeregistradoresdomicroprocessador.Sode trs tipos: Instrues demovimentao de uso geral Instrues para manipulao de stack Instrues de converso de tipo 3.1.1 - Instrues de movimentao de uso geral a) MOV - Move Propsito:Copiarocontedodooperando-fonteparaooperando-destino.O contedo do fonte no afetado Formato: MOV destino,fonte Flags: Nenhum afetado Exemplos: H 7 tipos de instrues MOV: 1 - Do acumulador para a memria MOV[SI], AL MOV[BX+DI],AX MOV[400], AL 2 - Da memria para o acumulador MOVAL,[BX+2] MOVAX,[SI] MOVAL,[400] 3- Da memria ou registrador para registrador de segmento MOVES,BX MOV DS,[SI] MOV SS,[BX] Obs: O registrador CS no pode ser usado como destino. 4 - Do registrador de segmento para a memria ou registrador MOV AX,CS MOV CX,SS ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 8 MOV[500],DS 5 - De registrador para registrador / da memria ou registrador para registrador / de registrador para a memria MOVCL,DH MOV AL,AH MOV SI,BX MOV DI,DX MOVCL,[SI] MOVDX,[SI+1000] MOV[BX+DI],DH MOV TABELA[BX+3],CL 6 - Dado imediato para registrador MOV AX,99H MOVBL,99H MOVCX,0FFFFH MOVDI,61CH 7 - Dado imediato para a memria MOV BYTE PTR[SI],0FH MOV WORD PTR[BX+1234],1157H b) LDS - Carrega registrador de segmento Propsito:Transferirquatrobytesconsecutivosdeumoperandofonteparaumpar deregistradoresde16bits.Ooperando-fonteprecisaestarnamemria.Umdos registradores aquele especificado na instruo, o outro o DS. Formato: LDS destino, fonte Flags: Nenhum afetado Exemplo:ConsiderequeoregistradorSIcontenhaovalor5334H,BXcontenha 0FFFFH e que as posies de memria a partir da indicada por SI, dentro do segmento dedados,contenhaosseguintesbytes21h,12h,DFhe2Ch.ApsainstruoLDS BX, dword ptr[SI]o registrador DS conter o valor 1221H e o registrador BX conter o valor 2CDFH. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 9 c) LES - Carrega registrador de segmento extraPropsito:Transferirquatrobytesconsecutivosdeumoperandofonteparaumpar deregistradoresde16bits.Ooperando-fonteprecisaestarnamemria.Umdos registradores aquele especificado na instruo, o outro o ES. Formato: LES destino, fonte Flags: Nenhum afetado Exemplo:ConsiderequeoregistradorBXcontenhaovalor5334H,DIcontenha 0FEF3HequeasposiesdememriaapartirdaindicadaporBX,dentrodo segmentodedados,contenhaosseguintesbytesE3h,2Dh,24heACh.Apsa instruoLESDI,dwordptr[BX]oregistradorESconterovalor2DE3Heo registrador DI conter o valor AC24H. 3.1.2 - Instrues para manipulao de stack d) PUSH - Grava word na pilha Propsito:Colocar,nareadememriausadacomopilha,ocontedodeum registrador ou posio de memria. Modo de operao: 1 - Decrementa o SP 2-Moveobytemaisaltodoregistradorouposiodememriaparaalocao indicada por SS:SP 3 - Decrementa o SP 4 - Move o byte mais baixo do operando para a locao indicada por SS:SP Formato: PUSH fonte Flags: Nenhum afetado Exemplo:PUSHSI; Grava na pilha a word armazenada em SI PUSHES; Grava na pilha a word armazenada em ES PUSH[BX+SI];Gravanapilhaawordarmazenadanaposiode memria apontada por (BX+SI) e) POP - Copia word da pilha para registrador ou memria Propsito:Retirarumapalavraarmazenadanotopodapilha,colocando-ano registrador ou posio de memria especificada. Modo de operao: ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 10 1 - Retira o byte no endereo de memria determinado por SS:SP, movendo-o para o byte de mais baixa ordem do operando destino. 2 - Incrementa o SP em 1 3 - Retira o byte da posio indicada por SS:SP e o move para o byte de alta ordem do operando destino. 4 - Incrementa o SP em 1 Formato: POP destino Flags: Nenhum afetado Exemplo:POPAX; Grava em AL a word no topo da pilha POPDS; Grava em DS a word no topo da pilha POP[DI];GravanaposiodememriaapontadaporDI a word no topo da pilha 3.1.3 - Instrues de converso de tipo f) CBW - Converte byte para word Propsito:PropagarobitdesinaldovalorpresentenoregistradorAL(bitmais significativo) para o registrador AH. Assim, se o valor em AL for positivo, a instruo armazena 00H em AH e, em caso contrrio, 0FFH. Formato: CBW Flags: Nenhum g) CWD - Converte word em doubleword Propsito:PropagarobitdesinaldovalorpresentenoregistradorAX(bitmais significativo) para o registrador DX. Assim, se o valor em AX for positivo, a instruo armazena0000HemDXe,emcasocontrrio,0FFFFH.Essainstruoutilizada antesdaexecuodeumadivisosinalizadadocontedodeAXporoutrooperando de 16 bits, de modo a preencher o DX com o valor do sinal em AX. Formato: CWD Flags: Nenhum 3.2 - Instrues aritmticas binrias Asinstruesaritmticasbinriasdosprocessadoresdafamlia 8086/286/386/486/586...operamcomdadoscodificadosembinrio.Asoperaes incluemadio,subtrao,multiplicao,diviso,incremento,decremento, comparaoemudanadesinal.Sosuportadostantonmerosinteirossinalizados ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 11 comoosnosinalizados.Osoperandosfontespodemservaloresimediatos, registradoresoumemria.Operandosdestinopodemserregistradoresoumemria (exceto quando o operando fonte estiver na memria). As instrues aritmticas alteram os flags ZF, CF, SF e OF para reportar o tipo deresultadoproduzidopelaexecuodamesma.Otipodeinstruoaserutilizada para o teste do flag depender do dado estar sendo interpretado como valor sinalizado ou no. O flag CF contm informaes importantes para inteiros sinalizados. O flag ZF relevante para ambos, e ser setado sempre que um resultado for 00H Asinstruesaritmticasoperamdadosde8,16ou32bits.Osflagsso utilizadospara refletir o tamanho da operao. Por exemplo, se o resultado de uma operao de ADD com dados de 8 bits for maior do que 255 (decimal), o flag CF ser iguala1.Seonmerointeirosemsinal,oflagCFpodesertestadoapsuma instruo aritmtica binria para determinar se a operao requer carry ou borrow que ser propagado para o prximo estgio da operao. AsinstruesdeincrementoedecrementonoalteramoindicadorCF,isto permite o uso destas instrues para a atualizao de contadores no controle de loops sem alterao dos reportes referentes aos resultados da aritmtica. OsflagsSFeOFreportamaaritmticasinalizada.OflagSFpossuiomesmo valordobitdesinaldeumresultado.OflagOFseriguala1emqualquerdestes casos: UmcarryfoigeradodoMSBparaobitdesinalmaisobitdesinalnogerouum carry para o CF, ou seja, o resultado foi maior do que o maior nmero positivo que pode ser representado no formato complemento de dois. Um carry foi gerado do bit de sinal para o MSB mas nenhum carry foi gerado para o bit de sinal, ou seja, o resultado foi menor do que o menor valor negativo que pode ser representado no formato complemento de dois. Estesflagsdestatuspodemsertestadosporqualquertipodeinstruo condicional. 3.2.1 - Instrues de adio e subtrao h) ADD - Adio Propsito: Executar a adio normal entre dois operandos, um fonte e outro destino, devolvendo o resultado no destino. Formato: ADD destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 12 Exemplos:ADDAL,04H; Adiciona 04H ao contedo de AL ADDbyte ptr[300],05H; Adiciona 05H ao contedo da posio dememria DS:0300 ADD AX,SI ; Adiciona o contedo de SI ao contedo de AX ADDDL,[300]; Adiciona o byte gravado em DS:0300 aocontedo de DL ADD[SI+BX+2],AL; Adiciona o contedo de AL ao contedo da posio de memria DS:SI+BX+02 i) ADC - Adio com carry * Propsito: Executar a adio normal entre dois operandos, um fonte e outro destino, maisovalordoflagcarryexistenteantesdaoperao,devolvendooresultadono destino. Formato: ADC destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplos:ADCAL,04H; Adiciona 04H ao contedo de AL e ento soma o contedo do flag carry ADCbyte ptr[300], 05H ; Adiciona 05H ao contedo da posio dememria DS:0300 e ento soma o contedo doflag carry ADC AX,SI ; Adiciona o contedo de SI ao contedo de AX e ento soma o contedo do flag carry ADCDL,[300]; Adiciona o byte gravado em DS:0300 aocontedo de DL e ento soma o contedo do flagcarry ADC[SI+BX+2], AL; Adiciona o contedo de AL ao contedo da posio de memria DS:SI+BX+02 e entosoma o contedo do flag carry (*)Oflagcarrysersetado,apsaexecuodainstruoADC,casoumadas condies abaixo ocorra: a)H um vai um na etapa da soma dos operandos destino e fonte, ou b)Humvaiumnaetapadasomadoflagcarry(existenteantesdaoperao), com o resultado de (destino + fonte). ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 13 j) SUB - Subtrao Propsito: Executar uma subtrao entre dois operandos, um fonte e outro destino, devolvendo o resultado no destino. Formato: SUB destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplos:SUBBL,04H; Subtrai 04H do contedo de BL SUBbyte ptr[DI],05H; Subtrai 05H do contedo da posio dememria DS:DI SUB AX,CX ; Subtrai o contedo de CX do contedo de AX SUBBX,[SI];SubtraiawordgravadaemDS:SIdo contedo de BX SUB[BX+2],DL; Subtrai o contedo de DL do contedo daposio de memria DS:BX+02 j) SBB - Subtrao com carry Propsito:Executarasubtraoentredoisoperandos,umfonteeoutrodestino, menosovalordoflagcarryexistenteantesdaoperao,devolvendooresultadono destino. Formato: SBB destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplos:SBBBL,04H; Subtrai 04H do contedo de BL e ento subtrai do resultado o contedo do flag carry SBBbyte ptr[DI],05H; Subtrai 05H do contedo da posio dememria DS:DI e ento subtrai do resultado ocontedo do flag carry ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 14 SBB AX,CX ;SubtraiocontedodeCXdocontedodeAX e ento subtrai do resultado o contedo do flag carry SBBBX,[SI];SubtraiawordgravadaemDS:SIdo contedo deBXeentosubtraidoresultadoo contedo do flag carry SBB[BX+2],DL; Subtrai o contedo de DL do contedo daposio de memria DS:BX+02 e ento subtraido resultado o contedo do flag carry k) INC - Incrementa destino em 1 Propsito:Soma1aocontedodeumoperando,quepodeserregistradorou posio de memria. Formato: INC destino Flags: Afetados AF, OF, PF, SF, ZF. Exemplos:INCBL; Soma 1 ao contedo de BL INCbyte ptr [SI] : Soma 1 ao byte gravado na posio de memriaapontada por DS:SI Obs: Registradores de segmento no podem ser usados como operando. l) DEC - Decrementa destino em 1 Propsito:Subtrai1docontedodeumoperando,quepodeserregistradorou posio de memria. Formato: DEC destino Flags: Afetados AF, OF, PF, SF, ZF. Exemplos:DECBX; Subtrai 1 do contedo de BX DECword ptr [0100]:Subtrai1dawordgravadanaposiode memria apontada por DS:0100 Obs: Registradores de segmento no podem ser usados como operando. 3.2.2 - Instrues de comparao e mudana de sinal m) CMP - Compara dois operandos Propsito:Efetuarumasubtraoentredoisoperandos,alterandoosflagse descartando o resultado da operao. Formato: CMP destino,fonte ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 15 Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplos:CMP AL,57H; Compara o contedo de AL com o valor 57H CMPDI,BX ; Compara os contedos de DI e BX CMP[SI],AX; Compara uma word gravada na posio DS:SI, com o contedo de AX CMPCH,[SI+BX+3];ComparaocontedodeCHcomobyte armazenado na posio de memria DS:SI+BX+3 n) NEG - Calcula o complemento de dois do destino Propsito: Efetuar o complemento de dois de um operando, que pode ser registrador ou posio de memria.. Formato: NEG destino Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplo:ConsiderequeoregistradorCXcontenhaovalor0005(+5).Apsa execuo da instruoNEGCX, o registrador conter o valor FFFB (-5). 3.2.3 - Instrues de multiplicao e diviso o) MUL - Multiplicao sem sinal Propsito: Efetuar uma multiplicao no sinalizada entre o contedo do acumulador (ALouAX)pelooperandofonte,devolvendooresultadonoacumuladorAX(casoa operaotenhaenvolvidoALcomumoperandode8bits),ouemDXeAX(casoa operao tenha envolvido AX e um operando de 16 bits). Formato: MUL fonte Flags: Afetados CF, OF, indefinidos AF, PF, SF, ZF. Exemplos:MOVAL, 83H MOVCL, 44H MUL CL; realiza o produto entre AL e CL, resultado em AX MOV AX,1234H MOV BX,6000H MULBX; realiza o produto de 16 bits entre AX e BX, resultado em DX(parte alta) e AX(parte baixa) ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 16 p) IMUL - Multiplicao com sinal Propsito: Efetuar uma multiplicao sinalizada entre o contedo do acumulador (AL ouAX)pelooperandofonte,devolvendooresultadonoacumuladorAX(casoa operaotenhaenvolvidoALcomumoperandode8bits),ouemDXeAX(casoa operao tenha envolvido AX e um operando de 16 bits). Comososinalizados,osoperandospodemtervaloresnafaixade-128a +127 (operao de 8 bits) ou entre -32768 a +32767 (operao de 16 bits). Formato: IMUL fonte Flags: Afetados CF, OF, indefinidos AF, PF, SF, ZF. Exemplos:MOVAL, 83H MOVCL, 44H IMULCL; realiza o produto entre AL e CL, resultado em AX MOV AX,1234H MOV BX,6000H IMULBX; realiza o produto de 16 bits entre AX e BX, resultado em DX(parte alta) e AX(parte baixa) q) DIV - Diviso sem sinal Propsito:Efetuarumadivisonosinalizadaentreocontedodoacumulador(AL ouAX)pelooperandofonte,devolvendooresultadonoacumuladorAX(casoa operaotenhaenvolvidoAXcomumoperandode8bits),ouemDXeAX(casoa operao tenha envolvido DS:AX e um operando de 16 bits). Na operao de 8 bits, o quociente da operao de diviso fica em AL e o resto da diviso em AH. Na operao de 16 bits, o quociente da operao fica em AX e o resto da diviso em DX. Formato: DIV fonte Flags: indefinidos AF, CF, OF, PF, SF, ZF. Exemplos:DIVBL; Dividendo em AX, divisor em BL. O quociente estar em AL e o resto em AH DIVBX;DividendoemDX:AX,divisoremBX.Oquocienteestar em AX e o resto em DX ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 17 No primeiro exemplo, considere que o contedo do acumulador AX seja 800H e que BL contenha 30H. Aps a execuo da instruo, AL conter 2AH e AH o valor 20H r) IDIV - Diviso com sinal Propsito:Efetuarumadivisosinalizadaentreocontedodoacumulador(ALou AX) pelo operando fonte, devolvendo o resultado no acumulador AX (caso a operao tenhaenvolvidoAXcomumoperandode8bits),ouemDXeAX(casoaoperao tenha envolvido DS:AX e um operando de 16 bits). Na operao de 8 bits, o quociente da operao de diviso fica em AL e o resto da diviso em AH. Na operao de 16 bits, o quociente da operao fica em AX e o resto da diviso em DX. Seosoperandostiveremsinaisdiferentes,sendoumpositivoeooutro negativo, a diviso ser feita de forma que o resto tenha o mesmo sinal do dividendo. Formato: IDIV fonte Flags: indefinidos AF, CF, OF, PF, SF, ZF. Exemplos:IDIVDH; Dividendo em AX, divisor em DH. O quociente estar em AL e o resto em AH IDIVword ptr[BX+100] ;DividendoemDX:AX,divisornaposiode memriaapontadapor(BX+100).Oquociente estar em AX e o resto em DX 3.3 - Instrues de aritmtica decimal Aaritmticadecimalrealizadacombinando-seasinstruesdaaritmtica binriacomasdaaritmticadecimal.Asinstruesdaaritmticadecimalso utilizadas em uma das seguintes formas: Paraajustarosresultadosdeumainstruodaaritmticabinria,realizada anteriormente, a fim de se produzir um valor decimal vlido, compactado ou no. Para ajustar as entradas de um a operao binria subsequente para que a mesma produzaumresultadodecimal,compactadoouno.estasinstruesoperam somente nos registradores AL ou AH, associados ao flag AF. 3.3.1 - Instrues de alterao para BCD compactado s) DAA - Ajuste decimal aps adio Propsito:CorrigiroresultadopresentenoacumuladorAL,apsumasomaentre doisvaloresBCDcompactados(umdgitoemcadanibble),paraobterumparde dgitos BCD compactados. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 18 O procedimento dessa instruo : 1. Se os quatro bits menos significativos de AL esto entre A e F, ou se o flag AF est ligado, somar 06H ao acumulador AL e ligar o flag AF. 2. Se os quatro bits mais significativos de AL esto entre A e F, ento somar 60H ao acumulador AL e ligar o flag CF. Formato: DAA Flags: Afetados AF, CF, PF, SF, ZF, indefinido OF. Exemplo: Suponha que AL contenha o valor 39H e AH o valor 53H. Aps a seqncia ADDAL,AH DAA o acumulador AL conter o valor 92H, e no 8CH. t) DAS - Ajuste decimal aps subtrao Propsito:CorrigiroresultadopresentenoacumuladorAL,apsumasubtrao entre dois valores BCD compactados (um dgito em cada nibble), para obter um par de dgitos BCD compactados. O procedimento dessa instruo : 1. Se os quatro bits menos significativos de AL esto entre A e F, ou se o flag AF est ligado, subtrair 06H do contedo do acumulador AL e ligar o flag AF. 2. Se os quatro bits mais significativos de AL esto entre A e F, ou se o flag CF est ligado, ento subtrair 60H do contedo do acumulador AL e ligar o flag CF. Formato: DAS Flags: Afetados AF, CF, PF, SF, ZF. Exemplo: Suponha que AL contenha o valor 84H e DL o valor 16H. Aps a seqncia SUBAL,DL DAS o acumulador AL conter o valor 68H, e no 6EH. 3.3.2 - Instrues de alterao para BCD no compactado u) AAA - Ajuste ASCII aps adio Propsito:Corrigiroresultado presente no acumulador AL, aps uma soma de dois dgitos ASCII. O procedimento dessa instruo : ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 19 1. Se os quatro bits menos significativos de AL esto entre A e F e o flag AF=0, ento execute o passo 3. 2. Se os quatro bits menos significativos de AL esto entre A e F, ou se o flag AF=1, entosomar06HaoacumuladorAL,somar01HaocontedodeAHeligaroflag AF. 3. Apaga os quatro bits mais significativos do registrador AL. Formato: AAA Flags: Afetados AF, CF; indefinidos, PF, SF, ZF, OF. Exemplo: Suponha que o acumulador AX contenha o valor 0437H e que CL contenha o valor 34H. Aps a seqncia ADDAL,CL AAA o acumulador AX conter o valor 0501H. v) AAS - Ajuste ASCII aps subtrao Propsito:CorrigiroresultadopresentenoacumuladorAL,apsumasubtrao entre dois dgitos ASCII. O procedimento dessa instruo : 1. Se os quatro bits menos significativos de AL esto entre A e F e o flag AF=0, ento execute o passo 3. 2. Se os quatro bits menos significativos de AL esto entre A e F, ou se o flag AF=1, entosubtraia06HdocontedodoacumuladorAL,subtraia01Hdocontedode AH e ligue o flag AF. 3. Apaga os quatro bits mais significativos do registrador AL. 4. Sinaliza o flag CF com o mesmo valor do AF. Formato: AAS Flags: Afetados AF, CF; indefinidos, PF, SF, ZF, OF. Exemplo: Considera que o acumulador AX contenha o valor 0935H. Aps a seqncia SUBAL,36H AAS o acumulador AX conter o valor 0809H. x) AAM - Ajuste ASCII aps multiplicao ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 20 Propsito:Corrigiroresultadodamultiplicaodedoisnmerosdecimaisno compactados.Ainstruodeveseguir-seamultiplicaodedoisoperandosdecimais nocompactadosparaproduzirumresultadodecimalvlido.Ainstruofaro seguinte: divide o valor em AL por 10, armazenando o resultado em AH e o resto em AL. Formato: AAM Flags: Afetados PF, SF, ZF; indefinidos, AF, CF, OF. (os flags so afetados de acordo com o resultado em AL.) Exemplo:SuponhaqueoacumuladorALcontenhaovalor09equeBLcontenhao valor 08. Aps a seqncia MUL BL AAM oacumuladorAXconterovalor0702H.Observequeseaessevalorsomarmos 3030H, teremos em AX dois dgitos numricos em ASCII. w) AAD - Ajuste ASCII antes de uma diviso Propsito: Modifica o numerador nos registradores AH ou AL a fim de prepar-lo para a diviso de dois operandos decimais no compactados, o que resultar num nmero decimal no compactado vlido. O registrador AH deve conter o dgito superior e o AL odgitoinferiororesultadodestainstruoarmazenadonoregistradorAL.O registrador AH zerado. Procedimento executado pela instruo: 1. Multiplica o valor de AH por 10. 2. Soma o contedo de AH a AL. 3. Zera o registrador AH. Formato: AAD Flags: Afetados PF, SF, ZF; indefinidos, AF, CF, OF. (os flags so afetados de acordo com o resultado em AL.) Exemplo: Suponha que o acumulador AX contenha o valor 0902. Aps a instruo AAD o acumulador AX conter o valor 005CH. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 21 3.4 - Instrues Lgicas As instrues lgicas possuem dois operandos. Os operandos fontes podem ser valores imediatos, registradores gerais, ou memria. Os operandos destino podem ser registradoresgeraisoumemria(excetoquandoooperandofontetambmfor memria). As instrues lgicas modificam o estado dos flags. Esto organizadas em: Instrues para operaes booleanas. Instrues de teste de bit. Instrues de deslocamentos e rotaes. 3.4.1 - Instrues para operaes booleanas As operaes lgicas so realizadas pelas instrues AND, OR, XOR e NOT y) NOT - Operao lgica NOT Propsito:Efetuarocomplementode1dooperando,quepodeserregistradorou memria. Todos os bits do operando so complementados. Formato: NOT destino Flags: Nenhum afetado Exemplo:NOTword ptr[SI] NOTCL suponhaquenoltimocasoovalorinicialdeCLseja1FH.Apsainstruo,CL assumiu o valor E0H. z) AND - Operao lgica AND Propsito: Executar a funo lgica AND (E) entre cada bit de um operando-fonte e seucorrespondenteemumoperando-destino,colocandooresultadonooperando-destino. Formato: AND destino,fonte Flags: Afetados: CF, OF, PF, SF, ZF; indefinido: AF Exemplo:AND AL,08H ; Realiza a operao lgica entre o contedo de AL e o valor 08H, bit-a-bit. AND byte ptr[BX],06H; Realiza a operao lgica entre o contedo da posio de memria apontada por BX e o valor 06H, bit-a-bit. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 22 AND AX,CX;RealizaaoperaolgicaentreocontedodeAXe CX, bit-a-bit. a1) OR - Operao lgica OR Propsito: Executar a funo lgica OR (OU) entre cada bit de um operando-fonte e seucorrespondenteemumoperando-destino,colocandooresultadonooperando-destino. Formato: OR destino,fonte Flags: Afetados: CF, OF, PF, SF, ZF; indefinido: AF Exemplo:OR BX,0801H; Realiza a operao lgica entre o contedo de BX e o valor 0801H, bit-a-bit. OR [BX],DL;Realizaaoperaolgicaentreocontedoda posio dememriaapontadaporBXeocontedodo registrador DL. OR BL,AL;RealizaaoperaolgicaentreocontedodeBLe AL, bit-a-bit. b1) XOR - Operao lgica XOR Propsito:ExecutarafunolgicaXOR(OUEXCLUSIVO)entrecadabitdeum operando-fonte e seu correspondente em um operando-destino, colocando o resultado no operando-destino. Formato: XOR destino,fonte Flags: Afetados: CF, OF, PF, SF, ZF; indefinido: AF Exemplo:XOR AL,AH; Realiza a operao lgica entre o contedo de AL e o contedo de AH. XOR DL,[BX]; Realiza a operao lgica entre o contedo de DL e o contedodaposiodememriaapontadapor BX. XOR CX,1234H;RealizaaoperaolgicaentreocontedodeCXe o dado imediato 1234H. 3.4.2 - Instruo de teste de bit c1) TEST - Comparao lgica ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 23 Propsito: Efetuar o teste de determinados bits de um operando, para determinar se os mesmos esto ligados ou desligados, mas sem afeta-los. Formato: TEST destino,fonte Flags: Afetados: CF, OF, PF, SF, ZF; indefinido: AF Exemplo:TEST AL,AH;VerificaquebitsnoregistradorALestoativos,de acordo com a mscara gravada em AH. TEST DL,[BX];VerificaquebitsnoregistradorDLesto ativos, de acordocomamscaragravadanaposiode memria apontada por BX. TEST CX,1234H;VerificaquebitsnoregistradorCXestoativos,de acordo com a mscara especificada na instruo(1234H). 3.4.3 - Instrues de rotao e deslocamento d1) RCL - Rotacione para a esquerda atravs do carry Propsito: Rotacionar o contedo da locao de memria ou registrador especificado, para a esquerda, atravs do flag carry. O nmero de vezes a rotacionar 1, ou aquele contidonoregistradorCL.OcontedodeCLnoafetadopelainstruo,quando usado como contador. Formato: RCL destino,1 ou RCL destino, CL Flags: Afetados: CF, OF Exemplos:RCL CL,1 ; Rotaciona o contedo do registrador CL, uma posio para a esquerda. RCL AX,CL;RotacionaocontedodoregistradorAX,onmero de vezes especificado em CL, RCL byte ptr[SI],CL;Rotacionaocontedodaposiodememria apontada por SI, o nmero de vezes especificado em CL. MSB LSB15/7 0CF e1) RCR - Rotacione para a direita atravs do carry ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 24 Propsito: Rotacionar o contedo da locao de memria ou registrador especificado, para a direita, atravs do flag carry. O nmero de vezes a rotacionar 1, ou aquele contidonoregistradorCL.OcontedodeCLnoafetadopelainstruo,quando usado como contador. Formato: RCR destino,1 ou RCR destino, CL Flags: Afetados: CF, OF Exemplos:RCR AL,1 ; Rotaciona o contedo do registrador AL, uma posio para a direita. RCR BH,CL;RotacionaocontedodoregistradorBH,onmero de vezes especificado em CL, RCR byte ptr[300],CL;Rotacionaocontedodaposiodememria DS:0300, o nmero de vezes especificado em CL. MSB LSB15/7 0CF f1) ROL - Rotacione para a esquerda Propsito: Rotacionar o contedo da locao de memria ou registrador especificado, paraaesquerda.Onmerodevezesarotacionar1,ouaquelecontidono registradorCL.OcontedodeCLnoafetadopelainstruo,quandousadocomo contador. Formato: ROL destino,1 ou ROL destino, CL Flags: Afetados: CF, OF Exemplos:ROL DX,1 ;RotacionaocontedodoregistradorDX,uma posio para a esquerda. ROL BH,CL;RotacionaocontedodoregistradorBH,onmero de vezes especificado em CL, ROL byte ptr[BX],1 ; Rotaciona o contedo da posio de memria DS:BX, uma posio para a esquerda. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 25 MSB LSB15/7 0CF g1) ROR - Rotacione para a direita Propsito: Rotacionar o contedo da locao de memria ou registrador especificado, para a direita. O nmero de vezes a rotacionar 1, ou aquele contido no registrador CL. O contedo de CL no afetado pela instruo, quando usado como contador. Formato: ROR destino,1 ou ROR destino, CL Flags: Afetados: CF, OF Exemplos:ROR AL,CL ;RotacionaocontedodoregistradorAL,onmero de vezes especificado em CL. ROR BH,1;RotacionaocontedodoregistradorBH,uma posio para a direita. ROR byte ptr[DI],1 ;Rotacionaocontedodaposiodememria apontada porDI,nosegmentodedados,umaposio para a direita. MSB LSB15/7 0CF h1) SAL/SHL - Deslocamento aritmtico lgico / Deslocamento lgico Propsito: Deslocar o contedo da locao de memria ou registrador especificado esquerda. Com o deslocamento o bit que estava na posio mais significativa levado para o flag CF, cujo valor anterior perdido, e um bit 0 carregado na posio do bit menossignificativo.Onmerodevezesadeslocar1,ouaquelecontidono registradorCL.OcontedodeCLnoafetadopelainstruo,quandousadocomo contador. Formato: SAL destino,1 ou SAL destino, CL Flags: Afetados: CF, OF, PF, SF, ZF; indefinido AF. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 26 Exemplos:SAL DX,1 ;DeslocaocontedodoregistradorDX,umaposio para a esquerda. SAL BH,CL; Desloca o contedo do registrador BH, o nmero de vezes especificado em CL, SAL byte ptr[BX],1 ;DeslocaocontedodaposiodememriaDS:BX, uma posio para a esquerda. 0CF MSB LSB15/7 0 h1) SAR - Deslocamento aritmtico direita Propsito: Deslocar o contedo da locao de memria ou registrador especificado direita. Com o deslocamento o bit que estava na posio mais significativa mantido, e o bit 0 carregado no flag CF. O nmero de vezes a deslocar 1, ou aquele contido no registrador CL. O contedo de CL no afetado pela instruo, quando usado como contador. Formato: SAR destino,1 ou SAR destino, CL Flags: Afetados: CF, OF, PF, SF, ZF; indefinido AF. Exemplos:SAR AL,CL ;DeslocaocontedodoregistradorAL,onmerode vezes especificado em CL. SAR BH,1;DeslocaocontedodoregistradorBH,umaposio para a direita. SAR byte ptr[DI],1 ; Desloca o contedo da posio de memria apontada porDI,nosegmentodedados,umaposioparaa direita. MSB LSBCF15/7 0 i1) SHR - Deslocamento lgico direita Propsito: Deslocar o contedo da locao de memria ou registrador especificado direita, inserindo um bit 0 na posio do bit mais significativo do operando e levando o bit0(menossignificativo)paraoflagCF,cujovalorinicialperdido.Onmerode ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 27 vezesadeslocar1,ouaquelecontidonoregistradorCL.OcontedodeCLno afetado pela instruo, quando usado como contador. Formato: SHR destino,1 ou SHR destino, CL Flags: Afetados: CF, OF, PF, SF, ZF; indefinido AF. Exemplos:SHR AL,CL ;DeslocaocontedodoregistradorAL,onmerode vezes especificado em CL. SHR BH,1;DeslocaocontedodoregistradorBH,umaposio para a direita. SHR byte ptr[DI],1 ; Desloca o contedo da posio de memria apontada porDI,nosegmentodedados,umaposioparaa direita. MSB LSB 0CF15/7 0 3.5 - Instrues de transferncia de controle Osmicroprocessadores80XXXpermitemqueocontroledofluxodeexecuo sejatransferidodeformacondicionalouincondicional.Omodocondicionalde transfernciafeitoapartirdoestadooudecombinaodeestadosdosflags.As transferncias incondicionais so sempre executadas. 3.5.1 - Instrues de transferncia de controle incondicional Asinstruesquerealizamatransfernciaincondicionalparaumendereo destinoemumsegmentodecdigoso:JMP,CALL,RET,INTeIRET.Oendereo destino pode estar no mesmo segmento de cdigos (transferncia near - prxima) ou em um segmento de cdigos diferente (transferncia far - distante). j1) JMP - Desviar Propsito: Provocar um desvio incondicional no fluxo de processamento, transferindo a execuo para o operando alvo. O desvio pode ser feito dentro ou fora do atual segmento de cdigo. No caso de desviosdentro do prprio segmento, denominados desvios intra-segmento, apenas o registradorIPafetadopelainstruo,sendoalteradoparaovalorendereo-alvo. Quandoa distncia entre o valor atual e o endereo-alvo, para onde se d o desvio ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 28 incondicional est entre -128 a +127 bytes, pode-se especificar um desvio-curto (JMP SHORT), tambm chamado desvio incondicional relativo curto, com a vantagem de o deslocamentoparaodesvioserexpressoporumnicobyte,contendoumvalor sinalizadoque,aosersomadoaovalordeIPgeraroendereo-alvo.Seadistncia relativaparaondesedarodesvioformaiorque+127ou-128,entooendereo relativo gerado ser um valor sinalizado de 16 bits, o que possibilita desvios por todo o segmento corrente. Exemplo:label1:----------- ----------- atual: JMP label1 A outra forma de desvio incondicional o desvio inter-segmento. Neste caso os valoresdoCSeIPprecisamseralteradosparaqueocorraamigraodeum segmentoparaoutro.Ocdigoqueidentificaumdesvioincondicionalparaoutro segmento deve ser seguido por 4 bytes: os dois primeiros contendo o novo valor do IP e os dois seguintes o novo valor do CS. Exemplo:----------- atual: JMP novo_longe ----> Segmento de cdigo atual ----------- ----------- novo_longe: MOV AX,10H----> Segmento de cdigo novo ----------- Asformasdeespecificarumdesvioincondicional,vistasataqui,soditas diretas,poisoendereodaposio-alvoquedeseja-seatingirexplicitamente especificado na instruo, quer com um valor numrico, quer por um label. A outra forma de executar-se um desvio incondicional a indireta, onde o valor do endereo-alvo est armazenado em registrador(es) ou em posio(es) de memria, o qual ser movidoparaoregistradorIP,nocasodedesviointra-segmentoouparaos registradores IP e CS, no caso de desvio inter-segmento. Formato: JMP alvo Flags: Nenhum afetado Exemplos:JMPdesvio_curto ; Direto, intra-segmento, relativo. JMPdesvio_intra ; Direto, intra-segmento. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 29 JMPdesvio_inter ; Direto, inter-segmento. JMPCX; Indireto, intra-segmento, o endereo-alvo estarmazenado em CX. JMPdword ptr[BX]; Indireto, inter-segmento, o endereo-alvo est armazenado nas 4 posies de memria a partir de DS:BX. k1) CALL - Chama uma procedure Propsito: Chamar uma subrotina, alterando o fluxo normal de execuo, processar umasub-rotinaeaofimdamesma,permitirqueaexecuoretorneaopontodo programa imediatamente posterior instruo de chamada da sub-rotina. A sub-rotina chamada pode residir no mesmo segmento de cdigo corrente ou no.Tem-seassimaschamadasdesubrotinasintra-segmentoeinter-segmento, respectivamente. Asub-rotinapodeserchamadaporviadiretaouindireta.Chamadasdiretas podem ser realizadas a labels(nomes associados a endereos de memria) dentro de segmentosdecdigo,enquantoque,porviaindireta,usa-seregistradoresque contm em si, ou nas posies de memrias apontadas por eles, o valor do endereo onde se inicia a sub-rotina. Paraguardaroendereodainstruoaserexecutadaaoretornardasub-rotina,oprocessadorsalvanapilhaocontedodoIP,nocasodechamadasa subrotinasnomesmosegmentodecdigo.Naschamadasdesub-rotinasinter-segmento,almdovalordeIP,tambmnecessriosalvarocontedodoCS,pois ele ser alterado para provocar o desvio para outro segmento. O processador primeiro salva o IP e s ento o CS. Formato: CALL alvo Flags: Nenhum afetado Exemplos:CALLsub_proxima; Direta, intra-segmento CALLsub_distante ; Direta, inter-segmento CALLBX; Indireta, intra-segmento CALLdword ptr [SI]; Indireta, inter-segmento l1) RET - Retorno de uma procedure ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 30 Propsito:Encerrarumasub-rotina,transferindoofluxodoprocessamentoparaa instruoseguintechamadadasubrotina.Oendereodestainstruo,paraonde deveserdadooretorno,foicolocadonapilhapelainstruoCALL.Portanto,para encerrarumasub-rotinanear,queresidenomesmosegmento,ainstruoRET dever apenas retirar uma palavra do topo da pilha e mov-la para o registrador IP. Para enderear uma procedurre far, que reside em um outro segmento de cdigo, a instruoRETdeverretirarasduaspalavrasqueforamarmazenadasnapilhapela instruo CALL inter-segmento, restaurando os antigos valores de CS e IP. Operao da instruo Retirar uma palavra do topo da pilha e move-la para o IP. Incrementar o SP em 2. Se a rotina do tipo inter-segmento, ento: Retirar outra palavra do topo da pilha e move-la para o CS. Incrementar o SP em 2. Formato: RET Flags: Nenhum afetado m1) INT - Interrupo Propsito: Alterar o fluxo normal de execuo do programa, desviando-se para uma rotinadeinterrupo,cujovetor(endereoformadoporCS:IP)estpresentenuma tabela nos primeiros 1024 bytes da memria. Atabeladevetoresdeinterrupotem256entradas,cadaqualcom4bytes (osdoisprimeiroscontendoovalordoIPeosdoisseguintesovalordoCS),que indicam o endereo de uma rotina na memria. Procedimento da instruo: Decrementa o SP em 2 e salva o registrador de flags na pilha Apaga os bits IF e TF, desabilitando futuras interrupes de hardware Decrementa o SP em 2, salva o CS na pilha e coloca a palavra de mais alta ordem do vetor selecionado em CS DecrementaoSPem2,salvaoIPnapilhaecarrega-ocomapalavradebaixa ordem dentro do vetor selecionado. A prxima instruo a ser executada ser ento a primeira dentro da rotina de interrupo. Formato: INT tipo Flags: Afetados: IF e TF ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 31 n1) IRET - Retorno de uma interrupo Propsito:Retornardeumarotinadetratamentodeinterrupo.Estainstruo simplesmenterecuperadapilhaocontedodosregistradoresqueforam automaticamente salvos, na ocorrncia da interrupo. Operao da instruo Retirar uma palavra do topo da pilha e move-la para o IP. Incrementar o SP em 2. Retirar outra segunda palavra do topo da pilha e move-la para o CS. Incrementar o SP em 2. Retiraroutraterceirapalavradotopodapilhaemove-laparaoregistradorde flags. Incrementar o SP em 2. Formato: IRET Flags: Todos so afetados ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 32 3.5.2 - Instrues de transferncia de controle condicional Asinstruesdecontrolecondicionalsodesvios(jumps)quetransferema execuo do programa caso o estado de um flag seja o mesmo que o especificado pela instruo. o1) J(condio) - Desvio curto se condio satisfeita Propsito: Desviar o fluxo do processamento para o operando-alvo, se uma condio testada for encontrada. A distncia do endereo-alvo, para onde se quer direcionar o desvio, deve estar na faixa de -128 a +127 bytes da prxima instruo. Observao: Above e below referem-se a relao entre dois valores no sinalizados e greater e less, relao entre dois valores sinalizados Desvios condicionais no sinalizados MnemnicoEstado dos flagsDescrio JA/JNBE(CF ou ZF)=0Acima/No abaixo ou igual JAE/JNBCF=0Acima ou igual/No abaixo JB/JNAECF=1Abaixo/No acima ou igual JBE/JNA(CF ou ZF)=1Abaixo ou igual/No acima JCCF=1Carry JE/JZZF=1Igual/Zero JNCCF=0No carry JNE/JNZZF=0No igual/No zero JNP/JPOPF=0Sem paridade/Paridade mpar Desvios condicionais sinalizados JG/JNLE((SF OF) ou ZF)=0Maior/No menor ou igual ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 33 JGE/JNL(SF OF)=0Maior ou igual/No menor JL/JNGE(SF OF)=1Menor/No maior ou igual JLE/JNG((SF OF) ou ZF)=1Menor ou igual/No maior JNOOF=0Sem estouro (overflow) JNSSF=0Sem sinal (no negativo) Formato: J(condio) alvo_curto Flags: Nenhum afetado 3.5.3 - Instrues de LOOP As instrues de loop so desvios condicionais que se utilizam do registrador CX como contador do nmero de vezes que um bloco de instrues deve ser executado. TodasasinstruesdeloopsempredecrementamocontedodoregistradorCX quando executadas e terminam se esta operao zerar o mesmo. Em quatro das cinco formaspossveis,oflagZFpodeserutilizadoparafinalizaroloopmesmoqueo contedo do registrador CX no seja zero. m1) LOOP - Retornar at a contagem ser completada Propsito: Decrementar o contedo do registrador contador CX e provocar um desvio no fluxo do processamento para o endereo-alvo, se o valor em CX ainda no for zero. Adistnciaparaodesviodeveestarnafaixade128bytesparatrsou127paraa frente, em relao ao endereo da instruo que segue o loop. Formato: LOOP alvo Flags: Nenhum afetado n1) LOOPE/LOOPZ Retornar se igual / zero ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 34 Propsito: Decrementar o contedo do registrador contador CX e provocar um desvio no fluxo do processamento para o endereo-alvo, se o valor em CX ainda no for zero e se o flag ZF=1. A distncia para o desvio deve estar na faixa de 128 bytes para trs ou 127 para a frente, em relao ao endereo da instruo que segue o loop. Formato: LOOPE alvo ou LOOPZ alvo Flags: Nenhum afetado o1) LOOPNE/LOOPNZ Retornar se diferente / no zero Propsito: Decrementar o contedo do registrador contador CX e provocar um desvio no fluxo do processamento para o endereo-alvo, se o valor em CX ainda no for zero e se o flag ZF=0. A distncia para o desvio deve estar na faixa de 128 bytes para trs ou 127 para a frente, em relao ao endereo da instruo que segue o loop. Formato: LOOPNE alvo ou LOOPNZ alvo Flags: Nenhum afetado 3.6 - Operaes com string As operaes com string manipulam grande quantidade de dados em memria, como por exemplo, uma cadeia de caracteres. As instrues so: MOVS - Move string CMPS - Compara string SCAS - Scan (busca) string LODS - Load (carrega) string STOS - Store (armazena) string Oprocessadorpossuidoisregistradoresespeciaisparamanipulaodestrings.So eles: SI - Registrador de ndice de fonte DI - Registrador de ndice de destino Apsaexecuodeumaoperaostring,estesregistradoresso automaticamente incrementados ou decrementados em acordo com o valor do flag de direo. O incremento ou decremento, ser de acordo com o tamanho do elemento da string, o qual pode ser um byte ou uma word. p1) MOVS/MOVSB/MOVSW - Move string de bytes ou words ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 35 Propsito:MoverobyteouwordendereadapelocontedodeSI,dentrodo segmento de dados, para a posio de memria indicada pelo contedo de DI, dentro do segmento extra. Aps a operao, ambos os registradores de ndice (SI e DI) so automaticamenteincrementadosoudecrementados,casooflagdedireoesteja resetado ou setado, respectivamente. O valor do incremento/decremento de 1 ou 2, dependendo se a operao envolve dados do tipo byte ou word, respectivamente. Diantedestainstruo,pode-seutilizaroprefixoREP,queprovocaruma repetio contnua, de acordo com o nmero de vezes especificado em CX, permitindo assim a movimentao de blocos dememria. Formato: MOVSB ou MOVSW Flags: Nenhum afetado Exemplo:MOV SI,1000H; Enderea a rea de origem MOV DI,1500H; Enderea a rea de destino MOV CX,200H; Contador em CX CLD; Reseta o flag de direo REPMOVSW; Move 200H words q1) CMPS/CMPSB/CMPSW - Compara duas string do tipo byte ou word Propsito: Comparar, efetuando uma subtrao entre o byte ou word endereada por DI dentro do segmento extra e o byte ou word endereada por SI dentro do segmento dedados.Apsasubtraoosflagssoalterados de acordo com o resultado mas o mesmodesprezado.Ainstruoincrementa/decrementaautomaticamenteos registradores de ndice SI e DI desde que o flag de direo esteja resetado ou setado, respectivamente.Oincremento/decrementoserde1ou2,casoosdados comparados sejam do tipo byte ou word, respectivamente. Formato: CMPSB ou CMPSW Flags: Afetados AF, CF, OF, PF, SF, ZF. Exemplos:ConsiderequeoregistradorSIcontenhaovalor1255H,DIcontenhao valor0761H,DF=0,aposioapontadaporSIdentrodosegmentodedados contenhaapalavra9988HeaposioapontadaporDIdentrodosegmentoextra contenhaapalavra9988H.ApsaexecuodeCMPSW,oregistradorSIcontero valor 1257H, DI ter 0763H e os flags CF e ZF, os mais relevantes de serem avaliados aps a instruo, estaro sinalizando: ZF = 1: os contedos dos operandos so iguais ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 36 CF = 0:O elemento indicado por DI menor ou igual ao elemento indicado por SI r1) SCAS/SCASB/SCASW - Busca byte ou word Propsito: Comparar o elemento indicado por DI, dentro do segmento extra, com o contedo do acumulador. A instruo efetua a subtrao do byte ou palavra indicada por DI do contedo do acumulador AL ou AX, afetando porm somente os flags, e no os operandos. Aps a comparao, o registrador DI automaticamente incrementado ou decrementado, dependendo do estado do flag de direo. O valor do incremento ou decremento 1 ou 2, dependendo se a comparao foi realizada entre operandos do tipo byte ou word, respectivamente. Diantedestainstruo,pode-seutilizaroprefixoREP,queprovocaruma repetio contnua, de acordo com o nmero de vezes especificado em CX, permitindo assimrepetiracomparaoemumaseqnciadeelementos,atencontrarumque seja igual ou diferente ao contedo do acumulador. Formato: SCASB ou SCASW Flags: Afetados: AF, CF, OF, PF, SF, ZF. Exemplo:MOVCX,100; Grava em CX 0100H MOVDI,400;GravaemDI0400H,endereoinicialde pesquisa MOV AL,FF; Grava em AL FFH, o dado a ser comparado CLD; Reseta o flag de direo, DI ser incrementado REPNZ SCASB; Compara e repete enquanto CX 0 e ZF=0 s1) STOS/STOSB/STOSW - Grava na memria um byte ou word armazenado noacumulador Propsito:Moverocontedodoacumuladorparaaposiodememriaindicada pelo registrador DI, dentro do segmento extra de dados. STOSB move o contedo de AL para a posio indicada por ES:DI e STOSW move o contedo de AX para a posio de memria indicada por ES:DI. Aps a movimentao dos dados, o registrador DI automaticamenteincrementadooudecrementado,dependendodoestadodoflagde direo. O valor do incremento ou decremento 1 ou 2, dependendo se foi movido um byte ou uma word, respectivamente. Diantedestainstruo,pode-seutilizaroprefixoREP,queprovocaruma repetio contnua, de acordo com o nmero de vezes especificado em CX, permitindo assim que um bloco de memria seja preenchido com um dado valor. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 37 Formato: STOSB ou STOSW Flags: Nenhum afetado Exemplo:CLD; Reseta o flag de direo MOV DI,1000H; Endereo inicial da rea destino MOV CX, 300H; Contador em CX MOV AX, FFFFH; Valor a preencher as posies a partir de ES:DI REPSTOSW; Preenche 300H words com FFFFH t1)LODS/LODSB/LODSW-Gravanoacumuladorumbyteouwordcopiado damemria Propsito: Mover um byte ou word da posio de memria indicada pelo registrador SI, dentro do segmento de dados para o acumulador. LODSB move para AL um byte naposioindicadaporDS:SIeLODSWmoveparaAXumawordnaposiode memriaindicadaporDS:SI.Apsamovimentaodosdados,oregistradorSI automaticamenteincrementadooudecrementado,dependendodoestadodoflagde direo. O valor do incremento ou decremento 1 ou 2, dependendo se foi movido um byte ou uma word, respectivamente. Formato: LODSB ou LODSW Flags: Nenhum afetado Exemplo:ConsiderequeoregistradorSIcontenhaovalor1234H,DF=0equea posiodememriaindicadaporSI,dentrodosegmentodedados,contenhaa palavra 1100H. Aps a instruoLODSW,oregistradorAXconterovalor 1100HeoregistradorSIconterovalor1236H,indicandoaprximapalavraaser acessada. 3.6.1 - Prefixos de repetio Osprefixosderepetio,especificammaisdeumaexecuodeumamesma instruodestring.Quandoacompanhaumainstruodestring,aoperao repetida at que uma das condies de trmino, especificada no prefixo, seja satisfeita Paracadarepetio,aoperaopodesersuspensaporumainterrupoou exceo. Aps ter sido atendida a exceo ou a interrupo, a operao reinicializa do ponto onde foi suspensa. Desta forma, a resposta do sistema a uma interrupo no fica comprometida pela execuo de uma instruo com string. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 38 u1) REP/REPZ ou REPE/REPNZ ou REPNE - Repita operao de string Propsito:Prefixosusadospararepetirainstruostringseguintepelonmerode vezes especificado em CX.DiantedasinstruesMOVS,LODSeSTOS,pode-seusaroprefixoREP,que decrementaoregistradorCX(semafetarosflags)erepeteainstruostring enquanto CX 0. Diante das instrues CMPS e SCAS, pode-se usar os prefixos REPZ ou REPNZ. REPZdecrementaoregistradorCX(semafetarosflags)erepeteainstruostring enquanto CX 0 e ZF =1. O prefixo REPNZ decrementa o contador CX (sem afetar os flags) e provoca a repetio da instruo string enquanto CX 0 e ZF=0. Formato: REP instruo_string REPZ instruo_string REPNZ instruo_string Flags: Sero aqueles afetados pela instruo_string Exemplo: Considere que se queira preencher um bloco de memria, com 512 bytes de extenso, com o valor inicial 20H. CLD; Reseta o flag de direo MOVCX,200; Contador em CX MOVDI,1000; Enderea a rea de memria MOVAX,2020; Dados em AH e AL REPSTOSW; Preenche 200 palavras a partir de ES:1000 (ES:DI) 3.7 - Instrues de controle de flag 3.7.1 - Instrues de controle do flag de direo, flag carry e de interrupo As instrues de controle de carry so teis em conjunto com as instrues de rotaes com carry com o RCL e RCR. Pode-se a partir delas, inicializar o contedo do flag carry que ser carregado em um operando. v1) CLC - Reseta o flag carry Propsito: Resetar o bit CF no registrador de flags Formato: CLC Flags: Afetado: CF x1) CMC - Complementa o flag carry ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 39 Propsito: Complementar o estado do bit CF no registrador de flags. Se o valor de CF era 1, ele passar a 0, e vice-versa. Formato: CMC Flags: Afetado: CF w1) STC - Seta o flag carry Propsito: Setar o bit CF no registrador de flags Formato: STC Flags: Afetado: CF y1) CLD - Reseta o flag de direo Propsito: Resetar o bit DF no registrador de flags, forando assim, o incremento dos registradores de ndice aps a execuo de uma das instrues string. Formato: CLD Flags: Afetado: DF z1) STD - Seta o flag de direo Propsito: Setar o bit DF no registrador de flags, forando assim, o decremento dos registradores de ndice aps a execuo de uma das instrues string. Formato: STD Flags: Afetado: DF a2) CLI - Reseta o flag de interrupo Propsito:ResetarobitIFnoregistradordeflags,desabilitandoasinterrupes mascarveis externas, que aparecem na linha INTR do processador. Formato: CLI Flags: Afetado: IF b2) STI - Seta o flag de interrupo Propsito:SetarobitIFnoregistradordeflags,habilitandoasinterrupes mascarveis externas, que aparecem na linha INTR do processador. Formato: STI Flags: Afetado: IF ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 40 3.7.2 - Instrues de transferncia de flags ApenasosflagsCF,DFeIF,possueminstruesespecificasquepermitema alteraodeseusestadosdiretamente.Paraacessarosdemaisindicadoresas instrues de transferncia de flags devem ser utilizadas para movimentar o contedo do registrador de flags (F) para o registrador AH ou a pilha, onde ento, podero ser alterados e em seguida retornados para o registrador de flags (F). c2) LAHF - Carregar o contedo do registrador de flags em AH Propsito:MoverosbitsdosregistradoresdeflagsSF,ZF,AF,PFeCFparao registradorAH,mantendoamesmaposiorelativaqueocupamnapartebaixano registrador de flags. Os demais bits no so movidos.. Formato: LAHF Flags: Nenhum afetado d2) SAHF - Armazena contedo de AH no registrador de flags Propsito: Transferir bits especficos do registrador AH, mantendo a mesma posio relativa, para a parte baixa do registrador de flags. Os demais bits no so movidos. (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, CF, PF, SF, ZF. e2) PUSHF - Grava o contedo do registrador de flags na pilha Propsito: Colocar, na rea de memria usada como pilha, o contedo do registrador de flags. Modo de operao: Idntico ao da instruo PUSH Formato: PUSHF Flags: Nenhum afetado f2) POPF - Copia word da pilha para o registrador de flags. Propsito: Retirar a palavra no topo da pilha e mov-la para o registrador de flags. Sua operao idnticaa da instruo POP. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 41 Formato: POPF Flags: Todos so afetados 3.8 - Instrues de acesso a portas de entrada e sada g2) IN - L byte ou word de uma porta de E/S Propsito:Transferirdados(byteouword)deumaportadeentradaparao acumulador AL ou AX. Aportaidentificadacomumvalorde8bitsquepermiteaacessoaportas cujosendereosvariamde0a255,oucomousodeDXque,sendode16bits, permite a especificao de endereos de portas que variam de 0 a 65535. Formato: IN acumulador, porta ou INacumulador, DX Flags: Nenhum afetado Exemplo:IN AL, 38H; Transfere para AL, o byte na porta de entrada 38H. IN AX,DX; Transfere para AX, a word na porta de entrada especificada pelo registrador DX. h2) OUT - Escreve byte ou word em uma porta de E/S Propsito:Transferirumbyteouumaword,presentenoacumuladorALouAX, respectivamente, para uma porta de sada. Aportaidentificadacomumvalorde8bitsquepermiteaacessoaportas cujosendereosvariamde0a255,oucomousodeDXque,sendode16bits, permite a especificao de endereos de portas que variam de 0 a 65535. Formato: OUT porta, acumulador ou OUTDX, acumulador Flags: Nenhum afetado Exemplo:OUT 61H,AL ; Transfere para a porta de sada 61H, o byte em AL. OUT DX,AL; Transfere para a porta de sada especificada em DX, o byte gravado em AL. 3.9 - Instrues de uso geral Algumas instrues no se encaixam em nenhuma das categorias apresentadas at agora. No entanto, como so importantes, so reunidas nesse bloco de instrues de uso geral. ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 42 i2) LEA - Carrega endereo efetivo em um registradorPropsito:Carregarooffsetdeumendereooudeslocamentodeumoperandona memria, para um registrador de 16 bits, especificado na prpria instruo. Formato: LEA destino, fonte Flags: Nenhum afetado Exemplos:mensagemDBCurso Assembler $ - LEADX, mensagem LEASI,[BX+DI+5] Noprimeirocaso,oregistradorDXconterovalordoendereoassociadoao labelmensagem;nosegundo,oregistradorSIconterovalordoendereode memria do operando indicado pela somatria de BX e DI com 5. j2) XCHG- Trocar Propsito: Permutar o contedo de dois operandos, que podem ser dois registradores ou um registrador e uma posio de memria.. Formato: XCHG destino,fonte Flags: Nenhum afetado Exemplos:XCHG AL,CH ; Permuta o contedo de AL e CH XCHG SI,DI; Permuta o contedo de SI e DI XCHG AL,[BX+2]; Permute o contedo de AL com o da posio dememria apontada por (BX+2) XCHG [SI],AX; Permuta o contedo da posio apontada por SI com o contedo de AL k2) XLAT- Converter Propsito:ConverterumvalorpresenteemALacessandoumatabelapreviamente endereada por BX, com no mximo 256 valores, usando o valor em AL como ndice desta tabela. O Byte assim endereado ento colocado no prprio registrador AL. Formato: XLAT Flags: Nenhum afetado ARQUITETURA DE SISTEMAS DIGITAISPROF. ORLANDO ROCHA INSTRUES DE ASSEMBLERPGINA 43 Exemplo: Considere que no endereo DS:0300 de memria, haja uma tabela com os seguintes valores: 121416182022242628303234... Aps a seqncia de instrues MOVBX,0300H MOVAL,04H XLAT oregistradorALconterovalor20.Isto,ovalorinicial04foiconvertidopara20 (elemento de ndice 04). O primeiro elemento da tabela tem ndice 00.