我试图让我的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
答案 0 :(得分:3)
我打算传递这个,但这引起了我的注意:
Squares:
;Squares PROTO
call Squares
所以每当它到达正方形时,它会将返回地址推到堆栈上并再次转到正方形。然后再次。再次......直到筹码耗尽。