如题所述
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START: JMP BBB
X DD 0
BBB:
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,10000
MOV WORD PTR [X],0
MOV WORD PTR [X+2],0
@MAIN:
ADD WORD PTR [X],CX
ADC WORD PTR [X+2],0
LOOP @MAIN
MOV AX,WORD PTR [X]
MOV DX,WORD PTR [X+2]
CALL DISPDXAX
MOV AH,4CH
INT 21H
;========================================
; 将要显示的32位无符号数置于dx、ax中
DISPDXAX PROC NEAR
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
; 以下将 Y (16进制)转为10进制串并输出
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
; ============
; 以下转换10进制的低4位
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
; ===========
; 以下转换10进制的高万位
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
; ============
; 输出两数的和的10进制串
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追问
ASSUME CS:CODE
ORG 100H
START: JMP BBB
X DD 0
BBB:
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,10000
MOV WORD PTR [X],0
MOV WORD PTR [X+2],0
@MAIN:
ADD WORD PTR [X],CX
ADC WORD PTR [X+2],0
LOOP @MAIN
MOV AX,WORD PTR [X]
MOV DX,WORD PTR [X+2]
CALL DISPDXAX
MOV AH,4CH
INT 21H
;========================================
; 将要显示的32位无符号数置于dx、ax中
DISPDXAX PROC NEAR
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
; 以下将 Y (16进制)转为10进制串并输出
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
; ============
; 以下转换10进制的低4位
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
; ===========
; 以下转换10进制的高万位
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
; ============
; 输出两数的和的10进制串
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追问
有简单一些的么?我们刚学到8086系统这一章
追答刚学的话,这个问题是难了些,因为问题在8位或16位的加法运算已不能解决,需要用到32位的加法运算,要输出32位的结果也不容易。
你可试着做一下 1+2+3+...+100 !
温馨提示:答案为网友推荐,仅供参考