Assembly: Array writing Issue

时间:2015-12-10 01:19:40

标签: assembly x86 masm irvine32

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!

1 个答案:

答案 0 :(得分:5)

当您使用带参数PROC的{​​{1}}时,MASM会自动插入序言和epilog,并根据该序言计算参数的地址。

当你添加第二个序言时:

..., wArray:PTR WORD, arraySize : WORD

push ebp mov ebp, esp 将被更改,参数的计算基础将被销毁。特别是EBP得到了一个荒谬的高价值。

删除你的prolog和epilog:

ECX