Memory 类向量阵列动态分配

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

我需要有关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

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或更大的字节,但没有任何改变。