1 / 34

EEL7030 - Microprocessadores

EEL7030 - Microprocessadores. Prof. Raimes Moraes GpqCom – EEL UFSC. Parâmetros e Variáveis Locais. Capítulo 7 – Livro Ziller. Macro-Assembler – Subrotina Near. DADOS SEGMENT MSG1 DB ‘JÁ VOU$' DADOS ENDS. CODIGO SEGMENT INICIO: ...... MOV AX,DADOS

marinel
Download Presentation

EEL7030 - Microprocessadores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Macro-Assembler – Subrotina Near DADOS SEGMENT MSG1 DB ‘JÁ VOU$' DADOS ENDS 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

  4. Macro-Assembler – Subrotina Far DADOS SEGMENT MSG1 DB ‘JÁ FUI$' DADOS ENDS 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 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âmetrosparaSubrotinas 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. Subrotina Near: Passagem de ParâmetroVia Variável Global DADOS SEGMENT MSG1 DB ‘JÁ VOLTO$‘ PARM1 DW ? DADOS ENDS 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

  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: ...... Pilha

  8. Subrotina Near: Passagem de Parâmetro Via Pilha - 2 Pilha SHOW: PUSH BP MOV BP,SP MOV BX,[BP+4] ; obtém PARM2 MOV CX,[BP+6] ; obtém PARM1 .... POP BP RET

  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:01B0 ADD SP,4 ; SP = 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 Pilha

  11. Subrotina FAR: Passagem de Parâmetro Via Pilha - 2 Pilha

  12. Subrotina FAR: Passagem de Parâmetro Via Pilha - 3 SHOW: PUSH BP MOV BP,SP MOV BX,[BP+6] ; obtém PARM2 MOV CX,[BP+8] ; obtém PARM1 .... POP BP RET

  13. Comparação do modo de Passagem de ParâmetrosparaSubrotinas 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. 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. Variáveis Locais

  15. Subrotina NEAR: Criação de Variável Local SHOW: PUSH BP MOV BP,SP SUB SP,2 ..... Pilha

  16. 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 Variáveis Locais

  17. Subrotina NEAR: Uso de Variável Local – Retorno em AX SHOW: PUSH BP MOV BP,SP SUB SP,2 MOV WORD PTR [BP-2] ,00 MOV BX,[BP+4] ; obtém OFFSET MENSAGEM VOLTA: CMP BYTE PTR [BX],’$’ JZ FIM INC WORD PTR [BP-2] INC BX JMP VOLTA FIM: MOV AH,09 MOV DX,[BP+4] INT 21H MOV AX,[BP-2] ADD SP,2 POP BP 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. Origem: DS:[SI]Destino: ES:[DI]

  21. Flags de Controle DF Direcão (forward/backward) UsadoemInstruçõ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. Comparação

  23. Instrução STOS – Preenchimento de memória Antes: ES = 1760H; DI = 0400H; Objetivo ; STD – sets DF flag. Operações com strings decrementam SI e/ou DI. ; STOSW - ES:[DI]  <- AX STD MOV CX,4 MOV AX,0216h LOOP : STOSW DEC CX JNZ LOOP STD MOV CX,4 MOV AX,0216h REP STOSW

  24. Instrução LODS – Leitura de memória Objetivo: COPIAR de 1 para 2 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 MOV CX,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) LOOP VOLTA

  26. Controle de Loop

  27. Instrução MOVS – Cópia de memória Objetivo: COPIAR de 1 para 2 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 MOV CX,4 CLD ; incrementa SI e/ou DI REP MOVSW ; 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 MOV CX,8 CLD ; incrementa SI e/ou DI REP MOVSB ; 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. DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' TAB2 DB 'MICROPROCESSADORES' .... DADOS ENDS 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

  32. VARREDURA DE DADOS SCASB DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' MSG1 DB 'POSICAO DO CARACTER T = ' MSG2 DB '0 $' DADOS ENDS 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

  33. Testes de Flags

  34. Testes de Números com Sinal

More Related