Невозможно получить доступ к метке через сегментные регистры, ошибка в сборке.
Вопрос
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
Я получаю сообщение об ошибке «A2074: невозможно получить доступ к метке через регистры сегмента».
Я пытаюсь использовать смещение для перебора byteArray.
Решение
Я не уверен, что находится в Irvine16.inc, но держу пари, что там написано .model small,...
в какой-то момент.
Если вы добавите
ASSUME DS:_DATA
тогда сообщения об ошибках исчезнут, хотя я сомневаюсь, что этого достаточно для запуска программы.
Хорошо, у меня есть идея.Я думаю, вам стоит перейти на 32-битные примеры.Это плоская модель, в которой регистры сегментов настраиваются ОС и не используются программами.Я только что скачал примеры irvine, и пример проекта, который оказался 32-битным, собрался и запустился.
В странном и запутанном мире машинного кода x86 16-битная модель немного сложнее, чем 32-битная модель, по крайней мере, с точки зрения пользовательской программы.
Другие советы
Эта ошибка вызвана попыткой собрать программу DOS (.model
!= плоский) до COFF
.obj-файл.Дополнительно ML.EXE выдает error A2006:undefined symbol : DGROUP
.Исходник надо собрать по старинке OMF
файл.Создайте файл с помощью следующих командных строк:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
является частью установки Visual Studio. link16.exe
часть Библиотека Ирвина («Примеры программ и исходный код библиотеки ссылок...»).