Questões - DEBUG
(CESPE 2004 PF - PCF)A figura acima apresenta uma sessão de uso da ferramenta de debug do MS Windows, sendo executada em um computador com arquitetura Intel IA-32. A sessão foi encerrada após a digitação do comando “q” seguido de _. A partir da análise dos comandos efetuados na sessão e acerca do uso de debug, julgue os itens a seguir.
51 __ O tamanho original do arquivo “arq1.txt” era de 18 (decimal) bytes e ele foi alterado para 16 (decimal) bytes.
__ O arquivo de nome “arq1.txt” possuía, antes do início da sessão, 5 linhas de texto.
__ O arquivo de nome “arq1.txt” ficou com 4 linhas de texto, após o fim da sessão.
__ O conteúdo do arquivo “arq1.txt”, ao final da sessão de trabalho, foi modificado para conter a seqüência de caracteres “DPF-”.
__ Em momentos distintos dessa sessão de trabalho, o registrador AX armazenou os valores 0 e 125715 (em notação octal).
__ A sessão de trabalho envolveu a digitação de três instruções em formato de montador que foram gravadas no arquivo “arq1.txt”.
__ Quatro instruções de montador foram executadas ao comando do usuário durante a sessão.
__ O flag de carry foi setado para 1 após a execução da instrução de montador NEG BX.
_ Imediatamente antes do término da sessão, o registrador AX, de 16 bits, continha um valor considerado negativo na notação de complemento a dois.
_ A seqüência de bits 10001001 (binário) é utilizada para representar o código de operador (opcode) da instrução MOV.
__ Todos os registradores da CPU, no total de 13, são apresentados por meio do aplicativo de debug.
62 __ O programa debug pode ser usado para invocação de subrotinas básicas de entrada e saída de dados, como gravação de blocos de bytes em setores de disco.
www.cespe.unb.br/CONCURSOS/DPF_2004_REG/arquivos/CARGO_04_PERITO_AREA_3.PDF
exercícios de 51 a 62.
51[E] O tamanho original do arquivo “arq1.txt” era de 18 (decimal) bytes e ele foi alterado para 16 (decimal) bytes.
Resolução: O registrador CX armazena o tamanho do arquivo. Tamanho original de 18h (24 decimal) foi alterado para 16h (22 decimal).
52[C] O arquivo de nome “arq1.txt” possuía, antes do início da sessão, 5 linhas de texto.
Resolução: A quebra de linha (e o retorno do “carro”) em ASCII é caracterizada pelos bytes “0d 0a”. Como o arquivo possui 24 bytes, temos, a seguir, em hexadecimal, o conteúdo das 5 linhas: 1ª Linha) 45 50 46; 2ª) 20 44 65 70 2e; 3ª) 50 6f 6c 2d; 4ª) 46 65 64 2d. A quarta linha acaba com a quebra de linha. Portanto, a quinta linha existe e está em branco (ou vazia).
53[E] O arquivo de nome “arq1.txt” ficou com 4 linhas de texto, após o fim da sessão.
Resolução: Os caracteres de nova linha+retorno do carro, que estavam configurando a 5ª linha, foram subtraídos do arquivo quando o registrador CX foi modificado de 18h para 16h. (??? Essa eu tô na dúvida ???)
54[C] O conteúdo do arquivo “arq1.txt”, ao final da sessão de trabalho, foi modificado para conter a seqüência de caracteres “DPF-”.
Resolução: No início, o arquivo começava com a seguinte seqüência de caracteres (hexa): “45 50 46 0d 0a”, equivalente, em ASCII a: “EPF” seguido de quebra de linha. Foi substituído por (hexa): “44 50 46 2d 0d 0a”, equivalente, em ASCII a: “DPF-” seguido de quebra de linha. Para saber que 2dh é igual a “-” basta observar o último caracter da 3ª linha que também é 2dh, ou “-”.
55 a 59 - não vou arriscar.
60[C] A seqüência de bits 10001001 (binário) é utilizada para representar o código de operador (opcode) da instrução MOV.
Resolução: O termo opcode é fartamente utilizado na literatura técnica com o significado de código de operador (operator code). O formato de análise sintática de expressões “operador + operandos” tem uma aceitação bastante ampla, aplicando-se nas áreas de linguagens, compiladores, arquitetura de computadores etc.
61[E] Todos os registradores da CPU, no total de 13, são apresentados por meio do aplicativo de debug.
Resolução: 4 Registradores internos: AX, BX, CX, DX; 4 Registradores de Segmentos: DS, ES, SS, CS; 2 Registradores apontadores: SP, BP; 2 Registradores de Índice: SI, DI; e o Registrador apontador de próxima instrução: IP.
Falta o “F” – “Registrador de Flag”, que não é mostrado. Portanto, embora sejam vistos 13 registradores, nem “todos” são mostrados.
Comentários
55[C] Em momentos distintos dessa sessão de trabalho, o registrador AX armazenou os valores 0 e 125715 (em notação octal).
Resolução:
Quanto ao número 0:
o registrador ax armazou o número 0 quando o usuário executou o comando "r ax".
Quanto ao número 125715 octal: O debug exibe os registradores em hexa. Por isso, o número 125715 octal deve ser convertido para hexa. Para a conversão, pode ser executado um "macetinho":
- primeiro, converte-se cada dígito do número octal para binario (3 digitos). O número ficaria assim:
001 010 101 111 001 101
- Depois, agrupa-se esses numeros de quatro em quatro a partir da direita:
00 1010 1011 1100 1101
Agora é só converter o binario pra hexa:
0 A B C D
Podemos assim verificar que a questão está certa, já que em dado momento o registrador AX armazenava ABCD (125715 octal)
56[E] A sessão de trabalho envolveu a digitação de três instruções em formato de montador que foram gravadas no arquivo “arq1.txt”.
Resposta: instruções de montador "assembly" podem ser digitadas no debug através do comando "a". Após o comando "a", o usuario digitou 4 instruções de montador:
mov bx, ax
neg bx
xor ax, bx
mov ax, bx
Essas instruções não foram gravadas no arquivo porque os comandos foram digitados em uma região da memória que não fazia parte do arquivo além do comando "w" (write) não ter sido executado.
57[E] Quatro instruções de montador foram executadas ao comando do usuário durante a sessão.
Resposta: O usuário digitou 4 instruções mas executou só 3 depois fechou a sessão de debug. Ele executou as primeiras 3 instruções usando o comando "p" (proceed).
58[C] O flag de carry foi setado para 1 após a execução da instrução de montador NEG BX.
Resposta: ao ver o conteudo dos registradores com o comando "r", o debug exibe as 8 flags do lado do registrador IP:
NV UP DI PL NZ NA PO NC
Antes de executar a instrução "NEG BX", a flag de carry era NC (no carry = 0).
Após a execução desse comando, ficou CY (carry = 1)
59[C] Imediatamente antes do término da sessão, o registrador AX, de 16 bits, continha um valor considerado negativo na notação de complemento a dois.
Resposta: na notação de complemento de 2, números negativos começam com o primeiro bit setado em 1. Como AX terminou a sessão de debug com o valor FFFE (começa com F = 1111), é negativo.
Ass: Fernando