输入5个数据然后输出:
代码部分:
输入输出子程序详细解释戳输入输出子程序
DATAS SEGMENT
ARR DW 10 DUP(?)
CHANGELINE DB 13,10,'$'
STR1 BYTE 'Please input 5 numbers: $'
STR2 BYTE 'Output your 5 numbers: $'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lea dx,offset STR1
mov ah,09
int 21h
lea dx,offset CHANGELINE
mov ah,09
int 21h
;存入内存区主代码
mov si,0
T0: ;存
add si,2
call INPUT
mov arr[si],ax
cmp si,10
jb T0
lea dx,offset STR2
mov ah,09
int 21h
lea dx,offset CHANGELINE
mov ah,09
int 21h
mov ah,0
mov si,0
T1: ;输出
add si,2
mov ax,arr[si]
call OUTPUT
cmp si,10
jb T1
MOV AH,4CH
INT 21H
INPUT PROC
PUSH BX
PUSH CX
PUSH DX
MOV DH,10 ;存乘数
L1:
MOV AH,1
INT 21H ;输入
CMP AL,'0'
JB L0
CMP AL,'9'
JA L0 ;不在0-9之内的直接跳到输出
SUB AL,48
MOV CL,AL;CL<-当前输入的数 CX=CL
MOV AX,BX ;MUL 默认是乘AX ,BX<-存着之前的数
MUL DH
ADD AX,CX ;新数+原来的数*10
MOV BX,AX ;把加完后的数存到BX里
JMP L1
L0:
MOV AX,BX
POP DX
POP CX
POP BX
RET
INPUT ENDP ;出口参数是AX存着输入的数
OUTPUT PROC
PUSH BX
PUSH CX
PUSH DX
MOV BH,1;计数器
MOV CL,10
AGAIN:
DIV CL;AL:商 AH:余数
PUSH AX
CMP AL,0;最后商为0 表示除尽
JE PRINT
INC BH
MOV AH,0
JMP AGAIN
PRINT:
CMP BH,0
JE OUTPUTOVER
POP DX
MOV DL,DH
ADD DL,48
MOV AH,2
INT 21H
DEC BH
JMP PRINT
OUTPUTOVER:
LEA DX,CHANGELINE
MOV AH,09H
INT 21H
POP DX
POP CX
POP BX
RET
OUTPUT ENDP
CODES ENDS
END START
关于存数据可以看下图理解:
;存入内存区主代码
mov si,0
T0: ;存
add si,2
call INPUT
mov arr[si],ax
cmp si,10
jb T0
lea dx,offset STR2
mov ah,09
int 21h
lea dx,offset CHANGELINE
mov ah,09
int 21h
mov ah,0
mov si,0
T1: ;输出
add si,2
mov ax,arr[si]
call OUTPUT
cmp si,10
jb T1