1樓的?ChenB_2009?把題意理解錯了。
N*(N+1)小於200,指第N項數小於200,而不是累加和小於200。
下面是我編制的程序:
;?本程序在MASMPlus?1.2集成環境下通過編譯,經過調試,運行正確。
CodeSegment
Assume?CS:Code,DS:Code
;?-------------------------------------
;?功能:顯示指定地址(Str_Addr)的字符串
;?入口:
;?Str_Addr=字符串地址(要求在數據段)
Output?MACRO?Str_Addr
lea?dx,Str_Addr
mov?ah,9
int?21h
EndM
;?-------------------------------------
;?功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
;?入口:AX=二進制數?
;?出口:在當前光標位置顯示轉換後的ASCII碼數字?
Dec_ASCII?Proc?Near?
push?dx?
push?bx?
push?di
movbx,10?
leadi,@@Temp_Save[5]?
movbyte?ptr?[di],'$'?
decdi?
cld?
@@Divide:?xordx,dx?
divbx?
ordl,30h?
mov[di],dl?
decdi?
test?ax,0ffffh?
jnz@@Divide?
incdi?
push?di?
popdx?
movah,9?
int21h?
popdi?
popbx?
popdx?
ret?
@@Temp_Save?db6?dup(?)
Dec_ASCII?EndP
;?-------------------------------------
Prompt_N?db?'N=$'
Prompt_Sum?db?13,10,'Sum=$'
Press_Key?db13,10,13,10,'The?complated.?Press?any?key?to?exit...$'?
Start:push?cs
pop?ds
push?cs
pop?es
mov?bx,1
mov?cx,bx?;cx=累加和初值
@@Repeat:?inc?bl
mov?al,bl
inc?al
mul?bl
cmp?ax,200
jae?$+6
add?cx,ax?;累加
jmp?@@Repeat
dec?bl?;滿足要求的項數
Output?Prompt_N
mov?ax,bx
call?Dec_ASCII?;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
Output?Prompt_Sum
mov?ax,cx
call?Dec_ASCII
;?-------------------------------------
Exit_Proc:?Output?Press_Key?;提示操作完成,按任意鍵結束程序
mov?ah,1
int?21h
mov?ah,4ch?;結束程序
int?21h
CodeENDS
ENDStart?;編譯到此結束