A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

EEL7030 - Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC.

Apresentações semelhantes


Apresentação em tema: "EEL7030 - Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC."— Transcrição da apresentação:

1 EEL Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC

2 Parâmetros e Variáveis Locais Capítulo 7 – Livro Ziller

3 CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA DX,MSG1 ; APONTA PARA O TEXTO CALL SHOW SHOW PROC NEAR MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET ; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP CODIGO ENDS Macro-Assembler – Subrotina Near DADOS SEGMENT MSG1 DB JÁ VOU$' DADOS ENDS

4 CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA DX,MSG1 ; APONTA PARA O TEXTO CALL FAR PTR SHOW CODIGO ENDS Macro-Assembler – Subrotina Far DADOS SEGMENT MSG1 DB JÁ FUI$' DADOS ENDS ROTINA SEGMENT SHOW PROC FAR MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP ROTINA ENDS

5 Passagem de Parâmetros para Subrotinas Método 1 – Via Registrador: Exemplo acima. Offset da mensagem passado via registrador DX Método 2 – Via Variáveis Globais Método 3 – Via Pilha

6 CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA PARM1,MSG1 ; APONTA PARA O TEXTO CALL SHOW SHOW PROC NEAR MOV DX, PARM1 MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET ; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP CODIGO ENDS DADOS SEGMENT MSG1 DB JÁ VOLTO$ PARM1DW ? DADOS ENDS Subrotina Near: Passagem de Parâmetro Via Variável Global

7 Subrotina Near: Passagem de Parâmetro Via Pilha - 1 Antes: SS = 1760H; SP = 0400H; MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL SHOW 1780:01B0: :03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

8 Subrotina Near: Passagem de Parâmetro Via Pilha - 2 SHOW:PUSHBP MOV BP,SP MOVBX,[BP+4] ; obtém PARM2 MOVCX,[BP+6] ; obtém PARM1.... POPBP RET 1760:03F8HBP LSB 1760:03F9HBP MSB 1760:03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

9 Subrotina Near: Passagem de Parâmetro Via Pilha - 3 Antes: SS = 1760H; SP = 0400H MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL SHOW; SP = 03FCH 1780:01B0ADDSP,4; SP = 0400H 1760:03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

10 Subrotina FAR: Passagem de Parâmetro Via Pilha -1 Antes: SS = 1760H; SP = 0400H; MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL FAR PTR SHOW; SP = 03FCH 1780:01B0 :ADD SP,4; SP = 0400H 1760:03F8HB0HIP LSB 1760:03F9H01HIP MSB 1760:03FAH80HCS LSB 1760:03FBH17HCS MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

11 Subrotina FAR: Passagem de Parâmetro Via Pilha - 2 Pilha 1760:03F6HBP LSB 1760:03F7HBP MSB 1760:03F8HB0HIP LSB 1760:03F9H01HIP MSB 1760:03FAH80HCS LSB 1760:03FBH17HCS MSB 1760:03FCH60HPARM 2 LSB 1760:03FDH16HPARM 2 MSB 1760:03FEH02HPARM 1 LSB 1760:03FFH02HPARM 1 MSB 1760:0400H

12 Subrotina FAR: Passagem de Parâmetro Via Pilha - 3 SHOW:PUSHBP MOV BP,SP MOVBX,[BP+6] ; obtém PARM2 MOVCX,[BP+8] ; obtém PARM1.... POPBP RET

13 Comparação do modo de Passagem de Parâmetros para Subrotinas Via Registrador: Nro de registradores pode ser inferior a nro. de parâmetros; Difícil de estabelecer convenção sobre ordem de passagem dos parâmetros; Maior complexidade da documentação. Via Variáveis Globais: Menor velocidade que via registrador; Difícil de estabelecer convenção sobre ordem de passagem dos parâmetros; Maior complexidade da documentação. Via Pilha Menor velocidade que via registrador; Facilita aninhamento de subrotinas.

14 Variáveis Locais Caso seja necessária a utilização de variável por subrotina para informar, por exemplo, o número de caracteres de mensagem apresentado no vídeo para o programa principal, tem-se como opções de guardar o dado em: Registrador (há registrador disponível?); Posição de memória reservada durante toda a execução do programa para esta finalidade; Posição de memória da pilha que poderá ser utilizada para outras rotinas.

15 Subrotina NEAR: Criação de Variável Local SHOW:PUSHBP MOV BP,SP SUBSP, :03F6HVARIÁVEL LOCAL MSB 1760:03F7HVARIÁVEL LOCAL MSB 1760:03F8HBP LSB 1760:03F9HBP MSB 1760:03FAHIP LSB 1760:03FBHIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

16 Variáveis Locais Variável local do exemplo acima é acessada via BP-2 O endereço seria o mesmo para subrotina FAR; Variável local é acessada por deslocamento negativo em relação a BP. Parâmetro é acessado por deslocamento positivo em relação a BP. Para recuperar o valor de BP colocado na pilha, espaço da variável local é removido antes: ADD SP,2 POP BP RET

