Memory 类向量阵列动态分配
我需要有关MASM代码的帮助。当我对数组使用动态分配时,我的其他变量在向数组添加几个元素后会更改值Memory 类向量阵列动态分配,memory,assembly,masm,heapalloc,Memory,Assembly,Masm,Heapalloc,我需要有关MASM代码的帮助。当我对数组使用动态分配时,我的其他变量在向数组添加几个元素后会更改值 .686 .387 .model flat, stdcall .xmm include include\kernel32.inc includelib lib\kernel32.lib .data szyfr DB 9, 15, 19, 2 ;tab DD 4 dup (?) - it works fine ;wynik DD 4 dup (?) - it works fine
.686
.387
.model flat, stdcall
.xmm
include include\kernel32.inc
includelib lib\kernel32.lib
.data
szyfr DB 9, 15, 19, 2
;tab DD 4 dup (?) - it works fine
;wynik DD 4 dup (?) - it works fine
tmp DD 0
j DD 0
t DD 0
x DD 2
tmpa DD 0
tmpb DD 0
dlText DD 0
tab DD ?
wynik DD ?
.code
invoke GetProcessHeap
mov ebx, eax
INVOKE HeapAlloc, ebx, 0, 4 - it doesn't work
mov tab, eax
INVOKE HeapAlloc, ebx, 0, 4 - it doesn't work
mov wynik, eax
写入阵列:
xor edx, edx
mov eax, esi ; esi = iterator = i
mul x ; x = 2
mov edx, eax
add edx, j
add edx, offset tab
mov eax, t ; t = number <0, 26>
mov dword ptr [edx], eax ; tab[i][j] = number <0, 26>
异或edx,edx
mov-eax,esi;esi=迭代器=i
mul-x;x=2
mov-edx,eax
加上edx,j
添加edx,偏移选项卡
mov-eax,t;t=数字
mov dword ptr[edx],eax;表[i][j]=编号
您访问已分配给HeapAlloc的内存的方法不正确。当您
添加edx时,offset tab
不会得到分配的内存地址;您可以获得选项卡
的地址,选项卡
只是一个DWORD
。要添加分配内存的地址,应使用addedx,tab
顺便说一下,这些行:
xor edx, edx
mov eax, esi ; esi = iterator = i
mul x ; x = 2
mov edx, eax
可以简化为:
lea edx,[esi*2]
您还没有向我们展示如何将任何内容写入分配的内存。顺便说一下,
dd4dup(?)
为4个DWORD保留空间HeapAlloc,ebx,0,4
分配4个字节,即一个DWORD。@Michael更新了我的问题,我尝试了HeapAlloc,ebx,0,100或更大的字节,但没有任何改变。