Southern Machinery provides professional SMT peripheral equipment.

manual de referência do depurador para controlador de movimento smt machine radysis

2023-02-09 17:51:23

Guia do usuário UBUG (manual de referência do depurador)

para controle de movimento Radysis

 

 O
monitor UBUG é um pacote de software autônomo projetado para permitir
a avaliação e depuração do
PCB do controlador de movimento baseado em UIMC 68EC030. Ele tem a capacidade de carregar e executar o código do usuário e inclui
um montador/desmontador projetado para patchwork rápido do programa. O
monitor opera em um modo orientado por comando interativo do usuário representado pelo
prompt UIC>. A linha de comando digitada após esse prompt
determina qual operação é executada.

 

 

 

 

 

 

 

 

 

         UBUG MONITOR

 

ÍNDICE

 

1. INFORMAÇÕES GERAIS  

         1.1 Descrição do UBUG………………….. 3

 

2. O CONJUNTO DE COMANDOS UBUG

         2.1 Introdução………………………… 3

         2.2 Auto Nulo (an)……………………… 4

         2.3 Montador/Desmontador (as) ………….. 4

         2.4 Bloco de Preenchimento de Memória (bf)…………….. 6

         2.5 Bloco de Movimentação de Memória (bm)…………….. 6

         2.6 Ponto de Ruptura (br)…………………….. 6

         2.7 Pesquisa de bloco (bs)……………………. 7

         2.8 Contra-teste (ct)………………. 7

         2.9 Teste DAC16, ADC8 (dac16t)……………. 7

         2.10 Conversão de Dados (dc)…………………. 8

         2.11 Vai (vai)…………………………….. 8

         2.12 Ajuda (?/ele/ajuda)…………………….. 8

         2.13 Acesso IO (io)……………….. 8

         2.14 Carregar S-Records (lo)………………….. 9

         2.15 Exibição de Memória (md)………………….. 9

         2.16 Modificação de Memória (mm)…………………… 10

         2.17 Teste de Memória (mt)………………….. 10

         2.18 Exibição de registro (rd)………………… 10

         2.19 Registrar Modificar (rm)…………………. 11

         2.20 Definição de símbolo (sd)…………………… 11

         2.21 Teste – Diagnóstico (teste)………………. 11

         2.22 Modo Transparente™………………… 12

         2.23 Traço (tr)………………………….. 12

 

3 USO DO MONTADOR/DESMONTADOR DE UMA LINHA

         3.1 Introdução ………………………. 12

         3.2 Entrando e Modificando o Programa Fonte …. 12

       
 3.3 Inserindo uma Linha de Origem……………….. 13          
 3.4 Inserindo uma Mudança de Fluxo Instr ……… 14

       
 3.5 Inserindo listas de registro ……………… 15          
 3.6 Inserindo dados imediatos de ponto flutuante … 16          
 3.7 Inserindo instruções MMU ……………. 17

 

 

 

 

1. INFORMAÇÕES GERAIS

 

1.1 DESCRIÇÃO DO UBUG

 O
monitor UBUG é um pacote de software autônomo projetado para permitir
a avaliação e depuração do
PCB do controlador de movimento baseado em UIMC 68EC030. Ele tem a capacidade de carregar e executar o código do usuário e inclui
um montador/desmontador projetado para patchwork rápido do programa. O
monitor opera em um modo orientado por comando interativo do usuário representado pelo
prompt UIC>. A linha de comando digitada após esse prompt
determina qual operação é executada.

 

2. O CONJUNTO DE COMANDOS UBUG

 

 2.1 INTRODUÇÃO

 Esta
seção explica os comandos do monitor UBUG e sua sintaxe associada.
A Tabela 2.1 resume os comandos disponíveis e mostra a seção onde
o comando é explicado com mais detalhes.

 

TABELA 2.1 COMANDOS DO MONITOR UBUG

   

Comando/Mnemônico

Nome

Seção

um

Nulo Automático

2.2

como

Montador/Desmontador

2.3

namorado

Bloco de Preenchimento de Memória

2.4

bm

Bloco de Movimentação de Memória

2.5

br

ponto de interrupção

2.6

bs

Pesquisa de bloco de memória

2.7

ct

Contra-teste

2.8

dac16t

Teste DAC16, ADC8

2.9

CC

Conversão de dados

2.10.

ir

Ir

2.11

?/ele/ajuda

Ajuda

2.12

io

Acesso IO

2.13

olha

Carregar S-Records

2.14

md

Exibição de memória

2.15

milímetros

