lab2aoc

Upload: barbara-castilho

Post on 08-Apr-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Lab2AoC

    1/11

    ENGENHARIA INDUSTRIAL ELTRICA COM NFASE EM

    ELETRNICA/TELECOMUNICAES

    Laboratrio 1 Arquitetura e Organizao de Computadores

    Curitiba,Maro/2011

  • 8/6/2019 Lab2AoC

    2/11

    Brbara Moreira de Castilho

    Larissa Keiko Oshiro

    Laboratrio 2 Arquitetura e Organizao de Computadores

    CuritibaMaro/2011

    Relatrio apresentado comorequisito Parcial para a disciplinade Arquitetura e Organizao deComputadores do curso deEngenharia Industrial Eltrica comnfase em Eletrnica/Telecom.

  • 8/6/2019 Lab2AoC

    3/11

    EXERCCIO 1

    (P1) Qual a finalidade da diretiva de assemblagem ASSUME?

    Sua finalidade determinar que valor os offsets e registradores de segmento vo assumir.

    (P2) Qual a finalidade da diretiva de assemblagem ORG? Por que ela necessria para programas .com

    mas no para programas .exe?

    Sintaxe: ORG A diretiva ORG indica o endereo da memria a partir do qual o programa armazenado. Ela se tornanecessria para programas .COM pelo fato de o ponteiro que aponta para o incio do programa estar noincio do Prefixo de Segmento do Programa (PSP), ou seja, contendo assim os bytes iniciais do programa. Jem programas .EXE o ponteiro est no incio do cdigo.

    (P3) Por que nos programas com diretivas simplificadas no foi necessrio especificar o ponto de entradado programa aps a diretiva END? Qual diretiva simplificada se encarregou desta tarefa?

    Pelo fato de que as diretivas de compilao tomam parte dos processos de inicializao e termino doprograma. A diretiva simplificada que se encarregou da tarefa a STARTUP.

    (P4) No caso do programa Protex_s.exe, criado com diretivas de assemblagem simplificadas e no modelode memria LARGE, descreva as aes executadas pela diretiva de inicializao .STARTUP.

    A diretiva .STARTUP primeiro informa CPU o tipo e o modelo de memria necessrio, faz a inicializaodos registradores de segmento DS, SS e SP para o domnio do DOS, define o tipo de pilha fornecido peladiretiva .MODEL e por fim define o endereo de incio do programa.

    (P5) Descreva as duas alteraes que precisam ser feitas no programa Protex_s.exe devido inicializaoexecutada pela diretiva .STARTUP. Explique por que essas alteraes foram necessrias.

    Da execuo da diretiva .STARTUP o registrador DS sofre uma alterao e passa a apontar para o incio dosegmento. Ento carrega-se DS com o valor de ES, de forma que o DS aponte para o PSP. Aps a execuodo comando INT 21 o valor inicial de DS deve ser restaurado e utilizado para o fechamento do programa. desnecessria tambm a linha de cdigo com a instruo INT 20h, pois utilizada a diretiva .EXIT.

    (P6) Como o programa Veramb.com obteve o endereo da rea de ambiente de sua janela DOS?

    Atravs do PSP. Ele verifica a posio 2Ch do prefixo de Segmento do programa a qual possui um seletorpara a string.

    (P7) possvel passar opes ao programa ML atravs de uma varivel de ambiente? Qual?

    Sim, porque a utilizao da varivel de ambiente para passar opes ao programa torna desnecessrio aespecificao das opes toda vez que o programa chamado. Como exemplo, o comando SETML=/DDEBUG /DV100 /Zi. Caso haja conflito de opes, estas acabam tendo precedncia, sendo a ltimaopo com maior precedncia. Se for digitado aps a linha de comando acima: MLmyprograma.asm/link/NOD /NOE, o comando lido ser ML/ DDEBUG /DV100 /Zi myprograma.asm/link/NOD /NOE.

    (P8) Quais os cinco possveis locais onde podem estar definidos macros utilizados pelo utilitrio NMAKE?Qual a prioridade de utilizao caso um mesmo macro esteja definido em mais de um local?

  • 8/6/2019 Lab2AoC

    4/11

    Locais de definio de macros conforme a prioridade:1 A macro definida na linha de comando;2 A macro definida no makefile ou num arquivo include;3 Macro advindo da varivel de programa;4 Macro definida no TOOLS.INI;5 Um macro pr-definida.

    (P9) possvel utilizar o utilitrio NMAKE sem nenhum arquivo makefile? Como?

    Sim, contando que o arquivo criado e que se deseja compilar faa uma inferncia implcita das extensesde arquivo desejadas. Por exemplo, a regra .asm.exe compila um arquivo .asm para um arquivo .exe. Comoexemplo tem o NMAKE Protex_s.exe, sendo que para compilar o arquivo .asm o arquivo deve ter o mesmonome daquele a ser escrito na linha de comando.

    (P10) possvel utilizar o utilitrio NMAKE com um arquivo com nome diferente de makefile? Como?

    Sim, digitando na linha de comando:NMAKE /F

    (P11) Para que serve o prefixo @ antes de um comando de um bloco de comandos de um arquivomakefile utilizado como o utilitrio NMAKE? E o prefixo - ?

    Utilizando o prefixo @ antes de um comando estamos especificando que esse comando deve serexecutado, e que ele invisvel ao usurio, ou seja, no apresentado na tela. J quando utilizamos oprefixo definimos que um comando executado independente da ocorrncia de erros durante aexecuo.

    (P12) Qual o significado dos macros @$, $* e $< para o utilitrio NMAKE?

    $* - caminho do alvo corrente e nome base do arquivo sem extenso.$@ - nome completo do alvo corrente (especfico pelo caminho, nome, extenso).$< - arquivo dependente com uma marca temporal anterior ao alvo atual.

  • 8/6/2019 Lab2AoC

    5/11

    Protec_n.asm

    ;Brbara Moreira de Castilho;Larissa Keiko Oshiro

    CODE_SEG SEGMENTASSUME CS:CODE_SEGORG 100h

    PROTEC PROC NEARMOV DX,0082h ;DX aponta para o incio do nome do arquivoMOV DI,0082h ;DI aponta para o incio do nome do arquivoMOV AL,0Dh ;AL vale a tecla ENTER em hexadecimalMOV CX,000Ch ;CX vale 13 (limite do nome do arquivo)REPNE SCASB ;Efetua a comparao bit a bit decrementando CXMOV BYTE PTR [DI-01h],00h ;Substitui o 0Dh por 00hMOV AL,01h ;AL vale 1h (flag do DOS para mudar atributos de

    arquivos)MOV CX,0001h ;CX vale 1h (altera apenas o atributo "Somente leitura")MOV AH,43h ;AH vale 43h (flag do DOS para mudar ou ler os atributos

    de arquivos)INT 21h ;Chamada da interrupo (DOS)INT 20h ;Sada do programa

    PROTEC ENDP

    CODE_SEG ENDS

    END PROTEC

    Protec_s.asm

    ;Brbara Moreira de Castilho;Larissa Keiko Oshiro

    .model TINY

    .code

    .startup

    MOV DX,0082h ;DX aponta para o incio do nome do arquivoMOV DI,0082h ;DI aponta para o incio do nome do arquivoMOV AL,0Dh ;AL vale a tecla ENTER em hexadecimalMOV CX,000Ch ;CX vale 13 (limite do nome do arquivo)REPNE SCASB ;Efetua a comparao bit a bit decrementando CXMOV BYTE PTR [DI-01h],00h ;Substitui o 0Dh por 00hMOV AL,01h ;AL vale 1h (flag do DOS para mudar atributos de

    arquivos)MOV CX,0001h ;CX vale 1h (altera apenas o atributo "Somente leitura")MOV AH,43h ;AH vale 43h (flag do DOS para mudar ou ler os atributos

    de arquivos)INT 21h ;Chamada da interrupo (DOS);INT 20h ;Sada do programa

    .exit[0]

    END

    Protex_n.asm

    ;Brbara Moreira de Castilho;Larissa Keiko Oshiro

    CODE_SEG SEGMENTASSUME CS:CODE_SEG, SS:STACK

    PROTEC PROC FAR

    ;Prlogo para forar a sada do programaPUSH DS ;Joga DS na pilha

    XOR AX,AX ;Zera AXPUSH AX ;Joga AX na pilha

    MOV DX,0082h ;DX aponta para o incio do nome do arquivoMOV DI,0082h ;DI aponta para o incio do nome do arquivoMOV AL,0Dh ;AL vale a tecla ENTER em hexadecimal

  • 8/6/2019 Lab2AoC

    6/11

    MOV CX,000Ch ;CX vale 13 (limite do nome do arquivo)REPNE SCASB ;Efetua a comparao bit a bit decrementando CXMOV BYTE PTR [DI-01h],00h ;Substitui o 0Dh por 00hMOV AL,01h ;AL vale 1h (flag do DOS para mudar atributos de

    arquivos)MOV CX,0001h ;CX vale 1h (altera apenas o atributo "Somente leitura")MOV AH,43h ;AH vale 43h (flag do DOS para mudar ou ler os atributos

    de arquivos)INT 21h ;Chamada da interrupo (DOS);INT 20h ;Sada do programa

    ;Eplogo para forar a sada do programa (chamar a INT 20h)RET

    PROTEC ENDP

    CODE_SEG ENDS

    STACK SEGMENT PARA STACK 'STACK'DB 200 DUP (?)

    STACK ENDS

    END PROTEC

    Protex_s.asm

    ;Brbara Moreira de Castilho;Larissa Keiko Oshiro

    .model LARGE

    .code

    .startupMOV DX,0082h ;DX aponta para o incio do nome do arquivoMOV DI,0082h ;DI aponta para o incio do nome do arquivoMOV AL,0Dh ;AL vale a tecla ENTER em hexadecimalMOV CX,000Ch ;CX vale 13 (limite do nome do arquivo)REPNE SCASB ;Efetua a comparao bit a bit decrementando CXMOV ES:BYTE PTR [DI-01h],00h ;Substitui o 0Dh por 00h, usando ES como ...

    MOV AL,01h ;AL vale 1h (flag do DOS para mudar atributos dearquivos)MOV CX,0001h ;CX vale 1h (altera apenas o atributo "Somente leitura")MOV AH,43h ;AH vale 43h (flag do DOS para mudar ou ler os atributos

    de arquivos)PUSH DS ;Salvo o valor de DSPUSH ES ;Salvo o valor de ESPOP DS ;DS = ESINT 21h ;Chamada da interrupo (DOS)POP DS ;Restauro o valor de DS;INT 20h ;Sada do programa

    .exit[0]

    .stack (200h)

    END

    MAKEFILE v1.0

    #Brbara Moreira de Castilho#Larissa Keiko Oshiro

    AFLAGS=/Fl /Fm /Sa /nologoAFLAGS_COM=/AT $(AFLAGS)ASSEMBLAR=$(AS) $(AFLAGS)ASSEMBLAR_COM=$(AS) $(AFLAGS_COM)

    info:@echo Bem vindo ao programa NMake

    @echo Digite "NMake all" para gerar todos os arquivos;@echo Digite "NMake clean" para limpar todos os arquivos gerados;@echo Digite "NMake teste" para testar todos os arquivos;@echo Digite "NMake info" ou "NMake" para exibir essa ajuda.

    clean:

  • 8/6/2019 Lab2AoC

    7/11

    del *.objdel *.comdel *.exedel *.lstdel *.map

    all:protec_n.com protec_s.com protex_n.exe protex_s.exe

    teste:attrib -r teste.txt

    @echo Status do arquivo antes do protec_n.com:attrib teste.txt

    protec_n.com teste.txt

    @echo Status do arquivo apos o protec_n.com:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protec_s.com:attrib teste.txt

    protec_s.com teste.txt

    @echo Status do arquivo apos o protec_s.com:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protex_n.exe:attrib teste.txt

    protex_n.exe teste.txt

    @echo Status do arquivo apos o protex_n.exe:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protex_s.exe:attrib teste.txt

    protex_s.exe teste.txt

    @echo Status do arquivo apos o protex_s.exe:attrib teste.txt

    PROTEC_N.COM:$*.asm$(ASSEMBLAR_COM) $*.asm

    PROTEC_S.COM:$*.asm$(ASSEMBLAR_COM) $*.asm

    PROTEX_N.EXE:$*.asm$(ASSEMBLAR) $*.asm

    PROTEX_S.EXE:$*.asm$(ASSEMBLAR) $*.asm

    Para gerar o arquivo rules.txt:

    No ambiente preparado, usar a instruo:

    nmake /p > rules.txt

    Se o arquivo no existir, este ser criado. Se existir, o contedo ser perdido e a listagem de

    todas as regras e macros embutidos no nmake sero adicionados ao arquivo.

    RULES.TXT

  • 8/6/2019 Lab2AoC

    8/11

    MACROS:

    PROCESSOR_IDENTIFIER = x86 Family 6 Model 15 Stepping 11, GenuineIntelMKL_SERIAL = YES

    SESSIONNAME = ConsoleBC = bcCC = cl

    COMSPEC = C:\WINDOWS\SYSTEM32\COMMAND.COMPROGRAMFILES = C:\ARQUIV~1

    MAKEFLAGS = PPROCESSOR_REVISION = 0f0b

    USERPROFILE = C:\DOCUME~1\xpCOMPUTERNAME = MICRO03

    KMP_DUPLICATE_LIB_OK = TRUECOMMONPROGRAMFILES = C:\ARQUIV~1\ARQUIV~1

    AS = mlRC = rc

    LOGONSERVER = \\MICRO03HOMEPATH = \Documents and Settings\xp

    PROCESSOR_LEVEL = 6ASSEMBLAR_COM = $(AS) $(AFLAGS_COM)

    ASSEMBLAR = $(AS) $(AFLAGS)PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

    MAKE = NMAKERSYSTEMDRIVE = C:

    USERNAME = xpCLIENTNAME = Console

    PROMPT = $P$GPROCESSOR_ARCHITECTURE = x86

    OS = Windows_NTHOMEDRIVE = C:

    CPP = clFOR = fl

    SYSTEMROOT = C:\WINDOWSAFLAGS_COM = /AT $(AFLAGS)

    FP_NO_HOST_CHECK = NOPATH = C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\masm611\bin

    AFLAGS = /Fl /Fm /Sa /nologoVAIO = C:\VAIO

    NUMBER_OF_PROCESSORS = 4COBOL = cobol

    TMP = C:\WINDOWS\TEMPCXX = cl

    PASCAL = plTEMP = C:\WINDOWS\TEMP

    USERDOMAIN = MICRO03APPDATA = C:\DOCUME~1\xp\DADOSD~1

    ALLUSERSPROFILE = C:\DOCUME~1\ALLUSE~1MAKEDIR = D:\BRBARA~1\FACULD~1\6OPERO~1\AOC\LAB2\MASM

    INFERENCE RULES:

    .asm.exe:

    commands: $(AS) $(AFLAGS) $*.asm

    .asm.obj:commands: $(AS) $(AFLAGS) /c $*.asm

    .c.exe:commands: $(CC) $(CFLAGS) $*.c

    .c.obj:commands: $(CC) $(CFLAGS) /c $*.c

    .cpp.exe:commands: $(CPP) $(CPPFLAGS) $*.cpp

    .cpp.obj:

    commands: $(CPP) $(CPPFLAGS) /c $*.cpp

    .cxx.exe:commands: $(CXX) $(CXXFLAGS) $*.cxx

    .cxx.obj:

  • 8/6/2019 Lab2AoC

    9/11

    commands: $(CXX) $(CXXFLAGS) /c $*.cxx

    .bas.obj:commands: $(BC) $(BFLAGS) $*.bas;

    .cbl.exe:commands: $(COBOL) $(COBFLAGS) $*.cbl, $*.exe;

    .cbl.obj:commands: $(COBOL) $(COBFLAGS) $*.cbl;

    .for.exe:commands: $(FOR) $(FFLAGS) $*.for

    .for.obj:commands: $(FOR) /c $(FFLAGS) $*.for

    .pas.exe:commands: $(PASCAL) $(PFLAGS) $*.pas

    .pas.obj:commands: $(PASCAL) /c $(PFLAGS) $*.pas

    .rc.res:commands: $(RC) $(RFLAGS) /r $*

    .SUFFIXES: .exe .obj .asm .c .cpp .cxx .bas .cbl .for .pas .res .rc

    TARGETS:

    MAKEFILE Alternativo

    #Brbara Moreira de Castilho#Larissa Keiko Oshiro

    AFLAGS=/Fl /Fm /Sa /nologo

    AFLAGS_COM=/AT $(AFLAGS)ASSEMBLAR=$(AS) $(AFLAGS)ASSEMBLAR_COM=$(AS) $(AFLAGS_COM)

    .asm.exe:$(ASSEMBLAR) $*.asm

    .asm.com:$(ASSEMBLAR_COM) $*.asm

    MAKEFILE v2.0

    #Brbara Moreira de Castilho#Larissa Keiko Oshiro

    AFLAGS=/Fl /Fm /Sa /nologoAFLAGS_COM=/AT $(AFLAGS)ASSEMBLAR=$(AS) $(AFLAGS)ASSEMBLAR_COM=$(AS) $(AFLAGS_COM)

    info:@echo =============================================================@echo Bem vindo ao programa NMake@echo =============================================================@echo - Digite "NMake all" para gerar todos os arquivos;@echo - Digite "NMake clean" para limpar todos os arquivos gerados;@echo - Digite "NMake teste" para testar todos os arquivos;@echo - Digite "NMake info" ou "NMake" para exibir essa ajuda.

    clean:del *.objdel *.comdel *.exedel *.lstdel *.map

  • 8/6/2019 Lab2AoC

    10/11

    all:protec_n.com protec_s.com protex_n.exe protex_s.exe

    teste:attrib -r teste.txt

    @echo Status do arquivo antes do protec_n.com:attrib teste.txt

    protec_n.com teste.txt

    @echo Status do arquivo apos o protec_n.com:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protec_s.com:attrib teste.txt

    protec_s.com teste.txt

    @echo Status do arquivo apos o protec_s.com:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protex_n.exe:attrib teste.txt

    protex_n.exe teste.txt

    @echo Status do arquivo apos o protex_n.exe:attrib teste.txt

    attrib -r teste.txt

    @echo Status do arquivo antes do protex_s.exe:attrib teste.txt

    protex_s.exe teste.txt

    @echo Status do arquivo apos o protex_s.exe:attrib teste.txt

    VERAMB.COM:$*.asm$(ASSEMBLAR_COM) $*.asm

    PROTEC_N.COM:$*.asm$(ASSEMBLAR_COM) $*.asm

    PROTEC_S.COM:$*.asm$(ASSEMBLAR_COM) $*.asmPROTEX_N.EXE:$*.asm

    $(ASSEMBLAR) $*.asmPROTEX_S.EXE:$*.asm

    $(ASSEMBLAR) $*.asm

    VerAmb.com

    ;Brbara Moreira de Castilho;Larissa Keiko Oshiro

    .model TINY

    .code

    .startup

    VERAMB PROC NEARMOV DI,2Ch ;DI aponta para o endereo DS:2ChMOV DS,DS:[DI] ;DS recebe valor apontado por DIMOV DI,0h ;Comea do offset 0

    ;Rotina principal

  • 8/6/2019 Lab2AoC

    11/11

    MAIN: MOV DL,DS:[DI] ;Coloca em DL o byte a ser impresso na telaMOV AH,02h ;Requisita servio 02INT 21h ;Imprime o caractere armazenado em DLINC DI ;Incrementa DI

    .IF BYTE PTR DS:[DI]==00h ;Se o que est em DS:[DI] for igual a zeroJMP PROX ;Verdadeiro => pula para PROX

    .ELSEJMP MAIN ;Falso => pula para MAIN.ENDIF

    PROX: MOV DL,0Ah ;Coloca em DL o byte que significa pular linhaINT 21h ;Pula de linhaINC DI ;Imprime o caractere armazenado em DL

    ;Quando temos 2 zeros seguidos, indica o fim da lista devariveis de ambientes

    .IF BYTE PTR DS:[DI]==00h ;Se o que est em DS:[DI] for igual a zeroJMP EXIT ;Verdadeiro => pula para EXIT

    .ELSEJMP MAIN ;Falso => pula para MAIN.ENDIF

    EXIT: INT 20hVERAMB ENDP

    .exit[0]

    END