Каким-то образом я собираюсь предположить, что это не то, что вы хотите сделать.
Просто выделить память в ассемблере не так-то просто.
Это легко сделать, если вы собираетесь вызывать системную функцию, если вам нужно понимать соглашения о вызовах для подпрограмм, библиотек и компоновщиков вашей операционной системы. Вы можете вызывать какую-то функцию ОС, возможно, через прерывание, и это, опять же, зависит от операционной системы.
Потому что обычно программы на ассемблере, как правило, имеют довольно статичное представление памяти и определяют свою собственную карту памяти. Вы можете выделить большой блок данных, а затем настроить свой собственный «malloc» для этого блока. Исходный блок станет вашим, когда подпрограмма загрузится. Это, вероятно, ближе к тому, что вы хотите сделать, но, очевидно, это может потребовать гораздо больше работы.
Если вы не выделяете одновременно более одного массива, просто определите блок в исходном коде сборки, который является «достаточно большим» (скажем, 10 000 целых чисел). Тогда вы можете просто использовать это.
Предполагая, что вы вызываете какую-то процедуру выделения памяти, результат будет возвращен либо в стек, либо в регистр. Затем вы либо оставите это значение в регистре, предназначенном для хранения его до конца вашей обработки, либо вы можете просто сохранить значение в памяти в другом месте, а затем загрузить его, когда оно вам понадобится позже.
person
Will Hartung
schedule
06.04.2011
sys_brksyscall для создания некоторого пространства. У меня есть [предыдущий ответ] на StackOverflow, который охватывает это: stackoverflow.com/a/33903235/3857942. Обычно в 32-битном Linuxsys_brkиспользуется для выделения базовой памяти, которую куча (используемая malloc) в конечном итоге будет использовать для разделения для удовлетворения запросов. - person Michael Petch   schedule 27.03.2016