modificação de memória

2.16

mt

Teste de memória

2.17

terceiro

Exibição de registro

2.18

rm

Registrar Modificar

2.19

SD

Símbolo Definir

2.20.

teste

Teste - Diagnóstico

2.21

tm

Modo transparente

2.22

tr

Vestígio

2.23

     

 

 

 

 

 A linha de comando é composta por:

 <COMMAND IDENTIFIER>: especifica qual comando (ex. br )

 <SP>:   pelo menos um espaço

  LISTA DE OPÇÕES: uma opção pode usar delimitador(-) com opções se opções não padrão
forem permitidas e estiverem sendo usadas. (ex.
[<-r>])

  <SP>: pelo menos um espaço

  ARGUMENTOS: quaisquer argumentos necessários especificados pelo comando separados
    por vírgulas/espaços conforme mostrado na
descrição do comando. (ex. <ADDR,ADDR>)

 

 onde “<>” inclui símbolos obrigatórios na linha de comando
e “[<>]” inclui símbolos opcionais na
linha de comando. Observe que nos exemplos acima a opção -r foi um exemplo de um
símbolo opcional e que os campos ADDR são requisitos na
linha de comando. As opções disponíveis com um determinado comando são totalmente
explicadas na seção que descreve esse comando. O monitor
não diferencia maiúsculas de minúsculas na entrada do terminal. Todas as entradas do
terminal são convertidas em letras minúsculas antes de serem usadas internamente (exceto
o texto após um delimitador de texto; consulte o TEXTO abaixo). Os argumentos de um
determinado comando são descritos usando os seguintes símbolos:

 

 
 <EXP>: Uma expressão pode ser qualquer expressão numérica que pode
ser avaliada usando apenas os operadores aritméticos + e –.

 Ex. 1000

    Ex. 1+3

 

 Nota: Os números podem ser precedidos por um designador de base se o padrão
(hexadecimal) não for desejado. Esses designadores são mostrados abaixo na Tabela
2.2:

 

TABELA 2.2 DESIGNADORES DE BASE

Base

Designador

Hexadecimal

$

Decimal

&

octal

@

Binário

%

 

 

 <ADDR>: campo de endereço é qualquer expressão válida. Nota: Este
campo de endereço não deve ser confundido com os
endereços de origem e destino necessários usando o Assembler/Disassembler.

 

  <COUNT>: Campo de contagem é qualquer expressão válida precedida por um COUNTDEL (delimitador de contagem, ou seja, “:”)

 Ex. :100

 

 <RANGE>: Um intervalo de locais de memória indicados por ADDR,ADDR ou ADDR:COUNT.

 Ex. 0,100

    Ex. 0:50

 

  <TEXT>: Uma string ASCII de até 255 caracteres precedido por um TEXTDEL (delimitador de texto, ou seja, “;”)

 Ex. ;texto de amostra

 

  <TAMANHO>: Pode ser:

    byte (8 bits) ====> -b

    palavra (16 bits) ====> -w

    longo (32 bits) ====> -l

**Nota: ====> significa “é representado por” ou “retorna”

 

 <DATA>: Os dados podem ser qualquer expressão válida.

 

  <MASK>: Uma máscara pode ser qualquer expressão. Depois de avaliar a
expressão, os 0's representam não importa. Às vezes, uma máscara é
usada para qualificar

 

 <DADOS>. Consulte a seção 2.6 para obter um exemplo de uso.

 

2.2 AUTO NULO

 um <AXIS>

 

 A função auto null executa uma anulação do deslocamento zero do DAC de 16 bits do eixo especificado.

 

 Exemplos de uso:

 an 1 (nula o eixo um)

 

2.3   MONTADOR/DESMONTADOR

 como <ADDR>

 

 O montador/desmontador é chamado no endereço fornecido e
desmonta o código objeto naquele local. O uso do
Montador/Desmontador está totalmente descrito no capítulo 3.

 

2.4   BLOCO DE PREENCHIMENTO DE MEMÓRIA

 bf [<TAMANHO>] <FAIXA> <DADOS>

 

 O comando de preenchimento de bloco preenche o intervalo especificado de memória com os
dados listados. Se a opção de tamanho não for especificada, o tamanho padrão usado
é palavra. Se um múltiplo de <SIZE> de <DATA> não
couber uniformemente em <RANGE>, o comando deixa a última
palavra parcial ou palavra longa inalterada.

 Exemplos de uso:

         bf 100.110 &10

  bf 100:8 &10

 bf -w 100:8   a

 bf -l 100.110 a000a

