MASM 向量类数组动态分配
MASM vector like array dynamic allocation
我的 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>
您访问使用 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]
我的 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>
您访问使用 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]