I have created the following program to read in 5 numbers, and then dumpreg
to see what numbers were entered...
INCLUDE Irvine32.inc
.data
count = 5
scores WORD count DUP(? )
prompt BYTE "Please type an integer score: ", 0
.code
GetScores PROTO, wArray:PTR WORD, arraySize : WORD
main proc
INVOKE GetScores,OFFSET scores, count
mov esi, OFFSET scores
mov ecx, count
mov ebx, 2
call DumpMem
mov eax, 50000
call Delay
exit
main endp
GetScores PROC, wArray:PTR WORD, arraySize : WORD
push ebp
mov ebp, esp
pushad
mov esi, wArray
movzx ecx, arraySize
cmp ecx, 0; ECX < 0 ?
jle L2; yes: skip over loop
L1 :
call ReadInt
mov[esi], eax
add esi, TYPE WORD
loop L1
L2 : popad
pop ebp
ret 8
GetScores ENDP
END main
This is my first time using stack parameters, and I'm receiving the error Exception thrown at 0x0040365A in Project.exe: 0xC0000005: Access violation writing location 0x0040361C.
after entering the first number.
I believe this is due to a problem with my indexing in my array, but am not sure where the issue is. Any and all help is much appreciated!
答案 0 :(得分:5)
当您使用带参数PROC
的{{1}}时,MASM会自动插入序言和epilog,并根据该序言计算参数的地址。
当你添加第二个序言时:
..., wArray:PTR WORD, arraySize : WORD
push ebp
mov ebp, esp
将被更改,参数的计算基础将被销毁。特别是EBP
得到了一个荒谬的高价值。
删除你的prolog和epilog:
ECX