**Observação: Todos esses exemplos executam o mesmo preenchimento de memória.

        (ou seja, $ 00000100: $ 000a $ 000a $ 000a $ 000a $ 000a $ 000a

 $ 0000010C: $ 000a $ 000a $ 0000 $ 0000 $ 0000 $ 0000 )

 

2.5   BLOCO DE MOVIMENTO DE MEMÓRIA

 bm [<TAMANHO>] <FAIXA> <ADDR>

 

 O comando de movimentação de bloco permite ao usuário copiar segmentos de memória para
diferentes locais na memória. A execução deste comando não
destrói a versão original, a menos que o local movido para <ADDR>
esteja dentro do intervalo <RANGE> do código que está sendo copiado. A
opção de tamanho só está disponível quando o intervalo é descrito como
<ADDR>:<COUNT> . Se o intervalo estiver sendo descrito com o
modo <ADDR>,<ADDR>, o tamanho padrão é byte. O
campo de tamanho representa a transferência de tamanho usada para realizar a
movimentação de memória.

 

         Exemplos de uso:

         bm 1000,2000   10000

 bm 1000:800 10000

 bm -l 1000:400 10000 **Observação: Esta variação executa o mais rápido

**Observação: todos esses exemplos executam a mesma movimentação de memória.

 

2.6   PONTO DE INTERRUPÇÃO

  br

  br <ADDR>

  br <ADDR> <:CONTAGEM>

  br -r [<ADDR>]

 br-r

 

 O comando breakpoint permite ao usuário listar, inserir ou deletar
breakpoints no código-alvo. Isso permite que o usuário pare de executar um
programa e retorne ao ambiente do monitor quando o
<ADDR> especificado for pré-buscado. Os diferentes usos deste comando estão
resumidos abaixo:

 

         br lista todos os pontos de interrupção conhecidos

 br <ADDR>     insira um ponto de interrupção neste endereço

 br <ADDR> <:COUNT> insira um breakpoint neste endereço, porém, retorne ao             ambiente do monitor somente após encontrar o
       breakpoint <COUNT> número de vezes.

  br -r [<ADDR>] remove o ponto de interrupção neste endereço

  br -r remove todos os pontos de interrupção

 

2.7   BUSCA DE BLOCOS

  bs [<TAMANHO>] <FAIXA> <DADOS>

 bs [<TAMANHO>] <RANGE> <DADOS> <MASK>

   

 O comando de busca de bloco permite que o usuário encontre um padrão específico
na memória. A área de pesquisa pode se estender além do <RANGE>
especificado se um padrão for iniciado dentro do <RANGE>. Existem dois
tipos principais de pesquisas:

       

 bs [<SIZE>] <RANGE> <DATA> procura no intervalo uma correspondência exata de <DATA>.

  bs [<SIZE>] <RANGE> <DATA> <MASK> procura
na faixa qualquer padrão que corresponda a <DATA>
onde há um “1” na representação binária da
máscara.

 

 Ex. Com memória na localização $100 como mostrado abaixo, executando

 “bs 100.118 $ 1234 $ffbf” ====>  

         Endereço inicial: $ 00000100

         Endereço final: $ 00000117

         Encontrado em: $ 00000110: $ 1234

         Encontrado em: $ 00000114: $ 1274

 Memória para o exemplo acima:

$ 00000100: $ 0000 $ 0000 $ 0000 $ 0000 $ 0000 $ 0000

 $ 0000010C: $ 0000 $ 0000 $ 1234 $ 0000 $ 1274 $ 0000

 

2.8 CONTRA TESTE

 ct

 

 O comando de teste de contador executa um teste de diagnóstico nos contadores de 4 eixos e as informações de aprovação/reprovação são retornadas.

 

 

2.9 DAC16, TESTE DAC8

 dac16t <AXIS #>

 

 O comando dac16t executa um teste de diagnóstico do DAC de 16 bits e do
ADC de 8 bits para o eixo especificado usando a
capacidade de contorno de diagnóstico do UIMC. As informações de aprovação/reprovação são retornadas.

 

2.10 CONVERSÃO DE DADOS

 dc <EXP>

 

 O comando de conversão de dados permite que o usuário avalie uma
expressão de entrada e determine seu equivalente hexadecimal e decimal.

 

 Exemplos de uso:

 **NOTA: Os símbolos a seguir foram definidos anteriormente para

     para ser usado nos exemplos abaixo:

     Ex 1. usa   /start= 0

     Ex 2. usa   /start= – $18

     Ex 3. usa /finish= 10000 e /start=$10000

     (consulte a seção 2.17)

          Ex. 1 pb $ 17+/início ====> $ 17 = &23  

  Ex. 2 pb $ 17+/início ====> NÃO ASSINADO: $FFFFFFFF =
