Principal > Documentos > Manual dos simuladores LEG e ARM
Manual dos simuladores LEG e ARM
Esta página apresenta as funcionalidades dos simuladores LEG (legsim) e ARM (armsim), com uma descrição sucinta dos comandos disponíveis ao usuário.
O simulador deve ser iniciado em uma janela de tipo $ xxxsim [-c] [-d arq_disp] [-l arq_exec] [-lc arq_com] [-nw]
onde xxxsim pode ser armsim ou legsim,
respectivamente os simuladores para os processadores ARM e LEG.
Os argumentos opcionais são:
- -c
inicia também um painel de console, para entrada e saída de dados, descrito a seguir. - -d arq_disp
usa o arquivo arq_disp para instalar os dispositivos de E/S especificados. - -l arq_exec
carrega na memória o arquivo arq_exec. - -lc arq_com
lê um arquivo de comandos arq_com e executa os comandos especificados. - -nw
não utiliza recursos gráficos do Terminal (para terminais sem esses recursos; apenas a forma de visualização de comandos para execução passo-a-passo é alterada).
Memória
Os simuladores legsim e armsim têm 512 KiB de memória disponível, do endereço 0 ao endereço 0x7ffff. No simulador armsim, qualquer endereço maior ou igual a 0x80000 pode ser alocado para uma porta de E/S.
Convenções
Durante a execução, qualquer comando pode ser interrompido pressionando
Ajuda
Digite `?' na linha de comando do simulador para listar os comandos disponíveis. Uma
saída como a abaixo é mostrada:
armsim - ARM simulator(v1.0)
R. Anido/IC-Unicamp
armsim> ?
CARACTERES ESPECIAIS
. encerra entrada de dados
(ctr-c) interrompe execução de qualquer comando
COMANDOS DISPONÍVEIS:
b breakpoints | l carrega arquivo
c constantes e símbolos | q termina execução
d mostra memória | r inspeciona registradores
f preenche memória | s passo a passo
g go | t trace
i inspeciona memória | u unassemble
j jornal | x mostra estado
k mostra ciclos |
Para saber mais sobre cada comando, digite a letra correspondente ao
comando seguida de `?'.
Aritmética simples
Além dos comandos descritos a seguir, o simulador também permite realizar somas e subtrações entre dois números hexadecimais, digitando a operação desejada diretamente na linha de comando do simulador.
Exemplos:
- 1000 + 1fa
mostra o resultado da adição 0x1000 + 0x1fa. - 1000 - 1fa
mostra o resultado da subtração 0x1000 - 0x1fa.
Comando b (breakpoint)
O comando b permite definir pontos de parada (breakpoints) para endereços específicos da memória.
- b
mostra breakpoints correntes. - br ender_ini ender_fim [contador]
associa um breakpoint para cada contador acessos para leitura no intervalo de endereços ender_ini a ender_fim. contador é um número hexadecimal; se não especificado o valor é 1. -
bw ender_ini ender_fim [contador]
associa um breakpoint para cada contador acessos para escrita no intervalo de endereços ender_ini a ender_fim. contador é um número hexadecimal; se não especificado o valor é 1. -
bx ender_ini ender_fim [contador]
associa um breakpoint para cada contador acessos para execução no intervalo de endereços ender_ini a ender_fim. contador é um número hexadecimal; se não especificado o valor é 1. -
br ~ender
bw ~ender
bx ~ender
remove breakpoint do endereço ender. - b ~
remove todos os breakpoints.
Exemplos:
- br
mostra breakpoints de acesso de leitura correntes. - bx 2af2
define breakpoint de execução no endereço 0x2af2, para cada execução. - bw tabela tabela+4 10
define breakpoint no intervalo de endereços tabela até tabela+4, para cada 10 acessos de escrita. - bw ~1000
remove breakpoint de acesso de escrita no endereço 0x1000. - br ~
remove todos os breakpoints.
Comando c (examina constantes)
O comando c permite examinar as constantes importadas do arquivo executável (em geral, rótulos do programa, repassados pelo montador), ou definir e modificar novas constantes.
- c
mostra todas as constantes e símbolos conhecidos. - c nome
mostra o endereço associado à constante ou símbolo nome. - c nome ender
atribui o endereço ender à constante ou símbolo nome.
Exemplos:
- c inicio
mostra o endereço do rótulo inicio. - c volta 2020
associa o símbolo volta ao valor 0x2020.
Comando d (display memory)
O comando d permite examinar o conteúdo da memória.
- d ender_ini [contador]
mostra o conteúdo de contador posições de memória a partir de ender_ini; contador é um número hexadecimal, cujo default é 0x80 (128 decimal).
Exemplos:
- d 2100 300
mostra a memória a partir do endereço 0x2100 até o endereço 0x2400 (0x2100+0x300). - d tabela
mostra 128 bytes a partir do endereço tabela, onde tabela é uma constante conhecida.
Comando f (fill memory)
O comando f é útil para preencher extensas regiões de memória com um dado valor (por exemplo, zerar uma região de memória).
- f ender_ini ender_fim valor_byte
preenche a memória de ender_ini até ender_fim com bytes de valor valor_byte.
- fw ender_ini ender_fim valor_palavra
preenche a memória de ender_ini até ender_fim com palavras de valor valor_palavra.
Exemplos:
- fw 2200 2400 0aa55
preenche a memória do endereço 0x2200 até 0x2400 com o valor 0xaa55. - f tabela tabela+4 0
zera bytes do endereço tabela até o endereço tabela+4, onde tabela é uma constante conhecida.
Comando g (go)
O comando g inicia a simulação a partir de um endereço dado.
- g [ender_ini [ender_fim]]
executa de ender_ini até ender_fim ou até que alguma outra condição de parada ocorra. Se ender_fim não está presente, executa a partir de ender_ini até alguma condição de parada. Se ender_ini não está presente, executa a partir do endereço de execução corrente até alguma condição de parada. O endereço de execução corrente é o valor do registrador contador de programa, ou seja, ip no caso do LEG ou pc no caso do ARM. Condições de parada possíveis são breakpoints, violações de memória ou execução de instrução inválida.
Exemplos:
- g 4000 4100
executa a partir do endereço 0x4000 até o endereço 0x4100, ou até alguma condição de parada. - g inicio
executa a partir do endereço definido pelo símbolo inicio até alguma condição de parada. - g
executa a partir do endereço de execução corrente até alguma condição de parada.
Comando i (inspect memory)
O comando i permite alterar e verificar o conteúdo da memória.- i ender_ini
Inspeciona e permite alteração do conteúdo de bytes na memória sequencialmente a partir do endereço ender_ini.
- iw ender_ini
Inspeciona e permite alteração do conteúdo de palavras na memória sequencialmente a partir do endereço ender_ini.
Para terminar a inspeção, digite o caractere ’.’ (ponto). Exemplos:
- i 4000
inspeciona bytes a partir do endereço 0x4000 - iw inicio
inspeciona palavras a partir do endereço definido pelo símbolo inicio.
Comando k (mostra ciclos)
O comando k permite examinar ou alterar o número de ciclos (instruções) executados.
- k
mostra o número de ciclos correntes. - k valor
atribui valor ao número de ciclos (pode ser usado para zerar o número de ciclos antes de uma execução).
Exemplos:
- k
mostra o número de ciclos executados. - k 0
zera o número de ciclos executados.
Comando j (journal)
O comando j permite armazenar os comandos digitados em um arquivo texto (jornal), que pode ser posteriormente utilizado para re-executar os comandos automaticamente.
- j nome_arquivo
Inicia o jornal, armazenando os comandos no arquivo de nome nome_arquivo. A partir desse ponto, todos as teclas digitadas pelo usuário são armazenadas, possibilitando a re-execução automática dos comandos através do comando lc. - j ~
Termina o jornal, fechando o arquivo corrente.
Exemplo:
- j teste1.sh
inicia o jornal, armazenando as teclas digitadas no arquivo teste1.sh.
Comando l (load program)
O comando l carrega um arquivo executável preparado pelo montador na memória do simulador.
- l nome_arquivo
Carrega arquivo executável nome_arquivo na memória do simulador.
Exemplo:
- l roteador.out
carrega arquivo roteador.out na memória.
Comando lc (load commands file)
O comando lc carrega um arquivo de comandos e executa cada comando do arquivo. O arquivo de comandos pode ser gerado manualmente ou através do comando j.
- lc nome_arquivo_comandos
Carrega e executa o arquivo de comandos de nome
nome_arquivo_comandos.
Exemplo:
- lc teste1.sh
carrega e executa o arquivo de comandos teste1.sh.
Comando q (quit)
O comando q termina a sessão de simulação.
- q
Termina a simulação.
Comando r (inspeciona registradores)
O comando r permite verificar e alterar o conteúdo de registradores.
- r
Mostra os valores de todos os registradores e flags, sem permitir alterações. - r reg_nome
Mostra o valor corrente e permite alteração do registrador de nome reg_nome. Os nomes válidos são r1 a r15, sp e fp, além de ip (para o legsim) ou pc (para o armsim).
Exemplos:
- r
Mostra o valor corrente de todos os registradores. - r r5
Mostra o valor corrente e permite alteração do registrador r5.
Comando s (single step)
O comando s permite a execução passo-a-passo (uma instrução por vez).
- s [ender_ini]
Executa a instrução do programa presente no endereço ender_ini. Se ender_ini não é dado, executa a instrução presente no endereço dado pelo valor corrente do registrador contador de programa. Se a instrução é chamada de procedimento, o procedimento é executado inteiramente dentro desse passo. - si [ender_ini]
Executa uma instrução do programa a partir do endereço ender_ini. Se ender_ini não é dado, executa a instrução presente no endereço dado pelo valor corrente do registrador contador de programa. Se a instrução é chamada de procedimento, a próxima instrução a ser executada é a primeira instrução do procedimento chamado (step into procedure). - so [ender_ini]
Executa a partir do endereço ender_ini até retornar do procedimento corrente, ou seja, até executar uma instrução de retorno de procedimento (step out procedure). Se ender_ini não é dado, executa a partir da instrução presente no endereço dado pelo valor corrente do registrador contador de programa.
Imediatamente após um comando s, si ou so, pode-se simplesmente pressionar a tecla ENTER, e o comando anterior (s, si ou so) será repetido.
Exemplos:
- s 1000
Executa uma instrução, no endereço 0x1000 e retorna o controle ao usuário. - so
Executa até retornar do procedimento corrente.
Comando u (unassemble)
O comando u permite visualizar um trecho de memória como uma sequência de comandos em linguagem de montagem. Em outras palavras, o comando desmonta uma sequência de instruções, onde desmontar significa executar o processo inverso do montador, ou seja, transformar o código binário em comandos da linguagem de montagem.
- u ender_ini [num]
desmonta num instruções a partir do endereço ender_ini. Se num não é dado, desmonta 16 instruções.
Exemplos:
- u 500 20
desmonta 32 instruções a partir do endereço 0x500. - u inicio
desmonta 16 instruções a partir do endereço definido pelo símbolo inicio.
Acesso aos simuladores
Os simuladores legsim e armsim podem ser encontrados na página Ferramentas.