ch03AddSub.asm(45):致命错误 A1010:不匹配的块嵌套:IsPrime
Posted
技术标签:
【中文标题】\ch03\AddSub.asm(45):致命错误 A1010:不匹配的块嵌套:IsPrime【英文标题】:\ch03\AddSub.asm(45): fatal error A1010: unmatched block nesting : IsPrime 【发布时间】:2016-06-01 06:43:52 【问题描述】:INCLUDE Irvine32.inc
.code
main PROC
.REPEAT
mov edx, OFFSET fPrompt ;display a prompt
call WriteString
call ReadInt ;recordes users number
mov var1, eax ;gives var1 the users number
.IF var1 == -1 ;jumps to L3 if the user want's to quit
jmp L3
.ENDIF
call IsPrime ;calls the IsPrime procedure
L3:
.UNTIL var1 == -1 ;jumps up to repeat if var1 != -1
ret
main ENDP
mov ebx, 2 ; sets minimum divisor
mov eax, var1 ; set dividend
cdq ; converts to 64-bit edx:eax
mov ecx, ebx ; stores divisor in ecx
div ecx ; Proformes division
mov b, eax ; Gets remainder, b is half var2
.WHILE ebx != b ;loops until ebx has reached var1/2
mov eax, var1 ; set dividend
cdq ; converts to 64-bit edx:eax
mov ecx, ebx ; stores divisor in ecx
div ecx ; Proformes division
mov a, edx ; Gets remainder
.IF a == 0 ;if there was no remainder, then var1 is not prime
jmp L1 ;jumps out of the loop if above is correct
.ENDIF
inc ebx ;increments until ebx reaches b
.ENDW
mov edx, OFFSET pPrompt ;tells the user their number was prime
call WriteString
jmp L2
L1:
mov edx, OFFSET cPrompt ;tells the user their number was not prime
call WriteString
L2: ret
IsPrime ENDP
END main
谁能帮忙解决我收到的错误消息?
【问题讨论】:
【参考方案1】:您有一个IsPrime ENDP
行,但没有对应的IsPrime PROC
。
这就是它抱怨嵌套的原因。
您需要确定PROC
行应该去哪里(可能紧接在mov ebx, 2 ; sets minimum divisor
之前),然后,......好吧,把它放在那里:-)
【讨论】:
谢谢!哇,我怎么看不到!现在已经解决了,它只是给我一个 fPrompt、var1、b、a、pPrompt 和 cPrompt 的未定义符号错误。会不会是因为我没有在.code段下定义? 我可能更倾向于将它放在某个数据段下,因为代码往往是只读的(尽管我已经有一段时间没有做 x86 asm 了)。但是,是的,它们应该被定义在某个地方!如果你这样做了,但仍然遇到问题,你最好问一个新的问题,因为你会得到更多的曝光率而不是只有我。 Oki Doki!!但你确实帮了我!谢谢!以上是关于ch03AddSub.asm(45):致命错误 A1010:不匹配的块嵌套:IsPrime的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:找不到“google/protobuf/compiler/plugin.h”文件
我在 hMailServer 和 XAMPP 的 PHPWebAdmin 页面中不断获得“致命错误:找不到类 COM”
PHP 致命错误:在第 45 行的 admin\includes\html\database.class.php 中的非对象上调用成员函数 prepare()