Assembly 宏来分配内存中的空间

Assembly 宏来分配内存中的空间,assembly,x86,nasm,x86-64,masm,Assembly,X86,Nasm,X86 64,Masm,我需要做一个汇编程序员来计算。 这样,帕斯卡三角形的每一行存储在内存中的位置都与另一行分开 我想做一个,但我不知道如何在汇编中使用宏 宏获取一个数字并在内存中分配该数字的dword 我试过了,但我不知道这是不是正确的方法 %macro Malloc 2 %2 : resd %1 %endmacro 我想知道两件事: 第一个例如,我希望第二个参数(%2)自动具有字符串名称 第一行名称:“line1”,下一行为“line2”“line3”。。。这样我就不需要把我自己 其次在这种情况下使用宏是个好主

我需要做一个汇编程序员来计算。 这样,帕斯卡三角形的每一行存储在内存中的位置都与另一行分开 我想做一个,但我不知道如何在汇编中使用宏

宏获取一个数字并在内存中分配该数字的dword

我试过了,但我不知道这是不是正确的方法

%macro Malloc 2
%2 : resd %1
%endmacro
我想知道两件事:

第一个例如,我希望第二个参数(%2)自动具有字符串名称

第一行名称:“line1”,下一行为“line2”“line3”。。。这样我就不需要把我自己


其次在这种情况下使用宏是个好主意吗?

对于NASM:这里要做的是在内部连接东西(在展开单行
%assign
宏之后)

此集合与

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开始,因为这是一个对象文件,而不是一个链接的可执行文件)。

既然您将其称为“malloc”,我就说不,您做得不对。这不是动态分配,而是代码中的静态分配。@DavidHoelzer hhhh这几天我考虑使用sec760真是太巧了。如果你这样做了,我在附近,停下来说一个更好的标签名称可能是
row1
row2
,等等。只是吹毛求疵:地址序列不是一个几何级数(例如24:12!=12:4),它更像是一个缩放的三角形级数。这些差异形成了一个算术级数,共差为4。@MargaretBloom:我想我的意思是它近似几何增长,因为
n*(n+1)
是O(n^2)。
$ 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
...