MASM矢量就像数组动态分配一样

时间:2015-01-22 20:11:10

标签: 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

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>

1 个答案:

答案 0 :(得分:2)

您访问已使用HeapAlloc分配的内存的方法不正确。当您执行add edx, offset tab时,您无法获得所分配内存的地址;您获得tab的地址,而tab只是DWORD。要添加已分配内存的地址,您应使用add edx,tab


顺便说一下,这些行:

xor edx, edx                
mov eax, esi                    ; esi = iterator = i        
mul x                           ; x = 2
mov edx, eax  

可以简化为:

lea edx,[esi*2]