06_8086_Assembly
-
Upload
eidercassio -
Category
Documents
-
view
9 -
download
0
Transcript of 06_8086_Assembly
-
1
Microprocessadores
Prof. Arthur Braga
Tpicosn Assembly 8086
Formato de Dados
Estrutura de um Programa Assembly
Conjunto de Instrues de Movimento de Dados
Conjunto de Instrues Aritmticas
Conjunto de Instrues Lgicas
Conjunto de Instrues de Deslocamento e Rotao
Conjunto de Instrues de Controle do Programa (Desvios)
MACROS
-
2
Sintaxe do Assembly 8086
Sintaxe do Assembly 8086
-
3
Sintaxe do Assembly 8086
Sintaxe do Assembly 8086
Como so os diferentes campos de uma linha de programa ?
-
4
Sintaxe do Assembly 8086
O campo Rtulo:
Sintaxe do Assembly 8086
-
5
Sintaxe do Assembly 8086
Sintaxe do Assembly 8086
-
6
Formato de Dados
Formato de dados
-
7
Formato de dados
QUESTO: Como o montador trata 0Ah, Ah e Ah ?
Formato de dadosTabela ASCII
Como os dados podem ser declarados como variveis ou constantes ?
-
8
Formato de dados
Formato de dados
-
9
Formato de dados
Caso se queira trabalhar com valores constantes ?
Pode-se utilizar a diretiva DUP para reservar espao na memria que seja mltiplodo tipo escolhido:
text DW 10 DUP (W) ;reserva 20 bytes na memria e inicializa com o ASCII de Wtext DW 10 DUP (?) ;reserva 20 bytes na memria, sem inicializao
Formato de dados
-
10
Formato de dadosTabela ASCII
Variveis e constantes podem ser declaradas em qualquer ponto do programa ?
Estrutura de um Programa
Assembly
-
11
Estrutura de um Programa Assembly
Modelo Descrio
TINY Todos os registradores de Segmento (DS, CS, SS e ES) tm o mesmo valor.
SMALL Cdigo em 1 segmento;Dados em 1 segmento
MEDIUM Cdigo em mais de 1 segmento;Dados em 1 segmento
COMPACT Cdigo em 1 segmento;Dados em mais de 1 segmento
LARGECdigo em mais de 1 segmento;Dados em mais de 1 segmento;Nenhum array maior que 64 Kbytes
HUGECdigo em mais de 1 segmento;Dados em mais de 1 segmento;Arrays maiores que 64 Kbytes
Estrutura de um Programa Assembly
?
-
12
Estrutura de um Programa Assembly
Estrutura de um Programa Assembly
-
13
Estrutura de um Programa Assembly
Estrutura de um Programa Assembly
OBS:
?
-
14
Conjunto de Instrues de
Movimento de Dados
Conjunto de Instrues de Movimento de Dados
-
15
Instrues de movimento de dados PUSH / POP Armazenar / recuperar dados da pilha de memria (LIFO)
PUSH AX crescimento da pilha
Conjunto de Instrues de Movimento de Dados
PUSH AX aps a execuo da instruo o SP = SP 2.
POP Executa a operao inversa do PUSH.
POP BX
Conjunto de Instrues de Movimento de Dados
reduo da pilha
-
16
Carga de endereo efetivo. LEA (Load Effective Address)
LEA BX, LIST ;carrega o offset da posio de memria da varivel LIST
A diretiva OFFSET realiza a funo da instruo LEA. Exemplo:
MOV BX, OFFSET LIST
Conjunto de Instrues de Movimento de Dados
LDS carrega a base do endereo em DS e o offset em um registrador LES carrega a base do endereo em ES e o offset em um registrador
LDS BX, LIST
Instrues de strings data transfers
LODS, STOS e MOVS
Flag de direo: a flag de direo seleciona autoincremento (D=0) ouautodecremento (D=1).
CLD : faz D = 0STD : faz D = 1
Registradores DI e SI: durante uma execuo de instruo de string, oacesso memria ocorre atravs de DI e SI (ou ambos).
DI Offset para acesso a dados no Segmento ExtraSI Offset para acesso a dados no Segmento de Dados
Conjunto de Instrues de Movimento de Dados
Quando estas instrues podem ser teis, e qual a sintaxe delas ?
-
17
LODS Carrega AL ou AX com dado armazenado no SEGMENTO DEDADOS com offset dado por SI.
Conjunto de Instrues de Movimento de Dados
STOS Armazena AL ou AX em localizaes do SEGMENTO EXTRAendereadas por DI
Conjunto de Instrues de Movimento de Dados
STOS com REP O prefixo REP adicionado a uma instruo de stringprovoca a repetio da ao da instruo e decrementa CX de 1 aps cadarepetio. O final das repeties ocorre quando CX = 0.
EXEMPLO: Considere que CX = 100,
REP STOSB ; executa STOSB 100 vezes, DI incrementado ou; decrementado (a depender da flag D) e o contedo de; AL armazenado em um bloco de memria.
-
18
MOVS uma das mais teis instrues de strings, pois transfere dados entreposies de memria.
Operao no segmento de dados envolve SI Operao no segmento extra envolve DI A instruo transfere 1 byte ou 1 word do segmento de dados endereadopor SI para o segmento extra endereado por DI.
Exemploscrollup uma linhado vdeo
Conjunto de Instrues de Movimento de Dados
IN e OUT As instrues IN e OUT executam operaes de I/O. Nestas operaes oscontedos de AL ou AX so transferidos entre o dispositivo de I/O e omicroprocessador Formas:
Fixed Port: o nmero da porta segue o cdigo da operao da instruoVariable Port: o nmero da porta esta armazenado no registrador DX
Conjunto de Instrues de Movimento de Dados
-
19
Outras importantes instrues de transferncia de dados XCHG Troca o contedo entre registradores ou entre registradores eposies de memria.
Conjunto de Instrues de Movimento de Dados
Prefixo de Passagem de SegmentoPode ser adicionado a quase todas instrues em modo de endereamento memria, permitindo ao programador desviar do segmento padro.MOVAX, [DI] ;acessa o segmento de dados (default)MOVAX, ES:[DI] ;acessa o segmento extra
Conjunto de Instrues de Movimento de Dados
-
20
Conjunto de Instrues
Aritmticas
Conjunto de Instrues Aritmticas
Estas instrues afetam os flags.
-
21
Relembrando: Registrador de Flags
Conjunto de Instrues Aritmticas
Estas instrues afetam os flags.
Adio com carry como o carry liga duas instrues de adio 16 bits em uma de 32 bit.
SUM32 PROC NEARADD AX, CXADC BX, DXRET
SUM32 ENDP
Conjunto de Instrues Aritmticas
-
22
Subtrao com vem 1(borrow) SBB
SUB AX, DISBB BX, SI
Conjunto de Instrues Aritmticas
Instruo de Comparao CMP A instruo CMP uma subtrao que afeta apenas os bits de flag. til para comparar o contedo de registradores ou posies de memria. So, geralmente, seguidas por instrues de salto
CMP AL,10h ; compara AL com 10hJAE SUBER ; salta para SUBER se AL = 10h ou AL > 10h
Conjunto de Instrues Aritmticas
-
23
Conjunto de Instrues Aritmticas
Instrues de Multiplicao e Diviso Multiplicao
Pode ser executado em byte ou word, pode considerar inteiros sinalizados (IMUL) ou inteiros no-sinalizado (MUL) sempre utiliza o ACUMULADOR. Apenas do 386 em diante que realizada multiplicao em 32 bits. O produto sempre double-width.
Conjunto de Instrues Aritmticas
Para 8 bits:
resultado em AX
Para 16 bits:
resultado em DX e AX
-
24
Diviso Pode ser executado em byte ou word, considerando inteiros sinalizados (IDIV) ou inteiros no-sinalizado (DIV) sempre utiliza o ACUMULADOR como DIVIDENDO. Do 386 em diante, realiza diviso em 32 bits. O Dividendo sempre double-width, ou seja uma diviso de 8 bits divide um nmero de 16 bitspor um de 8 bits, uma diviso de 16 bits divide um nmero de 32 bits por um de 16 bits e umadiviso de 32 bits divide um nmero de 64 bits por um de 32 bits. Dois tipos de erros:
Diviso por zero Overflow
Conjunto de Instrues Aritmticas
Para 8 bits:
quociente em AL, e o resto para AH
Para 16 bits (dividendo DX e AX):
quociente em AX, e o resto para DX
Conjunto de Instrues Lgicas
-
25
Conjunto de Instrues Lgicas
EXEMPLO ?
Conjunto de Instrues Lgicas
Restou alguma operao Lgica Bsica ?
-
26
Conjunto de Instrues Lgicas
Instruo NOTAceita um operando. Realiza a inverso lgica de todos os bits dooperando: o COMPLEMENTO 1.
NOT operando
Instruo NEGAceita um operando. Realiza a inverso aritmtica do operando: oCOMPLEMENTO 2. Muda o operando de positivo para negativo, ouvice-versa.
NEG operando
Instrues de test e teste de bit TEST
A instruo de TEST executa uma operao AND. A diferena que a instruo AND modifica ooperando destino, enquanto TEST no o faz. A instruo TEST afeta apenas o Registrador de Flags.
Normalmente testa um bit ou conjunto de bits. A flag ZF = 1 se o resultado do teste zero e ZF = 0 caso contrrio.
Geralmente uma instruo TEST seguida por uma de salto.Exemplo: TEST AL,1 ;testa bit menos significativo
JNZ RIGHT ;se bit menos significativo igual a 1, saltar para RIGHTTEST AL, 128 ;testa o bit mais significativoJNZ LEFT ;se bit mais significativo igual a 1, saltar para LEFT
Conjunto de Instrues Lgicas
-
27
Conjunto de Instrues de
Deslocamento e Rotao
Deslocamento
Conjunto de Instrues de Deslocamento e Rotao
-
28
Instrues que executaro mais rpido
Conjunto de Instrues de Deslocamento e Rotao
Rotao
Conjunto de Instrues de Deslocamento e Rotao
-
29
Comparao de stringsSCAS (String scan) CMPS (String compare)
SCAS compara (como a instruo CMP) o registrador AL com umbloco de 1 byte da memria (SCASB), ou AX com um bloco de 2 bytes(SCASW). A comparao feita com o contedo do Segmento Extra. Obit de flag D indica a direo da comparao.
Pode ser usada com o prefixo REPNE (repeat while not equal) destaforma a instruo repetida at que CX = 0, ou o dado seja encontrado.
Conjunto de Instrues de Deslocamento e Rotao
EXEMPLO: Em uma seo de memria de 100 bytes, deseja-seencontrar 00H.
CMPS compara duas sees de memria. Pode-se comparar bytes(CMPSB), ou palavras (2 bytes) (CMPSW). Os contedos de dados dosegmento de dados (indexado por SI) e dados do segmento extra (indexadospor DI) podem ser comparados. O flag D indica a direo da comparao.Utiliza-se normalmente em conjunto com: REPZ (repeat until zero), REPNZ(repeat until not zero), REPE (repeat while equal) e REPNE (repeat while notequal).
Conjunto de Instrues de Deslocamento e Rotao
EXEMPLO: Compara se duas sees de memria so iguais.
-
30
Conjunto de Instrues de
Controle do Programa (Desvios)
Grupo das instrues JMP (JuMP) Incondicionais e Condicionais.O Salto Incondicional pode ser de trs tipos: short, near e far.
Short jump: executa salto para posies da memria localizadas entre -128 a127 byes relativo ao endereo que segue a instruo.
O montador suporta endereamento em relao aoponteiro da instruo IP, usando $ +/-.
EXEMPLO: JMP $+2 ; salta 2 posies que; seguem a posio do JMP
Conjunto de Instrues de Controle do Programa
Near jump: permite o salto entre +/- 32 Kbytes.
Far jump: permite saltos inter-segmentos.
Mas nem todo salto
incondicional !
-
31
Saltos condicionais: Os saltos condicionais testam os bits do registrador de flags sinal (SF), zero (ZF), carry (CF), paridade (PF), overflow (OF).
As operaes podem ser sinalizadas ou no: FF (255) nos nmeros no sinalizados maior que 00h, porm FF (-1) nos nmeros sinalizados menor que 00h.
Conjunto de Instrues de Controle do Programa
Quando nmeros sinalizados so comparados usa-se: JG, JL, JGE, JLE, JE e JNE Os termos greater e less se referem a nmeros sinalizados
Quando nmeros no-sinalizados so comparados usa-se: JA, JB, JAE, JBE, JE e JNE Os termos above e below se referem a nmeros no-sinalizados
Conjunto de Instrues de Controle do Programa
-
32
Instruo LOOP: uma combinao de decremento de CX com JNZ LOOP decrementa CX e se CX 0, salta para o endereo indicado pelo LABEL. LOOP usa CX
Conjunto de Instrues de Controle do Programa
Conjunto de Instrues de Controle do Programa
PROCEDIMENTOS:Antes de apresentar as prximas instrues de Controle do Programa precisoformalizar o conceito de PROCEDIMENTO (ou PROCEDURE, em ingls). Oprocedimento, ou subrotina, um conjunto de instrues que realiza uma tarefaespecfica.Vantagens de utilizar procedimentos na programao Assembly:
Quando o cdigo reutilizvel, salva espao de memria. Torna mais simples o desenvolvimento do programa por torn-lo modular. Realiza um SALTO no programa, mas permite realizar um RETORNO.
Mas tambm h uma desvantagem: Consome uma parcela de tempo do processador para realizar o desvio para oprocedimento, e para retornar do procedimento.
Como declarado um PROCEDIMENTO ?
-
33
Conjunto de Instrues de Controle do Programa
PROCEDIMENTOS:
NOME PROC NEAR / FAR
instruo 1
Instruo 2
instruo N
RET
NOME ENDP
M
A instruo CALL que transfere a execuo do programa para o procedimento.
EXEMPLO:
CALL NOME.O endereo de retorno armazenado na PILHA
Instruo RET: Remove um nmero de 16 bits (near return) ou 32 bits (far return) da pilha ecoloca em IP ou em IP e CS
Conjunto de Instrues de Controle do Programa
-
34
O SEGMENTO DE PILHA fundamental para os compiladoresimplementarem PROCEDIMENTOS (SUB-ROTINAS). Estesegmento de memria, alm de armazenar o endereo de retorno, responsvel por receber os parmetros a serem manuseadospela subrotina, que so passados pelo procedimento que achamou.
Conjunto de Instrues de Controle do Programa
instruo
instruo
instruo de chamada (CALL)
1a. instruo da subrotina
instruo da subrotina
instruo da subrotina
instruo de retorno (RET)
instruo seguinte chamada
Segmento de cdigo
Pilha
retorno
Conjunto de Instrues de Controle do Programa
-
35
E caso fosse um call far ?
Conjunto de Instrues de Controle do Programa
Conjunto de Instrues de Controle do Programa
INTRODUO S INTERRUPES:Uma interrupo funciona como um CALL gerado por hardware (derivadoexternamente por um sinal nos pinos do processador relacionados a interrupes), oupor software (derivado da execuo de uma instruo ou de algum outro eventointerno). Nos dois casos, o programa interrompido, e feita a chamada a umprocedimento de atendimento interrupo.
Como isso ocorre em interrupes por software ?(interrupes por hardware sero vistas mais frente na disciplina)
O processador tem trs diferentes instrues de interrupo: INTO - interrupo de overflow, chama a interrupo 4 se O = 1. INT 3 - interrupo de breakpoint, usado para debugar o programa. INT nmero - o nmero indica o vetor de interrupo da tabela de vetores de
interrupo.
VETOR DE INTERRUPO ? TABELA DE VETORES DE INTERRUPO ?
-
36
Conjunto de Instrues de Controle do Programa
INTRODUO S INTERRUPES:
? NOME PROC FARinstruo 1
Instruo 2
instruo N
IRET
NOME ENDP
M
Obs.: Como CALL, a instruo INT armazena CS eIP na pilha. Mas diferente de CALL, a instruo INTtambm armazena as flags na pilha.
Grande nmero de funes ? Quais ? Como acess-las ?
Conjunto de Instrues de Controle do Programa
-
37
Outras interrupes do DOS: Apndice G do Zelenovsky !
Conjunto de Instrues de Controle do Programa
MACROS
-
38
MACROS
Macro um conjunto de instrues que realiza uma tarefa especfica, da mesmaforma que ocorre com um procedimento ou subrotina. A diferena que umprocedimento acessado via instruo CALL, enquanto uma macro inserida noprograma no ponto em que seu conjunto de instrues deve aparecer.
Utiliza-se as diretivas MACRO e ENDM para delimitar incio e final de uma macro.
EXEMPLO:
NOME MACRO parametros
instruo 1
Instruo 2
instruo N
ENDM
M
Como o montador trata uma MACRO ?
MACROS
MOVE MACRO A, B
PUSH AX
MOV AX, B
MOV A, AX
POP AX
ENDM
M
TRECHO DE PROGRAMA:
MOVE VAR1, VAR2
ADD CX, VAR1
MOVE VAR3, VAR4
ADD CX, VAR3
M
INTERPRETAO DO MONTADOR:
MPUSH AXMOV AX, VAR2MOV VAR1, AXPOP AXADD CX, VAR1PUSH AXMOV AX, VAR4MOV VAR3, AXPOP AXADD CX, VAR3
M
Obs.: Diferente do procedimento, uma macro nodemanda tempo do processador para desviar oponto de execuo do programa.
-
39
Bibliografia Bsican Zelenovsky, Ricardo e Mendona, Alexandre, PC um
guia prtico de Hardware e Interfaceamento, MZ EditoraLtda, 4a. edio, 2006. (http://www.mzeditora.com.br/)
n Brey, Barry, The Intel Microprocessors - 8086/88, 286,386 and 486 - Architecture, Programming andInterfacing, Third Edition, PHI, 1994.
Material da DisciplinaSIGAA - Sistema Integrado de Gesto de Atividades Acadmicas
http://www.mzeditora.com.br/)