④.调试过程中遇到的问题和解决的方法。
与上面一题的方法类似,循环遍历的时候加上判断,保存最大最小值。 6.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。
①.程序算法流程图。
开始初始化数循环计数值i=0,num=0AL=S[i]否X[i]>=’A’是是X[i]>’Z’否否X[i]>=’a’是否num++是i++X[i]>’z’循环计数值=0?否是输出最大值,最小值结束
11
②.源程序清单。
DATA SEGMENT
S DB 'Y1j3q4';定义字符串
COUNT EQU $-S;获得字符串的字符数 NUM DB 0;用于记录字母的个数
MESSAGE DB 'english alphabet number:$';输出英文字母个数提示符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA
MOV DS,AX;段寄存器定义
MOV DI,OFFSET S;获得s首地址
MOV CX,COUNT;初始化循环计数值 BEGIN:
MOV AL,[DI];开始取字符 CMP AL,'A'
JGE NEXT;比A大于等于继续 JMP RE;比A小,取下一个字符 NEXT:
CMP AL,'Z';和Z比较
JG NEXT2;大于Z,得跟a比较
INC NUM;在到Z之间为大写字母,num加1 JMP RE;取下一个字符 NEXT2:
CMP AL,'a';跟a比较
JGE NEXT4;大于等于a,得跟z比较 JMP RE;介于Z与a之间,取下一个字符 NEXT4:
CMP AL,'z';跟z比较
JG RE;大于z,取下一个字符
INC NUM;在a到z之间为小写字母,num加1 JMP RE;取下一个字符 RE:
INC DI;下一个字符
LOOP BEGIN;循环计数自动减一,循环计数不为0继续循环 MOV AH,9;输出英文字母个数提示符 MOV DX,OFFSET MESSAGE INT 21H MOV AL,NUM; ADD AL,30H MOV DL,AL
12
MOV AH,2 INT 21H
MOV AH,4CH;退出 INT 21H CODE ENDS
END START ③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
与之前的实验类似,将字符串存入数组中,遍历数组,加上条件判断。
13