Pode rótulo não acesso através de registradores de segmento, erro na montagem
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.
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. .. ").