惠州学院
电子信息与电气工程学院
程序设计报告
课程名称:微机原理与接口技术
班级:15电气2班
姓名:肖子浩1507080601232
钟智威1507080601238
指导老师:谢珩
2017.11.04
一、实验目的
熟练掌握汇编指令的使用,学会用汇编语言写程序实现简单的功能。
二、实验内容
编一程序,分别统计从内存单元TEMP处开始的连续100个字节单元中大、小写字母、数字和其他字符的个数,最后在屏幕上显示结果(假设结果不超过两位数)。
扩展:键盘输入一段字符串,统计各字符个数并分类在屏幕上显示。
三、程序
DATA segment
MESS DB 0DH,0AH,'Input String: $'
UP DB 0 ;大写个数初值置0
DOW DB 0 ;小写个数初值置0
NUM DB 0 ;数字个数初值置0
ELS DB 0 ;其他字符个数初值置0
ZS DB 0 ;输入字符总数初值置0
UP_C DB 100 DUP ('$')
DOW_C DB 100 DUP ('$')
NUM_C DB 100 DUP ('$')
ELS_C DB 100 DUP ('$')
CRLF DB 0DH,0AH,'$'
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 AH,09 ;选择09函数,显示字符串
MOV DX,OFFSET MESS ;DX = 数据的偏移地址
INT 21H ;调用21H中断
NEXT:
MOV AH,01
INT 21H
CMP AL,0DH
JNZ GOON
JMP DISP_1 ;显示结果
GOON:
INC ZS
CMP AL,'A';比较AL和A的ASCii码
JL NO_UP ;若刚才比较结果小于A的ASCii码,跳到NEXT
CMP AL,'Z';比较AL和Z的ASCii码
JG NO_UP ;若刚才比较结果大于Z的ASCii码,跳到NO_UP
INC UP ;大写字母个数+1
MOV BX,OFFSET UP_C ;BX指向空间NUM_
MOV CX,0
MOV CL,UP
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_UP:
CMP AL,'a';比较AL和a的ASCii码
JL NO_DOW ;若刚才比较结果小于a的ASCii码,跳到NEXT
CMP AL,'z';比较AL和z的ASCii码
JG NO_DOW ;若刚才比较结果大于z的ASCii码,跳到NO_DOW
INC DOW ;小写字母个数+1
MOV BX,OFFSET DOW_C
MOV CX,0
MOV CL,DOW
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_DOW:
CMP AL,'0';比较AL和0的ASCii码
JL NO_NUM ;若刚才比较结果小于0的ASCii码,跳到NEXT
CMP AL,'9';比较AL和9的ASCii码
JG NO_NUM ;若刚才比较结果大于9的ASCii码,跳到NO_NUM
INC NUM ;数字个数+1
MOV BX,OFFSET NUM_C ;BX指向空间NUM_C
MOV CX,0
MOV CL,NUM
ADD BX,CX ;BX指向地址后移位
DEC BX ;前移1位
MOV[BX],AL ;把AL内容存在BX指向地址下
JMP NEXT
NO_NUM:
INC ELS
MOV BX,OFFSET ELS_C
MOV CX,0
MOV CL,ELS
ADD BX,CX
DEC BX
MOV[BX],AL
JMP NEXT
DISP_1:
CALL CRLF_P
MOV AL,UP
CALL DISP_CZR
MOV AH,09
LEA DX,UP_C
INT 21H
CALL CRLF_P
MOV AL,DOW
CALL DISP_CZR
MOV AH,09
LEA DX,DOW_C
INT 21H
CALL CRLF_P
MOV AL,NUM
CALL DISP_CZR
MOV AH,09
LEA DX,NUM_C
INT 21H
CALL CRLF_P
MOV AL,ELS
CALL DISP_CZR
MOV AH,09
LEA DX,ELS_C
INT 21H
CALL CRLF_P
MOV AL,ZS
CALL DISP_CZR
CALL CRLF_P
MOV AX,4C00H
INT 21H
ENDD:
RET
MAIN ENDP
DISP_CZR PROC NEAR ;显示10进制数字子程序XOR AH,AH
MOV AL,AL
MOV BL,100D
DIV BL
PUSH AX
ADD AL,30H
MOV DL,AL
MOV AH,02H ;显示输出
INT 21H
POP AX
MOV AL,AH
XOR AH,AH
MOV BL,10D
DIV BL
ADD AX,3030H
PUSH AX
POP DX
MOV AH,02H ;显示输出
INT 21H
MOV DL,DH
INT 21H
MOV DL,':'
INT 21H
MOV DL,' '
INT 21H
RET
DISP_CZR ENDP
CRLF_P PROC NEAR ;回车换行子程序
MOV AH,09
LEA DX,CRLF
INT 21H
RET
CRLF_P ENDP
CODE ENDS
END
四、程序流程图
五、运行结果图
图2 程序运行图
图3 输入100个字符运行结果图。