用汇编语言实现如下程序:自然数相加(1+2+3+...+n)。必须使用循环指令。

@N?的限制是92681。下面的过程给它赋值。100000?,则返回92681。

当你给@N?当在92681以内时,输出自然数的累加结果。

程序用16位寄存器实现,比32位寄存器复杂很多?!)

代码段

ASSUMECS:代码

@NDD100000

开始:

PUSHCS

流行音乐?鐽

PUSHCS

流行音乐?萨尔瓦多

MOV?AX,0

MOV?DX,0

MOV?SI,0

MOV?DI,0

MOV?CX,有消息吗?PTR?@N

MOV?BX,有消息吗?PTR?@N+2

@0:

补充?AX,SI

ADC?DX,DI

JC @错误

补充?SI,1

ADC?DI,0

SUB?CX,1

JNC?@0

SBB?BX,0

JNC?@0

CALLDISPDXAX

@退出:

MOV?啊,4CH

INT?21H

@ERR:

SUB?SI,1

SBB?DI,0

MOV?AX,SI

MOV?DX,DI

CALLDISPDXAX

JMP?@退出

DISPDXAXPROCNEAR

;?放置要在dx和ax中显示的32位无符号数。

推斧

推杆

PUSHCX

PUSHDX

普西

普什迪

推压

PUSHF

MOV?词?PTR?[Y],AX

MOV?词?PTR?[Y+2],DX

MOV?斧头,字?PTR?[Y]

MOV?DX,WORD?PTR?[Y+2]

MOV?BX,有消息吗?PTR?[Z]

MOV?CX,有消息吗?PTR?[Z+2]

MOV?词?PTR?n,0

MM0:INC?词?PTR?普通

SUB?斧头,BX

SBB?CX DX

JNC?MM0

十二月?词?PTR?普通

补充?斧头,BX

ADC?CX DX

MOV?词?PTR[Y],AX

MOV?词?PTR[Y+2],DX

MM1:LEA?DI,CC

补充?狄,9岁

M2:

MOV?斧头,字?PTR?[Y]

MOV?DX,WORD?PTR?[Y+2]

MOV?BX,10000

DIV?布朗克斯(Bronx)

推斧

PUSHDX

流行音乐?高级的(deluxe的简写)

MOV?CX,4岁

MOV?AX,DX

M3:MOV?DX,0

MOV?BX,10

DIV?布朗克斯(Bronx)

补充?DL,30H

MOV?[DI],DL

十二月?国防情报部

LOOPM3

流行音乐?削减

MOV?CX,1

M4:MOV?DX,0

MOV?BX,10

DIV?布朗克斯(Bronx)

补充?DL,30H

MOV?[DI],DL

十二月?国防情报部

环路M4

MOV?斧头,字?PTR?普通

MOV?CX,5岁

M5:MOV?DX,0

MOV?BX,10

DIV?布朗克斯(Bronx)

补充?DL,30H

MOV?[DI],DL

十二月?国防情报部

LOOPM5

丽娅。DX

MOV?啊,9

INT?21H

MOV?CX,9岁

丽娅。SI,CC

M6:

MOV?铝[硅]

CMP?阿尔,' 0 '

JNE?M7

MOV?字节?PTR?[斯],32岁

INC?国际度量单位制

LOOPM6

M7:

丽娅。DX,CC

MOV?啊,9

INT?21H

POPF

流行音乐?碱基对

流行音乐?国防情报部

流行音乐?国际度量单位制

流行音乐?高级的(deluxe的简写)

流行音乐?CX

流行音乐?布朗克斯(Bronx)

流行音乐?削减

浸水使柔软

YDD?

CCDB10?DUP('?'),10,13,'$'

LFCRDB10,13,' $ '

ZDD100000

NDW0

DISPDXAXENDP

共端

结束?开始