&4294967295 ASSINADO
: -$1 = -&1

 Ex. 3 pb $/fim-/início ====> $10000 = 65536

 

2.11   VAI vai [<ADDR>]

 

 O comando go permite ao usuário executar programas de destino. Se um
endereço não for especificado na linha de comando, o valor atual do PC
será usado. Este valor é:

 1.) o valor de PC inicializado se nenhum código de destino tiver sido executado.

 2.) o último valor do PC usado na execução do código-alvo.

 3.) o valor colocado no registrador do PC por um comando RM (Register Modify ver seção 2.16).

 Se um endereço for incluído na linha de comando, o PC será modificado
para ser o endereço especificado. e a execução começa neste endereço. Em
ambos os casos, o estado do registrador em que o microprocessador é inicializado
, antes de executar o código-alvo neste local, pode ser visualizado executando
um comando rd (consulte a seção 2.15).

 

2.12   AJUDA

  ? [<símbolo>]

  ele [<símbolo>]

 ajuda [<símbolo>]

 

 O comando help permite ao usuário visualizar uma lista de comandos permitidos
e a sintaxe associada a eles. Os símbolos usados ​​para descrever o
uso do comando também podem ser pesquisados.

 Exemplos de uso:

 ?,he ou help ====> retorna uma listagem completa de todos os comandos com uso

  ? as ====> AS <addr> help addr ====> <number>

 o número ====> <hex> || <dezembro> || <out> || <bin> || <símbolo>

** Nota: <número> também pode ser uma expressão

 

2.13 ACESSO IO

 io

 

 O comando de acesso IO permite ao usuário acessar várias opções do
controlador de movimento UIMC. Após a emissão do comando IO, o usuário verá
a seguinte lista de opções:

 Menu de interface de E/S:

  i – Visualizar Entradas (Depurador exibe o estado atual das entradas digitais)

 o – Modificar saídas (o depurador permite que o usuário modifique as saídas)

 c – Modificar contadores (o depurador exibe o estado atual dos contadores e permite que o usuário modifique o conteúdo)

 r – Modificar relés (o depurador permite ao usuário modificar o estado dos relés)

 x – Modificar DACs de 16 bits (o depurador permite que o usuário modifique as saídas de DAC de 16 bits)

 y – Modificar DACs de 8 bits (o depurador permite que o usuário modifique as
saídas de DAC de 8 bits) z – Visualizar ADCs de 8 bits (o depurador exibe o estado atual dos
ADCs)

 

Após a seleção de uma das opções acima, o usuário será solicitado adequadamente.

 

2.14 CARREGAR S-REGISTRO

 lo [<porta>] [<DESVIO>] ;<TEXTO>

 

 O comando load permite ao usuário baixar S-Records do
sistema host. Se um deslocamento estiver presente na linha de comando, o
endereço de destino será o deslocamento adicionado ao endereço determinado pelo S-Record.
No modo normal o comando envia o <TEXT> além do “;” para o
HOST. Ele então espera que o HOST comece a enviar S-Records para o
terminal. Se a opção 't' for usada não ; é necessário e o depurador
espera que o terminal comece a enviar um S-Record.

 Exemplos de uso:

          lo ;cat ubug.mx

**Observação: o comando “cat” é um comando UNIX que concatena
e imprime os arquivos especificados usando a saída padrão.
Isso envia efetivamente o conteúdo do arquivo para o terminal. O
monitor então carrega o conteúdo dos S-Records no arquivo para
os endereços determinados pelos S-Records através da porta Host.

.

 

          lo a0000 ;cat ubug.mx

**Nota: Este comando baixa o mesmo arquivo S-Record usado no
primeiro exemplo, exceto que é carregado na memória no
endereço determinado pelo S-Record + $a0000 (ou seja, o deslocamento é
adicionado).

 

 muito

**Nota: Este comando usa 't' para terminal para a porta de carregamento S-Record.

 

2.15   EXIBIÇÃO DE MEMÓRIA

  md [<TAMANHO>] <addr>

  md [<TAMANHO>] <FAIXA>

 md -di <addr>

 

 O comando de exibição de memória permite ao usuário visualizar a memória. O tamanho
