Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Нужны ли вам макро-программы?
Да 2 100.00%
Нет 0 0%
Голосовавшие: 2. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2022, 02:54   #1
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию текст (hex) в бинарник

Только что на board.flatassembler.net попросили программу перевода текста (шестнадцатеричных цифр) в бинарный файл. Я набросал за несколько минут вариант этой программы.
Код:
format binary as "bin"
virtual at 0
translate::
db $30 dup $80
.A db $0A dup $ - .A
db $07 dup $80
.B db $06 dup $ + $0A - .B
db $1A dup $80
.C db $06 dup $ + $0A - .C
db $9A dup $80
store byte $F0 at $09
store byte $F0 at $0A
store byte $F0 at $0D
store byte $F0 at $20
end virtual
virtual at 0
text::
match text, INPUT_FILE { file `text }
text.Length = $
end virtual
value = 0
index = 0
while index < text.Length
  load alpha byte from text:index
  load digit byte from translate:alpha
  if digit and $F0 = $F0
    if value and $1100 >= $0100
      db value and $FF
      value = 0
    end if
  else if digit and $80 = 0
    value = value shl 4 or digit or $100
    if value and $1100 = $1100
      db value and $FF
      value = 0
    end if
  else
    break
  end if
  index = index + 1
end while
if index < text.Length
  display "Error symbol '", alpha, "' at "
  digit = $0A
  while digit < index
    digit = digit * $0A
  end while
  while digit > 1
    digit = digit / $0A
    display (index / digit) mod $0A + $30
  end while
  display "!", $0D, $0A
  err
else if value and $1100 >= $0100
  db value and $FF
end if
Сохраняете в source.asm и запускаете
Код:
fasm source.asm [выходной файл] -m <лимит памяти, кб> -d INPUT_FILE="<текстовый файл>"
[выходной файл] - указывать не обязательно, но тогда вывод будет в файле source.bin
-m <лимит памяи, кб> под Windows можно тоже не указывать, но под Linux fasm выделяет обычно не более 16 Мб и этого может не хватить
<текстовый файл> - файл содержащий 16-ые числа, возможно разделенные пробелами и знаками табуляции, а так же разделенные на произвольное число строк произвольной длины

При ошибке fasm не создаст выходной файл, а в консоль будет напечатан символ с ошибкой и его смещение от начала файла

ADD: Эх. Не в тот раздел. Закиньте в Assembler пожалуйста
ADD: Спасибо.

Последний раз редактировалось macomics; 16.06.2022 в 12:59.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MPC микроконтроллера бинарник транслировать в C Gince Фриланс 2 17.05.2018 04:39
Обрезать бинарник denis76560 Общие вопросы Delphi 4 16.09.2012 20:59
Записать бинарник из строки Unconnected Общие вопросы Delphi 21 12.07.2011 17:02
компиляция в чистый бинарник Hell Knight Общие вопросы C/C++ 5 23.03.2011 19:50
txt в бинарник и обратно cowboy Общие вопросы Delphi 9 16.09.2009 10:54