Ошибка сборки, если файл слишком большой в GNU, как - PullRequest
3 голосов
/ 29 сентября 2019

Я пытаюсь собрать файл, двоичный файл которого должен соответствовать определенному размеру. Я пытался понять, был ли способ для ассемблера потерпеть неудачу, если он слишком большой, чтобы я знал. Я думал что-то вроде:

.if . > 0x200
.error “binary too large”
.endif

Но это не работает, если выражение не является абсолютным. Я тоже пытался сделать это с лейблом, но это тоже не работает. Есть ли способ сделать это с помощью директив или как?

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

Видимо, если вы установите текущий адрес на что-то меньшее, чем должно быть, сборка не удастся. Таким образом, завершение файла с помощью

. = 0x200

Заставляет as выдать ошибку, если файл был больше, чем этот.

Редактировать: как указано @fuz, это будет дополнять файлдо такого размера, у меня нет ответа, если это проблема для вас.

0 голосов
/ 30 сентября 2019

Запрос размера сегмента во время сборки во время последнего прохода мне показался полезным, поэтому атрибут SIZE # может получить эту информацию в EuroAssembler.

Так что если вы ненастаивайте на GNU как , это работает:

binary PROGRAM
%AllowedSize %SETA 9
[DATA] SEGMENT         ; Common segment for code and data.
  DB "1234567890"      ; Example of data contents.
  %IF SIZE# [DATA] > %AllowedSize
    %ERROR Size of program "binary" exceeds %AllowedSize.
  %ENDIF
  ENDPROGRAM
...