Linguagem assembly

Linguagem assembly

(Parte 4 de 11)

3.4 Conjunto de Instruções do 8086/8088

A apresentação que se segue não contém todos os detalhes de cada instrução.

Ela se propõe a ser um esquema a ser seguido em aula e ao mesmo tempo um resumo do assunto.

É importante ter em mente que todas estas instruções estão presentes no conjunto de instruções dos demais processadores da família 80X86, de tal sorte que o conhecimento aqui adquirido pode ser utilizado na programação de sistemas mais modernos.

3.4.1 Convenções

Na apresentação a seguir adota-se a seguinte convenção: d - uma quantidade de 8 ou 16 bits. d8 - uma quantidade de 8 bits. d16 - uma quantidade de 16 bits.

r, r1, r2 - um registrador de 8 ou 16 bits de uso geral. r8 - um registrador de 8 bits.

r16 - um registrador de 16 bits. ( ) - o conteúdo de um registrador, ou posição de memória, dependendo do que estiver entre os parênteses. m - endereço de um byte ou uma palavra na memória opcode mod reg r/mcamento desloc

Endereço

Efet-ivo BX ou BP +

SI ou DI

última revisão Ago/200715

Linguagem Assembly Família Intel m8 - endereço de um byte na memória m16 - endereço de uma palavra de 16 bits. m32 - endereço de uma palavra dupla de 32 bits. AX/AL - o registrador AX ou AL, dependendo do operando envolvido ser de 16 ou 8 bits. alvo - a definição de um endereço na área de código da memória. flags - os 16 bits do registrador de estado.

(p. ex. DX:AX) ou pelo modo próprio do microprocessador formar o endereço (p. ex. CS:DX).

As convenções utilizadas na descrição que se segue, acabará se tornando clara na medida em que as instruções forem sendo apresentadas. Para cada tipo de instrução aparece do lado esquerdo uma descrição sintática e uma breve descrição semântica da instrução. Ao centro, são dados alguns exemplos, e do lado esquerdo o número de ciclos de relógio consumidos na execução da instrução.

3.4.2 Instruções de Transferência de Dados MOV r1,r2 MOV AL,CH 2 MOV CX,BP

MOV r,m MOV AX,TEMP_RESULT 10/8+EA MOV CL,ARRAY[SI],

MOV m,r MOV COUNT[DI],CX 10/9+EA MOV [SI+1000],DX

MOV r,d MOV AX,9 4 4 MOV SI,61CH

MOV m,d MOV byte ptr [SI], 0FH 10+EA MOV word ptr [BX+1234],57

XCHG r1,r2 XCHG AX,BX 3/4 XCHG CL,CH

XCHG m,r XCHG SEMAFORO,AX 17+EA XCHG AL,[BX+2]

XLAT XLAT 1 (AL) ← ((BX+AL))

última revisão Ago/200716

Linguagem Assembly Família Intel

(AH7,6,4,2,0)← (SF,ZF,AF,PF,CF)

LAHF LAHF 4 SAHF SAHF 4 (SF,ZF,AF,PF,CF) ←(AH7,6,4,2,0)

3.4.3 Instruções de Manipulação de Cadeias de Caracteres (string)

Cada uma das instruções deste grupo tem três formatos diferentes. Para o primeiro formato (terminado com um "S"), o montador entende que o string é de bytes ou de palavras. O segundo (terminado com um "SB") e terceiro (terminado com um "SW") indicam explicitamente que se trata respectivamente de um string de bytes e palavras.

MOVS/MOVSB/MOVSW MOVSB 18 MOVSW

CMPS/CMPSB/CMPSW CMPSB 2 CMPSW

SCAS/SCASB/SCASW SCASB 15 SCASW

LODS/LODSB/LODSW LODSB 12 LODSW

STOS/STOSB/STOSW STOSB 1 STOSW

REP REP MOVSB 9+17*rep REP REP LODSW 9+13*rep REP REP STOSW 9+10*rep REPZ/REPE REPZ CMPS 9+2*rep

REPNZ/REPNE REPNZ SCAS 9+15*rep Nas cinco últimas linhas da tabela contém prefixos usados para repetir a

última revisão Ago/200717

Linguagem Assembly Família Intel execução da instrução de manipulação de string escrita em seguida pelo número de vezes especificado em CX. Diante das instruções MOVS/MOVSB/MOVSW, LODS/LODSB/LODSW e STOS/STOSB/STOSW, pode-se usar o prefixo REP, que decrementa o registrador CX, sem afetar os flags, e repete a instrução de string, enquanto CX ≠ 0. Diante das instruções CMPS e SCAS, pode-se usar os prefixos REPZ(ou REPE) ou REPNZ(ou REPNE). REPZ decrementa CX, sem afetar os flags,

e repete a instrução de string, enquanto CX ≠0 e ZF = 1. O prefixo REPNZ

decrementa CX, sem afetar os flags, e provoca a repetição da instrução de string,

enquanto CX ≠0 e ZF = 0.

3.4.4 Instruções de Manipulação de Endereços LEA r16,m16 LEA BX,[BP][DI] 2+EA

(r16) ← m16

LDS r16,m32 LDS SI,DATA_SEG[DI] 16+EA (r16) ← (m32)

(DS) ← (m32)+2 LES r16,m32 LES SI,DATA_SEG[DI] 16+EA (r16) ← (m32)

3.4.5 Instruções Aritméticas

3.4.5.1 Adição ADD r1,r2 ADD AX,SI 3 ADD CL,DH

ADD r,m ADD DL,[300] 9+EA ADD CX,[BX+1234H]

ADD m,r ADD byte ptr [300],DL 16+EA ADD word ptr [SI+BX+2],AX

ADD r,d ADD AL,4 4 (r) ← (r) + d ADD AX,50

ADD m,d ADD byte ptr [DI],54 17+EA (m) ← (m) + d ADD word ptr [BX+4],4FFH

última revisão Ago/200718

Linguagem Assembly Família Intel

ADC r1,r2 ADC BX,DX 3 ADC DH,AL

ADC r,m ADC BL,[456] 9+EA (r) ←(r) + (m) + (CF) ADC CX,word ptr [300H]

ADC m,r ADC byte ptr [300],DL 16+EA (m) ←(m) + (r) + (CF) ADC word ptr [SI],BX

ADC r,d ADC CL,24 4 (r) ← (r) + d + (CF) ADC BX,50 ADC m,d ADC byte ptr [DI],54 17+EA (m) ← (m) + d + (CF) ADC word ptr [BX+4],4FFH

(Parte 4 de 11)

Comentários