实验报告
北京邮电大学 微机原理软件
SC ', '$'
STR3 DB 0DH,0AH,'ERROR!INPUT AGAIN!',0DH,0AH,'$' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
INITIAL PROC NEAR ;显示输入的提示 MOV AH,09H INT 21H RET
INITIAL ENDP
ERRORDIS MOV DX,OFFSET STR3 MOV AH,09H INT 21H RET
ERRORDIS
ERROR: MOV BYTE PTR [SI],0FFH MOV BYTE PTR [DI],0FFH CALL JMP 回程序最初
MAX100:
MOV AH, 01H INT 21H CMP AL, 'A'
JZ 错误处
JMP ERROR MC: MOV AH, 01H INT 21H
CMP AL, 'X' ;错误处
JZ JMP ERROR
MCC: MOV DL, ' ' ;
MOV DX, OFFSET STR1 PROC
ENDP ;ERRORDIS
LOOP1 ;MC ;MCC 显示输入错误时的提示 输入错误时显示错误提示,并返与A的ASCII码比较,不相等跳转到与X的ASCII码比较,不相等跳转到显示空格
16
实验报告
北京邮电大学 微机原理软件
MOV AH,02H INT 21H
MOV BYTE PTR [SI],'N' MOV BYTE PTR [DI],'B' INC SI INC DI INC NUMBER LOOP LOOP1 START:
MOV AX, DATA ; MOV DS, AX
MOV SI, OFFSET HIGHER ; MOV DI, OFFSET LOWER ; MOV CX, NUM ; CALL INITIAL ; LOOP1:
MOV AH,01H INT 21H
CMP AL,0DH ; JZ ENDINP CMP AL,'M'
JZ MAX100 ;的子程序
CMP AL,'0' JB ERROR CMP AL,'9'
JA ERROR ;的数字
MOV [SI], AL ; MOV AH, 01H INT 21H CMP AL, 0DH JZ ENDINP CMP AL, '0' JB ERROR CMP AL, '9'
JA ERROR ; MOV [DI], AL ; MOV DL, ' '
MOV AH, 02H ;之间的分隔符
INT 21H
程序开始的位置 所有高位的首地址 所有低位的首地址 循环次数CX 显示输入的提示 检测输入,若为回车则输入结束 若第一个字符是M,则跳转到满分判断确认输入的每个数的高位为0 ~ 9将输入数的高位保存到高位的地址 确认输入的每个数低位为0 ~ 9的数字 将输入数的低位保存到低位的地址 显示一个空格,作为每个二位数17
实验报告
北京邮电大学 微机原理软件
INC SI INC DI INC NUMBER
LOOP LOOP1 ;输入100个成绩或者遇到回车键则结束
ENDINP: MOV BYTE PTR [SI],0FFH ;输入为回车时在SI、DI相应位置填充0FFH MOV BYTE PTR [DI],0FFH MOV AL, NUMBER
MOV BUFF, AL LOOP3:
MOV SI, OFFSET HIGHER ; MOV DI, OFFSET LOWER
XOR CH, CH ; MOV CL, 次数
MOV BX, 0FFFFH MOV NUMBUFF,'1' MOV NUMBUFF2,'0' LOOP2:
MOV AH, [SI] ; MOV AL, [DI] CMP AX, BX
JAE CONT ;AX MOV BX, AX
MOV DL, NUMBUFF MOV DH, 加1 CONT:
INC SI INC DI
CMP NUMBUFF, 相等就跳转
JE UP
ADD NUMBUFF, 1
JMP UPLOOP UP: MOV NUMBUFF,'0' ;的ASCII码
UPLOOP: LOOP PUSH
NUMBER ;NUMBUFF2 ;DX '9' ;NUMBUFFADD NUMBUFF2, 1
LOOP2 BX
重新赋高低位的首地址给SI、DI 将CH置0 存储的数据的个数CL为接下来的循环将数据依次赋给AX ≥ BX, COUNT 自加1 =’0’’1’H,比别的数小的话,DX与9的ASCII码比较,将DX作为十进制(BCD码)的计数器18
实验报告
北京邮电大学 微机原理软件
PUSH DX MOV BX, DX
SUB BX, 3030H ;将DX中保存的计数的ASCII码转为真正的数值
MOV AL, 0AH
MUL BH XOR BH, BH
ADD AX, BX ;AX = (16进制的)计数 DEC AX
MOV SI, OFFSET HIGHER MOV DI, OFFSET LOWER ADD DI, AX
MOV BYTE PTR [SI], 0FFH MOV BYTE PTR [DI], 0FFH XOR CH, CH MOV CL, BUFF DEC BUFF LOOP
RESULT:
MOV CL, NUMBER ; XOR MOV MOV
MOV MOV INT
LOOP4: POP
MOV MOV INT
MOV MOV INT
MOV MOV INT
ADD SI, AX LOOP3 CH, CH
NUMBUFF, '1' NUMBUFF2, '0' DX, OFFSET STR2 ;AH, 09H 21H BX DL,0AH ;AH,02H 21H DL,0DH AH,02H
21H ;DL,' ' AH,02H 21H
19
输入数据中个数是显示循环次数 显示结果的说明性字符串 显示换行 显示空格 实验报告
北京邮电大学 微机原理软件
MOV MOV INT DL,' ' AH,02H
21H ;显示两个空格
MOV DL,NUMBUFF2 MOV AH,02H INT 21H
MOV DL,NUMBUFF MOV AH,02H
INT 21H ;
MOV DL,' ' MOV AH,02H INT 21H MOV DL,' ' MOV AH,02H
INT 21H ;
MOV DL,BH MOV AH,02H INT 21H MOV DL,BL MOV AH,02H
INT 21H ;
MOV DL,' ' MOV AH,02H INT 21H MOV DL,' ' MOV AH,02H INT 21H MOV DL,' ' MOV AH,02H INT 21H
POP BX
MOV DL, BH MOV AH, 02H INT 21H MOV DL,BL MOV AH,02H
INT 21H ;
显示名次 显示两个空格
显示输入的次序(学号)输出该名次的成绩
20