;微型计算机原理及应用 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
温馨提示:内容为网友见解,仅供参考