Assembly 无法找出代码的错误

Assembly 无法找出代码的错误,assembly,masm,irvine32,Assembly,Masm,Irvine32,我应该显示数字1到20,但我不知道出了什么问题。一开始它是正确的,但是它将是21而不是20 INCLUDE Irvine32.inc TITLE 1through20 .data .code main proc sub eax, eax mov eax, 1 call writeDec call crlf mov ecx, 20 L1: add eax, 1 call writeDec call crlf loop L1 exit main EndP END main 您正在单独显示

我应该显示数字1到20,但我不知道出了什么问题。一开始它是正确的,但是它将是21而不是20

INCLUDE Irvine32.inc
TITLE 1through20
.data
.code

main proc

sub eax, eax
mov eax, 1
call writeDec
call crlf
mov ecx, 20

L1:
add eax, 1
call writeDec
call crlf
loop L1
exit

main EndP

END main

您正在单独显示第一个数字,然后是显示20个数字的循环。因此,您总共显示21个数字,这太多了
只需从程序中删除3行代码(将
子eax,eax
保留在此解决方案中):


你正在做
20,19,…,3,2,1,0
。尝试使用
mov-ecx,19
代替。注意:不需要
mov-eax,1
之前的
sub-eax,eax
sub eax, eax
;;;;;;;;;;;;;;;;mov eax, 1
;;;;;;;;;;;;;;;;call writeDec
;;;;;;;;;;;;;;;;call crlf
mov ecx, 20

L1:
add eax, 1
call writeDec
call crlf
loop L1