Nano Hash - криптовалюты, майнинг, программирование

макрос для выделения места в памяти

мне нужно сделать программу сборки для вычисления треугольника Паскаля . так что каждая строка треугольника Паскаля, хранящаяся в памяти, отделена от другой строки, которую я хочу сделать, но я понятия не имею, как это сделать в сборке с помощью макроса.

макрос берет число и выделяет это количество двойных слов в памяти

я пробовал, но не знаю, правильный ли это способ

%macro Malloc 2
%2 : resd %1
%endmacro

я хочу знать 2 вещи:

first я хочу, чтобы второй аргумент ( %2 ) автоматически имел строковое имя, например

имя первой строки: «line1», а следующей строкой будет «line2», «line3» ... и так далее, поэтому мне не нужно указывать себя?

во-вторых это хорошая идея использовать макрос в этом случае?

07.03.2018

  • Поскольку вы называете это malloc, я скажу нет, вы делаете это неправильно. Это не будет динамическое выделение, это будет статическое выделение в вашем коде. 08.03.2018
  • @DavidHoelzer хххх какое совпадение, я думал о приеме sec760 в эти дни хххх 08.03.2018
  • Потрясающий. Если да, и я рядом, зайди и поздоровайся 08.03.2018
  • Лучшее имя ярлыка, вероятно, будет row1, row2 и т. д. 08.03.2018

Ответы:


1

Для NASM: здесь вам нужен %+ оператор для объединения вещей (после раскрытия однострочных %assign макросов) внутри блок %rep.

section .bss

%assign i 1
%rep    64
    line %+ i:  resd  i
%assign i i+1
%endrep

Это собирается идентично

section .bss
line1:    resd 1     # reserve space for 1 DWORD
line2:    resd 2     # reserve space for 2 DWORDs
line3:    resd 3     # reserve space for 3 DWORDs
...

Тестирование:

$ nasm -felf64  pascal-triangle-macro.asm
$ nm -n pascal-triangle-macro.o        # sort by numeric address, not lexicographic

0000000000000000 b line1
0000000000000004 b line2
000000000000000c b line3
0000000000000018 b line4
0000000000000028 b line5
000000000000003c b line6
0000000000000054 b line7
0000000000000070 b line8
0000000000000090 b line9
00000000000000b4 b line10
00000000000000dc b line11
0000000000000108 b line12
...

Как и ожидалось, адреса меток находятся в геометрической прогрессии. (Начиная с 0, потому что это объектный файл, а не связанный исполняемый файл).

08.03.2018
  • Просто придирка: последовательность адресов — это не геометрическая прогрессия (например, 24:12 != 12:4), а скорее масштабированная треугольная прогрессия. Однако различия образуют арифметическую прогрессию с общей разностью 4. 08.03.2018
  • @MargaretBloom: я думаю, что имел в виду, что он растет примерно геометрически, потому что n*(n+1) равно O (n ^ 2). 08.03.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..