17 Subrotina NEAR: Uso de Variável Local – Retorno em AX SHOW:PUSHBP MOV BP,SP SUBSP,2 MOVWORD PTR [BP-2],00 MOVBX,[BP+4] ; obtém OFFSET MENSAGEM VOLTA:CMPBYTE PTR [BX],$ JZFIM INCWORD PTR [BP-2] INCBX JMPVOLTA FIM:MOVAH,09 MOVDX,[BP+4] INT21H MOVAX,[BP-2] ADDSP,2 POPBP RET

18 Manipulação de Strings Capítulo 9 – Livro Ziller

19 Manipulação de Strings O 8086 conta com conjunto de instruções para manipular cadeia de caracteres ou tabelas, permitindo: Copiar dados de uma região de memória para outra; Comparar conteúdo de diferentes regiões de memória (tabelas ou cadeia de caracteres); Varrer memória para buscar dado igual ou diferente à referência; Leitura consecutiva de dados da memória; Preenchimento de posições consecutivas da memória.

20 FunçãoMnemônicosArgumentos CópiaMOVS/MOVSB/MOVSWOrigem, Destino ComparaçãoCMPS/CMPSB/CMPSWOrigem, Destino VarreduraSCAS/SCASB/SCASWDestino LeituraLODS/LODSB/LODSWOrigem PreenchimentoSTOS / STOSB /STOSWDestino Origem: DS:[SI] Destino : ES:[DI]

21 Flags de Controle DF Direcão (forward/backward) Usado em Instruções de manipulação de strings CLD => DF = 0 => Incrementa SI ou DI STD => DF = 1 => Decrementa SI ou DI

22 Prefixos de Repetição Códigos alocados antes das instruções de manipulação de instruções para causar sua repetição até condição de parada. PrefixoCondição de Parada REPCX=0 REPE/REPZCX=0 ou ZF=0 REPNE/REPNZCX=0 ou ZF=1 Comparação

23 Instrução STOS – Preenchimento de memória Antes: ES = 1760H; DI = 0400H; 1760:03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H Objetivo STD MOVCX,4 MOV AX,0216h LOOP : STOSW DECCX JNZLOOP STD MOVCX,4 MOV AX,0216h REP STOSW ; STD – sets DF flag. Operações com strings decrementam SI e/ou DI. ; STOSW - ES:[DI] <- AX

24 Instrução LODS – Leitura de memória 1600:04FAH16H 1600:04FBH02H 1600:04FCH16H 1600:04FDH02H 1600:04FEH16H 1660:04FFH02H 1600:0400H16H 1600:0501H02H Objetivo: COPIAR de 1 para :03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H 1 2

25 Cópia de Dados – 1 – Instrução LODS MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,4 CLD ; incrementa SI e/ou DI VOLTA: LODSW ; lê de DS:SI (coloca em AX) STOSW ; escreve em ES:DI (conteúdo de AX) LOOPVOLTA

26 Controle de Loop

27 Instrução MOVS – Cópia de memória 1600:04FAH16H 1600:04FBH02H 1600:04FCH16H 1600:04FDH02H 1600:04FEH16H 1660:04FFH02H 1600:0400H16H 1600:0501H02H Objetivo: COPIAR de 1 para :03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H 1 2

28 Cópia de Dados – 2 - MOVSW MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,4 CLD ; incrementa SI e/ou DI REPMOVSW ; lê de DS:SI --- escreve em ES:DI

29 Cópia de Dados – 3 - MOVSB MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,8 CLD ; incrementa SI e/ou DI REPMOVSB ; lê de DS:SI --- escreve em ES:DI

30 Instrução MOVS OBSERVAÇÕES MOVSB equivale a MOVS BYTE PTR ES:[DI],[SI] MOVSW equivale a MOVS WORD PTR ES:[DI],[SI] Caso se queira transferir dentro de um mesmo segmento, uma opção seria: MOVS BYTE PTR DS:[DI],[SI] REP MOVS ( e outras instruçoes que manipulam strings) são suspensas para atendimento de interrupções. Retomadas a partir do CX na qual pararam.

31 COMPARAÇÃO DE DADOS CMPSB INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS MOV ES,AX ; INICIALIZACAO DE ES LEA SI,TAB1 LEA DI,TAB2 MOV BL,00 CLD MOV CX,17 VOLTA: CMPSB JZ VAI INC BL VAI:LOOP VOLTA MOV AH,BL DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' TAB2 DB 'MICROPROCESSADORES'.... DADOS ENDS

32 VARREDURA DE DADOS SCASB INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS MOV ES,AX ; INICIALIZACAO DE ES LEA DI,TAB1 CLD MOV AL,'T' MOV CX,17 VOLTA: REPNE SCASB JZ FIMCMP MOV AH,'E' JMP ERRO FIMCMP: MOV AX,DI ADD AL,30H DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' MSG1 DB 'POSICAO DO CARACTER T = ' MSG2 DB '0 $' DADOS ENDS

33 Testes de Flags

34 Testes de Números com Sinal


Carregar ppt "EEL7030 - Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC."

Apresentações semelhantes


Anúncios Google