作业要求:
(1)统计学生成绩:
设有10个学生的成绩分别为46、68、88、87、76、89、99、65、100和80分。试编制程序统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放到S5、S6、S7、S8、S9及S10单元中。
(2)对键盘键入的小写字母用大写字母显示出来;若键入的为非字母键,则程序结束。
统计学生成绩:
代码参考见附件:
tongji.asm
;定义数据段DATA SEGMENTtable db 46,68,88,87,76,89,99,65,100,80;定义成绩表S5 db 0;0-59S6 db 0;60-70S7 db 0;71-80;S8 db 0;81-90S9 db 0;90-99S10 db 0;100DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV si,OFFSET tableMOV AX,DATAMOV DS,AXMOV Cl,0;Cl用作计数器,控制循环的次数XOR aL,AL;--->S5XOR ah,AH;--->S6XOR bl,BL;--->s7XOR bh,bh;--->s8XOR dl,DL;--->s9XOR dh,dh;--->s10;开始进行比较COM:CMP Cl,10;Je Save;计数结束,跳转保存MOV CH,[si] ;接受数据CMP CH,60JL case1;CMP CH,70JL case2;CMP CH,80JL case3;CMP CH,90JL case4;CMP CH,100JL case5;Je case6;case1:inc al;JMP finishcase2:inc ahJMP finishcase3:inc blJMP finishcase4:inc bhJMP finishcase5:inc dlJMP finishcase6:inc dhJMP finishfinish:inc Clinc siJMP COMSave:MOV s6,ahMOV S5,aLMOV s7,blMOV s8,bhMOV s9,dlMOV s10,dhMOV ax,4c00hint 21HCODE ENDSend START
思路分析:
调试过程如下:
Step1: XOR指令对需要用到的计数寄存器进行清零
Step2 : 
Step3:
Step4:
Step5:
Step6:
大小写转换:
代码参考附件:
convert.asm
DATA SEGMENTMSG1 DB 'Enter an English word(a-z):','$'MSG2 DB 0DH,0AH,'the Rwitting word is :','$'MSG3 DB 'input error!','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA;,SS:STACKSTART:MOV AX,DATA ;将数据段的数据移到DS寄存器中,因为无法直接数据从内存移到DS,只能从寄存器移到DS,MOV DS,AX ;所以需要先把数据移到AX寄存器,然后再移到DS寄存器。MOV DX,OFFSET MSG1;输出提示文本MOV AH,9INT 21HMOV AH,1 ;键盘输入字符自动存入AL中INT 21H ;int中断;判断输入的ascII码值;已知ASCII码的a的整型数字为97,z为122;A的整型数字对应数字为65,因此小写字母ascii码=大写字母ascii码 + 32CMP AL,65;65-90代表大写字母JL OVERCMP AL,90;如果是大写字母则直接输出JLE OUTPUTCMP AL,97JL OVERCMP AL,122;97-122代表小写字母,是小写字母就进行转换,JG OVERSUB AL,32 ; 小写变大写JMP OUTPUTOUTPUT:MOV BL,AL ;赋值给BXMOV DX,OFFSET MSG2;提示文本MOV AH,9INT 21HMOV AH,2 ;显示输出 DL=输出字符MOV DL,BLINT 21H ;int中断MOV AH,4CH ;带返回码结束,AL=返回码INT 21HOVER:;输入的不是字母就结束程序MOV DX,OFFSET MSG3;输出提示文本MOV AH,9INT 21HMOV AH,4CH ;带返回码结束,AL=返回码INT 21HCODE ENDSEND START
思路分析:
调试过程如下:
Step1:初始化代码段
Step2:调入提示性语句
Step3:中断指令
Step4:提示用户该输入了
Step5:输入需要的小写字母
运行结果如下:



