Você está na página 1de 3

Apndice I - Tabela de Instrues do 8086

Instrues para transferncia de dados: MOV copia um byte ou word de uma fonte especificada para um MOV destino, fonte destino especificado. PUSH copia word especificada para o topo da pilha. POP copia word do topo da pilha para local especificado. PUSHA copia todos os registradores para a pilha (80186 em diante). POPA copia words da pilha para todos os registradores. XCHG Exchange bytes ou words. XLAT substitui AL por um byte de uma tabela, endereado por MOV BX, 2800 ; end inicial da tabela. [BX+AL] XLAT ; AL = [BX+AL] Instrues para entrada/sada de dados: IN copia um byte ou word de uma porta especificada para o IN AL, OC8H acumulador (a porta sempre uma cte ou DX). IN AX, DX OUT copia um byte ou word do acumulador para uma porta especificada OUT OC8H, AL (a porta sempre uma cte ou DX). OUT DX, AX Instrues para transferncia de endereo especial: LEA carrega em um registrador de 16 bits, o endereo (offset) de uma varivel. LEA BX, [BP]DELTA LDS carrega DS e um reg de 16 bits com um endereo FAR (32 bits). LDS SI, SEGMENTO[DI] LES carrega DS e um reg de 16 bits com um endereo FAR (32 bits). LES DI, [BX]BUFFER Instrues para transferncia para flags: LAHF copia a parte baixa do registrador de flags (FL) para AH. SAHF copia o byte contido em AH, para a parte baixa do registrador de flags (FL). PUSHF copia o registrador de flags para a pilha. POPF copia o topo da pilha para o registrador de flags. Instrues para adio: ADD adio: ADD destino, fonte ADD AL, 74H ADD DX, BX ADC adio com carry ADC DX, BX ADC AL, 45H INC incrementa um byte ou word especificada INC BL INC VARIVEL AAA ajuste ASCII do acumulador depois da adio. converte um valor BCD para ASCII aps a adio, somente para o reg AL. DAA ajuste para BCD, aps uma soma, somente reg AL. Instrues para subtrao: SUB subtrao SUB AL, VARIAVEL SUB DX, BX SBB subtrao com carry. SUB AL, 74H SUB BX, [BX] DEC decrementa um byte ou word especificada DEC CL DEC VARIVEL NEG inverte o sinal de um nmero.(complemento de 2) CMP comparao: CMP destino, fonte CMP AL, 01H CMP BH, CL CMP CX, VARIVEL_16BITS CMP VARIVEL_8BITS, BH AAS ajuste ASCII para subtrao. antes: ASCII 5 - ASCII 9 => AL=FCH (-4) depois: result = 04H, CF = 1 DAS ajuste para BCD, aps uma subtrao, somente reg AL. Instrues para multiplicao: MUL multiplicao no sinalizada MUL BH ; AL x BH => result em AX byte x byte ou word x word MUL CX ; AX x CX => result em DX e AX IMUL multiplicao sinalizada AAM converte binrio para BCD aps a multiplicao antes: BCD 5 X BCD 9 => AX = 002DH depois: AX = 0405H

Instrues para diviso: DIV diviso sem sinal:DIV fonte IDIV AAD CBW CWD diviso com sinal:DIV fonte

AL=quociente e AH=resto AL=quociente e AH=resto

converte BCD para binrio antes da diviso. converte um byte sinalizado em uma word sinalizada. em uma doubleword

converte uma word sinalizada sinalizada. Instrues lgicas: NOT inverte todos os bits do destino AND OR XOR TEST AND destino, fonte OR destino, fonte XOR destino, fonte

DIV BH => AX/BH DIV CX => DXeAX/CX DIV BL => AX/BL DIV CX => DXeAX/CX antes: AX= 0607 (BCD) depois: AX = 43H (67 em decimal) antes: AX = 00000000 10011011 = -15510 depois: AX = 11111111 10011011 = -15510 antes: DX=0000H e AX=F0C7H (-389710) depois: DX=FFFFH e AX=F0C7H (-389710) NOT AX NOT [SI+06H] AND BX, 00FFH AND CX, [SI] OR CL, BH OR AH, 0H XOR BX, FFH XOR AL, AL TEST DX, AX TEST VARIAVEL, 0FH