usado para exibir a memória é determinado pela opção de tamanho. Se nenhuma
opção for usada, o padrão é palavra. Se o intervalo exceder a
capacidade da tela, a saída para a tela será suspensa até que qualquer tecla seja pressionada.

       

  Exemplos de uso:

 md-l 100.110

  md-l 100:4

  md 100:8

 md -di 100  

**Nota: Este comando começa a desmontar a memória em

  este local.

 

2.16 MODIFICAÇÃO DE MEMÓRIA

  mm [<TAMANHO>] [<verificar>] <ADDR>

 mm <CONTROLE>

 

 O comando de modificação de memória permite ao usuário visualizar e modificar a memória.
O tamanho usado para exibir a memória é determinado pela opção de tamanho.
O padrão de tamanho é palavra. A opção somente gravação é determinada pela
opção de verificação. O padrão é leitura/gravação e um 'n' é usado
apenas para gravação. A memória é exibida começando no endereço especificado seguido
por um '?' incitar. O usuário pode digitar um <exp> para substituir esse
valor de memória ou pressionar Enter para visualizar o próximo valor de memória. Para sair do
comando, digite “. <cr>” (ponto <retorno do carro>). Outros
caracteres <CONTROL> disponíveis estão resumidos abaixo na Tabela 2.3:

TABELA 2.3 CARACTERES DE CONTROLE

Designador de caractere de controle  

– <EXP> backup <EXP> locais de memória

+ <EXP> avançar ” ” “

= <NÚMERO> não avança Não avança para o próximo local de memória

 

         Exemplos de uso:

 mm -l 100 ====> $ 00000100 $ 00000000 ?

 mm 100 ====>      $ 00000100 $ 0000 ?

 (ou seja, usa o tamanho padrão de “palavra”)

 mm n 100 ====> $ 00000100 ?

 (ou seja, não lê a partir do local)

 

2.17 TESTE DE MEMÓRIA

 mt <iniciar> <terminar>

 

 O teste de memória executa um teste de memória bit a bit no intervalo de RAM especificado e as informações de aprovação/reprovação são retornadas.

 

2.18   EXIBIÇÃO DE REGISTRO

 terceiro

 rd -f Observação: registros do coprocessador exibidos, se presentes

 

 O comando register display permite ao usuário visualizar o conteúdo dos registradores do mpu/fpu.

 

2.19   REGISTRO MODIFICAR

 rm [<REGISTRO> [<Novo valor>]]

 

 O comando RM permite ao usuário modificar o conteúdo dos registradores do mpu.

 Exemplos de uso:

 Para alterar o valor do PC:

 rm pc 3000 ====> altera o valor do PC para 3000

ou

 rm ====> Qual registrador?

     pc ====>   PC=00004000NOVO VALOR?

       3000 ====> altera o valor do PC para 3000

ou

 rm pc ====> PC=00004000NOVO VALOR?

      3000 ====> altera o valor do PC para 3000

 

2.20   DEFINIÇÃO DE SÍMBOLOS

  sd [<SÍMBOLO> <EXP>]

 sd -r <SÍMBOLO>

 

 O comando de definição de símbolo permite ao usuário definir símbolos. Esses
símbolos podem então ser usados ​​em expressões. O uso de um símbolo em uma
expressão resulta na substituição do símbolo pela expressão
que foi usada para defini-lo. Uma vez definido, o símbolo fica disponível
até que o monitor seja reinicializado. Se um símbolo for definido várias vezes, o
monitor usará a primeira definição.

 

         Exemplos de uso:

 sd ====> lista quais símbolos já são conhecidos

  sd /reset 10000 ====> define /reset como $10000 sempre que for
usado em uma expressão. sd /start -$18 ====> define
/start como -$18 sempre que for usado em uma expressão. sd -r
/start ====> remove a primeira definição de /start da
lista

**NOTA: Os símbolos que foram definidos usando o comando sd
podem ser usados ​​em qualquer expressão. Um exemplo disso é usar um
símbolo definido para inserir o código-fonte enquanto estiver no
montador (ou seja, bsr /startsub após definir /startsub).

 

