为什么我有stackoverflow

时间:2015-02-24 18:22:04

标签: assembly x86 stack-overflow masm irvine32

我试图让我的Squares程序正常工作但是,我不断收到运行时错误或编译时间错误(我已经在不同的计算机上使用Visual Studio 2010 btw)

运行时错误="堆栈溢出"
编译时错误=警告A4011:找到多个.MODEL指令:.MODEL忽略4 1项目

但我只有一个.model指令。

为什么我的堆栈溢出?即使没有分配堆栈,我仍然会遇到错误。

这是我的代码(只是忽略了fibbonacci和Prime程序):

    Include Irvine32.inc

.386
.model flat,stdcall
.stack 4096

.data
welcomeMsg BYTE "welcome",0dh, 0ah,0
menu BYTE "Please choose from:", 0dh, 0ah,0
num dword ?
;CHOICES:
choice BYTE "Prime == 0",0dh,0ah,
"fibonachi == 1",0dh,0ah, "Calculate Squares == 2",0dh,0ah,0

.code
main PROC

mov edx, OFFSET welcomeMsg      ;prints welcome message
call WriteString

mov edx, OFFSET menu            ;prints message
call WriteString

mov edx, OFFSET choice          ;prints choices
call WriteString

call ReadInt                    ;recieves int from keyboard
mov num, eax                    ;mov eax into num
mov cx,0
mov eax,10

JCXZ L1                         ;jump to L1

Prime:
mov cx,0
JCXZ THEEND                     ; jumps to end of program

Fibo:
mov cx,0
JCXZ THEEND                     ; jumps to end of program

Squares:
;Squares PROTO
call Squares
mov cx,0
JCXZ THEEND                     ; jumps to end of program


L1:
cmp num,2 
JE Squares ;if num == 2 jump to label           ; jump to squares

L2:
cmp num,1 
JE Fibo    ;if num == 1 jump to label           ; jump to fibonacci procedure

L3:
cmp num,0
JE Prime   ;if num == 0 jump to label           ; jump to prime procedure


THEEND:


INVOKE ExitProcess,0
main ENDP




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;fibb PROC              ;begin fibonacci
;var word 0
;var2 word 0
;mov ecx,eax
;mov eax,1
;mov var2,1

;Loop1:
;   mov var, eax
;   mov eax,var2
;   add var2,var     
;JCXZ Loop1

;mov eax var2

;ret
;fibbo ENDP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Prime PROC             ;begin Prime
;ret

1 个答案:

答案 0 :(得分:3)

我打算传递这个,但这引起了我的注意:

Squares:
;Squares PROTO
call Squares

所以每当它到达正方形时,它会将返回地址推到堆栈上并再次转到正方形。然后再次。再次......直到筹码耗尽。