AND fonte, fonte resultado somente nos flags. Instrues para deslocamento: SHL deslocameto esquerda SHL DX, 1 SHL destino, contagem SHL AX, CL SHR deslocameto direita SHR BX, 1 SHR destino, contagem SHR [BX], CL SAL deslocameto esquerda SAL [SI+BX], 1 SAL destino, contagem SAL AX, CL SAR deslocameto direita SAR SI, 1 SAR destino, contagem SAR DX, CL Instrues para rotao: ROL rotao esquerda ROL BH, 1 ROL destino, contagem ROL BX, CL ROR rotao direita ROR CX, 1 ROR destino, contagem ROR DX, CL RCL rotao esquerda com flag carry RCL [DI+BX], 1 RCL destino, contagem RCL AX, CL RCR rotao direita com flag carry RCR BX, 1 RCR destino, contagem RCR [BX], CL Instrues para string: REP repete operao_string o nmero de vezes contido em CX. REPE/REPZ repete operao_string enquanto condio for verdadeira ou enquanto CX maior que zero. REPNE/REPNZ MOVS/MOVSB/MOVS transfere string ( [ES:DI] <= [DS:SI] ) em blocos de byte (MOVSB), palavra (MOVSW) W ou pela definio destino/fonte. CMPS/CMPSB/CMPSW comparao de strings INS/INSB/INSW entrada de string por uma porta. A partir do 80186 OUTS/OUTSB/OUTSW SCAS/SCASB/SCASW varre o string apontado por ES:DI procurando o contedo de AL (SCASB), AX (SCASW). LODS/LODSB/LODSW carrega AL ou AX com o byte (LODSB), a palavra (LODSW) ou o objeto designado por fonte (LODS) localizado em bloco de memria apontado por DS:SI. STOS/STOSB/STOSW carreaga o bloco de memria apontado por DS:DI com AL, AX. Instrues para set/reset de flags: STC set carry flag CF = 1 CLC clear carry flag CF = 0 CMC complement the carry flag inverte CF STD set direction flag DF = 1 (decrementa apontador de string) CLD clear direction flag DF = 0 (incrementa apontador de string) STI set interrupt flag IF = 1 (habilita interrupes) CLI clear interrupt flag IF = 0 (desabilita interrupes)

Instrues incondicionais para saltos e subrotinas: CALL chamada de subrotina - sub-rotinas NEAR (perto): altera somente IP CALL LABEL => IP = LABEL CALL BX => IP = BX CALL WORD PTR [BX] => IP = [BX+3] e [BX+2] - sub-rotinas FAR (distante): altera CS e IP CALL SUBROT => SUBROT PROC FAR CALL DWORD PTR [BX] => CS = [BX+1] e [BX] IP = [BX+3] e [BX+2] RET Retorno de subrotina JMP Jump incondicional JMP LABEL JMP BX JMP WORD PTR [BX] - near jump JMP DWORD PTR [SI] - far jump Instrues condicionais para saltos: JA Jump if above salta se superior CF=0 e ZF=0 JNBE Jump if not below or equal salta se no inferior ou igual JAE Jump if above or equal salta se superior ou igual CF=0 JNB Jump if not below salta se no inferior JB Jump if below salta se inferior CF=1 JNAE Jump if not above or equal salta se no superior ou igual JBE Jump if below or equal salta se inferior ou igual CF=1 ou ZF=1 JNA Jump if not above salta se no superior JC Jump if carry salta se ocorrer carry CF=1 JE Jump if equal salta se igual ZF=1 JZ Jump if zero salta se resultado zero JG Jump if greater salta se maior (>) ZF=0 e CF = OF JNLE Jump if not less or equal salta se no menor ou igual JGE Jump if greater or equal salta se maior ou igual (>=) SF = OF JNL Jump if not less salta se no menor JL Jump if less salta se menor (<) SF OF JNGE Jump if not greater or equal salta se no maior ou igual JLE Jump if less or equal salta se menor ou igual (<=) ZF=1 ou SF OF JNG Jump if not greater salta se no maior JNC Jump if no carry salta se no ocorreu carry CF=0 JNE Jump if not equal salta se no igual ZF=0 JNZ Jump if not zero salta se no ocorreu zero JNO Jump if no overflow salta se no ocorreu overflow OF=0 JNP Jump if no parity salta se no ocorreu paridade PF=0 JPO Jump if parity odd salta se paridade mpar JNS Jump if not signed salta se positivo SF=0 JO Jump if overflow salta se ocorreu overflow OF=1 JP Jump if parity salta se ocorreu paridade PF=1 JPE Jump if parity even salta se paridade par JS Jump if signed (if negative) salta se negativo SF=1 Instrues especiais para saltos: LOOP dec CX e salta enquanto CX 0 LOOPE/LOOPZ dec CX e salta enquanto CX 0 e Z=1 (LOOPE/LOOPZ) LOOPNE/LOOPNZ dec CX e salta enquanto CX 0 e Z=0 (LOOPNE/LOOPNZ) JCXZ salta se CX = 0h Instrues de interrupes: INT executa uma rotina de interrupo. INT n INTO interrupo quando ocorrer overflow (OF = 1). INTO ==> executa a interrupo 4 se OF=1 IRET retorno de interrupo Instrues para sincronizao com o hardware externo: HLT cessa a execuo do processador aguardando uma interrupo. WAIT suspende a operao do processador at o recebimento de um sinal do coprocessador (pino TEST). Evita o acesso simultneo de de mais de um processador a um mesmo endereo de memria. ESC Usado para enviar instrues para o coprocessador. LOCK impede o acesso de outros processadores ao barramento durante a execuo da prxima instruo. NOP nenhuma operao

Você também pode gostar