Академический Документы
Профессиональный Документы
Культура Документы
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
dado interpretado como um endereo de memria pelas instrues de desvio ou chamada desubrotina. Se o dado de 16 bits acessado, este ser carregado noregistrador IP (operao intra-segmento). Se no entanto, dois dados
de 16 bits so acessados, o primeiro ser carregado em IP e osegundo em CS, realizando assim uma operao inter-segmento.
Exemplo : ADD AX,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: suponha que o registrador DS contenha B000h. A instruoMOVDX,[8000h], carregar em DX o contedo da posio de memria
DS:8000, cujo endereo linear B8000h. *Modo Direto Indexado Nesse modo de DI um como indexadores,
endereamento um forma
utiliza-se
os de um
registradores 8 ou 16
SI bits
e a
somando-se de
deslocamento a gerar
desses
registradores
endereo
efetivo
MOV [DI-1000h],DX *Modo Implcito O modo implcito uma verso simplificada do modo deendereamento direto indexado. A nica diferena entre eles que,nesse modo, no especificado um deslocamento. Exemplo: MOV AL,[SI] MOV [DI],DX *Modo Relativo a Dados (utilizando o registrador de segmentoDS) Nesse modo o contedo do registrador BX utilizado paraformar a base para o endereo linear. Todos os modos deendereamento descritos at aqui, com exceo do modo imediato,podem ser utilizados tambm no modo relativo. Exemplo: Modo relativo direto MOV AX,[BX+1000h] Modo relativo implcito MOV DH,[BX+SI] Modo relativo direto indexado MOV [BX+DI+1000h],DL *Modo Relativo aStack Nesse modo o contedo do registrador BP utilizado paraformar a base para o endereo linear de acesso a dados gravados napilha. Exemplo: MOV BP,SP MOV AX,[BP+04h] MOV [BP+DI+10h],BX
Os principais tipos de dados so os bytes e as words. Um byteso 8 bits, sendo estes numerados de 0 a 7, o bit 0 o menossignificativo (LSB - leastsignificant bit). A word uma seqncia dedois bytes que ocupam dois endereos consecutivos quaisquer. Umaword tem, portanto, 16 bits os quais so numerados de 0 a 15.Novamente, o bit 0 o menos significativo (LSB). O byte que contm
o bit zero da word chamado de low byte (byte baixo) e o que contmo bit 15 chamado de high byte (byte alto). No 8086 e nos demaismicroprocessadores da famlia INTEL, o low byte armazenado noendereo mais baixo e seu endereo tambm o endereo da word. Oendereo do high byte utilizado somente quando a metade superiorda word estiver endereada separadamente da parte baixa. Como o 8086 possui um barramento de 16 bits, ascomunicaes entre o microprocessador e a memria ocorrem comotransferncias de words alinhadas a endereos pares; omicroprocessador converte transferncias entre endereos no alinhados a words, em mltiplas transferncias alinhadas. Asoperaesdesalinhadas reduzem a velocidade do processamento emfuno de ciclos extras de barramento. Embora os bytes e words sejam os principais tipos de dadospara o 8086, o mesmo tem a possibilidade de interpretar estesoperandos de maneiras diversas. Algumas instrues especializadasreconhecem os seguintes tipos de dados: Inteiro: Nmero binrio sinalizado armazenado em uma word oubyte. Todas as operaes assumem a representao emcomplemento de dois. O bit de sinal o 7 se for um byte ou o 15 sefor uma word. Se negativo, este bit ser igual a 1, caso positivo ser0. Em um byte pode-se ter os valores compreendidos entre -128 a+127; na word pode-se representar de -32768 a +32767.
Ordinal: Nmero binrio sem sinal armazenado em um byte ou umaword. Se estiver contido em um byte, estar na faixa de 0 a 255, senuma word, entre 0 a 65535.
String:Seqncia contnua de bytes ou words. Uma string pode conter de 0 a (220)-1 bytes.
BCD: Representao de um dgito decimal codificado em binrio(BinaryCoded Decimal) na faixa de 0 a 9. Um decimal nocompactado expresso por um byte sem bit de sinal. Cada dgito armazenado em um byte. A magnitude do nmero o valor binriodo nibble de ordem mais baixa (4 bits menos significativos do byte);
os dgitos somente podem assumir valores entre 0 e 9. O nibble deordem mais alta (4 bits mais significativos do byte), deve estarzerado para as operaes de multiplicao e de diviso, e podemconter qualquer valor nas somas e subtraes. BCD Compactado (packed BCD): Representao de dgitos decimaiscodificados em binrio, cada um na faixa de 0 a 9. Um dgito armazenado nos 4 bits menos significativos do byte e outro nos 4bits mais significativos; portanto cada byte comporta dois dgitos.
3 - Instrues Assembly
Neste captulo sero apresentadas as instrues assemblydo8086, que se aplicam a qualquer microprocessador da famlia 80XXXda Intel
Instrues de movimentao de uso geral Instrues para manipulao de stack Instrues de converso de tipo
MOV [SI], AL MOV [BX+DI],AX MOV [400], AL 2 - Da memria para o acumulador MOV AL,[BX+2] MOV AX,[SI] MOV AL,[400] 3 - Da memria ou registrador para registrador de segmento MOV ES,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 MOV [500],DS
5 - De registrador para registrador / da memria ou registrador para registrador / de registrador para a memria MOV CL,DH MOV AL,AH MOV SI,BX MOV DI,DX MOV CL,[SI] MOV DX,[SI+1000] MOV [BX+DI],DH MOV TABELA[BX+3],CL
6 - Dado imediato para registrador MOV AX,99H MOV BL,99H MOV CX,0FFFFH MOV DI,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: Transferir quatro bytes consecutivos de um operando fontepara um par de
registradores de 16 bits. O operando-fonte precisa estar na memria. Um dos registradores aquele especificado na instruo, o outro o DS.
c) LES - Carrega registrador de segmento extra Propsito: Transferir quatro bytes consecutivos de um operando fonte
para um par de registradores de 16 bits. O operando-fonte precisa estar na memria. Um dos registradores aquele especificado na instruo, o outro o ES.
e) POP - Copia word da pilha para registrador ou memria Propsito: Retirar uma palavra armazenada no topo da pilha,colocando-a no egistrador ou
posio de memria especificada. Modo de operao: 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: C BW Flags:Nenhum g) CWD - Converte word em doubleword Propsito: Propagar o bit de sinal do valor presente no registrador AX(bit mais significativo)
para o registrador DX. Assim, se o valor em AX for positivo, a instruo armazena00 00H em DX e, em caso contrrio, 0FFFFH. Essa instruo utilizada antes da execuo de uma diviso sinalizada do contedo de AX por outro operando de 16 bits, de modo a preencher o DX com o valor do sinal em AX.
Formato: CW D Flags:Nenhum
adio, subtrao, multiplicao, diviso,incremento, decremento, comparao e mudana de sinal. Sosuportados tanto nmeros inteiros sinalizados como os nosinalizados. Os operandos fontes podem ser valores imediatos,registradores ou memria. Operandos destino podem ser registradores ou memria (exceto quando o operando fonte estiver na memria). As instrues aritmticas alteram os flags ZF, CF, SF e OF parareportar o tipo de resultado produzido pela execuo da mesma. O tipode instruo a ser utilizada para o teste do flag depender do dadoestar sendo interpretado como valor sinalizado ou no. O flag CFcontm informaes importantes para inteiros sinalizados. O flag ZF relevante para ambos, e ser setado sempre que um resultado for 00H As instrues aritmticas operam dados de 8, 16 ou 32 bits. Osflags so utilizados para refletir o tamanho da operao. Por exemplo,se o resultado de uma operao de ADD com dados de 8 bits for maiordo que 255 (decimal), o flag CF ser igual a 1. Se o nmero inteiro sem sinal, o flag CF pode ser testado aps uma instruo aritmticabinria para determinar se a operao requer carry ou borrow que serpropagado para o prximo estgio da operao. As instrues de incremento e decremento no alteram oindicador CF, isto permite o uso destas instrues para a atualizaode contadores no controle de loops sem alterao dos reportesreferentes aos resultados da aritmtica. Os flags SF e OF reportam a aritmtica sinalizada. O flag SFpossui o mesmo valor do bit de sinal de um resultado. O flag OF serigual a 1 em qualquer destes casos: Um carry foi gerado do MSB para o bit de sinal mais o bit de sinalno gerou um carry para o CF, ou seja, o resultado foi maior do queo maior nmero positivo que pode ser representado no formatocomplemento de dois.
Um carry foi gerado do bit de sinal para o MSB mas nenhum carryfoi gerado para o bit de sinal, ou seja, o resultado foi menor do queo menor valor negativo que pode ser representado no formatocomplemento de dois.Estes flags de status podem ser testados por qualquer tipo de instruo condicional.
Formato: ADD destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF.
Exemplos: ADDAL,04H ADD byte ptr[300],05H ; Adiciona 04H ao contedo de AL ; Adiciona 05H ao contedo da posio de memria DS:0300 ; Adiciona o contedo de SI ao contedo de AX ; Adiciona o byte gravado em DS:0300 ao contedo de DL ; Adiciona o contedo de AL ao contedo da posio de memria DS:SI+BX+02
ADD [SI+BX+2],AL
i) ADC - Adio com carry * Propsito: Executar a adio normal entre dois operandos, um fonte e outro destino, mais o valor
do flagcarry existente antes da operao, devolvendo o resultado no destino.
Formato: ADC destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF.
Exemplos: ADC AL,04H ; Adiciona 04H ao contedo deAL e ento soma o contedo do flagcarry ADC byte ptr[300], 05H ; Adiciona 05H ao contedo da posio de memria DS:0300 e ento soma o contedo do flag carry
ADC AX,SI
; Adiciona o contedo de SI ao contedo de AX e ento soma o contedo do flagcarry ; Adiciona o byte gravado em DS:0300 ao contedo de DL e ento soma o contedo do flag carry ; Adiciona o contedo de AL ao contedo da posio de memria DS:SI+BX+02 e ento soma o contedo do flagcarry(*) O flagcarry ser setado, aps a execuo da instruo ADC, caso uma das condies abaixo ocorra: a) H um vai um na etapa da soma dos operandos destino e fonte, ou b) H um vai um na etapa da soma do flag carry (existente antes da operao),
ADC DL,[300]
ADC [SI+BX+2], AL
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: SUB BL,04H ; Subtrai 04H do contedo de BL SUB byteptr[DI],05H ; Subtrai 05H do contedo da posio de memria DS:DI ; Subtrai o contedo de CX do contedo de AX ; Subtrai a word gravada em DS:SI do contedo de BX ; Subtrai o contedo de DL do contedo da posio de memria DS:BX+02
SUB AX,CX
j) SBB - Subtrao com carry Propsito: Executar a subtrao entre dois operandos, um fonte e outro destino, menos o valor do
flagcarry existente antes da operao, devolvendo o resultado no destino.
Formato: SBB destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF.
Exemplos: SBB BL,04H ; Subtrai 04H do contedo de BL e ento subtrai do resultado o contedo do flag carry ; Subtrai 05H do contedo da posio de memria DS:DI e ento subtrai do resultado o contedo do flagcarry ; Subtrai o contedo de CX do contedo de AX e ento subtrai do resultado o contedo do flagcarry ; Subtrai a word gravada em DS:SI do contedo de BX e ento subtrai do
SBB AX,CX
SBB BX,[SI]
resultado o contedo do flagcarry SBB [BX+2],DL ; Subtrai o contedo de DL do contedo da posio de memria DS:BX+02 e ento subtrai do resultado o contedo do flagcarry
k) INC - Incrementa destino em 1 Propsito: Soma 1 ao contedo de um operando, que pode ser registrador ou posio de memria. Formato: INC destino Flags: Afetados AF, OF, PF, SF, ZF.
Exemplos: INC BL INC byte ptr [SI] ; Soma 1 ao contedo de BL : Soma 1 ao byte gravado na posio de memria apontada por DS:SI
l) DEC - Decrementa destino em 1 Propsito: Subtrai 1 do contedo de um operando, que pode ser
registrador ou posio de memria.
Formato: DEC destino Flags: Afetados AF, OF, PF, SF, ZF.
Exemplos: DEC BX DEC wordptr [0100] ; Subtrai 1 do contedo de BX : Subtrai 1 da word gravada na posio de memria apontada por DS:0100
Formato: CMP destino,fonte Flags: Afetados AF, CF, OF, PF, SF, ZF.
Exemplos: CMP AL,57H CMP DI,BX CMP [SI],AX ; Compara o contedo de AL com o valor 57H ; Compara os contedos de DI e BX ; Compara uma word gravada na posio DS:SI, com o contedo de AX ; Compara o contedo de CH com o byte armazenado na posio de memria DS:SI+BX+3
CMP CH,[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: Considere que o registrador CX contenha o valor 0005 (+5). Aps a execuo da instruo NEG CX, o registrador conter o valor FFFB (-5).
Formato: MUL fonte Flags: Afetados CF, OF, indefinidos AF, PF, SF, ZF.
Exemplos: MOV AL, 83H
MOV CL, 44H MUL CL ; realiza o produto entre AL e CL, resultado em AX MOV AX,1234H MOV BX,6000H MUL BX ; realiza o produto de 16 bits entre AX e BX, resultado em DX (parte alta) e AX (parte baixa)
p) IMUL - Multiplicao com sinal Propsito: Efetuar uma multiplicao sinalizada entre o contedo do acumulador (AL ou AX)
pelo operando fonte, devolvendo o resultado no acumulador AX (caso a operao tenha envolvido AL com um operando de 8 bits), ou em DX e AX (caso a operao tenha envolvido AX e um operando de 16 bits). Como so sinalizados , os operandos podem ter valores na faixa de -128 a +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: MOV AL, 83H MOV CL, 44H IMUL CL MOV AX,1234H MOV BX,6000H IMUL BX
; 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: Efetuar uma diviso no sinalizada entre o contedo do acumulador (AL ou AX) pelo
operando fonte, devolvendo o resultado no acumulador AX (caso a operao tenha envolvido AX com um operando de 8 bits), ou em DX e AX (caso a 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: DIV BL ; Dividendo em AX, divisor em BL. O quociente estar em AL e o resto em AH ; Dividendo em DX:AX, divisor em BX. O quociente estar em AX e o resto em DX
DIV BX
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: Efetuar uma diviso sinalizada entre o contedo do acumulador (AL ou AX) pelo
operando fonte, devolvendo o resultado no acumulador AX (caso a operao tenha envolvido AX com um operando de 8 bits), ou em DX e AX (caso a 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. Se os operandos tiverem sinais diferentes, sendo um positivo e o outro 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: IDIV DH ; Dividendo em AX, divisor em DH. O quociente estar em AL e o resto em AH ; Dividendo em DX:AX, divisor na posio de memria apontada por (BX+100). O quociente estar em AX e o resto em DX
IDIV wordptr[BX+100]
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 ADD AL,AH DAA o acumulador AL conter o valor 92H, e no 8CH.
t) DAS - Ajuste decimal aps subtrao Propsito: Corrigir o resultado presente no acumulador AL, aps uma
subtrao 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.
v) AAS - Ajuste ASCII aps subtrao Propsito: Corrigir o resultado presente no acumulador AL, aps uma
subtrao 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, ento subtraia 06H do contedo do acumulador AL, subtraia 01H do contedo de 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: A AS Flags: Afetados AF, CF; indefinidos, PF, SF, ZF, OF. Exemplo: Considera que o acumulador AX contenha o valor 0935H. Aps a seqncia SUB AL,36H AAS
x) AAM - Ajuste ASCII aps multiplicao Propsito: Corrigir o resultado da multiplicao de dois nmeros
decimais no compactados. A instruo deve seguir-se a multiplicao de dois operandos decimais no compactados para produzir um
resultado decimal vlido. A instruo far o 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 flagsso afetados de acordo com o resultado em AL.) Exemplo: Suponha que o acumulador AL contenha o valor 09 e que BL contenha o valor 08. Aps a seqncia MUL BL AAM o acumulador AX conter o valor 0702H. Observe que se a esse valor somarmos 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 o dgito inferior o resultado desta instruo armazenado no registrador AL. 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 flagsso 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.
http://pt.scribd.com/doc/6802720/ACApostila-Das-Instrucoes-Assembler-Do-8088