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的主要内容,如果未能解决你的问题,请参考以下文章

PHP:触发致命错误?

致命错误:找不到“google/protobuf/compiler/plugin.h”文件

我在 hMailServer 和 XAMPP 的 PHPWebAdmin 页面中不断获得“致命错误:找不到类 COM”

PHP 致命错误:在第 45 行的 admin\includes\html\database.class.php 中的非对象上调用成员函数 prepare()

将代码更新为最新的 Swift 4 语法会导致“线程 1:致命错误:索引超出范围”错误

PHP / SQL:成功更新数据行但出现PHP致命错误