Вы находитесь на странице: 1из 20

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


Quando deseja-se que a CPU realize uma busca de instruo, o endereo da localizao de memria da qual a instruo obtida calculado como a soma de um offset armazenado no ponteiro de instruo IP, com o contedo do registrador CS. Normalmente, o contedo do IP incrementado medida que as instrues so executadas. Entretanto, as instrues de desvio no fluxo de execuo de um programa podem modific-lo de uma das trs maneiras abaixo: 1. Endereamento relativo a programa: Um deslocamento de 8 ou 16 bits 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. Endereamento direto: Um endereo de 16 bits obtido da prpria instruo na forma de um dado colocado no IP, nesse caso trata-sede uma operao intra-segmento. Se o endereo especificado for de 32 bits, os primeiros dois bytes carregaro o IP e os dois seguintes o CS, nesse caso ocorre uma operao inter-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 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.

1.2 - Modos de endereamento de dados


Seis opes esto disponveis para o endereamento de dados * Modo Imediato Neste tipo de endereamento, um dos operandos est presente no byte seguinte ao cdigo da instruo (op-code). Se bytes deendereamento seguem o op-code, ento o dado a ser transferido demaneira imediata vir logo aps os bytes de endereamento.

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

(offset). Exemplo: MOV AL,[SI+10h]

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

2 - Tipos de Dados (8086)

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

3.1 - Instrues de movimentao dedados


Neste grupo de instrues esto aquelas que permitem manipular dados do tipo byte, word, doubleword entre memria e registradores do microprocessador. So de trs tipos:

Instrues de movimentao 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: Copiar o contedo do operando-fonte para o operando-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 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.

Formato: LDS destino, fonte Flags: Nenhum afetado


Exemplo: Considere que o registrador SI contenha o valor 5334H, BX contenha 0FFFFH e que as posies de memria a partir da indicada por SI, dentro do segmento de dados, contenha os seguintes bytes 21h, 12h, DFh e 2Ch. Aps a instruo LDS BX, dwordptr[SI] o registrador DS conter o valor 1221H e o registrador BX conter o valor 2CDFH.

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.

Formato: LES destino, fonte

Flags: Nenhum afetado


Exemplo: Considere que o registrador BX contenha o valor 5334H, DI contenha 0FEF3H e que as posies de memria a partir da indicada por BX, dentro do segmento de dados, contenha os seguintes bytes E3h, 2Dh, 24h e ACh. Aps a instruo LES DI, dwordptr[BX] o registrador ES conter o valor 2DE3H e o registrador DI conter o valor AC24H.

3.1.2 - Instrues para manipulao de stack


d) PUSH - Grava word na pilha Propsito: Colocar, na rea de memria usada como pilha, ocontedo de um registrador ou
posio de memria. Modo de operao: 1 - Decrementa o SP 2 - Move o byte mais alto do registrador ou posio de memria para alocao indicada por SS:SP 3 - Decrementa o SP 4 - Move o byte mais baixo do operando para a locao indicada porSS:SP

Formato: PUSH fonte Flags: Nenhum afetado


Exemplo: PUSH SI PUSH ES PUSH [BX+SI] ; Grava na pilha a word armazenada em SI ; Grava na pilha a word armazenada em ES ; Grava na pilha a word armazenada na posio de memria apontada por (BX+SI)

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: POP destino Flags: Nenhum afetado


Exemplo: POP AX POP DS POP [DI] ; Grava em AL a word no topo da pilha ; Grava em DS a word no topo da pilha ; Grava na posio de memria apontada por DI a word no topo da pilha

3.1.3 - Instrues de converso de tipo


f) CBW - Converte byte para word Propsito: Propagar o bit de sinal do valor presente no registrador AL(bit mais significativo)
para o registrador AH. Assim, se o valor em ALfor positivo, a instruo armazena 00H em AH e, em caso contrrio,0FFH.

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

3.2 - Instrues aritmticas binrias


As instrues aritmticas binrias dos processadores da famlia 8086/286/386/486/586... operam com dados codificados em binrio.As operaes incluem

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.

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.

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 AX,SI ADD DL,[300]

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

com o resultado de (destino + fonte).

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

SUB BX,[SI] SUB [BX+2],DL

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 byte ptr[DI],05H

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

memria DS:BX+02 e ento subtrai do resultado o contedo do flag carry

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

Obs: Registradores de segmento no podem ser usados como operando.

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

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: Efetuar uma subtrao entre dois operandos, alterando os
flags e descartando o resultado da operao.

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).

3.2.3 - Instrues de multiplicao e diviso o) MUL - Multiplicao sem sinal


Propsito: Efetuar uma multiplicao no 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).

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 entre AL e CL, resultado em AX

; 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]

3.3 - Instrues de aritmtica decimal


A aritmtica decimal realizada combinando-se as instrues da aritmtica binria com as da aritmtica decimal. As instrues da aritmtica decimal so utilizadas em uma das seguintes formas: Para ajustar os resultados de uma instruo da aritmtica binria, 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 produza um resultado decimal, compactado ou no. estas instrues operam 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: Corrigir o resultado presente no acumulador AL, aps uma
soma 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 oflag 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 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.

Formato: D AS Flags: Afetados AF, CF, PF, SF, ZF.


Exemplo: Suponha que AL contenha o valor 84H e DL o valor 16H. Aps a seqncia SUB AL,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: Corrigir o resultado presente no acumulador AL, aps uma
soma de 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 somar 06H ao acumulador AL, somar 01H ao contedo de AH e ligar o flag 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 ADD AL,CL AAA o acumulador AX conter o valor 0501H.

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

o acumulador AX conter o valor 0809H.

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

Вам также может понравиться