微型计算机原理及应用N的累加汇编 要求输入N 输出N的累加

如题所述

;微型计算机原理及应用 N的累加汇编 要求输入N 输出N的累加

用MASM 5.0编译通过

data segment

m_over db 0dh,0ah,'Sorry , too big ! ',0dh,0ah,24h

mess db '+ ... +3+2+1= $'

;N1 DW 0 ;输入的数存放位置
BUF DW 0 ;每次输入的数暂存

data ends
code segment
assume cs:code, ds:data
main proc far
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
;-------------------------
;MOV DI,OFFSET N1

MOV AX,0
MOV BUF,AX
IN_1:
MOV AH,08
INT 21H ;输入在AL中
CMP AL,'0'
JB NO_09
CMP AL,'9'
JA NO_09

MOV AH,2 ;输入的是0-9,显示之
MOV DL,AL
INT 21H

SUB AL,30H ;将输入在AL中的ASCII码转成数字
MOV AH,0
PUSH AX

MOV BX,BUF
MOV AX,10
MUL BX ;BUF * 10 结果在DX:AX中 (DX=0)
POP BX
ADD AX,BX ;AX <== BUF * 10 + 新输入的1位数字

MOV BUF,AX ;保存
;MOV [DI],AX
JMP IN_1 ;输入该数字的下一位

NO_09: ;输入的非0-9
CMP AL,0DH ;是回车符吗?
JE YES_0D ;是转
JMP IN_1 ;不是则输入该数字的下一位

YES_0D: ;是回车符

;计算累加值(AX中)
MOV AX,BUF
mov cx,ax
mov ax,0
L1:
ADD AX,CX
LOOP L1
;

push ax

mov ah,9
mov dx,offset mess
int 21h

pop ax

MOV CX,0
DIV_1:
MOV DX,0
MOV SI,10
DIV SI
ADD DL,30H
INC CX
PUSH DX
CMP AX,0
JNZ DIV_1

DISP_1:
MOV AH,2
POP DX
INT 21H
LOOP DISP_1

MOV AH,4CH
INT 21H

MAIN ENDP
;==================

code ends
end start
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答