nasm 程序集中的双向链表
doubly linked list in nasm assembly
我想在 Nasm 中做一个双向链表。
我有这个节点结构
struc node
left: resd 0
right: resd 0
data: resd 0
endstruc
当我想使用 malloc 时我这样做
push dword [node_sz]
call [malloc]
add esp, 4 * 1
其中:
node_sz dd 4*3
现在我在 eax 中有一个指向新位置的指针(偏移量)。我的结构节点营地的位置在哪里(左、右、数据)。例如,我想创建一个没有邻居且值为 6 的根。我该怎么做?
mov [eax + data] , DWORD 6
mov [eax +left],DWORD 0
mov [eax+right],DWORD 0
或者也许
mov [eax + 4*2] , DWORD 6
mov [eax +4*0],DWORD 0
mov [eax+4*1],DWORD 0
您的语法不正确。您忘记了每个结构成员开头的点。此外,resd
之后的值是结构中到 "reserve" 的数据项数。在这种情况下它应该是 1,而不是 0。
;; Declare a structure called "node".
;; Its size is an EQU named "node_size".
struc node
.left: resd 1
.right: resd 1
.data: resd 1
endstruc
;; External functions we wish to link against
extern malloc
start:
push node_size ;; Use this constant instead of manually calculating
call malloc
add esp, 4
mov [eax + node.left], DWORD 6
mov [eax + node.right], DWORD 7
mov [eax + node.data], DWORD 0xDEADBEEF
示例:
$ nasm -f elf struc.s
$ objdump -Mintel -d struc.o
struc.o: file format elf32-i386
Disassembly of section .text:
00000000 <start>:
0: 6a 0c push 0xc
2: e8 fc ff ff ff call 3 <start+0x3>
7: 83 c4 04 add esp,0x4
a: c7 00 06 00 00 00 mov DWORD PTR [eax],0x6
10: c7 40 04 07 00 00 00 mov DWORD PTR [eax+0x4],0x7
17: c7 40 08 ef be ad de mov DWORD PTR [eax+0x8],0xdeadbeef
我想在 Nasm 中做一个双向链表。
我有这个节点结构
struc node
left: resd 0
right: resd 0
data: resd 0
endstruc
当我想使用 malloc 时我这样做
push dword [node_sz]
call [malloc]
add esp, 4 * 1
其中:
node_sz dd 4*3
现在我在 eax 中有一个指向新位置的指针(偏移量)。我的结构节点营地的位置在哪里(左、右、数据)。例如,我想创建一个没有邻居且值为 6 的根。我该怎么做?
mov [eax + data] , DWORD 6
mov [eax +left],DWORD 0
mov [eax+right],DWORD 0
或者也许
mov [eax + 4*2] , DWORD 6
mov [eax +4*0],DWORD 0
mov [eax+4*1],DWORD 0
您的语法不正确。您忘记了每个结构成员开头的点。此外,resd
之后的值是结构中到 "reserve" 的数据项数。在这种情况下它应该是 1,而不是 0。
;; Declare a structure called "node".
;; Its size is an EQU named "node_size".
struc node
.left: resd 1
.right: resd 1
.data: resd 1
endstruc
;; External functions we wish to link against
extern malloc
start:
push node_size ;; Use this constant instead of manually calculating
call malloc
add esp, 4
mov [eax + node.left], DWORD 6
mov [eax + node.right], DWORD 7
mov [eax + node.data], DWORD 0xDEADBEEF
示例:
$ nasm -f elf struc.s
$ objdump -Mintel -d struc.o
struc.o: file format elf32-i386
Disassembly of section .text:
00000000 <start>:
0: 6a 0c push 0xc
2: e8 fc ff ff ff call 3 <start+0x3>
7: 83 c4 04 add esp,0x4
a: c7 00 06 00 00 00 mov DWORD PTR [eax],0x6
10: c7 40 04 07 00 00 00 mov DWORD PTR [eax+0x4],0x7
17: c7 40 08 ef be ad de mov DWORD PTR [eax+0x8],0xdeadbeef