Pergunta

INCLUDE Irvine16.inc

.data
    byteArray   BYTE 6 DUP(?)
    listSize = ($ - byteArray)
    aSum        WORD 0
    soffset = 0
.code
main PROC
    mov     ax, @data
    mov     ds, ax
    mov     cx, listSize
Loop1:
    mov     ax, 0
    movzx   ax, [byteArray + soffset]
    add     aSum, ax
    soffset = soffset + 1
    loop Loop1
    exit
main ENDP
END main

O erro que eu estou recebendo é erro "A2074: não é possível o acesso rótulo através de registos segmento"

Eu estou tentando usar o soffset para percorrer o byteArray.

Foi útil?

Solução

Eu não tenho certeza o que está em Irvine16.inc, mas eu aposto que ele está dizendo .model small,... em algum ponto.

Se você adicionar

ASSUME DS:_DATA

, em seguida, suas mensagens de erro vai embora, embora eu duvide que isso é o suficiente para fazer a execução do programa.


Ok, eu tenho uma idéia. Eu acho que você deve mudar para os exemplos de 32 bits. Esse é um modelo plana onde os registos de segmento são configurados pelo sistema operacional e não utilizado por programas. Eu apenas o download dos exemplos Irvine e o projeto de exemplo, que passa a ser de 32-bits que montar e correr.

No estranho e mundial torcida que é x86 código de máquina, o modelo de 16 bits é um pouco mais complexo do que o modelo de 32 bits, pelo menos do ponto de vista de um programa do usuário.

Outras dicas

Este erro é causado pela tentativa de montar um programa DOS (.model! = Plana) para um arquivo COFF obj. Além disso ML.EXE joga error A2006:undefined symbol : DGROUP. A fonte deve ser montado para um arquivo moda OMF idade. Construir o arquivo com as seguintes linhas de comando:

ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;

ml.exe é parte da instalação do Visual Studio. link16.exe é parte da biblioteca suíte de Irvine (" Programas de exemplo e código link da fonte biblioteca. .. ").

scroll top