北京邮电大学微机原理软件 下载本文

实验报告

北京邮电大学 微机原理软件

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