汇编语言程序设计实验六
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六分支及循环程序设计
一、实验目的
1、1、学习提示信息的显示及键盘输入字符的方法。
2、2、掌握分支程序和循环程序的设计方法。
二、实验预习要求
1、1、复习比较指令、转移指令、循环指令的用法。
2、根据编程提示,编出汇编语言源程序。
3、有兴趣的同学请编写出实验习题中的程序。
三、分支程序和循环程序简介
1、分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:—种是二分支,—种是多分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。
2、循环程序
四、实验内容
在屏幕上显示提示信息“Please input 10 numbers:”,提示用户输入10个数(数的范围在0~99之间),然后从键盘上读入这10个数。接着对这10个数从小到大进行排序,并统计0~59、60~79、80~99的数各有多少。最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。显示格式如下:
Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx
0-59: xx
60-79: xx
80-99: xx
代码:
CALLDOS MACRO FUNCTION
MOV AH,FUNCTION
INT 21H
ENDM
CRLF MACRO
MOV DL,0DH
CALLDOS 2
MOV DL,0AH
CALLDOS 2
ENDM
DATA SEGMENT
MESSAGE DB'Please input 10 number:',0DH,0AH,'$' NUMBERS DB 10 DUP(?)
KB_BUF DB 3
ACTLEN DB?
BUFFER DB 3 DUP(?) ;输入的字符放在次区域中LE59 DB 0 ;0——5的个数
GE60 DB 0 ;60——79的个数
GE80 DB 0 ;80——99的个数SORTSTR DB'Sorted numbers'
SORTNUM DB 9 DUP(20H,20H,','),20H,20H,0DH,0AH
MESS00 DB'0-59:',30H,30H,0DH,0AH
MESS60 DB'60-79:',30H,30H,0DH,0AH
MESS80 DB'80-99:',30H,30H,0DH,0AH,'$'
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,MESSAGE
MOV AH,09H
INT 21H ;显示MESSAGE
;从键盘读入数据并转化成二进制数保存
MOV CX,10
LEA DI,NUMBERS ;设置数据保存区指针LP11:LEA DX,KB_BUF
MOV AH,0AH
INT 21H ;从键盘读入数据
CMP ACTLEN,0
JZ LP11
CMP ACTLEN,1
JNZ LP12
MOV AL,BUFFER ;若只有一个数字
AND AL,0FH ; 转化成二进制
JMP LP13
LP12:MOV AH,BUFFER ;若有二个数字MOV AL,BUFFER+1
AND AX,0F0FH ; 转化成BCD数
AAD; 转化成二进制数
LP13:STOSB ; 保存数据CRLF
LOOP LP11
MOV BL,9
LP21:LEA SI,NUMBERS
MOV CL,BL
LP22:LODSB ; ?第一个数Ni CMP AL,[SI] ; Ni<=Nj?
JLE LP23 ; 若小于等于则不交换XCHG AL,[SI] ; 否则交换Ni,Nj
MOV [SI-1],AL
LP23:DEC CL
JNZ LP22 ;若内循环未结束则继续DEC BL
JNZ LP21 ;若外循环未结束则继续
;对NUMBERS中的10个数据进行统计,结果放在GE80,GE60和LE59中
LEA SI,NUMBERS ;指向数据保存区
MOV CX,10
LP31:CMP BYTE PTR[SI],60
JGE LP32
INC LE59
JMP LP34
LP32:CMP BYTE PTR[SI],80
JGE LP33
INC GE60
JMP LP34
LP33:INC GE80
LP34:INC SI
LOOP LP31
;把排序后的10个数据转换成ASCII码依次存入SORTNUM字符中串中
LEA SI,NUMBERS ; 指向数据保存区
LEA DI,SORTNUM ; 指向字符串
MOV CX,10
LP41:LODSB
CMP AL,10 ; 大于10,则有二位数字JGE LP42
ADD AL,30H ; 只有一位数字则直接转换MOV AH,20H ; 高位显示成空格
JMP LP43
LP42:AAM; 转化成二位BCD数
ADD AX,3030H ;转化成ASCII码
LP43:XCHG AH,AL ; 十位数放到AL中
MOV [DI],AX
ADD DI,3
LOOP LP41
;把统计结果转化成ASCII码存入MESS80,MESS60,MESS00字符串中
MOV AH,LE59
CMP AH,10 ;大于10,则有二位数字
JGE LP51
ADD AH,30H ; 只有一位数字则直接转换MOV AL,20H ;高位显示成空格
JMP LP52
LP51:MOV AX,3031H
LP52:MOV WORD PTR MESS00+6,AX
MOV AH,GE60
CMP AH,10 ; 大于10,则有二位数字JGE LP53
ADD AH,30H ;只有一位数字则直接转换MOV AL,20H ;高位显示成空格
JMP LP54