@N 的极限是92681。 以下程序将其赋值 100000 时,它返回的为92681。
当你给定的@N 在92681以内时,它会输出自然数累加结果。
(程序是用16位的寄存器实现,比32位的寄存器实现要复杂很多 !)
CODE SEGMENT
ASSUME CS:CODE
@N DD 100000
START:
PUSH CS
POP DS
PUSH CS
POP ES
MOV AX,0
MOV DX,0
MOV SI,0
MOV DI,0
MOV CX,WORD PTR @N
MOV BX,WORD PTR @N+2
@0:
ADD AX,SI
ADC DX,DI
JC @ERR
ADD SI,1
ADC DI,0
SUB CX,1
JNC @0
SBB BX,0
JNC @0
CALL DISPDXAX
@EXIT:
MOV AH,4CH
INT 21H
@ERR:
SUB SI,1
SBB DI,0
MOV AX,SI
MOV DX,DI
CALL DISPDXAX
JMP @EXIT
DISPDXAX PROC NEAR
; 将要显示的32位无符号数置于dx、ax中
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSHF
MOV WORD PTR [Y],AX
MOV WORD PTR [Y+2],DX
MOV AX,WORD PTR [Y]
MOV DX,WORD PTR [Y+2]
MOV BX,WORD PTR [Z]
MOV CX,WORD PTR [Z+2]
MOV WORD PTR N,0
MM0: INC WORD PTR N
SUB AX,BX
SBB DX,CX
JNC MM0
DEC WORD PTR N
ADD AX,BX
ADC DX,CX
MOV WORD PTR[Y],AX
MOV WORD PTR[Y+2],DX
MM1: LEA DI,CC
ADD DI,9
M2:
MOV AX,WORD PTR [Y]
MOV DX,WORD PTR [Y+2]
MOV BX,10000
DIV BX
PUSH AX
PUSH DX
POP DX
MOV CX,4
MOV AX,DX
M3: MOV DX,0
MOV BX,10
DIV BX
ADD DL,30H
MOV [DI],DL
DEC DI
LOOP M3
POP AX
MOV CX,1
M4: MOV DX,0
MOV BX,10
DIV BX
ADD DL,30H
MOV [DI],DL
DEC DI
LOOP M4
MOV AX,WORD PTR N
MOV CX,5
M5: MOV DX,0
MOV BX,10
DIV BX
ADD DL,30H
MOV [DI],DL
DEC DI
LOOP M5
LEA DX,LFCR
MOV AH,9
INT 21H
MOV CX,9
LEA SI,CC
M6:
MOV AL,[SI]
CMP AL,'0'
JNE M7
MOV BYTE PTR [SI],32
INC SI
LOOP M6
M7:
LEA DX,CC
MOV AH,9
INT 21H
POPF
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
Y DD ?
CC DB 10 DUP(' '),10,13,'$'
LFCR DB 10,13,'$'
Z DD 100000
N DW 0
DISPDXAX ENDP
CODE ENDS
END START
温馨提示:答案为网友推荐,仅供参考