Невозможно получить доступ к метке через сегментные регистры, ошибка в сборке.

StackOverflow https://stackoverflow.com/questions/1512734

  •  19-09-2019
  •  | 
  •  

Вопрос

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 часть Библиотека Ирвина («Примеры программ и исходный код библиотеки ссылок...»).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top