lab2aoc
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