Compartilhar via


Mensagens de diagnóstico de montador do ARM

O montador Microsoft ARM (armasm) emite diagnóstico avisos e erros quando encontra-los.Este artigo descreve as mensagens mais comumente encontrados.

filename(lineno) : [error|warning] Anum: message

Mensagens de diagnóstico

Hh916384.collapse_all(pt-br,VS.110).gifErros

  • A2193: essa instrução gera um comportamento imprevisível
    A arquitetura ARM não pode garantir o que acontece quando essa instrução é executada.Para obter detalhes sobre os formulários bem definidos nesta instrução, consulte o Manual de referência do ARM arquitetura.

    ADD r0, r8, pc         ; A2193: this instruction generates unpredictable behavior
    
  • A2196: a instrução não pode ser codificada de 16 bits
    A instrução especificada não pode ser codificada como uma instrução de prática de 16 bits.Especifique uma instrução de 32 bits ou reorganizar o código para trazer o rótulo de destino para o intervalo de uma instrução de 16 bits.

    O montador talvez tente codificar uma ramificação em 16 bits e falhar com este erro, mesmo que uma ramificação de 32 bits é encodable.Você pode resolver esse problema usando o .W especificador marcar explicitamente a ramificação como 32 bits.

      ADD.N r0, r1, r2      ; A2196: instruction cannot be encoded in 16 bits
    
      B.W label             ; OK
      B.N label             ; A2196: instruction cannot be encoded in 16 bits
      SPACE 10000
    label
    
  • A2202: Sintaxe de instrução de Pre-UAL não é permitido na região do POLEGAR
    Código Thumb deve usar a sintaxe do idioma de Unificação de montador (UAL).A sintaxe antiga não é aceito

      ADDEQS r0, r1         ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
      ADDSEQ r0, r1         ; OK
    
  • A2513: Rotação deve ser par
    No modo de ARM, há uma sintaxe alternativa para especificar constantes.Em vez de escrever #<const>, você pode escrever #<byte>,#<rot>, que representa o valor da constante que é obtido girando o valor <byte> direita por <rot>.Quando você usar essa sintaxe, você deve fazer o valor de <rot> mesmo.

      MOV r0, #4, #2       ; OK
      MOV r0, #4, #1       ; A2513: Rotation must be even
    
  • A2557: Número incorreto de bytes a gravar novamente
    A estrutura de NÉON carregar e armazenar instruções (VLDn, VSTn), há uma sintaxe alternativa para especificação de write-back para o registro de base.Em vez de colocar um ponto de exclamação (!) depois do endereço, você pode especificar um valor imediato indica o deslocamento a ser adicionado ao registro base.Se você usar essa sintaxe, você deve especificar o número exato de bytes carregados ou armazenados pela instrução.

      VLD1.8 {d0-d3}, [r0]!         ; OK
      VLD1.8 {d0-d3}, [r0], #32     ; OK
      VLD1.8 {d0-d3}, [r0], #100    ; A2557: Incorrect number of bytes to write back
    

Hh916384.collapse_all(pt-br,VS.110).gifAvisos

  • A4228: O valor do alinhamento excede o alinhamento da área; Não há garantido de alinhamento
    O alinhamento especificado em um ALIGN diretiva é maior do que o alinhamento do circunscrito AREA.Como resultado, o montador não garante que o ALIGN diretiva será respeitada.

    Para corrigir isso, você pode especificar o AREA diretiva uma ALIGN atributo é igual ou maior que o alinhamento desejado.

      AREA |.myarea1|
      ALIGN 8           ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
    
      AREA |.myarea2|,ALIGN=3
      ALIGN 8           ; OK
    
  • A4508: O uso dessa constante girado é preterido
    No modo de ARM, há uma sintaxe alternativa para especificar constantes.Em vez de escrever #<const>, você pode escrever #<byte>,#<rot>, que representa o valor da constante que é obtido girando o valor <byte> direita por <rot>.Em alguns contextos, ARM tem substituído o uso de constantes girados.Nesses casos, usar o basic #<const> sintaxe em vez disso.

      ANDS r0, r0, #1                ; OK
      ANDS r0, r0, #4, #2            ; A4508: Use of this rotated constant is deprecated
    
  • A4509: Essa forma de instrução condicional é substituída
    Essa forma de instrução condicional foi substituída pelo ARM na arquitetura ARMv8.Recomendamos que você altere o código para usar ramificações condicionais.Para ver quais instruções condicionais ainda são suportadas, consulte o Manual de referência do ARM arquitetura.

    Este aviso não é emitido quando o - oldit opção de linha de comando é usada.

      ADDEQ r0, r1, r8              ; A4509: This form of conditional instruction is deprecated
    

Consulte também

Referência

ARM Assembler referência de linha de comando

Diretivas de Assembler do ARM