首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

关于win32汇编的有关问题,为什么小弟我的win32汇编程序编译通过,当小弟我调试到while循环时就出错

2013-02-04 
关于win32汇编的问题,为什么我的win32汇编程序编译通过,当我调试到while循环时就出错错误提示:Project.exe

关于win32汇编的问题,为什么我的win32汇编程序编译通过,当我调试到while循环时就出错
错误提示:Project.exe中的0x0040101C 处未处理的异常:0xC00000005:读取位置0x0080a034时发生访问冲突。


TITLE  College Registration Example         (Regist.asm)

; Simple demonstration of MASM's .IF,
; .ENDIF, and .ELSEIF directives.
; Last update: 06/01/2006

INCLUDE Irvine32.inc

.data
samplesdword50
arraysdword10,60,20,33,72,89,45,65,72,18
ArraySizesdword($-array) / type sample
indexsdword0
sumsdword0


.code
main PROC
mov eax,ArraySize
mov esi,offset array
.whileindex < eax
mov ebx,[esi+index]
.if ebx <= sample
add sum,ebx
.endif
;inc index
.endw

;显示求和结果
mov eax,sum
;call writedec

;exit
main ENDP

END main

[解决办法]
看下生成的代码就会发现问题了,mov ebx,[esi+index] 指令成了  mov ebx,[esi+402030] ,显然是将 指令里的 index 解释成了 index 的地址而非 index 所存放的数值。而且,index 作为数组里的索引的话,[esi+index] 从逻辑上来说也是不对的,汇编里必须自己计算数组元素的大小,即应该是[esi+index*4] 。
当然了,你这里,要么将 index 赋予个寄存器,要么就别用 index 了,直接将 esi 加 4 以指向下一个元素。

热点排行