2.21 TESTE - DIAGNÓSTICO

 teste [<LOOP #>]

 

 O comando de teste inicia uma série de testes de diagnóstico que consistem em
uma função nula automática, teste de contador, teste de RAM e teste DAC16/ADC8 e
retorna informações de aprovação/reprovação. O número de vezes que o teste de diagnóstico
é executado é determinado pelo loop # especificado. Se nenhum loop # for
especificado, o comando rodará infinitamente.

 

2.22 MODO TRANSPARENTE

 tm

 

 O comando de modo transparente coloca o usuário no modo transparente estabelecendo
uma conexão de software entre o HOST e o TERMINAL.
O modo transparente interrompe a comunicação normal entre o TERMINAL e
o depurador. Enquanto estiver neste modo, todas as entradas do teclado são retransmitidas diretamente
para o HOST. As respostas do HOST, por sua vez, são retornadas à tela.
Digitar um CTRL A retorna o usuário ao ambiente do monitor.

 

2.23   RASTREIO

 tr [<ADDR>][<COUNT>]

 

 O comando trace permite que o usuário rastreie o código-alvo e
observe os registradores após executar a linha de comando. Se a contagem for
especificada, o microprocessador executará <COUNT> número de
instruções antes de retornar ao ambiente do monitor. O rastreamento começa
no <ADDR> listado na linha de comando ou no PC atual
se um <ADDR> não estiver incluído. A instrução de rastreamento pode ser
continuada pressionando um retorno de carro. Para sair, um “.” deve ser inserido.

 

         Exemplos de uso:

          tr   ====> rastreia 1 instrução do PC atual

 tr :10   ====> executa 10 instruções além do PC atual e retorna ao
ambiente do monitor

 tr 1000====> rastreia 1 instrução começando em $1000

 

 

3.0 USANDO O MONTADOR/DESMONTADOR DE UMA LINHA

 

3.1 INTRODUÇÃO

 Incluído no monitor UBUG está um comando montador/desmontador
que pode ser executado conforme detalhado na seção anterior. Este
montador/desmontador permite ao usuário modificar o código alvo. Cada
linha de origem digitada pelo usuário é inserida na memória no
endereço exibido. Esta linha é então desmontada para que o usuário possa
verificar o código real inserido na memória. Se nenhuma alteração for desejada, um
<CR> move o usuário para o próximo opcode na memória.

 CUIDADO: Este montador/desmontador não insere código no
programa fonte; ele apenas sobrescreve a memória naquele local. Como
resultado, um patch de programa que requer inserção de código pode ser realizado
primeiro movendo o código de bloco para liberar uma área de inserção e, em seguida,
inserir nessa área.

 

3.2 ENTRAR E MODIFICAR O PROGRAMA FONTE

 Para inserir e modificar o código-fonte, o comando as deve ser
executado conforme detalhado na seção 2.2 (ou seja, as <ADDR>). Isso
coloca o usuário na rotina Montador/Desmontador.

A Tabela 3.1 resume os comandos que podem ser executados dentro desta rotina:

TABELA 3.1 SUBCOMANDOS DO MONTADOR/DESMONTADOR

Designador de comando

BACKUP <EXP> – <EXP>

AVANÇO <EXP> + <EXP>

TERMINAR .

AJUDA ?

STEP PAST retorno de carro

DEFINIR DC CONSTANTE #<EXP>

 

**Nota: Executando um '?' enquanto no montador/desmontador retorna
o DISPOSITIVO que o montador/desmontador está suportando.

 

3.3 INSERINDO UMA LINHA DE ORIGEM

 Após executar um comando as <ADDR>, o montador/desmontador
retorna com a desmontagem do código encontrado naquele local. Neste
momento, o usuário pode executar um comando assembler mostrado na seção 3.2
ou digitar a linha fonte que deve substituir o
código fonte exibido. Ao inserir a fonte, os
modos de endereçamento efetivo padrão da MOTOROLA são usados. Esses modos estão resumidos abaixo na Tabela 3.2:

 

TABELA 3.2 MODOS DE ENDEREÇAMENTO EFETIVOS DO MONTADOR/DESMONTADOR

 

Sintaxe do Modo de Endereçamento Efetivo

Registrar Dn Direto

Registro de endereço direto An

Registro de endereço indireto (An)

Registrador de endereço indireto com pós-incremento (An)+

Registrador de endereço indireto com Predecremento -(An)

Registrador de endereço indireto com Deslocamento (d16,An)

Registrador de endereço indireto com índice (d8) (d8,An,Xn.SIZE*SCALE)

Registrador de endereço indireto com índice (base disp) (bd,An,Xn.SIZE*SCALE)

Memória indireta Pós-indexada ([bd,An],Xn.SIZE*SCALE,od)

Memória indireta Pré-indexada ([bd,An,Xn.SIZE*SCALE],od)

PC indireto com deslocamento (d16,PC)

PC indireto com índice (d8) (d8,PC,Xn.SIZE*SCALE)

PC indireto com índice (bd) (bd,PC,Xn.SIZE*SCALE)

Memória do PC indireta Pós-indexada ([bd,PC],Xn.SIZE*SCALE,od)

Memória do PC indireta Pré-indexada  
 ([bd,PC,Xn.SIZE*SCALE],od) Endereço curto absoluto
       (xxx).W

Endereço Longo Absoluto (xxx).L

Endereço absoluto xxx otimiza (bwl)

Dados Imediatos #xxx

 

 Ao usar os modos de indexação POST ou PRE, os campos podem ser ignorados usando uma vírgula. Um exemplo é mostrado abaixo:

 Ex. andi #12,([,],,) ====> andi.b #$12,([$0,ZA0],ZD0.W*1,$0)

 

Outros exemplos de linhas de origem são mostrados abaixo:

        Ex. ori.l #12,(a1) ====> ori.l #$12,(a1)

 Ex. addq #1,(a1) ====> addq.b #$1,(a1)

 

 Há apenas recursos limitados de triagem de erros incluídos no monitor. Exemplos disso são mostrados abaixo:

 Ex. jmp (123).w ====> jmp ($123).W

**Observação: Quando executado resulta em um erro de barramento.

   

 Ex. bsr (123) ====>

 ERRO 10: mudança ilegal de fluxo ===> bsr (123)

     Nota: A instrução bsr verifica se há

           mudanças de fluxo.

 NOTA: O fluxo não pode ser alterado para um endereço ímpar.

 Dígitos superiores de dados NÃO são truncados quando uma incompatibilidade entre tamanho
e dados imediatos é encontrada se a opção de tamanho de byte ou palavra foi
especificamente inserida. Se a opção de tamanho longo for especificada e os dados
excederem esse intervalo, os dígitos superiores SÃO truncados.

 

 Ex. addi.b #12345678,(a1) ====>

 ERRO 11: erro de opção de tamanho/dados imediatos ===> addi.b #12345678,(a1)

 

 Ex. addi.l #123456789,(a1) ====> addi.l #$23456789,(a1)

 Ex. addi #123456789,(a1) ====> addi.l #$23456789,(a1)

   (o padrão é a opção longa)

      truncado————–^

 

 Os dígitos superiores dos dados são truncados em comandos que possuem um
campo limitado na palavra para armazenar os dados imediatos. Exemplos disso são
mostrados abaixo.

 Ex. addq #10,(d0) =====> addq.b #$0,(d0)

 Ex. trap #10 =====> trap #$0 a entrada é padrão hexadecimal

 Ex. armadilha #&10 =====> armadilha #$A

 

3.4 INSERIR MUDANÇA DE INSTRUÇÕES DE FLUXO

 Como o montador/desmontador não utiliza rótulos, todas as instruções
que utilizam <rótulo> como modo de endereçamento efetivo devem ter seu
deslocamento determinado. Se inicialmente desconhecido, o espaço para este
deslocamento deve ser reservado e então o usuário precisa voltar e
inserir o deslocamento. Uma vez determinado o deslocamento,
pode-se inseri-lo conforme o exemplo a seguir:

 

 Ex. Neste exemplo, sabe-se que o local da instrução de destino de uma ramificação
é $ 100.000 e um BRA é necessário no local 0. Após
executar “AS 0” e obter a desmontagem encontrada em 0, o usuário
pode digitar:

  BRA 100000 ou BRA (100000) ou BRA.l #ffffe

 

 O modo de endereçamento absoluto pode ser usado se o endereço de destino de uma
ramificação for conhecido (como nos 2 primeiros exemplos) ou o deslocamento (último
exemplo) pode ser inserido usando o modo de endereçamento de dados imediato.

 

   CUIDADO: Em alguns casos, resultados inesperados podem ocorrer durante o uso

 mudança de declarações de fluxo. Essas instâncias estão resumidas abaixo

 com exemplos.

 

Ex.
1 Se o caso degenerado de uma instrução de desvio for usado (ou seja,
tentando usar um desvio curto para desviar para a instrução seguinte),
o montador monta por engano essa opção .b. No entanto, como o
deslocamento é zero, este é um opcode .w e o desmontador
exibe corretamente esse fato para o usuário.

 

  $ 00004000 não? bra.b ====> resulta em uma montagem INCORRETA

 

 Ex. 2 Se o usuário tentar forçar uma
instrução de ramificação de tamanho específico e a ramificação real exigir um deslocamento maior do que o
reservado, o montador imprimirá uma mensagem de erro: “ERR0R 16: OUT OF
DISPLACEMENT RANGE” .

 

 $ 00004000 nop ?bra.w (100000)

 

Uma
forma de garantir que isso não ocorra é não inserir uma opção de tamanho. Isso
permite que o montador escolha o tamanho correto para o deslocamento.

 

3.5 INSCRIÇÃO DE REGISTROS E LISTAS DE REGISTROS

 A instrução move multiple register (movem) usa uma lista de registradores como
um endereço efetivo. Esta lista pode ser inserida no seguinte
método:

 

 Ex. a0 ====> registrador de endereço único

   d3 ====> registro de dados único

   a0-a3     ====> série de registradores

   a0-a3/a7 ====> combinação de exemplos anteriores

   a0-a7/d0-d7 ====> todos os registradores

 

 Se o suporte do coprocessador for especificado, os registros de ponto flutuante

pode ser inserido como mostrado abaixo:

 

 Ex.   fp0 ====> registrador de ponto flutuante simples

   fp0-fp2   ====> série de registradores

   fp0-fp3/fp7 ====> combinação de exemplos anteriores

 

 Muitos dos comandos requerem a inserção de registradores diferentes dos
registradores de dados ou endereço. As Tabelas 3.3 apresentam a listagem dos registradores
utilizados e as abreviaturas aceitas pelo montador:

  

TABELA 3.3 REGISTROS 68030 ( Registros MMU não disponíveis em 68EC030 )

Sintaxe do nome  

Ponteiro de pilha do usuário USP

Registro de Status SR

Registro de Código de Condição CCR

Contador de programa PC

Master Stack Pointer MSP

Interromper Stack Pointer ISP

Registrador de quebra de vetor VBR

Código de Função Fonte Registrar   SFC

Registro de código de função de destino   DFC

Registro de Controle de Cache CACR

Registro de Endereço de Cache CAAR

Registrador de ponteiro de raiz da CPU CRP

Supervisor Root Pointer Register   SRP

Registro de Controle de Tradução TC

Registro de Tradução Transparente 0   TT0

Registro de Tradução Transparente 1   TT1

Registo de Estado MMU PSR

 

TABELA 3.4 REGISTROS DE PONTO FLUTUANTE (Disponíveis se o coprocessador estiver presente)

Sintaxe do nome

Registro de controle de ponto flutuante FPCR

Registro de status de ponto flutuante FPSR

Ponto Flutuante Inst. Registro de endereço   FPIAR

Registro de Dados de Ponto Flutuante FP0-FP7

 

3.6 INSERINDO/AVALIANDO DADOS IMEDIATOS DE PONTO FLUTUANTE

 Os dados imediatos de ponto flutuante devem ser inseridos usando um ponto decimal
com pelo menos um (1) dígito na frente da casa decimal (mesmo que seja
um '0'). Ex. 0,0012. Como o compilador C usado não foi baseado na
versão proposta do ANSI C, o software é incapaz de
realizar a 'montagem' de dados imediatos estendidos com
precisão estendida. O monitor faz a conversão correta até a
precisão dupla e coloca esse resultado em um formato estendido. Se o
compilador que está sendo usado estiver de acordo com a permissão de um
tipo 'long double', alterar o tipo da variável 'weight' na
rotina permitida (no arquivo asm68.c) de double para long double deve fornecer
a precisão adicionada. Exemplos de dados imediatos de ponto flutuante mostrados
abaixo:

 

 Ex. fmove.s #5.0,fp0 ====> fmove.s 1_400000_E_2,FP0

 

 O formato na desmontagem é inteiro part_fraction
field_E_expoente field, onde os bits de fração representam ponderação de
1/2 ,1/4,….etc. da esquerda para a direita. Os bits do expoente
representam a potência imparcial à qual 2 deve ser elevado. Uma conversão para
decimal pode ser realizada avaliando:

 

 inteiro + fração avaliada x 2 ^ campo expoente

 

 No exemplo acima, isso equivale a:

    (1 + 0,25) x 2^2 = 5,0

 

NOTA: O monitor usa o modo de arredondamento para zero no montador ao montar dados imediatos de ponto flutuante.

 

3.7 INSERIR INSTRUÇÕES MMU ( Não disponível no 68EC030 )

 A instrução MMU NÃO deve ser inserida com um descritor de tamanho. O montador padroniza para o tamanho correto.

 Ex. pmove (a0),tt1 ;monta

       pmove.l (a0),tt1 ;não monta mesmo que a operação

         ;é uma operação longa. 

Chat with us